Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dev #471

Draft
wants to merge 142 commits into
base: main
Choose a base branch
from
Draft

Dev #471

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
142 commits
Select commit Hold shift + click to select a range
de83129
Initial commit for registry and CV logic changes
kafann Oct 17, 2024
43200e6
Fixed tests, new to add tests for setCommunityParams func
kafann Oct 17, 2024
908bea2
:recycle: Refactored subgraph URL generation
Corantin Oct 18, 2024
c825532
Merge branch 'dev' into plug-subgraph-protocol
Corantin Oct 18, 2024
5880de8
:recycle: Updated subgraph URL retrieval method
Corantin Oct 18, 2024
78dad7c
Merge remote-tracking branch 'origin/plug-subgraph-protocol' into plu…
Corantin Oct 18, 2024
3b3664f
:art: Refactor button and dispute components
Corantin Oct 18, 2024
8c2534b
Merge branch 'main' into dev
Corantin Oct 18, 2024
0e101cd
:recycle: Improved address display and button conditions
Corantin Oct 18, 2024
11ce525
Merge remote-tracking branch 'origin/dev' into dev
Corantin Oct 18, 2024
d54da4a
:recycle: Refactored dispute button and pool form components
Corantin Oct 18, 2024
2c2f138
:art: Adjusted CSS classes in garden pages
Corantin Oct 18, 2024
40154d5
:sparkles: Enhanced TooltipIfOverflow component
Corantin Oct 18, 2024
aa1f63d
:ambulance: Fix contract emptied the allowlist when setPoolParams cal…
Corantin Oct 19, 2024
d776819
:ambulance: Fix member stake not reset in pool when deactivating
Corantin Oct 20, 2024
fbd8775
:art: Improved UI responsiveness
Corantin Oct 20, 2024
77bb5b2
:bug: :ambulance: Remove bypass to trigger auto-repair
Corantin Oct 20, 2024
e1da13d
:art: Enhanced Ethereum address display
Corantin Oct 20, 2024
15f3145
:recycle: Removed unused imports and debug logs
Corantin Oct 20, 2024
85b45d9
Merge branch 'dev' into plug-subgraph-protocol
Corantin Oct 20, 2024
54b3ca0
Merge pull request #470 from 1Hive/plug-subgraph-protocol
Corantin Oct 20, 2024
15d5709
order garden cards by communities length from most to least
Mati0x Oct 21, 2024
be15239
order garden card by communities length from most to least
Mati0x Oct 22, 2024
a8cb885
fix membership stake amount decimals
Lucianosc Oct 23, 2024
edf496e
fix fund pool check balance
Lucianosc Oct 23, 2024
2b1839e
foundry minor fix
Lucianosc Oct 23, 2024
bad46fc
Merge pull request #474 from 1Hive/fix/membership-stake-amount-decimals
Corantin Oct 23, 2024
e4517eb
Merge branch 'dev' into current-fixes
Mati0x Oct 23, 2024
f14dff5
Merge pull request #473 from 1Hive/current-fixes
Mati0x Oct 23, 2024
6093679
Fix subgraphs with 0.1.4
Corantin Oct 23, 2024
8a506c4
Fix create-pool not loading
Corantin Oct 23, 2024
859a39a
Removed console.log
Corantin Oct 23, 2024
587329e
:fire: Fix Passport Scorer
Corantin Oct 23, 2024
23b63ce
Merge remote-tracking branch 'origin/dev' into fix/fund-pool-check-ba…
Lucianosc Oct 24, 2024
69c7003
fix html tags
Lucianosc Oct 24, 2024
e90154c
fix funding amount not updating
Lucianosc Oct 24, 2024
d51496b
Added test and logic for setPendingCouncilSafe
kafann Oct 25, 2024
7ee45fe
Merge branch 'dev' into fix/fund-pool-check-balance
Mati0x Oct 27, 2024
b44f0be
add sharp suggested next img optimizer
Lucianosc Oct 28, 2024
b147772
Merge pull request #476 from 1Hive/fix/fund-pool-check-balance
Mati0x Oct 28, 2024
19b7dac
add display threshold required to pass
Lucianosc Oct 30, 2024
2658458
Merge remote-tracking branch 'origin/dev' into proposalForm/display-t…
Lucianosc Oct 30, 2024
459a030
add validate input when user changes focus
Lucianosc Oct 31, 2024
0d500b9
Auto stash before merge of "dev" and "origin/dev"
Corantin Nov 1, 2024
b036e68
Merge branch 'dev' into open-creation
Corantin Nov 1, 2024
862400a
Merge branch 'dev' into open-creation
Corantin Nov 1, 2024
c69d5dd
Fix contracts with coucilsafe transfer, Adapt UI with new contract, l…
Corantin Nov 2, 2024
1923471
Add isMember check + index handleCommunityFeeUpdated
Corantin Nov 2, 2024
c6a6353
add onBlur input validation
Lucianosc Nov 4, 2024
0090bc2
fix eth addr validation
Lucianosc Nov 4, 2024
14e3159
rename allocate button into "Submit allocation"
Mati0x Nov 5, 2024
2171e2f
Fix min threshold
Corantin Nov 6, 2024
1ff03b3
Fix calculateThreshold cannot divide by zero + subgraph missing Fee…
Corantin Nov 7, 2024
b1ccbf1
Run latest
Corantin Nov 7, 2024
d2cca78
feat: Commit: rename allocation button and update proposal page chart
Mati0x Nov 7, 2024
7074e4d
fix: remove minimum conviction from pool edit settings + remove defau…
Mati0x Nov 7, 2024
f7da6ed
Adjust `PoolCard` height based on content and rename "id" into "pool …
Mati0x Nov 7, 2024
92d87bb
Covenant signature pushed to onchain events
Corantin Nov 8, 2024
2916c23
New subgraph for covenant
Corantin Nov 8, 2024
d689b9f
Cherry pick covenant sig
Corantin Nov 8, 2024
5db4ef8
Cleanup sub mapping registry
Corantin Nov 8, 2024
bbab264
Subgraph fix community covenant sig
Corantin Nov 8, 2024
1973b3c
Subgraph fix community covenant sig
Corantin Nov 8, 2024
d280313
Subgraph fix community covenant sig
Corantin Nov 8, 2024
87425a6
Subgraph fix community covenant sig
Corantin Nov 8, 2024
5da99d0
Merge remote-tracking branch 'origin/dev' into dev
Corantin Nov 8, 2024
a023d0c
Fix registry member added
Corantin Nov 8, 2024
00aa527
Fix registry member added
Corantin Nov 8, 2024
d591413
Fixed allocate points
Corantin Nov 9, 2024
d0e95d2
Make passport and arbitrator proxy upgreadable
Corantin Nov 9, 2024
fafbdf2
Merge branch 'dev' into open-creation
Corantin Nov 9, 2024
47a7deb
Fix build
Corantin Nov 9, 2024
09208bc
Merge pull request #489 from 1Hive/open-creation
Corantin Nov 9, 2024
e5c3f73
Merge branch 'main' into dev
Corantin Nov 9, 2024
456175c
Error fallback
Corantin Nov 10, 2024
16a4047
Merge remote-tracking branch 'origin/dev' into dev
Corantin Nov 10, 2024
167f76f
New deploy + subgraph 0.2.0
Corantin Nov 10, 2024
f6f0ab3
Fix register skipping token expenditure
Corantin Nov 10, 2024
75e6b30
Fix Fund pool buggy allowance
Corantin Nov 10, 2024
5b0e9ed
Fix pool metric null ref
Corantin Nov 10, 2024
36b08b6
Fix subgraph build client
Corantin Nov 11, 2024
0c23363
Merge remote-tracking branch 'origin/dev' into fixing-beta-v2
Mati0x Nov 11, 2024
dd7223c
fix: upgarde `ProposalCard` + small tweks
Mati0x Nov 11, 2024
af1d6a3
Merge remote-tracking branch 'origin/dev' into proposalForm/display-t…
Mati0x Nov 11, 2024
3a68083
upgrade description
Mati0x Nov 11, 2024
f5a7fa2
fix lint
Mati0x Nov 11, 2024
9671abc
Fix lint
Corantin Nov 11, 2024
72bf3c3
Merge remote-tracking branch 'origin/dev' into fixing-beta-v2
kafann Nov 11, 2024
52873f9
Fix build contracts
Corantin Nov 11, 2024
92d2d8d
Merge remote-tracking branch 'origin/dev' into fixing-beta-v2
kafann Nov 11, 2024
34d5c5b
Merge branch 'dev' into proposalForm/display-threshold
Mati0x Nov 12, 2024
814d4ee
Merge pull request #478 from 1Hive/proposalForm/display-threshold
Mati0x Nov 12, 2024
8d846de
minor fix for very long proposal names - `ProposalCard`
Mati0x Nov 12, 2024
6f4b40f
enhance manage support overview section
Mati0x Nov 13, 2024
68c28bd
Fixed wrong token + Access proposal support from proposal Details page
kafann Nov 14, 2024
6459232
enhance manage support button in proposalId page
Mati0x Nov 14, 2024
b0eed41
Upgrade contracts artefacts
Corantin Nov 15, 2024
4f8d959
Merge branch 'dev' into fixing-beta-v2
Corantin Nov 15, 2024
18d1de4
Finished token fix in pools, and finish adding manage support access …
kafann Nov 15, 2024
138492d
Fix linter
Corantin Nov 15, 2024
00c31d4
Merge branch 'dev' into upgrade-support-overview
Corantin Nov 15, 2024
522a606
Merge branch 'dev' into fixing-beta-v2
Corantin Nov 15, 2024
de17778
fix text
Mati0x Nov 15, 2024
164a26b
Merge pull request #493 from 1Hive/upgrade-support-overview
Corantin Nov 15, 2024
f4e2c78
Merge branch 'dev' into fixing-beta-v2
Corantin Nov 15, 2024
27cb081
Fix Allocations problems
Corantin Nov 16, 2024
1dda65a
Add support for view function CalculateProposalConviction
Corantin Nov 17, 2024
b454a1c
minor layout fix
Mati0x Nov 18, 2024
2279125
Merge branch 'dev' into fixing-beta-v2
Mati0x Nov 18, 2024
1f31225
Merge pull request #491 from 1Hive/fixing-beta-v2
Mati0x Nov 18, 2024
3f1d709
Cleanup
Corantin Nov 20, 2024
2ca52af
fix stake in community in `Pool Governance`
Mati0x Nov 21, 2024
1547ddd
feat: add Pool staked cap amount in capped pool types
Mati0x Nov 21, 2024
ac1f627
feat: add warning infoBox component in `PoolHeader` when min Threshol…
Mati0x Nov 21, 2024
cfec7a9
Last upgrade
Corantin Nov 22, 2024
5c4982d
minor `Pool Header` upgrade
Mati0x Nov 23, 2024
7394d01
New subgraph with passport fix
Corantin Nov 23, 2024
d1e4bd5
feat: disable Dispute Modal button and Manage Support Button in Propo…
Mati0x Nov 24, 2024
664f782
New deploy
Corantin Nov 24, 2024
eeb8ad2
New deploy
Corantin Nov 26, 2024
09c7c91
Subgraph 0.2.4
Corantin Nov 26, 2024
dab5216
Merge branch 'dev' into fixing-dev
Mati0x Nov 26, 2024
59100ec
Merge branch 'fixing-dev' into dev
Mati0x Nov 26, 2024
c10c742
fix label naming
Mati0x Nov 26, 2024
1735112
fix `ProposalForm`: now showing max amount requested and threshold ne…
Mati0x Nov 27, 2024
2a59f4d
Update apps/web/components/Forms/ProposalForm.tsx
Mati0x Nov 27, 2024
b88ec3a
Fix staked token undefined when no stakes
Corantin Nov 27, 2024
fbbb192
Merge remote-tracking branch 'origin/dev' into dev
Corantin Nov 27, 2024
2aad96b
Merge pull request #498 from 1Hive/fixing-dev-2
Corantin Nov 27, 2024
1ea0888
Fix stkedToken of undefined
Corantin Nov 27, 2024
382e5a6
Merge remote-tracking branch 'origin/dev' into dev
Corantin Nov 27, 2024
4764c01
New deploy with fix for arbitrum
Corantin Nov 27, 2024
40758e1
Use bigint for allocation computations to avoid number conversion error
Corantin Nov 30, 2024
a99c5a9
Fix typing
Corantin Dec 2, 2024
cca052c
Merge pull request #499 from 1Hive/fix-quadratic-allocation
Corantin Dec 2, 2024
6b7d40f
Change subgraph id
Corantin Dec 2, 2024
2625248
Merge remote-tracking branch 'origin/dev' into dev
Corantin Dec 2, 2024
d8d048e
Merge remote-tracking branch 'origin/dev' into dev
Corantin Dec 2, 2024
89d8ff2
Merge remote-tracking branch 'origin/dev' into dev
Corantin Dec 2, 2024
da57297
Add is Owner to safe abi
Corantin Dec 2, 2024
0942e84
Fix build
Corantin Dec 2, 2024
50e4132
Try fix
Corantin Dec 2, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Original file line number Diff line number Diff line change
@@ -1,13 +1,20 @@
"use client";
import { useEffect } from "react";
import { useEffect, useMemo, useState } from "react";
import { Hashicon } from "@emeraldpay/hashicon-react";
import { InformationCircleIcon, UserIcon } from "@heroicons/react/24/outline";
import {
AdjustmentsHorizontalIcon,
InformationCircleIcon,
UserIcon,
} from "@heroicons/react/24/outline";
import { usePathname, useRouter } from "next/navigation";
import { toast } from "react-toastify";
import { Address, encodeAbiParameters, formatUnits } from "viem";
import { useAccount, useToken } from "wagmi";
import {
getProposalDataDocument,
getProposalDataQuery,
isMemberDocument,
isMemberQuery,
} from "#/subgraph/.graphclient";
import {
Badge,
Expand All @@ -22,35 +29,42 @@ import { DisputeButton } from "@/components/DisputeButton";
import { LoadingSpinner } from "@/components/LoadingSpinner";
import MarkdownWrapper from "@/components/MarkdownWrapper";
import { Skeleton } from "@/components/Skeleton";
import { QUERY_PARAMS } from "@/constants/query-params";
import { usePubSubContext } from "@/contexts/pubsub.context";
import { useChainIdFromPath } from "@/hooks/useChainIdFromPath";
import { useContractWriteWithConfirmations } from "@/hooks/useContractWriteWithConfirmations";
import { useConvictionRead } from "@/hooks/useConvictionRead";
import { ConditionObject, useDisableButtons } from "@/hooks/useDisableButtons";
import { useMetadataIpfsFetch } from "@/hooks/useIpfsFetch";
import { useSubgraphQuery } from "@/hooks/useSubgraphQuery";
import { alloABI } from "@/src/generated";
import { PoolTypes, ProposalStatus } from "@/types";
import { abiWithErrors } from "@/utils/abi";

import { useErrorDetails } from "@/utils/getErrorName";
import { prettyTimestamp } from "@/utils/text";

export default function Page({
params: { proposalId, garden, poolId },
params: { proposalId, garden, community: communityAddr, poolId },
}: {
params: {
proposalId: string;
community: string;
poolId: string;
chain: string;
garden: string;
};
}) {
const { isDisconnected, address } = useAccount();
const [convictionRefreshing, setConvictionRefreshing] = useState(true);
const router = useRouter();

const { address } = useAccount();

const [, proposalNumber] = proposalId.split("-");
const { data } = useSubgraphQuery<getProposalDataQuery>({
query: getProposalDataDocument,
variables: {
garden: garden,
proposalId: proposalId,
garden: garden.toLowerCase(),
proposalId: proposalId.toLowerCase(),
},
changeScope: {
topic: "proposal",
Expand All @@ -60,11 +74,26 @@ export default function Page({
},
});

//query to get member registry in community
const { data: memberData } = useSubgraphQuery<isMemberQuery>({
query: isMemberDocument,
variables: {
me: address?.toLowerCase(),
comm: communityAddr?.toLowerCase(),
},
enabled: !!address,
});

const isMemberCommunity =
!!memberData?.member?.memberCommunity?.[0]?.isRegistered;
//

const proposalData = data?.cvproposal;
const proposalIdNumber =
proposalData?.proposalNumber ?
BigInt(proposalData.proposalNumber)
: undefined;

const poolTokenAddr = proposalData?.strategy.token as Address;

const { publish } = usePubSubContext();
Expand All @@ -73,6 +102,7 @@ export default function Page({
hash: proposalData?.metadataHash,
enabled: !proposalData?.metadata,
});
const path = usePathname();
const metadata = proposalData?.metadata ?? ipfsResult;
const isProposerConnected =
proposalData?.submitter === address?.toLowerCase();
Expand All @@ -90,6 +120,19 @@ export default function Page({
chainId,
});

const disableManSupportBtn = useMemo<ConditionObject[]>(
() => [
{
condition: !isMemberCommunity,
message: "Join community to dispute",
},
],
[address],
);

const { tooltipMessage, isConnected, missmatchUrl } =
useDisableButtons(disableManSupportBtn);

const {
currentConvictionPct,
thresholdPct,
Expand All @@ -104,6 +147,12 @@ export default function Page({
enabled: proposalData?.proposalNumber != null,
});

useEffect(() => {
if (convictionRefreshing && currentConvictionPct != null) {
setConvictionRefreshing(false);
}
}, [convictionRefreshing, currentConvictionPct]);

//encode proposal id to pass as argument to distribute function
const encodedDataProposalId = (proposalId_: bigint) => {
const encodedProposalId = encodeAbiParameters(
Expand All @@ -121,7 +170,7 @@ export default function Page({
isError: isErrorDistribute,
} = useContractWriteWithConfirmations({
address: data?.allos[0]?.id as Address,
abi: abiWithErrors(alloABI),
abi: alloABI,
functionName: "distribute",
contractName: "Allo",
fallbackErrorMessage: "Error executing proposal, please report a bug.",
Expand All @@ -137,6 +186,15 @@ export default function Page({
},
});

const manageSupportClicked = () => {
const pathSegments = path.split("/");
pathSegments.pop();
if (pathSegments.length === 3) {
pathSegments.pop();
}
const newPath = pathSegments.join("/");
router.push(newPath + `?${QUERY_PARAMS.poolPage.allocationView}=true`);
};
const distributeErrorName = useErrorDetails(errorDistribute);
useEffect(() => {
if (isErrorDistribute && distributeErrorName.errorName !== undefined) {
Expand All @@ -157,6 +215,14 @@ export default function Page({
);
}

const handleRefreshConviction = async (e: React.MouseEvent) => {
e.preventDefault();
e.stopPropagation();
setConvictionRefreshing(true);
await triggerConvictionRefetch?.();
setConvictionRefreshing(false);
};

const status = ProposalStatus[proposalData.proposalStatus];

return (
Expand Down Expand Up @@ -225,6 +291,7 @@ export default function Page({
proposalData={{ ...proposalData, ...metadata }}
/>
: <DisputeButton
isMemberCommunity={isMemberCommunity}
proposalData={{ ...proposalData, ...metadata }}
/>
}
Expand All @@ -245,6 +312,26 @@ export default function Page({
: <>
<div className="flex justify-between">
<h2>Metrics</h2>
<Button
icon={<AdjustmentsHorizontalIcon height={24} width={24} />}
onClick={() => manageSupportClicked()}
disabled={!isConnected || missmatchUrl || !isMemberCommunity}
tooltip={tooltipMessage}
>
Manage support
</Button>
</div>
<ConvictionBarChart
currentConvictionPct={currentConvictionPct}
thresholdPct={thresholdPct}
proposalSupportPct={totalSupportPct}
isSignalingType={isSignalingType}
proposalNumber={Number(proposalIdNumber)}
timeToPass={Number(timeToPass)}
onReadyToExecute={triggerConvictionRefetch}
defaultChartMaxValue
/>
<div className="flex justify-center w-full">
{status === "active" && !isSignalingType && (
<Button
onClick={() =>
Expand All @@ -256,12 +343,9 @@ export default function Page({
],
})
}
disabled={
currentConvictionPct < thresholdPct || isDisconnected
}
disabled={currentConvictionPct < thresholdPct || !isConnected}
tooltip={
isDisconnected ? "Connect wallet"
: currentConvictionPct < thresholdPct ?
tooltipMessage ?? currentConvictionPct < thresholdPct ?
"Proposal not executable"
: undefined
}
Expand All @@ -270,15 +354,6 @@ export default function Page({
</Button>
)}
</div>
<ConvictionBarChart
currentConvictionPct={currentConvictionPct}
thresholdPct={thresholdPct}
proposalSupportPct={totalSupportPct}
isSignalingType={isSignalingType}
proposalNumber={Number(proposalIdNumber)}
timeToPass={Number(timeToPass)}
onReadyToExecute={triggerConvictionRefetch}
/>
</>
}
</section>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ export default function Page({
}) {
const { data } = useSubgraphQuery<getPoolDataQuery>({
query: getPoolDataDocument,
variables: { poolId: poolId, garden: garden },
variables: { poolId: poolId, garden: garden.toLowerCase() },
});
const strategyObj = data?.cvstrategies?.[0];

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
"use client";

import { useEffect } from "react";
import { useEffect, useRef } from "react";
import { Address } from "viem";
import { useToken } from "wagmi";
import {
Expand All @@ -27,10 +27,11 @@ export default function Page({
params: { chain: string; poolId: number; garden: string };
}) {
const searchParams = useCollectQueryParams();
const proposalSectionRef = useRef<HTMLDivElement>(null);

const { data, refetch, error } = useSubgraphQuery<getPoolDataQuery>({
query: getPoolDataDocument,
variables: { poolId: poolId, garden: garden },
variables: { poolId: poolId, garden: garden.toLowerCase() },
changeScope: [
{
topic: "pool",
Expand All @@ -55,7 +56,6 @@ export default function Page({
},
],
});

const strategyObj = data?.cvstrategies?.[0];
const poolTokenAddr = strategyObj?.token as Address;
const proposalType = strategyObj?.config.proposalType;
Expand Down Expand Up @@ -105,6 +105,23 @@ export default function Page({

const tokenGarden = data?.tokenGarden;

const maxAmount = strategyObj?.config?.maxAmount ?? 0;

useEffect(() => {
if (
searchParams[QUERY_PARAMS.poolPage.allocationView] !== undefined &&
proposalSectionRef.current
) {
const elementTop =
proposalSectionRef.current.getBoundingClientRect().top + window.scrollY;
window.scrollTo({
top: elementTop - 130,
behavior: "smooth",
});
}
// setAllocationView(searchParams[QUERY_PARAMS.poolPage.allocationView]);
}, [proposalSectionRef.current, searchParams]);

if (!tokenGarden || (!poolToken && PoolTypes[proposalType] === "funding")) {
return (
<div className="mt-96">
Expand Down Expand Up @@ -133,7 +150,7 @@ export default function Page({
poolId={poolId}
ipfsResult={ipfsResult}
isEnabled={isEnabled}
chainId={chain}
maxAmount={maxAmount}
/>
{isEnabled && (
<>
Expand All @@ -147,14 +164,16 @@ export default function Page({
chainId={chain}
/>
)}
<Proposals
poolToken={poolToken}
strategy={strategyObj}
alloInfo={alloInfo}
communityAddress={communityAddress}
createProposalUrl={`/gardens/${chain}/${garden}/${communityAddress}/${poolId}/create-proposal`}
proposalType={proposalType}
/>
<section ref={proposalSectionRef}>
<Proposals
poolToken={poolToken}
strategy={strategyObj}
alloInfo={alloInfo}
communityAddress={communityAddress}
createProposalUrl={`/gardens/${chain}/${garden}/${communityAddress}/${poolId}/create-proposal`}
proposalType={proposalType}
/>
</section>
</>
)}
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,10 @@ export default function Page({
}) {
const { data: result } = useSubgraphQuery<getPoolCreationDataQuery>({
query: getPoolCreationDataDocument,
variables: { communityAddr: community, tokenAddr: garden },
variables: {
communityAddr: community.toLowerCase(),
tokenAddr: garden.toLowerCase(),
},
});
let token = result?.tokenGarden;
let alloAddr = result?.allos[0]?.id as Address;
Expand Down
Loading
Loading