login page ui
|
|
@ -6,12 +6,15 @@ import GoogleSignInButton from '../firebase/components/GoogleSignInButton';
|
|||
import { useRouter } from 'next/navigation';
|
||||
import { LoginSologin, RegisterSologin } from '../sologin';
|
||||
import SignInWithGithub from '../firebase/components/GithubSignInButton';
|
||||
import Button from '../widgets/LoginButton';
|
||||
import Head from 'next/head';
|
||||
|
||||
const AuthTabs = () => {
|
||||
const [activeTab, setActiveTab] = useState<'signin' | 'signup'>('signin');
|
||||
const [email, setEmail] = useState('');
|
||||
const [password, setPassword] = useState('');
|
||||
const [error, setError] = useState<string | null>(null);
|
||||
const [isModalOpen, setIsModalOpen] = useState(false);
|
||||
const router = useRouter();
|
||||
|
||||
const onAuthSuccess = () => {
|
||||
|
|
@ -34,6 +37,7 @@ const AuthTabs = () => {
|
|||
setEmail('');
|
||||
setPassword('');
|
||||
setError(null);
|
||||
setIsModalOpen(false); // Close the modal on success
|
||||
} catch (err: any) {
|
||||
const errorCode = err.code;
|
||||
switch (errorCode) {
|
||||
|
|
@ -53,8 +57,49 @@ const AuthTabs = () => {
|
|||
};
|
||||
|
||||
return (
|
||||
<div className="min-h-screen bg-gray-900 flex items-center justify-center">
|
||||
<div className="bg-gray-800 p-8 rounded-lg shadow-lg w-full sm:w-96">
|
||||
<>
|
||||
<Head>
|
||||
<title>Login · W3B Games</title>
|
||||
<link
|
||||
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap"
|
||||
rel="stylesheet"
|
||||
/>
|
||||
</Head>
|
||||
|
||||
<main className="flex min-h-screen w-full relative overflow-hidden font-inter">
|
||||
<div className="flex flex-col w-full h-screen">
|
||||
<div className="flex-[3] bg-[#0F0F0F]"></div>
|
||||
<div className="flex-[4] bg-black"></div>
|
||||
</div>
|
||||
<div className="absolute inset-x-0 top-0 flex items-center justify-center pointer-events-none h-[86vh]">
|
||||
<h2 className="text-[10vw] font-bold whitespace-nowrap bg-clip-text text-transparent bg-[linear-gradient(to_bottom,black_50%,#0F0F0F_50%)]">
|
||||
METAHUNT
|
||||
</h2>
|
||||
</div>
|
||||
<div className="absolute inset-x-10 top-10 flex w-24 h-24">
|
||||
<img src="./logos/logo.png" />
|
||||
</div>
|
||||
<div className="absolute inset-0 flex justify-center items-center">
|
||||
<div className="text-center w-full px-6 relative top-[10vh]">
|
||||
<div className="mt-6 flex justify-center ">
|
||||
<div className="bg-blue-500 rounded-full hover:scale-110 transition-all duration-300">
|
||||
<Button onClick={() => setIsModalOpen(true)} text="LOG IN / REGISTER" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
{/* Modal */}
|
||||
{isModalOpen && (
|
||||
<div className="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50">
|
||||
<div className="bg-gray-800 p-8 rounded-lg shadow-lg w-full sm:w-96 relative">
|
||||
<button
|
||||
className="absolute top-3 right-3 text-gray-400 hover:text-white"
|
||||
onClick={() => setIsModalOpen(false)}
|
||||
>
|
||||
✕
|
||||
</button>
|
||||
<div className="flex border-b border-gray-600 mb-6">
|
||||
<button
|
||||
className={`flex-1 py-2 text-center ${
|
||||
|
|
@ -113,28 +158,13 @@ const AuthTabs = () => {
|
|||
{activeTab === 'signin' ? 'Sign In' : 'Sign Up'}
|
||||
</button>
|
||||
</form>
|
||||
<div className='h-10'></div>
|
||||
|
||||
<GoogleSignInButton onLoginSuccess={onAuthSuccess}></GoogleSignInButton>
|
||||
<SignInWithGithub onLoginSuccess={onAuthSuccess}></SignInWithGithub>
|
||||
</div>
|
||||
|
||||
{/* Error Dialog */}
|
||||
{error && (
|
||||
<div className="fixed inset-0 flex items-center justify-center bg-black bg-opacity-50 z-50">
|
||||
<div className="bg-gray-800 p-6 rounded-lg shadow-lg">
|
||||
<h3 className="text-xl font-bold text-white mb-4">Error</h3>
|
||||
<p className="text-gray-300">{error}</p>
|
||||
<button
|
||||
className="mt-4 px-4 py-2 bg-red-600 text-white rounded-md hover:bg-red-500"
|
||||
onClick={() => setError(null)}
|
||||
>
|
||||
Close
|
||||
</button>
|
||||
<div className="h-10"></div>
|
||||
<GoogleSignInButton onLoginSuccess={onAuthSuccess} />
|
||||
<SignInWithGithub onLoginSuccess={onAuthSuccess} />
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
|
|
|
|||
21
app/widgets/LoginButton.tsx
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
import React from 'react';
|
||||
|
||||
interface ButtonProps {
|
||||
onClick: () => void;
|
||||
text: string;
|
||||
}
|
||||
|
||||
const Button: React.FC<ButtonProps> = ({ onClick, text }) => {
|
||||
return (
|
||||
<button
|
||||
className="m-0.5 bg-gradient-to-b from-purple-400 to-purple-950 py-3 px-8 text-black rounded-full text-lg font-extrabold flex items-center shadow-lg hover:shadow-xl active:shadow-md active:translate-y-0.5"
|
||||
onClick={onClick}
|
||||
>
|
||||
<div className="mb-1">
|
||||
{text}
|
||||
</div>
|
||||
</button>
|
||||
);
|
||||
};
|
||||
|
||||
export default Button;
|
||||
BIN
public/favicons/android-chrome-192x192.png
Normal file
|
After Width: | Height: | Size: 4.6 KiB |
BIN
public/favicons/android-chrome-512x512.png
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
BIN
public/favicons/apple-touch-icon.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
public/favicons/favicon.ico
Normal file
|
After Width: | Height: | Size: 15 KiB |
3
public/favicons/icon.svg
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
<svg width="59" height="59" viewBox="0 0 59 59" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M0.855755 45.3546C0.855755 54.6141 9.42722 58.7663 17.8079 58.7922C37.4169 58.7922 59.1124 46.7874 58.9996 26.6972C58.9182 12.213 45.5557 -0.117649 29.7433 0.000847037C14.6968 0.000847037 0.000993712 9.78554 0 23.1156C0 26.6954 2.06195 30.1585 7.45199 30.5484C2.95783 34.9808 0.855755 40.2915 0.855755 45.3546ZM29.795 32.2641C32.9383 32.2641 35.4864 29.2146 35.4864 25.4528C35.4864 21.691 32.9383 18.6415 29.795 18.6415C26.6518 18.6415 24.1037 21.691 24.1037 25.4528C24.1037 29.2146 26.6518 32.2641 29.795 32.2641ZM46.1135 32.2642C49.2568 32.2642 51.8049 29.2146 51.8049 25.4528C51.8049 21.691 49.2568 18.6415 46.1135 18.6415C42.9703 18.6415 40.4222 21.691 40.4222 25.4528C40.4222 29.2146 42.9703 32.2642 46.1135 32.2642Z" fill="#FF8271"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 892 B |
7
public/favicons/manifest.json
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"name": "Privy Auth Demo",
|
||||
"icons": [
|
||||
{"src": "/favicons/android-chrome-192x192.png", "type": "image/png", "sizes": "192x192"},
|
||||
{"src": "/favicons/android-chrome-512x512.png", "type": "image/png", "sizes": "512x512"}
|
||||
]
|
||||
}
|
||||
BIN
public/fonts/AdelleSans-Regular.woff
Normal file
BIN
public/fonts/AdelleSans-Regular.woff2
Normal file
BIN
public/fonts/AdelleSans-Semibold.woff
Normal file
BIN
public/fonts/AdelleSans-Semibold.woff2
Normal file
BIN
public/images/avatar.png
Normal file
|
After Width: | Height: | Size: 98 KiB |
593
public/json/game-data-abi.json
Normal file
|
|
@ -0,0 +1,593 @@
|
|||
[
|
||||
{
|
||||
"inputs": [],
|
||||
"stateMutability": "nonpayable",
|
||||
"type": "constructor"
|
||||
},
|
||||
{
|
||||
"inputs": [
|
||||
{
|
||||
"internalType": "address",
|
||||
"name": "sender",
|
||||
"type": "address"
|
||||
},
|
||||
{
|
||||
"internalType": "uint256",
|
||||
"name": "balance",
|
||||
"type": "uint256"
|
||||
},
|
||||
{
|
||||
"internalType": "uint256",
|
||||
"name": "needed",
|
||||
"type": "uint256"
|
||||
},
|
||||
{
|
||||
"internalType": "uint256",
|
||||
"name": "tokenId",
|
||||
"type": "uint256"
|
||||
}
|
||||
],
|
||||
"name": "ERC1155InsufficientBalance",
|
||||
"type": "error"
|
||||
},
|
||||
{
|
||||
"inputs": [
|
||||
{
|
||||
"internalType": "address",
|
||||
"name": "approver",
|
||||
"type": "address"
|
||||
}
|
||||
],
|
||||
"name": "ERC1155InvalidApprover",
|
||||
"type": "error"
|
||||
},
|
||||
{
|
||||
"inputs": [
|
||||
{
|
||||
"internalType": "uint256",
|
||||
"name": "idsLength",
|
||||
"type": "uint256"
|
||||
},
|
||||
{
|
||||
"internalType": "uint256",
|
||||
"name": "valuesLength",
|
||||
"type": "uint256"
|
||||
}
|
||||
],
|
||||
"name": "ERC1155InvalidArrayLength",
|
||||
"type": "error"
|
||||
},
|
||||
{
|
||||
"inputs": [
|
||||
{
|
||||
"internalType": "address",
|
||||
"name": "operator",
|
||||
"type": "address"
|
||||
}
|
||||
],
|
||||
"name": "ERC1155InvalidOperator",
|
||||
"type": "error"
|
||||
},
|
||||
{
|
||||
"inputs": [
|
||||
{
|
||||
"internalType": "address",
|
||||
"name": "receiver",
|
||||
"type": "address"
|
||||
}
|
||||
],
|
||||
"name": "ERC1155InvalidReceiver",
|
||||
"type": "error"
|
||||
},
|
||||
{
|
||||
"inputs": [
|
||||
{
|
||||
"internalType": "address",
|
||||
"name": "sender",
|
||||
"type": "address"
|
||||
}
|
||||
],
|
||||
"name": "ERC1155InvalidSender",
|
||||
"type": "error"
|
||||
},
|
||||
{
|
||||
"inputs": [
|
||||
{
|
||||
"internalType": "address",
|
||||
"name": "operator",
|
||||
"type": "address"
|
||||
},
|
||||
{
|
||||
"internalType": "address",
|
||||
"name": "owner",
|
||||
"type": "address"
|
||||
}
|
||||
],
|
||||
"name": "ERC1155MissingApprovalForAll",
|
||||
"type": "error"
|
||||
},
|
||||
{
|
||||
"inputs": [
|
||||
{
|
||||
"internalType": "address",
|
||||
"name": "owner",
|
||||
"type": "address"
|
||||
}
|
||||
],
|
||||
"name": "OwnableInvalidOwner",
|
||||
"type": "error"
|
||||
},
|
||||
{
|
||||
"inputs": [
|
||||
{
|
||||
"internalType": "address",
|
||||
"name": "account",
|
||||
"type": "address"
|
||||
}
|
||||
],
|
||||
"name": "OwnableUnauthorizedAccount",
|
||||
"type": "error"
|
||||
},
|
||||
{
|
||||
"anonymous": false,
|
||||
"inputs": [
|
||||
{
|
||||
"indexed": true,
|
||||
"internalType": "address",
|
||||
"name": "account",
|
||||
"type": "address"
|
||||
},
|
||||
{
|
||||
"indexed": true,
|
||||
"internalType": "address",
|
||||
"name": "operator",
|
||||
"type": "address"
|
||||
},
|
||||
{
|
||||
"indexed": false,
|
||||
"internalType": "bool",
|
||||
"name": "approved",
|
||||
"type": "bool"
|
||||
}
|
||||
],
|
||||
"name": "ApprovalForAll",
|
||||
"type": "event"
|
||||
},
|
||||
{
|
||||
"anonymous": false,
|
||||
"inputs": [
|
||||
{
|
||||
"indexed": true,
|
||||
"internalType": "address",
|
||||
"name": "previousOwner",
|
||||
"type": "address"
|
||||
},
|
||||
{
|
||||
"indexed": true,
|
||||
"internalType": "address",
|
||||
"name": "newOwner",
|
||||
"type": "address"
|
||||
}
|
||||
],
|
||||
"name": "OwnershipTransferred",
|
||||
"type": "event"
|
||||
},
|
||||
{
|
||||
"anonymous": false,
|
||||
"inputs": [
|
||||
{
|
||||
"indexed": true,
|
||||
"internalType": "address",
|
||||
"name": "operator",
|
||||
"type": "address"
|
||||
},
|
||||
{
|
||||
"indexed": true,
|
||||
"internalType": "address",
|
||||
"name": "from",
|
||||
"type": "address"
|
||||
},
|
||||
{
|
||||
"indexed": true,
|
||||
"internalType": "address",
|
||||
"name": "to",
|
||||
"type": "address"
|
||||
},
|
||||
{
|
||||
"indexed": false,
|
||||
"internalType": "uint256[]",
|
||||
"name": "ids",
|
||||
"type": "uint256[]"
|
||||
},
|
||||
{
|
||||
"indexed": false,
|
||||
"internalType": "uint256[]",
|
||||
"name": "values",
|
||||
"type": "uint256[]"
|
||||
}
|
||||
],
|
||||
"name": "TransferBatch",
|
||||
"type": "event"
|
||||
},
|
||||
{
|
||||
"anonymous": false,
|
||||
"inputs": [
|
||||
{
|
||||
"indexed": true,
|
||||
"internalType": "address",
|
||||
"name": "operator",
|
||||
"type": "address"
|
||||
},
|
||||
{
|
||||
"indexed": true,
|
||||
"internalType": "address",
|
||||
"name": "from",
|
||||
"type": "address"
|
||||
},
|
||||
{
|
||||
"indexed": true,
|
||||
"internalType": "address",
|
||||
"name": "to",
|
||||
"type": "address"
|
||||
},
|
||||
{
|
||||
"indexed": false,
|
||||
"internalType": "uint256",
|
||||
"name": "id",
|
||||
"type": "uint256"
|
||||
},
|
||||
{
|
||||
"indexed": false,
|
||||
"internalType": "uint256",
|
||||
"name": "value",
|
||||
"type": "uint256"
|
||||
}
|
||||
],
|
||||
"name": "TransferSingle",
|
||||
"type": "event"
|
||||
},
|
||||
{
|
||||
"anonymous": false,
|
||||
"inputs": [
|
||||
{
|
||||
"indexed": false,
|
||||
"internalType": "string",
|
||||
"name": "value",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"indexed": true,
|
||||
"internalType": "uint256",
|
||||
"name": "id",
|
||||
"type": "uint256"
|
||||
}
|
||||
],
|
||||
"name": "URI",
|
||||
"type": "event"
|
||||
},
|
||||
{
|
||||
"inputs": [],
|
||||
"name": "PP",
|
||||
"outputs": [
|
||||
{
|
||||
"internalType": "uint256",
|
||||
"name": "",
|
||||
"type": "uint256"
|
||||
}
|
||||
],
|
||||
"stateMutability": "view",
|
||||
"type": "function"
|
||||
},
|
||||
{
|
||||
"inputs": [],
|
||||
"name": "SafeCoins",
|
||||
"outputs": [
|
||||
{
|
||||
"internalType": "uint256",
|
||||
"name": "",
|
||||
"type": "uint256"
|
||||
}
|
||||
],
|
||||
"stateMutability": "view",
|
||||
"type": "function"
|
||||
},
|
||||
{
|
||||
"inputs": [],
|
||||
"name": "TOURNAMENT_TICKETS",
|
||||
"outputs": [
|
||||
{
|
||||
"internalType": "uint256",
|
||||
"name": "",
|
||||
"type": "uint256"
|
||||
}
|
||||
],
|
||||
"stateMutability": "view",
|
||||
"type": "function"
|
||||
},
|
||||
{
|
||||
"inputs": [],
|
||||
"name": "TOURNAMENT_TROPHIES",
|
||||
"outputs": [
|
||||
{
|
||||
"internalType": "uint256",
|
||||
"name": "",
|
||||
"type": "uint256"
|
||||
}
|
||||
],
|
||||
"stateMutability": "view",
|
||||
"type": "function"
|
||||
},
|
||||
{
|
||||
"inputs": [
|
||||
{
|
||||
"internalType": "address",
|
||||
"name": "account",
|
||||
"type": "address"
|
||||
},
|
||||
{
|
||||
"internalType": "uint256",
|
||||
"name": "id",
|
||||
"type": "uint256"
|
||||
}
|
||||
],
|
||||
"name": "balanceOf",
|
||||
"outputs": [
|
||||
{
|
||||
"internalType": "uint256",
|
||||
"name": "",
|
||||
"type": "uint256"
|
||||
}
|
||||
],
|
||||
"stateMutability": "view",
|
||||
"type": "function"
|
||||
},
|
||||
{
|
||||
"inputs": [
|
||||
{
|
||||
"internalType": "address[]",
|
||||
"name": "accounts",
|
||||
"type": "address[]"
|
||||
},
|
||||
{
|
||||
"internalType": "uint256[]",
|
||||
"name": "ids",
|
||||
"type": "uint256[]"
|
||||
}
|
||||
],
|
||||
"name": "balanceOfBatch",
|
||||
"outputs": [
|
||||
{
|
||||
"internalType": "uint256[]",
|
||||
"name": "",
|
||||
"type": "uint256[]"
|
||||
}
|
||||
],
|
||||
"stateMutability": "view",
|
||||
"type": "function"
|
||||
},
|
||||
{
|
||||
"inputs": [
|
||||
{
|
||||
"internalType": "uint256",
|
||||
"name": "amount",
|
||||
"type": "uint256"
|
||||
}
|
||||
],
|
||||
"name": "buyTickets",
|
||||
"outputs": [],
|
||||
"stateMutability": "payable",
|
||||
"type": "function"
|
||||
},
|
||||
{
|
||||
"inputs": [
|
||||
{
|
||||
"internalType": "address",
|
||||
"name": "account",
|
||||
"type": "address"
|
||||
},
|
||||
{
|
||||
"internalType": "address",
|
||||
"name": "operator",
|
||||
"type": "address"
|
||||
}
|
||||
],
|
||||
"name": "isApprovedForAll",
|
||||
"outputs": [
|
||||
{
|
||||
"internalType": "bool",
|
||||
"name": "",
|
||||
"type": "bool"
|
||||
}
|
||||
],
|
||||
"stateMutability": "view",
|
||||
"type": "function"
|
||||
},
|
||||
{
|
||||
"inputs": [],
|
||||
"name": "owner",
|
||||
"outputs": [
|
||||
{
|
||||
"internalType": "address",
|
||||
"name": "",
|
||||
"type": "address"
|
||||
}
|
||||
],
|
||||
"stateMutability": "view",
|
||||
"type": "function"
|
||||
},
|
||||
{
|
||||
"inputs": [],
|
||||
"name": "renounceOwnership",
|
||||
"outputs": [],
|
||||
"stateMutability": "nonpayable",
|
||||
"type": "function"
|
||||
},
|
||||
{
|
||||
"inputs": [
|
||||
{
|
||||
"internalType": "address",
|
||||
"name": "from",
|
||||
"type": "address"
|
||||
},
|
||||
{
|
||||
"internalType": "address",
|
||||
"name": "to",
|
||||
"type": "address"
|
||||
},
|
||||
{
|
||||
"internalType": "uint256[]",
|
||||
"name": "ids",
|
||||
"type": "uint256[]"
|
||||
},
|
||||
{
|
||||
"internalType": "uint256[]",
|
||||
"name": "values",
|
||||
"type": "uint256[]"
|
||||
},
|
||||
{
|
||||
"internalType": "bytes",
|
||||
"name": "data",
|
||||
"type": "bytes"
|
||||
}
|
||||
],
|
||||
"name": "safeBatchTransferFrom",
|
||||
"outputs": [],
|
||||
"stateMutability": "nonpayable",
|
||||
"type": "function"
|
||||
},
|
||||
{
|
||||
"inputs": [
|
||||
{
|
||||
"internalType": "address",
|
||||
"name": "from",
|
||||
"type": "address"
|
||||
},
|
||||
{
|
||||
"internalType": "address",
|
||||
"name": "to",
|
||||
"type": "address"
|
||||
},
|
||||
{
|
||||
"internalType": "uint256",
|
||||
"name": "id",
|
||||
"type": "uint256"
|
||||
},
|
||||
{
|
||||
"internalType": "uint256",
|
||||
"name": "value",
|
||||
"type": "uint256"
|
||||
},
|
||||
{
|
||||
"internalType": "bytes",
|
||||
"name": "data",
|
||||
"type": "bytes"
|
||||
}
|
||||
],
|
||||
"name": "safeTransferFrom",
|
||||
"outputs": [],
|
||||
"stateMutability": "nonpayable",
|
||||
"type": "function"
|
||||
},
|
||||
{
|
||||
"inputs": [
|
||||
{
|
||||
"internalType": "address",
|
||||
"name": "operator",
|
||||
"type": "address"
|
||||
},
|
||||
{
|
||||
"internalType": "bool",
|
||||
"name": "approved",
|
||||
"type": "bool"
|
||||
}
|
||||
],
|
||||
"name": "setApprovalForAll",
|
||||
"outputs": [],
|
||||
"stateMutability": "nonpayable",
|
||||
"type": "function"
|
||||
},
|
||||
{
|
||||
"inputs": [
|
||||
{
|
||||
"internalType": "uint256",
|
||||
"name": "newPrice",
|
||||
"type": "uint256"
|
||||
}
|
||||
],
|
||||
"name": "setTicketPrice",
|
||||
"outputs": [],
|
||||
"stateMutability": "nonpayable",
|
||||
"type": "function"
|
||||
},
|
||||
{
|
||||
"inputs": [
|
||||
{
|
||||
"internalType": "bytes4",
|
||||
"name": "interfaceId",
|
||||
"type": "bytes4"
|
||||
}
|
||||
],
|
||||
"name": "supportsInterface",
|
||||
"outputs": [
|
||||
{
|
||||
"internalType": "bool",
|
||||
"name": "",
|
||||
"type": "bool"
|
||||
}
|
||||
],
|
||||
"stateMutability": "view",
|
||||
"type": "function"
|
||||
},
|
||||
{
|
||||
"inputs": [],
|
||||
"name": "ticketPrice",
|
||||
"outputs": [
|
||||
{
|
||||
"internalType": "uint256",
|
||||
"name": "",
|
||||
"type": "uint256"
|
||||
}
|
||||
],
|
||||
"stateMutability": "view",
|
||||
"type": "function"
|
||||
},
|
||||
{
|
||||
"inputs": [
|
||||
{
|
||||
"internalType": "address",
|
||||
"name": "newOwner",
|
||||
"type": "address"
|
||||
}
|
||||
],
|
||||
"name": "transferOwnership",
|
||||
"outputs": [],
|
||||
"stateMutability": "nonpayable",
|
||||
"type": "function"
|
||||
},
|
||||
{
|
||||
"inputs": [
|
||||
{
|
||||
"internalType": "uint256",
|
||||
"name": "_tokenid",
|
||||
"type": "uint256"
|
||||
}
|
||||
],
|
||||
"name": "uri",
|
||||
"outputs": [
|
||||
{
|
||||
"internalType": "string",
|
||||
"name": "",
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"stateMutability": "pure",
|
||||
"type": "function"
|
||||
},
|
||||
{
|
||||
"inputs": [],
|
||||
"name": "withdraw",
|
||||
"outputs": [],
|
||||
"stateMutability": "nonpayable",
|
||||
"type": "function"
|
||||
}
|
||||
]
|
||||
BIN
public/logos/logo.png
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
public/logos/privy-logo.png
Normal file
|
After Width: | Height: | Size: 7.8 KiB |
BIN
public/logos/privy-logomark.png
Normal file
|
After Width: | Height: | Size: 9.6 KiB |