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

Update challenge decentralized staking #98

Merged
merged 8 commits into from
Aug 11, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 0 additions & 63 deletions .github/workflows/demo.yaml

This file was deleted.

114 changes: 0 additions & 114 deletions .github/workflows/release-create-stark.yaml

This file was deleted.

4 changes: 2 additions & 2 deletions .github/workflows/test_contract.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,13 @@ jobs:
uses: actions/checkout@master

- name: Install scarb
run: curl --proto '=https' --tlsv1.2 -sSf https://docs.swmansion.com/scarb/install.sh | sh -s -- -v 2.5.4
run: curl --proto '=https' --tlsv1.2 -sSf https://docs.swmansion.com/scarb/install.sh | sh -s -- -v 2.6.5

- name: Install snfoundryup
run: curl -L https://raw.githubusercontent.com/foundry-rs/starknet-foundry/master/scripts/install.sh | sh

- name: Install snforge
run: snfoundryup -v 0.25.0
run: snfoundryup -v 0.27.0

- name: Run snforge tests
run: snforge test
Expand Down
4 changes: 0 additions & 4 deletions .gitmodules

This file was deleted.

2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,4 @@ If your changes involve updates to how users interact with Scaffold-Stark or Spe

## Need Help?

Reach out via our community channels if you encounter issues or need clarification on contributing.
Reach out via our community channels if you encounter issues or need clarification on contributing [here](https://t.me/+wO3PtlRAreo4MDI9).
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "ss-2",
"version": "0.0.2",
"version": "0.2.3",
"author": "Q3 Labs",
"license": "MIT",
"private": true,
Expand Down
2 changes: 1 addition & 1 deletion packages/nextjs/.env.example
Original file line number Diff line number Diff line change
@@ -1 +1 @@
NEXT_PUBLIC_PROVIDER_URL=https://starknet-sepolia.infura.io/v3/c45bd0ce3e584ba4a5e6a5928c9c0b0f
NEXT_PUBLIC_PROVIDER_URL=https://starknet-sepolia.public.blastapi.io/rpc/v0_7
129 changes: 129 additions & 0 deletions packages/nextjs/app/debug/_components/contract/Array.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
import { Dispatch, SetStateAction, useEffect, useMemo, useState } from "react";
import { getFunctionInputKey, getInitialTupleFormState } from "./utilsContract";
import {
AbiEnum,
AbiParameter,
AbiStruct,
} from "~~/utils/scaffold-stark/contract";
import { replacer } from "~~/utils/scaffold-stark/common";
import { ContractInput } from "./ContractInput";
import { Abi } from "abi-wan-kanabi";
import { parseGenericType } from "~~/utils/scaffold-stark";

type ArrayProps = {
abi: Abi;
abiParameter: AbiParameter;
parentForm: Record<string, any> | undefined;
setParentForm: (form: Record<string, any>) => void;
parentStateObjectKey: string;
setFormErrorMessage: Dispatch<SetStateAction<string | null>>;
};

export const ArrayInput = ({
abi,
parentForm,
setParentForm,
parentStateObjectKey,
abiParameter,
setFormErrorMessage,
}: ArrayProps) => {
// array in object representation
const [inputArr, setInputArr] = useState<any>({});
const [arrLength, setArrLength] = useState<number>(-1);

const elementType = useMemo(() => {
const parsed = parseGenericType(abiParameter.type);
return Array.isArray(parsed) ? parsed[0] : parsed;
}, [abiParameter.type]);

// side effect to transform data before setState
useEffect(() => {
// non empty objects only
setParentForm({
...parentForm,
[parentStateObjectKey]: Object.values(inputArr).filter(
(item) => item !== null,
),
});
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [JSON.stringify(inputArr, replacer)]);

return (
<div>
<div className="collapse bg-base-200 pl-4 pt-1.5 pb-2 border-2 border-secondary custom-after">
<input type="checkbox" className="min-h-fit peer" />
<div className="collapse-title p-0 min-h-fit peer-checked:mb-2 text-primary-content/50">
<p className="m-0 p-0 text-[1rem]">array (length: {arrLength + 1})</p>
</div>
<div className="ml-3 flex-col space-y-4 border-secondary/80 border-l-2 pl-4 collapse-content">
{/* do note here that the "index" are basically array keys */}
{Object.keys(inputArr).map((index) => {
return (
<ContractInput
abi={abi}
key={index}
setForm={(
nextInputRecipe:
| Record<string, any>
| ((arg: Record<string, any>) => void),
) => {
let nextInputObject: Record<string, any> = nextInputRecipe;

// set state recipe function, handle
if (typeof nextInputRecipe === "function") {
nextInputObject = nextInputRecipe(parentForm!);
}

const currentInputArray = { ...inputArr };

// we do some nasty workaround
currentInputArray[index] =
nextInputObject?.[`input_${index}`] || null;

setInputArr(currentInputArray);
}}
form={inputArr[index]}
stateObjectKey={`input_${index}`}
paramType={
{
name: `${abiParameter.name}[${index}]`,
type: elementType,
} as AbiParameter
}
setFormErrorMessage={setFormErrorMessage}
/>
);
})}
<div className="flex gap-3">
<button
onClick={() => {
const nextLength = arrLength + 1;
setInputArr((prev: any) => ({
...prev,
[nextLength]: null,
}));
setArrLength(nextLength);
}}
className="btn btn-sm shadow-none border border-success text-white"
>
+ Add (push)
</button>
<button
className="btn btn-sm shadow-none border border-error text-white"
onClick={() => {
if (arrLength > -1) {
const nextInputArr = { ...inputArr };
delete nextInputArr[arrLength];
setInputArr(nextInputArr);
setArrLength((prev) => prev - 1);
}
}}
>
- Remove (pop)
</button>
</div>
</div>
</div>
</div>
);
};
Loading
Loading