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 token vendor challenge #97

Merged
merged 2 commits into from
Aug 9, 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
Original file line number Diff line number Diff line change
@@ -1,63 +0,0 @@
name: scaffold-stark-demo workflow

on:
pull_request:
types: [closed]
branches: [main]
paths:
- 'packages/nextjs/**'

jobs:
version-bump-nextjs:
runs-on: ubuntu-22.04
steps:

- name: Checkout Source Repository
uses: actions/checkout@v4
with:
repository: Quantum3-Labs/scaffold-stark-2
token: ${{ secrets.ORG_GITHUB_TOKEN }}
path: source_repo

- name: Modify scaffoldConfig in Source Repository
run: |
cd source_repo
sed -i 's/targetNetworks: \[chains.devnet\]/targetNetworks: \[chains.sepolia\]/' packages/nextjs/scaffold.config.ts
cat packages/nextjs/scaffold.config.ts

- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: 20
registry-url: 'https://registry.yarnpkg.com'

- name: Deploy to vercel
if: success()
id: deploy
env:
VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}
VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}
run: |
cd source_repo
yarn install
vercel link --yes --project $VERCEL_PROJECT_ID --token $VERCEL_TOKEN --scope $VERCEL_ORG_ID
vercel --build-env NEXT_PUBLIC_IGNORE_BUILD_ERROR=true --prod --token $VERCEL_TOKEN --scope $VERCEL_ORG_ID

- name: Notify Slack on Success
if: success()
uses: slackapi/[email protected]
with:
channel-id: ${{ secrets.SLACK_CHANNEL_ID }}
slack-message: "GitHub deployed to vercel result: ${{ job.status }}\nRepository Name: ${{ github.repository }}\n${{ github.event.pull_request.html_url || github.event.head_commit.url }}"
env:
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}

- name: Notify Slack on Failure
if: failure()
uses: slackapi/[email protected]
with:
channel-id: ${{ secrets.SLACK_CHANNEL_ID }}
slack-message: "GitHub deployed to vercel result: ${{ job.status }}\nRepository Name: ${{ github.repository }}\n${{ github.event.pull_request.html_url || github.event.head_commit.url }}"
env:
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
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).
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,16 +24,16 @@ Before you begin, you need to install the following tools:

### Compatible versions

- Scarb - v2.5.4
- Snforge - v0.25.0
- Cairo - v2.5.4
- Scarb - v2.6.5
- Snforge - v0.27.0
- Cairo - v2.6.4

Make sure you have the compatible versions otherwise refer to [Scaffold-Stark Requirements](https://github.com/Quantum3-Labs/scaffold-stark-2?.tab=readme-ov-file#requirements)

Then download the challenge to your computer and install dependencies by running:

```sh
git clone https://github.com/Quantum3-Labs/speedrunstark.git --recurse-submodules token-vendor
git clone https://github.com/Quantum3-Labs/speedrunstark.git token-vendor
cd token-vendor
git checkout token-vendor
yarn install
Expand Down
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