Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
lorbke committed Nov 16, 2024
2 parents abc103e + 6561cc8 commit 89bfa1c
Show file tree
Hide file tree
Showing 8 changed files with 104 additions and 22 deletions.
2 changes: 1 addition & 1 deletion packages/foundry/scripts-js/generateTsAbis.js
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ function main() {
writeFileSync(
`../nextjs-app/src/contracts/deployedContracts.ts`,
format(
`${generatedContractComment} \n\nconst deployedContracts = {${fileContent}} as const;\n`,
`${generatedContractComment} \n\nconst deployedContracts = {${fileContent}};\nexport default deployedContracts;\n`,
{
parser: "typescript",
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
}
},
"rules": {
"no-console": "warn",
// "no-console": "warn",
"react/prop-types": "off",
"react/jsx-uses-react": "off",
"react/react-in-jsx-scope": "off",
Expand Down
2 changes: 1 addition & 1 deletion packages/nextjs-app/src/app/layout.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Inter } from "next/font/google";
import { NextProviders } from "../providers/nextUiProvider";
import { appConfig } from "@/appConfig";
import { ErudaProvider } from "@/components/eruda";
import { ErudaProvider } from "@/providers/eruda";
import { MiniKitProvider } from "@/providers/miniKitProvider";
import "@/styles/globals.css";
import clsx from "clsx";
Expand Down
118 changes: 99 additions & 19 deletions packages/nextjs-app/src/app/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,18 @@

import { useState } from "react";
import { useRouter } from "next/navigation";
import deployedContracts from "@/contracts/deployedContracts";
import { Button } from "@nextui-org/button";
import { MiniKit, ResponseEvent } from "@worldcoin/minikit-js";
import { createPublicClient, http, getContract } from "viem";
import {
MiniAppSendTransactionPayload,
MiniAppVerifyActionPayload,
MiniKit,
ResponseEvent,
VerificationLevel,
} from "@worldcoin/minikit-js";
// import { useWaitForTransactionReceipt } from "@worldcoin/minikit-js/hooks";
import { createPublicClient, decodeAbiParameters, getContract, hexToBigInt, http, stringToHex } from "viem";
import { worldchain } from "viem/chains";
import deployedContracts from "../../../nextjs/contracts/deployedContracts";

const subscribeToWalletAuth = async (nonce: string) => {
return new Promise((resolve, reject) => {
Expand Down Expand Up @@ -40,21 +47,51 @@ const subscribeToWalletAuth = async (nonce: string) => {
});
};

const subscribeToTransaction = async (): Promise<string> => {
return new Promise((resolve, reject) => {
MiniKit.subscribe(ResponseEvent.MiniAppSendTransaction, async (payload: MiniAppSendTransactionPayload) => {
if (payload.status === "error") {
console.error("Error sending transaction", payload);

reject(new Error("Error sending transaction: " + payload.details));
} else {
resolve(payload.transaction_id);
}
});
});
};

const subscribeToVerifyAction = async (): Promise<MiniAppVerifyActionPayload> => {
return new Promise((resolve, reject) => {
MiniKit.subscribe(ResponseEvent.MiniAppVerifyAction, async (response: MiniAppVerifyActionPayload) => {
if (response.status === "error") {
console.log("Error payload", response);

return reject(new Error("Error in MiniAppVerifyAction payload"));
}
resolve(response);
});
});
};

export default function LoginPage() {
const [loading, setLoading] = useState(false);
const router = useRouter();

const onLoginSignup = async () => {
setLoading(true);

const client = createPublicClient({
chain: worldchain,
transport: http("https://worldchain-mainnet.g.alchemy.com/public"),
});
// const contract = getContract({
// address: deployedContracts[worldchain].HumanOracle.address,
// })
const client = createPublicClient({
chain: worldchain,
transport: http("https://worldchain-mainnet.g.alchemy.com/public"),
});
const HumanOrcale = getContract({
address: deployedContracts[worldchain.id].MockHumanOracle.address,
abi: deployedContracts[worldchain.id].MockHumanOracle.abi,
client,
});

// get wallet auth
// get wallet auth
try {
const res = await fetch(`/api/nonce`);
const { nonce } = await res.json();
Expand All @@ -65,23 +102,66 @@ export default function LoginPage() {
notBefore: new Date(new Date().getTime() - 24 * 60 * 60 * 1000),
statement: "Login or create an account",
});

console.log(generateMessageResult);
const result = await subscribeToWalletAuth(nonce);

console.log(result);
} catch (error) {
console.error(error);
setLoading(false);
return;

return;
}

// // check if registered?
// try {

// }
// check if registered and register if not
try {
const result = await HumanOrcale.read.isUserRegistered(MiniKit.walletAddress);

console.log(result);
if (result == false) {
const verify = MiniKit.commands.verify({
action: "registration",
signal: MiniKit.walletAddress!,
verification_level: VerificationLevel.Orb,
});
const verifyResult = await subscribeToVerifyAction();

// // if not registered, register
// try {
console.log(verify);
const transactionPayload = MiniKit.commands.sendTransaction({
transaction: [
{
address: deployedContracts[worldchain.id].MockHumanOracle.address,
abi: deployedContracts[worldchain.id].MockHumanOracle.abi,
functionName: "signUpWithWorldId",
args: [
hexToBigInt(stringToHex(verifyResult.merkle_root, { size: 32 })),
hexToBigInt(stringToHex(verifyResult.nullifier_hash, { size: 32 })),
decodeAbiParameters([{ type: "uint256[8]" }], verifyResult.proof)[0],
],
},
],
});

console.log(transactionPayload);
const transactionId = await subscribeToTransaction();

// }
console.log(transactionId);
// useWaitForTransactionReceipt({
// client: client,
// appConfig: {
// app_id: process.env.NEXT_PUBLIC_APP_ID,
// },
// transactionId: transactionId,
// })
} else {
router.replace("/statements");
}
} catch (error) {
console.error(error);
setLoading(false);
return;
}
};

return (
Expand Down
Empty file.
2 changes: 2 additions & 0 deletions packages/nextjs-app/todo.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
- login screen logo in middle with name, signin button at bottom?
- add toasts for errors (from top?)

0 comments on commit 89bfa1c

Please sign in to comment.