diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f8dedea..0afded6 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -26,8 +26,8 @@ jobs: yarn yarn build env: - ALCHEMY_KEY: ${{ secrets.ALCHEMY_KEY }} - + ALCHEMY_KEY: ${{ secrets.ALCHEMY_KEY }} + - name: Upload build artifact uses: actions/upload-artifact@v4 with: diff --git a/cypress/scripts/anvil.sh b/cypress/scripts/anvil.sh new file mode 100644 index 0000000..73f0eeb --- /dev/null +++ b/cypress/scripts/anvil.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +# start anvil +anvil --block-time 5 --chain-id 31337 --rpc-url https://rpc.ankr.com/eth \ No newline at end of file diff --git a/static/abis.ts b/static/abis.ts index 7200721..5efb0a8 100644 --- a/static/abis.ts +++ b/static/abis.ts @@ -1,173 +1,173 @@ export const erc20Abi = [ - { inputs: [{ internalType: "address", name: "_manager", type: "address" }], stateMutability: "nonpayable", type: "constructor" }, - { - anonymous: false, - inputs: [ - { indexed: true, internalType: "address", name: "owner", type: "address" }, - { indexed: true, internalType: "address", name: "spender", type: "address" }, - { indexed: false, internalType: "uint256", name: "value", type: "uint256" }, - ], - name: "Approval", - type: "event", - }, - { - anonymous: false, - inputs: [ - { indexed: true, internalType: "address", name: "_burned", type: "address" }, - { indexed: false, internalType: "uint256", name: "_amount", type: "uint256" }, - ], - name: "Burning", - type: "event", - }, - { - anonymous: false, - inputs: [ - { indexed: true, internalType: "address", name: "_to", type: "address" }, - { indexed: true, internalType: "address", name: "_minter", type: "address" }, - { indexed: false, internalType: "uint256", name: "_amount", type: "uint256" }, - ], - name: "Minting", - type: "event", - }, - { anonymous: false, inputs: [{ indexed: false, internalType: "address", name: "account", type: "address" }], name: "Paused", type: "event" }, - { - anonymous: false, - inputs: [ - { indexed: true, internalType: "address", name: "from", type: "address" }, - { indexed: true, internalType: "address", name: "to", type: "address" }, - { indexed: false, internalType: "uint256", name: "value", type: "uint256" }, - ], - name: "Transfer", - type: "event", - }, - { anonymous: false, inputs: [{ indexed: false, internalType: "address", name: "account", type: "address" }], name: "Unpaused", type: "event" }, - { inputs: [], name: "DOMAIN_SEPARATOR", outputs: [{ internalType: "bytes32", name: "", type: "bytes32" }], stateMutability: "view", type: "function" }, - { inputs: [], name: "PERMIT_TYPEHASH", outputs: [{ internalType: "bytes32", name: "", type: "bytes32" }], stateMutability: "view", type: "function" }, - { - inputs: [ - { internalType: "address", name: "owner", type: "address" }, - { internalType: "address", name: "spender", type: "address" }, - ], - name: "allowance", - outputs: [{ internalType: "uint256", name: "", type: "uint256" }], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { internalType: "address", name: "spender", type: "address" }, - { internalType: "uint256", name: "amount", type: "uint256" }, - ], - name: "approve", - outputs: [{ internalType: "bool", name: "", type: "bool" }], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [{ internalType: "address", name: "account", type: "address" }], - name: "balanceOf", - outputs: [{ internalType: "uint256", name: "", type: "uint256" }], - stateMutability: "view", - type: "function", - }, - { inputs: [{ internalType: "uint256", name: "amount", type: "uint256" }], name: "burn", outputs: [], stateMutability: "nonpayable", type: "function" }, - { - inputs: [ - { internalType: "address", name: "account", type: "address" }, - { internalType: "uint256", name: "amount", type: "uint256" }, - ], - name: "burnFrom", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { inputs: [], name: "decimals", outputs: [{ internalType: "uint8", name: "", type: "uint8" }], stateMutability: "view", type: "function" }, - { - inputs: [ - { internalType: "address", name: "spender", type: "address" }, - { internalType: "uint256", name: "subtractedValue", type: "uint256" }, - ], - name: "decreaseAllowance", - outputs: [{ internalType: "bool", name: "", type: "bool" }], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { internalType: "address", name: "spender", type: "address" }, - { internalType: "uint256", name: "addedValue", type: "uint256" }, - ], - name: "increaseAllowance", - outputs: [{ internalType: "bool", name: "", type: "bool" }], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [], - name: "manager", - outputs: [{ internalType: "contract UbiquityAlgorithmicDollarManager", name: "", type: "address" }], - stateMutability: "view", - type: "function", - }, - { - inputs: [ - { internalType: "address", name: "to", type: "address" }, - { internalType: "uint256", name: "amount", type: "uint256" }, - ], - name: "mint", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { inputs: [], name: "name", outputs: [{ internalType: "string", name: "", type: "string" }], stateMutability: "view", type: "function" }, - { - inputs: [{ internalType: "address", name: "", type: "address" }], - name: "nonces", - outputs: [{ internalType: "uint256", name: "", type: "uint256" }], - stateMutability: "view", - type: "function", - }, - { inputs: [], name: "pause", outputs: [], stateMutability: "nonpayable", type: "function" }, - { inputs: [], name: "paused", outputs: [{ internalType: "bool", name: "", type: "bool" }], stateMutability: "view", type: "function" }, - { - inputs: [ - { internalType: "address", name: "owner", type: "address" }, - { internalType: "address", name: "spender", type: "address" }, - { internalType: "uint256", name: "value", type: "uint256" }, - { internalType: "uint256", name: "deadline", type: "uint256" }, - { internalType: "uint8", name: "v", type: "uint8" }, - { internalType: "bytes32", name: "r", type: "bytes32" }, - { internalType: "bytes32", name: "s", type: "bytes32" }, - ], - name: "permit", - outputs: [], - stateMutability: "nonpayable", - type: "function", - }, - { inputs: [{ internalType: "string", name: "newName", type: "string" }], name: "setName", outputs: [], stateMutability: "nonpayable", type: "function" }, - { inputs: [{ internalType: "string", name: "newSymbol", type: "string" }], name: "setSymbol", outputs: [], stateMutability: "nonpayable", type: "function" }, - { inputs: [], name: "symbol", outputs: [{ internalType: "string", name: "", type: "string" }], stateMutability: "view", type: "function" }, - { inputs: [], name: "totalSupply", outputs: [{ internalType: "uint256", name: "", type: "uint256" }], stateMutability: "view", type: "function" }, - { - inputs: [ - { internalType: "address", name: "recipient", type: "address" }, - { internalType: "uint256", name: "amount", type: "uint256" }, - ], - name: "transfer", - outputs: [{ internalType: "bool", name: "", type: "bool" }], - stateMutability: "nonpayable", - type: "function", - }, - { - inputs: [ - { internalType: "address", name: "sender", type: "address" }, - { internalType: "address", name: "recipient", type: "address" }, - { internalType: "uint256", name: "amount", type: "uint256" }, - ], - name: "transferFrom", - outputs: [{ internalType: "bool", name: "", type: "bool" }], - stateMutability: "nonpayable", - type: "function", - }, - { inputs: [], name: "unpause", outputs: [], stateMutability: "nonpayable", type: "function" }, - ]; + { inputs: [{ internalType: "address", name: "_manager", type: "address" }], stateMutability: "nonpayable", type: "constructor" }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: "address", name: "owner", type: "address" }, + { indexed: true, internalType: "address", name: "spender", type: "address" }, + { indexed: false, internalType: "uint256", name: "value", type: "uint256" }, + ], + name: "Approval", + type: "event", + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: "address", name: "_burned", type: "address" }, + { indexed: false, internalType: "uint256", name: "_amount", type: "uint256" }, + ], + name: "Burning", + type: "event", + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: "address", name: "_to", type: "address" }, + { indexed: true, internalType: "address", name: "_minter", type: "address" }, + { indexed: false, internalType: "uint256", name: "_amount", type: "uint256" }, + ], + name: "Minting", + type: "event", + }, + { anonymous: false, inputs: [{ indexed: false, internalType: "address", name: "account", type: "address" }], name: "Paused", type: "event" }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: "address", name: "from", type: "address" }, + { indexed: true, internalType: "address", name: "to", type: "address" }, + { indexed: false, internalType: "uint256", name: "value", type: "uint256" }, + ], + name: "Transfer", + type: "event", + }, + { anonymous: false, inputs: [{ indexed: false, internalType: "address", name: "account", type: "address" }], name: "Unpaused", type: "event" }, + { inputs: [], name: "DOMAIN_SEPARATOR", outputs: [{ internalType: "bytes32", name: "", type: "bytes32" }], stateMutability: "view", type: "function" }, + { inputs: [], name: "PERMIT_TYPEHASH", outputs: [{ internalType: "bytes32", name: "", type: "bytes32" }], stateMutability: "view", type: "function" }, + { + inputs: [ + { internalType: "address", name: "owner", type: "address" }, + { internalType: "address", name: "spender", type: "address" }, + ], + name: "allowance", + outputs: [{ internalType: "uint256", name: "", type: "uint256" }], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { internalType: "address", name: "spender", type: "address" }, + { internalType: "uint256", name: "amount", type: "uint256" }, + ], + name: "approve", + outputs: [{ internalType: "bool", name: "", type: "bool" }], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [{ internalType: "address", name: "account", type: "address" }], + name: "balanceOf", + outputs: [{ internalType: "uint256", name: "", type: "uint256" }], + stateMutability: "view", + type: "function", + }, + { inputs: [{ internalType: "uint256", name: "amount", type: "uint256" }], name: "burn", outputs: [], stateMutability: "nonpayable", type: "function" }, + { + inputs: [ + { internalType: "address", name: "account", type: "address" }, + { internalType: "uint256", name: "amount", type: "uint256" }, + ], + name: "burnFrom", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { inputs: [], name: "decimals", outputs: [{ internalType: "uint8", name: "", type: "uint8" }], stateMutability: "view", type: "function" }, + { + inputs: [ + { internalType: "address", name: "spender", type: "address" }, + { internalType: "uint256", name: "subtractedValue", type: "uint256" }, + ], + name: "decreaseAllowance", + outputs: [{ internalType: "bool", name: "", type: "bool" }], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { internalType: "address", name: "spender", type: "address" }, + { internalType: "uint256", name: "addedValue", type: "uint256" }, + ], + name: "increaseAllowance", + outputs: [{ internalType: "bool", name: "", type: "bool" }], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "manager", + outputs: [{ internalType: "contract UbiquityAlgorithmicDollarManager", name: "", type: "address" }], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { internalType: "address", name: "to", type: "address" }, + { internalType: "uint256", name: "amount", type: "uint256" }, + ], + name: "mint", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { inputs: [], name: "name", outputs: [{ internalType: "string", name: "", type: "string" }], stateMutability: "view", type: "function" }, + { + inputs: [{ internalType: "address", name: "", type: "address" }], + name: "nonces", + outputs: [{ internalType: "uint256", name: "", type: "uint256" }], + stateMutability: "view", + type: "function", + }, + { inputs: [], name: "pause", outputs: [], stateMutability: "nonpayable", type: "function" }, + { inputs: [], name: "paused", outputs: [{ internalType: "bool", name: "", type: "bool" }], stateMutability: "view", type: "function" }, + { + inputs: [ + { internalType: "address", name: "owner", type: "address" }, + { internalType: "address", name: "spender", type: "address" }, + { internalType: "uint256", name: "value", type: "uint256" }, + { internalType: "uint256", name: "deadline", type: "uint256" }, + { internalType: "uint8", name: "v", type: "uint8" }, + { internalType: "bytes32", name: "r", type: "bytes32" }, + { internalType: "bytes32", name: "s", type: "bytes32" }, + ], + name: "permit", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { inputs: [{ internalType: "string", name: "newName", type: "string" }], name: "setName", outputs: [], stateMutability: "nonpayable", type: "function" }, + { inputs: [{ internalType: "string", name: "newSymbol", type: "string" }], name: "setSymbol", outputs: [], stateMutability: "nonpayable", type: "function" }, + { inputs: [], name: "symbol", outputs: [{ internalType: "string", name: "", type: "string" }], stateMutability: "view", type: "function" }, + { inputs: [], name: "totalSupply", outputs: [{ internalType: "uint256", name: "", type: "uint256" }], stateMutability: "view", type: "function" }, + { + inputs: [ + { internalType: "address", name: "recipient", type: "address" }, + { internalType: "uint256", name: "amount", type: "uint256" }, + ], + name: "transfer", + outputs: [{ internalType: "bool", name: "", type: "bool" }], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { internalType: "address", name: "sender", type: "address" }, + { internalType: "address", name: "recipient", type: "address" }, + { internalType: "uint256", name: "amount", type: "uint256" }, + ], + name: "transferFrom", + outputs: [{ internalType: "bool", name: "", type: "bool" }], + stateMutability: "nonpayable", + type: "function", + }, + { inputs: [], name: "unpause", outputs: [], stateMutability: "nonpayable", type: "function" }, +]; diff --git a/static/main.ts b/static/main.ts index 82e6c76..81ae1e4 100644 --- a/static/main.ts +++ b/static/main.ts @@ -1,6 +1,6 @@ import { createAppKit } from "@reown/appkit"; import { Ethers5Adapter } from "@reown/appkit-adapter-ethers5"; -import { gnosis, mainnet, polygon, optimism, arbitrum, base, bsc, blast, zksync, avalanche, worldchain } from "@reown/appkit/networks"; +import { anvil, gnosis, mainnet, polygon, optimism, arbitrum, base, bsc, blast, zksync, avalanche, worldchain, AppKitNetwork } from "@reown/appkit/networks"; import { ethers } from "ethers"; import { renderErrorInModal } from "./display-popup-modal"; import { updateTokens } from "./populate-dropdown"; @@ -38,9 +38,17 @@ const providersUrl: { [key: string]: string } = { 480: "https://rpc.worldchain.network", }; +let networks: [AppKitNetwork, ...AppKitNetwork[]]; +if (window.location.hostname === "localhost" || window.location.hostname === "0.0.0.0") { + console.log("enabling anvil"); + networks = [anvil, gnosis, mainnet, polygon, optimism, arbitrum, base, bsc, blast, zksync, avalanche, worldchain]; +} else { + networks = [gnosis, mainnet, polygon, optimism, arbitrum, base, bsc, blast, zksync, avalanche, worldchain]; +} + export const appState = createAppKit({ adapters: [new Ethers5Adapter()], - networks: [gnosis, mainnet, polygon, optimism, arbitrum, base, bsc, blast, zksync, avalanche, worldchain], + networks, defaultNetwork: gnosis, metadata, projectId, diff --git a/static/permit2-addresses.ts b/static/permit2-addresses.ts index 61e2bcf..2def68d 100644 --- a/static/permit2-addresses.ts +++ b/static/permit2-addresses.ts @@ -1,21 +1,21 @@ export function getPermit2Address(networkId: number): string | undefined { - switch (networkId) { - case 100: - case 1: - case 42161: - case 10: - case 137: - case 8453: - case 56: - case 43114: - case 42220: - case 81457: - case 7777777: - case 480: - return "0x000000000022D473030F116dDEE9F6B43aC78BA3"; - case 324: - return "0x0000000000225e31d15943971f47ad3022f714fa"; - default: - return undefined; - } + switch (networkId) { + case 100: + case 1: + case 42161: + case 10: + case 137: + case 8453: + case 56: + case 43114: + case 42220: + case 81457: + case 7777777: + case 480: + return "0x000000000022D473030F116dDEE9F6B43aC78BA3"; + case 324: + return "0x0000000000225e31d15943971f47ad3022f714fa"; + default: + return undefined; + } } diff --git a/static/style.css b/static/style.css index b8167ad..9f88699 100644 --- a/static/style.css +++ b/static/style.css @@ -189,24 +189,24 @@ header { padding: 50px; } -.approve-header{ +.approve-header { width: 100%; } -.approve-content{ +.approve-content { display: flex; flex-direction: column; width: 100%; padding: 40px 0; } -.current-allowance{ +.current-allowance { padding: 10px; font-size: 1.1rem; color: #ddd; } -.approve-selectors{ +.approve-selectors { width: 100%; display: flex; justify-content: left; @@ -239,7 +239,8 @@ header { overflow: ellipsis; } -.amount-selector:hover, .token-selector:hover { +.amount-selector:hover, +.token-selector:hover { border: 1px solid rgba(255, 255, 255, 0.2); } @@ -248,7 +249,7 @@ header { position: relative; bottom: 0; width: 100%; - gap: 10px + gap: 10px; } .approve-footer button { @@ -278,4 +279,4 @@ h1 { p { margin: 0; font-size: 1rem; -} \ No newline at end of file +}