From 2623559bd2e382020afde26ff336f2e1fab48027 Mon Sep 17 00:00:00 2001 From: firerum Date: Thu, 22 Aug 2024 15:24:48 +0100 Subject: [PATCH 01/15] wip --- components/liquidity/lands.tsx | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/components/liquidity/lands.tsx b/components/liquidity/lands.tsx index 9e3eb1a2..c8a6149e 100644 --- a/components/liquidity/lands.tsx +++ b/components/liquidity/lands.tsx @@ -1,3 +1,4 @@ +import { useState } from 'react'; import { Slider } from '@components/ui/slider'; import Link from 'next/link'; import { Button } from '@components/ui/button'; @@ -12,8 +13,18 @@ const LandControls = ({ metadata, hadLand }: any) => { - const hasRequiredTokens = Math.abs(min) !== Math.abs(max) + const hasRequiredTokens = Math.abs(min) !== Math.abs(max); + const [manualInput, setManualInput] = useState(tokensSelected); + const handleInputChange = (e: React.ChangeEvent) => { + let value = parseFloat(e.target.value); + if (isNaN(value)) { + value = 0; + } + value = Math.max(min, Math.min(value, max)); + setManualInput(value); + onSetTokensSelected(value); + }; return (
@@ -30,9 +41,26 @@ const LandControls = ({ max={max} step={1} className="w-full" - onValueChange={(v: any) => onSetTokensSelected(v[0])} + onValueChange={(v: any) => { + setManualInput(v[0]); + onSetTokensSelected(v[0]); + }} />
+
+ + + {metadata.wraps.symbol} +
}
@@ -49,4 +77,4 @@ const LandControls = ({ ) } -export default LandControls \ No newline at end of file +export default LandControls; From 3b801ccdc4d1a2c2cdc6f93168fca7ee123a8164 Mon Sep 17 00:00:00 2001 From: firerum Date: Thu, 22 Aug 2024 15:34:36 +0100 Subject: [PATCH 02/15] tweaked the code to handle both slider and manual input --- components/liquidity/lands.tsx | 84 +++++++++++++++++++--------------- 1 file changed, 46 insertions(+), 38 deletions(-) diff --git a/components/liquidity/lands.tsx b/components/liquidity/lands.tsx index c8a6149e..705f0a8c 100644 --- a/components/liquidity/lands.tsx +++ b/components/liquidity/lands.tsx @@ -13,55 +13,63 @@ const LandControls = ({ metadata, hadLand }: any) => { - const hasRequiredTokens = Math.abs(min) !== Math.abs(max); - const [manualInput, setManualInput] = useState(tokensSelected); + const tokenPrecision = Math.pow(10, metadata.wraps.decimals); + const [manualInput, setManualInput] = useState(tokensSelected / tokenPrecision); const handleInputChange = (e: React.ChangeEvent) => { let value = parseFloat(e.target.value); if (isNaN(value)) { value = 0; } - value = Math.max(min, Math.min(value, max)); + value = Math.max(min / tokenPrecision, Math.min(value, max / tokenPrecision)); setManualInput(value); - onSetTokensSelected(value); + onSetTokensSelected(value * tokenPrecision); + }; + + const handleSliderChange = (value: number[]) => { + setManualInput(value[0] / tokenPrecision); + onSetTokensSelected(value[0]); }; return (
- {hasRequiredTokens &&
-
-
Token Amount
-
{Math.abs(tokensSelected) / Math.pow(10, metadata.wraps.decimals)} {metadata.wraps.symbol}
-
-
- { - setManualInput(v[0]); - onSetTokensSelected(v[0]); - }} - /> -
+ {Math.abs(min) !== Math.abs(max) && (
- - - {metadata.wraps.symbol} +
+
Token Amount
+
{(tokensSelected / tokenPrecision).toLocaleString()} {metadata.wraps.symbol}
+
+
+ +
+
+ +
+ + {metadata.wraps.symbol} +
+
-
} + )}
- ) -} + ); +}; export default LandControls; From f3edb7f66c43314ecd200400c07e48d6fe859513 Mon Sep 17 00:00:00 2001 From: Ross Ragsdale Date: Thu, 22 Aug 2024 11:07:46 -0500 Subject: [PATCH 03/15] :art: Update --- pages/quest-deployer/nfts.tsx | 37 ++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/pages/quest-deployer/nfts.tsx b/pages/quest-deployer/nfts.tsx index 99ced002..92576031 100644 --- a/pages/quest-deployer/nfts.tsx +++ b/pages/quest-deployer/nfts.tsx @@ -25,11 +25,12 @@ const proposalFormSchema = z.object({ collectionImage: z.string().url("Must be a valid URL"), energyRequired: z.coerce.number().min(1, "Amount must be at least 1"), nftName: z.string(), + stxPerMint: z.coerce.number().min(0.000001, "Amount must be at least 0.000001"), }) type ProposalFormValues = z.infer -const generateTemplate = ({ contractAddress, totalSupply, stxAddress, description, energyRequired, nftName }: ProposalFormValues) => { +const generateTemplate = ({ contractAddress, totalSupply, stxAddress, description, energyRequired, nftName, stxPerMint }: ProposalFormValues) => { // Your template generation logic here return `;; Description: ;; ${description} @@ -46,10 +47,10 @@ const generateTemplate = ({ contractAddress, totalSupply, stxAddress, descriptio ;; Define constants (define-constant COLLECTION_LIMIT u${totalSupply}) ;; Limit to series of ${totalSupply} (define-constant ENERGY_PER_NFT u${energyRequired}) ;; ${energyRequired} energy per NFT -(define-constant STX_PER_MINT u1000000) ;; 1 STX per MINT for DAO +(define-constant STX_PER_MINT u${stxPerMint * 1000000}) ;; 1 STX per MINT for DAO (define-constant MAX_NFTS_PER_TX u4) ;; Maximum 4 NFTs per transaction (define-constant OWNER '${stxAddress}) ;; Collection creator -(define-constant CHA_AMOUNT u5000000) ;; 5 CHA per mint to creator +(define-constant CHA_AMOUNT (* u5 STX_PER_MINT)) ;; 5 CHA per mint to creator (define-constant ERR_UNAUTHORIZED (err u100)) (define-constant ERR_NOT_TOKEN_OWNER (err u101)) @@ -445,27 +446,27 @@ export default function NftTemplate({ form: parentForm, onFormChange }: any) { name={`energyRequired`} render={({ field }) => ( - Energy Required per NFT Minted + Energy Required to Mint - + + + + + )} + /> + ( + + Cost to Mint (STX) + + )} /> - {/* ( - - Amount - - - - - - )} - /> */} {/* + + + {!isMintedOut && stxAddress && + + } + + {'quest-background-image'} +
+ + + + + ); +} \ No newline at end of file diff --git a/pages/quests/index.tsx b/pages/quests/index.tsx index e10188b5..0a711a98 100644 --- a/pages/quests/index.tsx +++ b/pages/quests/index.tsx @@ -21,6 +21,7 @@ import mooningSharkIcon from '@public/quests/mooning-shark/mooningshark-icon.jpe import mooningSharkCard from '@public/quests/mooning-shark/mooning-shark-card.png' import krakenLottoIcon from '@public/quests/raven-raffle/ticket.png' import krakenLottoCard from '@public/quests/raven-raffle/kraken-lotto.png' +import pixelRozar from '@public/quests/pixel-rozar/pixel-rozar.png' export const getStaticProps: GetStaticProps = async () => { // get all quests from db @@ -62,6 +63,13 @@ export const getStaticProps: GetStaticProps = async () => { image: krakenLottoIcon, cardImage: krakenLottoCard, }, + { + name: `Mint a Pixel Rozar`, + description: "Collect a bunch of completely useless stickers.", + ca: "SP2ZNGJ85ENDY6QRHQ5P2D4FXKGZWCKTB2T0Z55KS.pixel-rozar", + image: pixelRozar, + cardImage: 'https://media.tenor.com/qwMy5HS9LIYAAAAM/funny-corgi-lol-moment.gif', + }, { name: `King of the Hill`, description: "Team up with your community to claim the hill.", From 5c77f34744a6942a474407f8fd7a1f45c4dd3ce8 Mon Sep 17 00:00:00 2001 From: Ross Ragsdale Date: Thu, 22 Aug 2024 12:40:35 -0500 Subject: [PATCH 07/15] :art: Update --- .../SP2ZNGJ85ENDY6QRHQ5P2D4FXKGZWCKTB2T0Z55KS.pixel-rozar.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pages/quests/SP2ZNGJ85ENDY6QRHQ5P2D4FXKGZWCKTB2T0Z55KS.pixel-rozar.tsx b/pages/quests/SP2ZNGJ85ENDY6QRHQ5P2D4FXKGZWCKTB2T0Z55KS.pixel-rozar.tsx index 9f63b286..19644d76 100644 --- a/pages/quests/SP2ZNGJ85ENDY6QRHQ5P2D4FXKGZWCKTB2T0Z55KS.pixel-rozar.tsx +++ b/pages/quests/SP2ZNGJ85ENDY6QRHQ5P2D4FXKGZWCKTB2T0Z55KS.pixel-rozar.tsx @@ -62,7 +62,6 @@ export async function getServerSideProps(ctx: GetServerSidePropsContext) { const nftCollectionMetadata = await getNftCollectionMetadata('SP2ZNGJ85ENDY6QRHQ5P2D4FXKGZWCKTB2T0Z55KS.pixel-rozar') - console.log(nftCollectionMetadata) // const state = await getDehydratedStateFromSession(ctx) as string // const exp = await getTokenBalance('SP2ZNGJ85ENDY6QRHQ5P2D4FXKGZWCKTB2T0Z55KS.experience', parseAddress(state)) @@ -124,7 +123,7 @@ export default function SpellScrollFireBolt({ lands, nftCollectionMetadata }: Pr
{isMintedOut ? `Minted Out` : `Minting Now`}
-
{nftCollectionMetadata.properties.minted} / {nftCollectionMetadata.properties.total_supply}
+
{nftCollectionMetadata.properties.minted || 0} / {nftCollectionMetadata.properties.total_supply}
From 31cab5cea733bfc3db2ef5fa35008f41bac51aee Mon Sep 17 00:00:00 2001 From: Ross Ragsdale Date: Thu, 22 Aug 2024 12:45:44 -0500 Subject: [PATCH 08/15] :art: Update --- .../SP2ZNGJ85ENDY6QRHQ5P2D4FXKGZWCKTB2T0Z55KS.pixel-rozar.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/quests/SP2ZNGJ85ENDY6QRHQ5P2D4FXKGZWCKTB2T0Z55KS.pixel-rozar.tsx b/pages/quests/SP2ZNGJ85ENDY6QRHQ5P2D4FXKGZWCKTB2T0Z55KS.pixel-rozar.tsx index 19644d76..267615cf 100644 --- a/pages/quests/SP2ZNGJ85ENDY6QRHQ5P2D4FXKGZWCKTB2T0Z55KS.pixel-rozar.tsx +++ b/pages/quests/SP2ZNGJ85ENDY6QRHQ5P2D4FXKGZWCKTB2T0Z55KS.pixel-rozar.tsx @@ -93,7 +93,7 @@ export default function SpellScrollFireBolt({ lands, nftCollectionMetadata }: Pr const { stxAddress } = useAccount() const title = "Mint a Pixel Rozar"; - const subtitle = 'Claim a completely useless sticker.'; + const subtitle = 'Claim a completely pointless sticker.'; const fadeIn = { hidden: { opacity: 0 }, From 3e7cb89abc8e77653b76064fef80c93552969572 Mon Sep 17 00:00:00 2001 From: Ross Ragsdale Date: Thu, 22 Aug 2024 12:48:04 -0500 Subject: [PATCH 09/15] :art: Update --- .../SP2ZNGJ85ENDY6QRHQ5P2D4FXKGZWCKTB2T0Z55KS.pixel-rozar.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/quests/SP2ZNGJ85ENDY6QRHQ5P2D4FXKGZWCKTB2T0Z55KS.pixel-rozar.tsx b/pages/quests/SP2ZNGJ85ENDY6QRHQ5P2D4FXKGZWCKTB2T0Z55KS.pixel-rozar.tsx index 267615cf..02ad9689 100644 --- a/pages/quests/SP2ZNGJ85ENDY6QRHQ5P2D4FXKGZWCKTB2T0Z55KS.pixel-rozar.tsx +++ b/pages/quests/SP2ZNGJ85ENDY6QRHQ5P2D4FXKGZWCKTB2T0Z55KS.pixel-rozar.tsx @@ -86,7 +86,7 @@ type Props = { export default function SpellScrollFireBolt({ lands, nftCollectionMetadata }: Props) { const meta = { title: "Charisma | Mint a Pixel Rozar", - description: META_DESCRIPTION, + description: "Collect a bunch of completely useless stickers.", image: '/quests/pixel-rozar/pixel-rozar.png' }; From 29062ad2e7fabf6b26c70e4c9a515b53b8ccfe41 Mon Sep 17 00:00:00 2001 From: Ross Ragsdale Date: Thu, 22 Aug 2024 13:03:25 -0500 Subject: [PATCH 10/15] :art: Update --- components/quest/token-select-dialog.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/components/quest/token-select-dialog.tsx b/components/quest/token-select-dialog.tsx index 039bc745..f36ef6f5 100644 --- a/components/quest/token-select-dialog.tsx +++ b/components/quest/token-select-dialog.tsx @@ -69,16 +69,16 @@ export const TokenSelectDialog = ({ lands, contractId, buttonText = 'Complete Qu {lands.map((land: any) => ( -
+
{'token-logo'} (land.whitelisted && !tapped[land.id] && tap(land.id))} - className={`z-20 border rounded-full h-32 w-32 ${(land.whitelisted && !tapped[land.id]) && 'group-hover/token:z-40 group-hover/token:shadow-xl group-hover/token:scale-110 transition-all'}`} + onClick={() => (land.whitelisted && !tapped[land.id] && land.balances?.energy && tap(land.id))} + className={`z-20 border rounded-full h-32 w-32 ${(land.whitelisted && !tapped[land.id] && land.balances?.energy) && 'group-hover/token:z-40 group-hover/token:shadow-xl group-hover/token:scale-110 transition-all'}`} /> -
+
{numeral(land.balances?.energy).format('0a')} ⚡
From ea331d2d159eeb01cb7156282ea53d260b599b77 Mon Sep 17 00:00:00 2001 From: Ross Ragsdale Date: Thu, 22 Aug 2024 13:12:14 -0500 Subject: [PATCH 11/15] :art: Update --- lib/events/utils.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/events/utils.ts b/lib/events/utils.ts index 20fab6e2..070e9cb0 100644 --- a/lib/events/utils.ts +++ b/lib/events/utils.ts @@ -85,7 +85,7 @@ export const handleContractEvent = async (event: any, builder: any) => { builder.addField({ name: `${symbol} ${event.type}`, - value: `${event.data.recipient} gained ${event.data.amount / Math.pow(10, 6)} experience.` + value: JSON.stringify(event.data).slice(0, 300) }); } @@ -103,7 +103,7 @@ export const handleContractEvent = async (event: any, builder: any) => { builder.addField({ name: `${symbol} ${event.type}`, - value: `${event.data.recipient} gained ${event.data.amount / Math.pow(10, 6)} experience.` + value: JSON.stringify(event.data).slice(0, 300) }); } @@ -119,7 +119,7 @@ export const handleContractEvent = async (event: any, builder: any) => { builder.addField({ name: `${symbol} ${event.type}`, - value: `${event.data.recipient} gained ${event.data.amount / Math.pow(10, 6)} experience.` + value: JSON.stringify(event.data).slice(0, 300) }); } From 117dc3e5af9ca7d814b5aa306158aa399430e634 Mon Sep 17 00:00:00 2001 From: Ross Ragsdale Date: Thu, 22 Aug 2024 13:13:49 -0500 Subject: [PATCH 12/15] :art: Update --- lib/events/utils.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/events/utils.ts b/lib/events/utils.ts index 070e9cb0..5c684c6c 100644 --- a/lib/events/utils.ts +++ b/lib/events/utils.ts @@ -117,6 +117,7 @@ export const handleContractEvent = async (event: any, builder: any) => { nftMetadata.properties.minted = Number(tokensMinted) await setNftCollectionMetadata(pixelRozarContractId, nftMetadata) + builder.setThumbnail({ url: 'https://beta.charisma.rocks/quests/pixel-rozar/pixel-rozar.png' }) builder.addField({ name: `${symbol} ${event.type}`, value: JSON.stringify(event.data).slice(0, 300) From 19965bc9e89b0a63efcc3bb576772ba6b387fbc1 Mon Sep 17 00:00:00 2001 From: Ross Ragsdale Date: Thu, 22 Aug 2024 13:14:21 -0500 Subject: [PATCH 13/15] :art: Update --- pages/api/v0/lands/index.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pages/api/v0/lands/index.ts b/pages/api/v0/lands/index.ts index 6b3b4899..b81010a1 100644 --- a/pages/api/v0/lands/index.ts +++ b/pages/api/v0/lands/index.ts @@ -82,8 +82,7 @@ export default async function landsIndexApi( if (tx.metadata.success) { let builder = new EmbedBuilder() // send message to discord - builder.setAuthor({ name: `Stake-to-Earn Pools`, icon_url: 'https://beta.charisma.rocks/charisma.png', url: 'https://beta.charisma.rocks/staking' }) - builder.setTitle('New Event') + builder.setAuthor({ name: `Charisma Event`, icon_url: 'https://beta.charisma.rocks/charisma.png', url: 'https://beta.charisma.rocks/staking' }) builder.setThumbnail({ url: 'https://beta.charisma.rocks/charisma.png' }) for (const event of tx.metadata.receipt.events) { From f14c15a20fc624636a198c7ebd515f08af2235d3 Mon Sep 17 00:00:00 2001 From: Ross Ragsdale Date: Thu, 22 Aug 2024 13:38:22 -0500 Subject: [PATCH 14/15] :art: Update --- .../SP2ZNGJ85ENDY6QRHQ5P2D4FXKGZWCKTB2T0Z55KS.pixel-rozar.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pages/quests/SP2ZNGJ85ENDY6QRHQ5P2D4FXKGZWCKTB2T0Z55KS.pixel-rozar.tsx b/pages/quests/SP2ZNGJ85ENDY6QRHQ5P2D4FXKGZWCKTB2T0Z55KS.pixel-rozar.tsx index 02ad9689..fc5d6795 100644 --- a/pages/quests/SP2ZNGJ85ENDY6QRHQ5P2D4FXKGZWCKTB2T0Z55KS.pixel-rozar.tsx +++ b/pages/quests/SP2ZNGJ85ENDY6QRHQ5P2D4FXKGZWCKTB2T0Z55KS.pixel-rozar.tsx @@ -203,9 +203,8 @@ export default function SpellScrollFireBolt({ lands, nftCollectionMetadata }: Pr
  • Fixed Supply: Only 10,000 stickers will be minted
  • +
  • Mint Limit: Up to 20 stickers can be minted per tx
  • Utility: Absolutely none
  • -
  • Mint Limit: Up to 20 stickers can be minted per transaction
  • -
  • Tap Limit: Only 1 mint transaction per block / per token type
From 069303b2df115094641927014a746ec138f0b499 Mon Sep 17 00:00:00 2001 From: Ross Ragsdale Date: Thu, 22 Aug 2024 13:48:39 -0500 Subject: [PATCH 15/15] :art: Update --- .../SP2ZNGJ85ENDY6QRHQ5P2D4FXKGZWCKTB2T0Z55KS.pixel-rozar.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pages/quests/SP2ZNGJ85ENDY6QRHQ5P2D4FXKGZWCKTB2T0Z55KS.pixel-rozar.tsx b/pages/quests/SP2ZNGJ85ENDY6QRHQ5P2D4FXKGZWCKTB2T0Z55KS.pixel-rozar.tsx index fc5d6795..91fc5d7e 100644 --- a/pages/quests/SP2ZNGJ85ENDY6QRHQ5P2D4FXKGZWCKTB2T0Z55KS.pixel-rozar.tsx +++ b/pages/quests/SP2ZNGJ85ENDY6QRHQ5P2D4FXKGZWCKTB2T0Z55KS.pixel-rozar.tsx @@ -235,7 +235,8 @@ export default function SpellScrollFireBolt({ lands, nftCollectionMetadata }: Pr className={cn( 'object-cover', 'opacity-10', - 'aspect-square', + 'sm:aspect-square', + 'aspect-[2/5]', 'scale-110', 'flex', 'z-10',