diff --git a/images/Avalanche.json b/images/Avalanche.json new file mode 100644 index 0000000..090c5e3 --- /dev/null +++ b/images/Avalanche.json @@ -0,0 +1,5 @@ +{ + "name": "Avalanche", + "description": "Avalanche is a decentralized, open-source proof of stake blockchain with smart contract functionality. AVAX is the native cryptocurrency of the platform.", + "image": "ipfs://bafkreic5yolrbksolbclhjcot6zurbbjlryjak73sw5t47ntjz6kietrky" +} \ No newline at end of file diff --git a/images/Circuit.json b/images/Circuit.json new file mode 100644 index 0000000..4870af0 --- /dev/null +++ b/images/Circuit.json @@ -0,0 +1,5 @@ +{ + "name": "Circuit of the Americas", + "description": "Circuit of the Americas is a Grade 1 FIA-specification 3.426-mile motor racing track and facilities located in Austin, Texas, in the United States.", + "image": "ipfs://bafkreidghjqepxh7lipfuhsxusjcffq6ws6tlvpkdjv33727264oblleoa" +} \ No newline at end of file diff --git a/images/Curios.json b/images/Curios.json new file mode 100644 index 0000000..fb97177 --- /dev/null +++ b/images/Curios.json @@ -0,0 +1,5 @@ +{ + "name": "Curios", + "description": "Self publishing and fan engagement for creators. Keep 100% of your sales and access fan contact information directly.", + "image": "ipfs://bafkreiad7cwpai6sqj7l37oekknmskgi6jznuwbxixqb5ylkxme63wd7iq" +} \ No newline at end of file diff --git a/images/Polvos.json b/images/Polvos.json new file mode 100644 index 0000000..bf5674b --- /dev/null +++ b/images/Polvos.json @@ -0,0 +1,5 @@ +{ + "name": "Polvos", + "description": "Polvos serves great interior Mexican food and drinks to the heart of Austin's own 78704. Come by and visit us.", + "image": "ipfs://bafkreibicega6bwf7n7cjq32f45crela4gpby4aisrxkl6mri7oqs3bu3i" +} \ No newline at end of file diff --git a/images/avalanche.png b/images/avalanche.png new file mode 100644 index 0000000..2380e7e Binary files /dev/null and b/images/avalanche.png differ diff --git a/images/circuit.jpeg b/images/circuit.jpeg new file mode 100644 index 0000000..333ff41 Binary files /dev/null and b/images/circuit.jpeg differ diff --git a/images/ipfsJsons.txt b/images/ipfsJsons.txt new file mode 100644 index 0000000..95717bf --- /dev/null +++ b/images/ipfsJsons.txt @@ -0,0 +1,5 @@ +curios: ipfs://bafkreiefz6lnc2iyqovgrhskycavvkvklaxq77yxrnucj22bhf6i7bctzy +polvos: ipfs://bafkreib3ols4uyiknwg3az4nekk4z3tkh2qhjegsglnglgia24lseg53qy +ava: ipfs://bafkreiaxfn4bqgobyplxz5ri2au63ynzdd4ot7c4tnfd3p6ldxjt6mr7ae +circuit: ipfs://bafkreigtz5a4r7bilr6dib5bt5db2zgmjpv3hhqrtomvqf2he64k3xgzni +rcb: ipfs://bafkreihq53gbz4fv3pj2uyr27fiwvgoe5c5xukvdg5ouedwpfij2tzh7ru \ No newline at end of file diff --git a/images/rcb.jpeg b/images/rcb.jpeg new file mode 100644 index 0000000..dad0ea5 Binary files /dev/null and b/images/rcb.jpeg differ diff --git a/images/rcb.json b/images/rcb.json new file mode 100644 index 0000000..b37bb78 --- /dev/null +++ b/images/rcb.json @@ -0,0 +1,5 @@ +{ + "name": "Radio Coffee & Beer", + "description": "Hip spot for coffee, beer & pastries in wood-paneled digs, plus tables & a taco truck out back.", + "image": "ipfs://bafkreihq53gbz4fv3pj2uyr27fiwvgoe5c5xukvdg5ouedwpfij2tzh7ru" +} \ No newline at end of file diff --git a/packages/foundry/contracts/ATXDAOPartnershipNft.sol b/packages/foundry/contracts/ATXDAOPartnershipNft.sol index 11e8c2e..f150bb6 100644 --- a/packages/foundry/contracts/ATXDAOPartnershipNft.sol +++ b/packages/foundry/contracts/ATXDAOPartnershipNft.sol @@ -7,17 +7,18 @@ import {ERC721} from "@openzeppelin/contracts/token/ERC721/ERC721.sol"; import {ERC721URIStorage} from "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol"; import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol"; -contract ATXDAOPartnershipNft is ERC721URIStorage, AccessControl { +abstract contract ATXDAOPartnershipNft is ERC721URIStorage, AccessControl { error ATXDAOPartnershipNft__NotValidOperator(); string mintUri; uint256 mintCount; - uint256 tier; constructor( address[] memory admins, - string memory newMintUri - ) ERC721("ATX DAO Partnership NFT", "ATXP") { + string memory newMintUri, + string memory name, + string memory symbol + ) ERC721(name, symbol) { for (uint256 i = 0; i < admins.length; i++) { _grantRole(DEFAULT_ADMIN_ROLE, admins[i]); } @@ -41,14 +42,10 @@ contract ATXDAOPartnershipNft is ERC721URIStorage, AccessControl { return super.supportsInterface(interfaceId); } - function mint( - address target, - uint256 newTier - ) external onlyRole(DEFAULT_ADMIN_ROLE) { + function mint(address target) external onlyRole(DEFAULT_ADMIN_ROLE) { _mint(target, mintCount); _setTokenURI(mintCount, mintUri); mintCount++; - tier = newTier; } function setTokenURI(uint256 tokenId, string memory tokenUri) external { @@ -81,4 +78,14 @@ contract ATXDAOPartnershipNft is ERC721URIStorage, AccessControl { function getMintCount() external view returns (uint256) { return mintCount; } + + function burn(uint256 tokenId) external { + if (msg.sender != ownerOf(tokenId)) { + if (!hasRole(DEFAULT_ADMIN_ROLE, msg.sender)) { + revert ATXDAOPartnershipNft__NotValidOperator(); + } + } + + _burn(tokenId); + } } diff --git a/packages/foundry/contracts/RaineyStreetPartnershipNft.sol b/packages/foundry/contracts/RaineyStreetPartnershipNft.sol new file mode 100644 index 0000000..169c032 --- /dev/null +++ b/packages/foundry/contracts/RaineyStreetPartnershipNft.sol @@ -0,0 +1,23 @@ +//SPDX-License-Identifier: MIT +pragma solidity >=0.8.0 <0.9.0; + +// Useful for debugging. Remove when deploying to a live network. +import "forge-std/console.sol"; +import {ERC721} from "@openzeppelin/contracts/token/ERC721/ERC721.sol"; +import {ERC721URIStorage} from "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol"; +import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol"; +import "./ATXDAOPartnershipNft.sol"; + +contract RaineyStreetPartnershipNft is ATXDAOPartnershipNft { + constructor( + address[] memory admins, + string memory newMintUri + ) + ATXDAOPartnershipNft( + admins, + newMintUri, + "ATX DAO Partnership NFT - Rainey", + "ATXPR" + ) + {} +} diff --git a/packages/foundry/contracts/SixthStreetPartnershipNft.sol b/packages/foundry/contracts/SixthStreetPartnershipNft.sol new file mode 100644 index 0000000..79ba97b --- /dev/null +++ b/packages/foundry/contracts/SixthStreetPartnershipNft.sol @@ -0,0 +1,23 @@ +//SPDX-License-Identifier: MIT +pragma solidity >=0.8.0 <0.9.0; + +// Useful for debugging. Remove when deploying to a live network. +import "forge-std/console.sol"; +import {ERC721} from "@openzeppelin/contracts/token/ERC721/ERC721.sol"; +import {ERC721URIStorage} from "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol"; +import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol"; +import "./ATXDAOPartnershipNft.sol"; + +contract SixthStreetPartnershipNft is ATXDAOPartnershipNft { + constructor( + address[] memory admins, + string memory newMintUri + ) + ATXDAOPartnershipNft( + admins, + newMintUri, + "ATX DAO Partnership NFT - Sixth", + "ATXPS" + ) + {} +} diff --git a/packages/foundry/script/Deploy.s.sol b/packages/foundry/script/Deploy.s.sol index cb94530..562c3d9 100644 --- a/packages/foundry/script/Deploy.s.sol +++ b/packages/foundry/script/Deploy.s.sol @@ -1,7 +1,10 @@ //SPDX-License-Identifier: MIT pragma solidity ^0.8.19; -import "../contracts/ATXDAOPartnershipNft.sol"; +import "../contracts/RaineyStreetPartnershipNft.sol"; +import "../contracts/SixthStreetPartnershipNft.sol"; + +// import "../contracts/ATXDAOPartnershipNft.sol"; import "./DeployHelpers.s.sol"; contract DeployScript is ScaffoldETHDeploy { @@ -22,7 +25,12 @@ contract DeployScript is ScaffoldETHDeploy { address[] memory admins = new address[](1); admins[0] = admin; - ATXDAOPartnershipNft yourContract = new ATXDAOPartnershipNft( + RaineyStreetPartnershipNft yourContract1 = new RaineyStreetPartnershipNft( + admins, + "ipfs://bafkreide5gtpol2fzt75qt5rpds5vdmv24qnf43frionfhesfqqb2en66a" + ); + + SixthStreetPartnershipNft yourContract2 = new SixthStreetPartnershipNft( admins, "ipfs://bafkreide5gtpol2fzt75qt5rpds5vdmv24qnf43frionfhesfqqb2en66a" ); @@ -30,7 +38,14 @@ contract DeployScript is ScaffoldETHDeploy { console.logString( string.concat( "YourContract deployed at: ", - vm.toString(address(yourContract)) + vm.toString(address(yourContract1)) + ) + ); + + console.logString( + string.concat( + "YourContract deployed at: ", + vm.toString(address(yourContract2)) ) ); vm.stopBroadcast(); diff --git a/packages/foundry/test/YourContract.t.sol b/packages/foundry/test/YourContract.t.sol index 0806555..e8441e1 100644 --- a/packages/foundry/test/YourContract.t.sol +++ b/packages/foundry/test/YourContract.t.sol @@ -1,103 +1,103 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.13; - -import "forge-std/Test.sol"; -import {ATXDAOPartnershipNft} from "../contracts/ATXDAOPartnershipNft.sol"; - -contract YourContractTest is Test { - ATXDAOPartnershipNft public nftCollection; - - address user = makeAddr("User"); - address user2 = makeAddr("User2"); - address admin = makeAddr("Admin"); - address multisig = makeAddr("Multisig"); - - function setUp() public { - console.log("User: ", user); - console.log("User 2: ", user2); - console.log("Admin: ", admin); - - address[] memory admins = new address[](1); - admins[0] = admin; - - nftCollection = new ATXDAOPartnershipNft( - admins, - "ipfs://bafkreide5gtpol2fzt75qt5rpds5vdmv24qnf43frionfhesfqqb2en66a" - ); - } - - function testSetTokenUriAsOwner() public { - vm.prank(admin); - nftCollection.mint(user, 0); - - vm.prank(user); - nftCollection.setTokenURI( - 0, - "ipfs://bafybeiaz55w6kf7ar2g5vzikfbft2qoexknstfouu524l7q3mliutns2u4/0" - ); - - assertEq( - nftCollection.tokenURI(0), - "ipfs://bafybeiaz55w6kf7ar2g5vzikfbft2qoexknstfouu524l7q3mliutns2u4/0" - ); - } - - function testSetTokenUriAsAdmin() public { - vm.prank(admin); - nftCollection.mint(user, 0); - - vm.startPrank(admin); - nftCollection.setTokenURI( - 0, - "ipfs://bafybeiaz55w6kf7ar2g5vzikfbft2qoexknstfouu524l7q3mliutns2u4/0" - ); - vm.stopPrank(); - - assertEq( - nftCollection.tokenURI(0), - "ipfs://bafybeiaz55w6kf7ar2g5vzikfbft2qoexknstfouu524l7q3mliutns2u4/0" - ); - } - - function testRevertIfNotOwner() public { - vm.prank(admin); - nftCollection.mint(user, 0); - - vm.startPrank(user2); - vm.expectRevert(); - nftCollection.setTokenURI( - 0, - "ipfs://bafybeiaz55w6kf7ar2g5vzikfbft2qoexknstfouu524l7q3mliutns2u4/0" - ); - vm.stopPrank(); - } - - function testReturnToDao() public { - vm.startPrank(admin); - nftCollection.mint(user, 0); - - nftCollection.revokeNft(0, multisig); - vm.stopPrank(); - - assertEq(nftCollection.ownerOf(0), multisig); - } - - function testRevert__ReturnToDao__IfNotAdmin() public { - vm.startPrank(admin); - nftCollection.mint(user, 0); - vm.stopPrank(); - - vm.prank(user); - vm.expectRevert(); - nftCollection.revokeNft(0, multisig); - } - - function testTransfer() public { - vm.startPrank(admin); - nftCollection.mint(user, 0); - vm.stopPrank(); - - vm.prank(user); - nftCollection.transferFrom(user, user2, 0); - } -} +// // SPDX-License-Identifier: UNLICENSED +// pragma solidity ^0.8.13; + +// import "forge-std/Test.sol"; +// import {ATXDAOPartnershipNft} from "../contracts/ATXDAOPartnershipNft.sol"; + +// contract YourContractTest is Test { +// ATXDAOPartnershipNft public nftCollection; + +// address user = makeAddr("User"); +// address user2 = makeAddr("User2"); +// address admin = makeAddr("Admin"); +// address multisig = makeAddr("Multisig"); + +// function setUp() public { +// console.log("User: ", user); +// console.log("User 2: ", user2); +// console.log("Admin: ", admin); + +// address[] memory admins = new address[](1); +// admins[0] = admin; + +// nftCollection = new ATXDAOPartnershipNft( +// admins, +// "ipfs://bafkreide5gtpol2fzt75qt5rpds5vdmv24qnf43frionfhesfqqb2en66a" +// ); +// } + +// function testSetTokenUriAsOwner() public { +// vm.prank(admin); +// nftCollection.mint(user, 0); + +// vm.prank(user); +// nftCollection.setTokenURI( +// 0, +// "ipfs://bafybeiaz55w6kf7ar2g5vzikfbft2qoexknstfouu524l7q3mliutns2u4/0" +// ); + +// assertEq( +// nftCollection.tokenURI(0), +// "ipfs://bafybeiaz55w6kf7ar2g5vzikfbft2qoexknstfouu524l7q3mliutns2u4/0" +// ); +// } + +// function testSetTokenUriAsAdmin() public { +// vm.prank(admin); +// nftCollection.mint(user, 0); + +// vm.startPrank(admin); +// nftCollection.setTokenURI( +// 0, +// "ipfs://bafybeiaz55w6kf7ar2g5vzikfbft2qoexknstfouu524l7q3mliutns2u4/0" +// ); +// vm.stopPrank(); + +// assertEq( +// nftCollection.tokenURI(0), +// "ipfs://bafybeiaz55w6kf7ar2g5vzikfbft2qoexknstfouu524l7q3mliutns2u4/0" +// ); +// } + +// function testRevertIfNotOwner() public { +// vm.prank(admin); +// nftCollection.mint(user, 0); + +// vm.startPrank(user2); +// vm.expectRevert(); +// nftCollection.setTokenURI( +// 0, +// "ipfs://bafybeiaz55w6kf7ar2g5vzikfbft2qoexknstfouu524l7q3mliutns2u4/0" +// ); +// vm.stopPrank(); +// } + +// function testReturnToDao() public { +// vm.startPrank(admin); +// nftCollection.mint(user, 0); + +// nftCollection.revokeNft(0, multisig); +// vm.stopPrank(); + +// assertEq(nftCollection.ownerOf(0), multisig); +// } + +// function testRevert__ReturnToDao__IfNotAdmin() public { +// vm.startPrank(admin); +// nftCollection.mint(user, 0); +// vm.stopPrank(); + +// vm.prank(user); +// vm.expectRevert(); +// nftCollection.revokeNft(0, multisig); +// } + +// function testTransfer() public { +// vm.startPrank(admin); +// nftCollection.mint(user, 0); +// vm.stopPrank(); + +// vm.prank(user); +// nftCollection.transferFrom(user, user2, 0); +// } +// } diff --git a/packages/nextjs/app/page.tsx b/packages/nextjs/app/page.tsx index 0890f73..c6bc2b8 100644 --- a/packages/nextjs/app/page.tsx +++ b/packages/nextjs/app/page.tsx @@ -8,21 +8,19 @@ import { useScaffoldContract, useScaffoldContractRead, useScaffoldContractWrite import { useAccount } from "wagmi"; import { FormEvent } from 'react' import { useFetches, useGetAllMetadatas } from "~~/components/nft-card/Hooks"; +import rainey from "~~/components/assets/rainey.jpg" +import houses from "~~/components/assets/houses.jpeg" +import brick from "~~/components/assets/brick.jpeg" const Home: NextPage = () => { const account = useAccount(); - const { data: partnershipNftContract } = useScaffoldContract({contractName: "ATXDAOPartnershipNft"}); - - const { data: mintCount } = useScaffoldContractRead({contractName:"ATXDAOPartnershipNft", functionName:"getMintCount"}); - - const { data: adminRole } = useScaffoldContractRead({contractName:"ATXDAOPartnershipNft", functionName: "DEFAULT_ADMIN_ROLE"}); - - const { data: hasAdminRole } = useScaffoldContractRead({contractName:"ATXDAOPartnershipNft", functionName: "hasRole", args: [adminRole, account.address]}); - - const { writeAsync: mint } = useScaffoldContractWrite({contractName: "ATXDAOPartnershipNft", functionName: "mint", args: ["", BigInt(0)] }); - + // const { data: adminRole } = useScaffoldContractRead({contractName:"RaineyStreetPartnershipNft", functionName: "DEFAULT_ADMIN_ROLE"}); + // const { data: hasAdminRole } = useScaffoldContractRead({contractName:"RaineyStreetPartnershipNft", functionName: "hasRole", args: [adminRole, account.address]}); + // const { writeAsync: mint } = useScaffoldContractWrite({contractName: "RaineyStreetPartnershipNft", functionName: "mint", args: [""]}); + const { data: partnershipNftContract } = useScaffoldContract({contractName: "RaineyStreetPartnershipNft"}); + const { data: mintCount } = useScaffoldContractRead({contractName:"RaineyStreetPartnershipNft", functionName:"getMintCount"}); const { data: tokenURIs } = useGetAllMetadatas(partnershipNftContract, mintCount || BigInt(0)); for (let i = 0; i < tokenURIs.length; i++) { @@ -31,41 +29,74 @@ const Home: NextPage = () => { const { data: metadatas } = useFetches(tokenURIs); - const nfts = metadatas!.map((metadata, index) => ( )); + const { data: sixthPartnershipNftContract } = useScaffoldContract({contractName: "SixthStreetPartnershipNft"}); + const { data: sixthMintCount } = useScaffoldContractRead({contractName:"SixthStreetPartnershipNft", functionName:"getMintCount"}); + const { data: sixthTokenURIs } = useGetAllMetadatas(sixthPartnershipNftContract, sixthMintCount || BigInt(0)); - async function onFormSubmit(event: any) { - event.preventDefault() - await mint({args: [event.target[0].value, BigInt(0) ]}); + console.log(sixthTokenURIs); + + for (let i = 0; i < sixthTokenURIs.length; i++) { + sixthTokenURIs[i] = sixthTokenURIs[i].replace("ipfs://", "https://ipfs.io/ipfs/"); } - let adminOutput; - if (hasAdminRole) { - adminOutput =
-
-
- - - -
-
- } + const { data: sixthMetadatas } = useFetches(sixthTokenURIs); + + const sixthNfts = sixthMetadatas!.map((metadata, index) => ( + + )); + + + + + + + + + // async function onFormSubmit(event: any) { + // event.preventDefault() + // await mint({args: [event.target[0].value, BigInt(0) ]}); + // } + + // let adminOutput; + // if (hasAdminRole) { + // adminOutput =
+ //
+ //
+ // + // + // + //
+ //
+ // } return ( <> -
+ {/*
{ adminOutput } -
- { - nfts - } +
*/} + +
+

