diff --git a/src/abi/main.json b/src/abi/main.json
index 427259f..6d0babe 100644
--- a/src/abi/main.json
+++ b/src/abi/main.json
@@ -390,6 +390,25 @@
"stateMutability": "view",
"type": "function"
},
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_address",
+ "type": "address"
+ }
+ ],
+ "name": "unaboomersMinted",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
{
"inputs": [],
"name": "unaboomersRadicalized",
diff --git a/src/index.js b/src/index.js
index a38d94d..79cf7ff 100644
--- a/src/index.js
+++ b/src/index.js
@@ -37,24 +37,29 @@ const wagmiClient = createClient({
webSocketProvider
});
+let chainId;
+let contractAddress;
+
+if (process.env.CHAIN == '5') {
+ chainId = 5;
+ contractAddress = '0x31205d753eC2784160F70E6E6177581c7721bD0E';
+} else if (process.env.CHAIN == '1') {
+ chainId = 1;
+ contractAddress = '';
+} else {
+ chainId = 1337;
+ contractAddress = '0x5FbDB2315678afecb367f032d93F642f64180aa3';
+}
+
ReactDOM.createRoot(document.getElementById("root")).render(
-
+
);
-
-
-// goerli
-// 5
-// 0x31205d753ec2784160f70e6e6177581c7721bd0e
-
-// local
-// 1337
-// 0x5FbDB2315678afecb367f032d93F642f64180aa3
\ No newline at end of file
diff --git a/src/template/Sections.jsx b/src/template/Sections.jsx
index f7e96f7..ae43ad4 100644
--- a/src/template/Sections.jsx
+++ b/src/template/Sections.jsx
@@ -124,7 +124,7 @@ class GameMap extends React.Component {
Metaverse Map
{this.props.unaboomersRadicalized} / {this.props.unaboomerMaxSupply} Unaboomers radicalized and ready to terrorize the metaverse.
- {this.props.unaboomerMaxSupply - this.props.unaboomerMaxSurvivorCount} potential Unaboomers remain.
+ {this.props.unaboomerMaxSupply - this.props.unaboomerMaxSurvivorCount - this.props.unaboomersRadicalized} potential Unaboomers remain.
This round will end and the project will fully start when {this.props.unaboomerMaxSurvivorCount} or less Unaboomers remain standing.
{this.props.unaboomersRadicalized > 0 && (
@@ -174,7 +174,7 @@ function Section3(props) {
sendBombPreviewAmount: 1,
unaboomerPrice: 0,
bombPrice: ethers.utils.parseEther('.01'),
- unaboomerBalance: 0,
+ unaboomersMinted: 0,
bombBalance: 0,
unaboomersRadicalized: 0,
bombsAssembled: 0,
@@ -186,7 +186,8 @@ function Section3(props) {
unaboomerMaxSupply: 0,
unaboomerMaxSurvivorCount: 0,
unaboomerMaxMintPerWallet: 0,
- readWTF: false
+ readWTF: false,
+ balancesFetched: false
});
function handleStateChange(obj) {
setOptions(preState => ({...preState , ...obj}));
@@ -238,7 +239,7 @@ function Section3(props) {
contracts: [
{
...defOpt,
- functionName: 'unaboomerBalance',
+ functionName: 'unaboomersMinted',
args: [address]
},
{
@@ -271,13 +272,14 @@ function Section3(props) {
cacheTime: 6_000,
onSuccess(data) {
handleStateChange({
- unaboomerBalance: Number(data[0]),
+ unaboomersMinted: Number(data[0]),
bombBalance: Number(data[1]),
unaboomersRadicalized: Number(data[2]),
bombsAssembled: Number(data[3]),
bombsExploded: Number(data[4]),
unaboomersKilled: Number(data[5]),
- leaderboardPointer: Number(data[6])
+ leaderboardPointer: Number(data[6]),
+ balancesFetched: true
});
}
});
@@ -312,7 +314,7 @@ function Section3(props) {
const radicalizeBoomersPrepare = usePrepareContractWrite({
address: contractAddress,
abi: MainABI,
- enabled: isConnected,
+ enabled: isConnected && options.unaboomersMinted < options.unaboomerMaxMintPerWallet && options.unaboomerAmount > 0 && options.balancesFetched,
functionName: 'radicalizeBoomers',
args: [options.unaboomerAmount],
overrides: {
@@ -320,11 +322,16 @@ function Section3(props) {
value: BigNumber.from((options.unaboomerPrice * options.unaboomerAmount).toString())
}
});
- const radicalizeBoomersWrite = useContractWrite(radicalizeBoomersPrepare.config);
+ const radicalizeBoomersWrite = useContractWrite({
+ ...radicalizeBoomersPrepare.config,
+ onError(data) {
+ if (data.message.startsWith('user rejected transaction')) NotificationManager.info(`tx cancelled`, 'ok', 4000);
+ }
+ });
const assembleBombsPrepare = usePrepareContractWrite({
address: contractAddress,
abi: MainABI,
- enabled: isConnected,
+ enabled: isConnected && options.bombAmount > 0,
functionName: 'assembleBombs',
args: [options.bombAmount],
overrides: {
@@ -332,16 +339,26 @@ function Section3(props) {
value: BigNumber.from((options.bombPrice * options.bombAmount).toString())
}
});
- const assembleBombsWrite = useContractWrite(assembleBombsPrepare.config);
+ const assembleBombsWrite = useContractWrite({
+ ...assembleBombsPrepare.config,
+ onError(data) {
+ if (data.message.startsWith('user rejected transaction')) NotificationManager.info(`tx cancelled`, 'ok', 4000);
+ }
+ });
const sendBombsPrepare = usePrepareContractWrite({
address: contractAddress,
abi: MainABI,
enabled: isConnected && options.bombBalance > 0,
- staleTime: 2_000,
functionName: 'sendBombs',
+ cacheTime: 1000,
args: [options.sendBombAmount]
});
- const sendBombsWrite = useContractWrite(sendBombsPrepare.config);
+ const sendBombsWrite = useContractWrite({
+ ...sendBombsPrepare.config,
+ onError(data) {
+ if (data.message.startsWith('user rejected transaction')) NotificationManager.info(`tx cancelled`, 'ok', 4000);
+ }
+ });
useWaitForTransaction({
hash: sendBombsWrite.data?.hash,
enabled: sendBombsWrite.status === 'success',
@@ -431,24 +448,30 @@ function Section3(props) {
Radicalize a Boomer
Radicalizing a boomer will mint ERC-721 BOOMR tokens with images of a pixel art Web3 Unaboomers.
-
You have {options.unaboomerBalance} / {options.unaboomerMaxMintPerWallet} BOOMR
+
You have {options.unaboomersMinted} / {options.unaboomerMaxMintPerWallet} BOOMR
- {options.unaboomerBalance < options.unaboomerMaxMintPerWallet && options.unaboomersKilled + options.unaboomersRadicalized < options.unaboomerMaxSupply && (
+ {options.unaboomersMinted < options.unaboomerMaxMintPerWallet && options.unaboomersKilled + options.unaboomersRadicalized < options.unaboomerMaxSupply && (
<>
- radicalizeBoomersWrite.write?.()}>
+ {
+ radicalizeBoomersWrite.write?.();
+ handleStateChange({
+ unaboomerAmount: 1,
+ unaboomerPreviewAmount: 1
+ })
+ }}>
{radicalizeBoomersWrite.isLoading && <>minting {options.unaboomerAmount}>}
{radicalizeBoomersWrite.isIdle && <>mint {options.unaboomerPreviewAmount} ({ethers.utils.formatEther((options.unaboomerPrice * options.unaboomerPreviewAmount).toString())} Ξ)>}
{radicalizeBoomersWrite.isSuccess && <>sent>}
{radicalizeBoomersWrite.isError && <>error>}
-
handleStateChange({unaboomerAmount: v})} onChange={(v) => {
+ handleStateChange({unaboomerAmount: v})} onChange={(v) => {
handleStateChange({unaboomerPreviewAmount: v});
radicalizeBoomersWrite.reset();
}} />
>
- ) || options.unaboomerBalance < options.unaboomerMaxMintPerWallet && options.unaboomersKilled + options.unaboomersRadicalized < options.unaboomerMaxSupply && (
+ ) || options.unaboomersMinted == options.unaboomerMaxMintPerWallet && options.unaboomersKilled + options.unaboomersRadicalized < options.unaboomerMaxSupply && (
max per wallet reached
) || (
max supply reached
@@ -479,7 +502,13 @@ function Section3(props) {
{options.bombBalance > 0 && (<>
- sendBombsWrite.write?.()}>
+ {
+ sendBombsWrite.write?.();
+ handleStateChange({
+ sendBombAmount: 1,
+ sendBombPreviewAmount: 1
+ });
+ }}>
{sendBombsWrite.isLoading && <>sending {options.sendBombAmount}>}
{sendBombsWrite.isIdle && <>send {options.sendBombPreviewAmount} (~0 Ξ)>}
{sendBombsWrite.isSuccess && <>sent>}