Rainey Street

+
+ { + nfts + } +
+
+
+

6th Street

+
+ { + sixthNfts + } +
-
); }; diff --git a/packages/nextjs/components/assets/brick.jpeg b/packages/nextjs/components/assets/brick.jpeg new file mode 100644 index 0000000..6b4c2e7 Binary files /dev/null and b/packages/nextjs/components/assets/brick.jpeg differ diff --git a/packages/nextjs/components/assets/houses.jpeg b/packages/nextjs/components/assets/houses.jpeg new file mode 100644 index 0000000..4972787 Binary files /dev/null and b/packages/nextjs/components/assets/houses.jpeg differ diff --git a/packages/nextjs/components/assets/rainey.jpg b/packages/nextjs/components/assets/rainey.jpg new file mode 100644 index 0000000..408c14e Binary files /dev/null and b/packages/nextjs/components/assets/rainey.jpg differ diff --git a/packages/nextjs/components/nft-card/nftCard.tsx b/packages/nextjs/components/nft-card/nftCard.tsx index 31a3b5a..63005fd 100644 --- a/packages/nextjs/components/nft-card/nftCard.tsx +++ b/packages/nextjs/components/nft-card/nftCard.tsx @@ -14,11 +14,20 @@ export function NftCard (props: NftCardProps) { props.nft.image = props.nft.image.replace("ipfs://", "https://ipfs.io/ipfs/"); } + //flex flex-col items-center justify-center text-center bg-black max-w-xs rounded-lg bg-sky-900 m-1 return ( -
-

Name: { props.nft.name}

-

Description: { props.nft.description}

- +
+ +
+

Name

+

{ props.nft.name}

+
+ + +
+

Description

+

{ props.nft.description}

+
) } \ No newline at end of file diff --git a/packages/nextjs/contracts/deployedContracts.ts b/packages/nextjs/contracts/deployedContracts.ts index c1d880e..3776d16 100644 --- a/packages/nextjs/contracts/deployedContracts.ts +++ b/packages/nextjs/contracts/deployedContracts.ts @@ -6,8 +6,8 @@ import { GenericContractsDeclaration } from "~~/utils/scaffold-eth/contract"; const deployedContracts = { 31337: { - ATXDAOPartnershipNft: { - address: "0x0165878A594ca255338adfa4d48449f69242Eb8F", + RaineyStreetPartnershipNft: { + address: "0x2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6", abi: [ { type: "constructor", @@ -214,12 +214,818 @@ const deployedContracts = { type: "address", internalType: "address", }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "name", + inputs: [], + outputs: [ + { + name: "", + type: "string", + internalType: "string", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "ownerOf", + inputs: [ + { + name: "tokenId", + type: "uint256", + internalType: "uint256", + }, + ], + outputs: [ + { + name: "", + type: "address", + internalType: "address", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "renounceRole", + inputs: [ + { + name: "role", + type: "bytes32", + internalType: "bytes32", + }, + { + name: "callerConfirmation", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "revokeNft", + inputs: [ + { + name: "tokenId", + type: "uint256", + internalType: "uint256", + }, + { + name: "receiver", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "revokeRole", + inputs: [ + { + name: "role", + type: "bytes32", + internalType: "bytes32", + }, + { + name: "account", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "safeTransferFrom", + inputs: [ + { + name: "from", + type: "address", + internalType: "address", + }, + { + name: "to", + type: "address", + internalType: "address", + }, + { + name: "tokenId", + type: "uint256", + internalType: "uint256", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "safeTransferFrom", + inputs: [ + { + name: "from", + type: "address", + internalType: "address", + }, + { + name: "to", + type: "address", + internalType: "address", + }, + { + name: "tokenId", + type: "uint256", + internalType: "uint256", + }, + { + name: "data", + type: "bytes", + internalType: "bytes", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "setApprovalForAll", + inputs: [ + { + name: "operator", + type: "address", + internalType: "address", + }, + { + name: "approved", + type: "bool", + internalType: "bool", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "setMintUri", + inputs: [ + { + name: "newMintUri", + type: "string", + internalType: "string", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "setTokenURI", + inputs: [ + { + name: "tokenId", + type: "uint256", + internalType: "uint256", + }, + { + name: "tokenUri", + type: "string", + internalType: "string", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "supportsInterface", + inputs: [ + { + name: "interfaceId", + type: "bytes4", + internalType: "bytes4", + }, + ], + outputs: [ + { + name: "", + type: "bool", + internalType: "bool", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "symbol", + inputs: [], + outputs: [ + { + name: "", + type: "string", + internalType: "string", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "tokenURI", + inputs: [ + { + name: "tokenId", + type: "uint256", + internalType: "uint256", + }, + ], + outputs: [ + { + name: "", + type: "string", + internalType: "string", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "transferFrom", + inputs: [ + { + name: "from", + type: "address", + internalType: "address", + }, + { + name: "to", + type: "address", + internalType: "address", + }, + { + name: "tokenId", + type: "uint256", + internalType: "uint256", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "event", + name: "Approval", + inputs: [ + { + name: "owner", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "approved", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "tokenId", + type: "uint256", + indexed: true, + internalType: "uint256", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "ApprovalForAll", + inputs: [ + { + name: "owner", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "operator", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "approved", + type: "bool", + indexed: false, + internalType: "bool", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "BatchMetadataUpdate", + inputs: [ + { + name: "_fromTokenId", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + { + name: "_toTokenId", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "MetadataUpdate", + inputs: [ + { + name: "_tokenId", + type: "uint256", + indexed: false, + internalType: "uint256", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "RoleAdminChanged", + inputs: [ + { + name: "role", + type: "bytes32", + indexed: true, + internalType: "bytes32", + }, + { + name: "previousAdminRole", + type: "bytes32", + indexed: true, + internalType: "bytes32", + }, + { + name: "newAdminRole", + type: "bytes32", + indexed: true, + internalType: "bytes32", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "RoleGranted", + inputs: [ + { + name: "role", + type: "bytes32", + indexed: true, + internalType: "bytes32", + }, + { + name: "account", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "sender", + type: "address", + indexed: true, + internalType: "address", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "RoleRevoked", + inputs: [ + { + name: "role", + type: "bytes32", + indexed: true, + internalType: "bytes32", + }, + { + name: "account", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "sender", + type: "address", + indexed: true, + internalType: "address", + }, + ], + anonymous: false, + }, + { + type: "event", + name: "Transfer", + inputs: [ + { + name: "from", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "to", + type: "address", + indexed: true, + internalType: "address", + }, + { + name: "tokenId", + type: "uint256", + indexed: true, + internalType: "uint256", + }, + ], + anonymous: false, + }, + { + type: "error", + name: "ATXDAOPartnershipNft__NotValidOperator", + inputs: [], + }, + { + type: "error", + name: "AccessControlBadConfirmation", + inputs: [], + }, + { + type: "error", + name: "AccessControlUnauthorizedAccount", + inputs: [ + { + name: "account", + type: "address", + internalType: "address", + }, + { + name: "neededRole", + type: "bytes32", + internalType: "bytes32", + }, + ], + }, + { + type: "error", + name: "ERC721IncorrectOwner", + inputs: [ + { + name: "sender", + type: "address", + internalType: "address", + }, + { + name: "tokenId", + type: "uint256", + internalType: "uint256", + }, + { + name: "owner", + type: "address", + internalType: "address", + }, + ], + }, + { + type: "error", + name: "ERC721InsufficientApproval", + inputs: [ + { + name: "operator", + type: "address", + internalType: "address", + }, + { + name: "tokenId", + type: "uint256", + internalType: "uint256", + }, + ], + }, + { + type: "error", + name: "ERC721InvalidApprover", + inputs: [ + { + name: "approver", + type: "address", + internalType: "address", + }, + ], + }, + { + type: "error", + name: "ERC721InvalidOperator", + inputs: [ + { + name: "operator", + type: "address", + internalType: "address", + }, + ], + }, + { + type: "error", + name: "ERC721InvalidOwner", + inputs: [ + { + name: "owner", + type: "address", + internalType: "address", + }, + ], + }, + { + type: "error", + name: "ERC721InvalidReceiver", + inputs: [ + { + name: "receiver", + type: "address", + internalType: "address", + }, + ], + }, + { + type: "error", + name: "ERC721InvalidSender", + inputs: [ + { + name: "sender", + type: "address", + internalType: "address", + }, + ], + }, + { + type: "error", + name: "ERC721NonexistentToken", + inputs: [ + { + name: "tokenId", + type: "uint256", + internalType: "uint256", + }, + ], + }, + ], + inheritedFunctions: { + DEFAULT_ADMIN_ROLE: "contracts/ATXDAOPartnershipNft.sol", + approve: "contracts/ATXDAOPartnershipNft.sol", + balanceOf: "contracts/ATXDAOPartnershipNft.sol", + getApproved: "contracts/ATXDAOPartnershipNft.sol", + getMintCount: "contracts/ATXDAOPartnershipNft.sol", + getMintUri: "contracts/ATXDAOPartnershipNft.sol", + getRoleAdmin: "contracts/ATXDAOPartnershipNft.sol", + grantRole: "contracts/ATXDAOPartnershipNft.sol", + hasRole: "contracts/ATXDAOPartnershipNft.sol", + isApprovedForAll: "contracts/ATXDAOPartnershipNft.sol", + mint: "contracts/ATXDAOPartnershipNft.sol", + name: "contracts/ATXDAOPartnershipNft.sol", + ownerOf: "contracts/ATXDAOPartnershipNft.sol", + renounceRole: "contracts/ATXDAOPartnershipNft.sol", + revokeNft: "contracts/ATXDAOPartnershipNft.sol", + revokeRole: "contracts/ATXDAOPartnershipNft.sol", + safeTransferFrom: "contracts/ATXDAOPartnershipNft.sol", + setApprovalForAll: "contracts/ATXDAOPartnershipNft.sol", + setMintUri: "contracts/ATXDAOPartnershipNft.sol", + setTokenURI: "contracts/ATXDAOPartnershipNft.sol", + supportsInterface: "contracts/ATXDAOPartnershipNft.sol", + symbol: "contracts/ATXDAOPartnershipNft.sol", + tokenURI: "contracts/ATXDAOPartnershipNft.sol", + transferFrom: "contracts/ATXDAOPartnershipNft.sol", + }, + }, + SixthStreetPartnershipNft: { + address: "0x8A791620dd6260079BF849Dc5567aDC3F2FdC318", + abi: [ + { + type: "constructor", + inputs: [ + { + name: "admins", + type: "address[]", + internalType: "address[]", + }, + { + name: "newMintUri", + type: "string", + internalType: "string", + }, + ], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "DEFAULT_ADMIN_ROLE", + inputs: [], + outputs: [ + { + name: "", + type: "bytes32", + internalType: "bytes32", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "approve", + inputs: [ + { + name: "to", + type: "address", + internalType: "address", + }, + { + name: "tokenId", + type: "uint256", + internalType: "uint256", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "balanceOf", + inputs: [ + { + name: "owner", + type: "address", + internalType: "address", + }, + ], + outputs: [ + { + name: "", + type: "uint256", + internalType: "uint256", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "getApproved", + inputs: [ + { + name: "tokenId", + type: "uint256", + internalType: "uint256", + }, + ], + outputs: [ + { + name: "", + type: "address", + internalType: "address", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "getMintCount", + inputs: [], + outputs: [ { - name: "newTier", + name: "", type: "uint256", internalType: "uint256", }, ], + stateMutability: "view", + }, + { + type: "function", + name: "getMintUri", + inputs: [], + outputs: [ + { + name: "", + type: "string", + internalType: "string", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "getRoleAdmin", + inputs: [ + { + name: "role", + type: "bytes32", + internalType: "bytes32", + }, + ], + outputs: [ + { + name: "", + type: "bytes32", + internalType: "bytes32", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "grantRole", + inputs: [ + { + name: "role", + type: "bytes32", + internalType: "bytes32", + }, + { + name: "account", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, + { + type: "function", + name: "hasRole", + inputs: [ + { + name: "role", + type: "bytes32", + internalType: "bytes32", + }, + { + name: "account", + type: "address", + internalType: "address", + }, + ], + outputs: [ + { + name: "", + type: "bool", + internalType: "bool", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "isApprovedForAll", + inputs: [ + { + name: "owner", + type: "address", + internalType: "address", + }, + { + name: "operator", + type: "address", + internalType: "address", + }, + ], + outputs: [ + { + name: "", + type: "bool", + internalType: "bool", + }, + ], + stateMutability: "view", + }, + { + type: "function", + name: "mint", + inputs: [ + { + name: "target", + type: "address", + internalType: "address", + }, + ], outputs: [], stateMutability: "nonpayable", }, @@ -796,41 +1602,30 @@ const deployedContracts = { }, ], inheritedFunctions: { - approve: - "lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721URIStorage.sol", - balanceOf: - "lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721URIStorage.sol", - getApproved: - "lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721URIStorage.sol", - isApprovedForAll: - "lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721URIStorage.sol", - name: "lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721URIStorage.sol", - ownerOf: - "lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721URIStorage.sol", - safeTransferFrom: - "lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721URIStorage.sol", - setApprovalForAll: - "lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721URIStorage.sol", - supportsInterface: - "lib/openzeppelin-contracts/contracts/access/AccessControl.sol", - symbol: - "lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721URIStorage.sol", - tokenURI: - "lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721URIStorage.sol", - transferFrom: - "lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721URIStorage.sol", - DEFAULT_ADMIN_ROLE: - "lib/openzeppelin-contracts/contracts/access/AccessControl.sol", - getRoleAdmin: - "lib/openzeppelin-contracts/contracts/access/AccessControl.sol", - grantRole: - "lib/openzeppelin-contracts/contracts/access/AccessControl.sol", - hasRole: - "lib/openzeppelin-contracts/contracts/access/AccessControl.sol", - renounceRole: - "lib/openzeppelin-contracts/contracts/access/AccessControl.sol", - revokeRole: - "lib/openzeppelin-contracts/contracts/access/AccessControl.sol", + DEFAULT_ADMIN_ROLE: "contracts/ATXDAOPartnershipNft.sol", + approve: "contracts/ATXDAOPartnershipNft.sol", + balanceOf: "contracts/ATXDAOPartnershipNft.sol", + getApproved: "contracts/ATXDAOPartnershipNft.sol", + getMintCount: "contracts/ATXDAOPartnershipNft.sol", + getMintUri: "contracts/ATXDAOPartnershipNft.sol", + getRoleAdmin: "contracts/ATXDAOPartnershipNft.sol", + grantRole: "contracts/ATXDAOPartnershipNft.sol", + hasRole: "contracts/ATXDAOPartnershipNft.sol", + isApprovedForAll: "contracts/ATXDAOPartnershipNft.sol", + mint: "contracts/ATXDAOPartnershipNft.sol", + name: "contracts/ATXDAOPartnershipNft.sol", + ownerOf: "contracts/ATXDAOPartnershipNft.sol", + renounceRole: "contracts/ATXDAOPartnershipNft.sol", + revokeNft: "contracts/ATXDAOPartnershipNft.sol", + revokeRole: "contracts/ATXDAOPartnershipNft.sol", + safeTransferFrom: "contracts/ATXDAOPartnershipNft.sol", + setApprovalForAll: "contracts/ATXDAOPartnershipNft.sol", + setMintUri: "contracts/ATXDAOPartnershipNft.sol", + setTokenURI: "contracts/ATXDAOPartnershipNft.sol", + supportsInterface: "contracts/ATXDAOPartnershipNft.sol", + symbol: "contracts/ATXDAOPartnershipNft.sol", + tokenURI: "contracts/ATXDAOPartnershipNft.sol", + transferFrom: "contracts/ATXDAOPartnershipNft.sol", }, }, }, diff --git a/packages/nextjs/tailwind.config.js b/packages/nextjs/tailwind.config.js index e1ca91d..3d107d3 100644 --- a/packages/nextjs/tailwind.config.js +++ b/packages/nextjs/tailwind.config.js @@ -81,6 +81,9 @@ module.exports = { animation: { "pulse-fast": "pulse 1s cubic-bezier(0.4, 0, 0.6, 1) infinite", }, + backgroundImage: { + "hero-pattern": `url('/components/assets/rainey.jpg')`, + }, }, }, };