diff --git a/.classpath b/.classpath
new file mode 100644
index 0000000..7b278de
--- /dev/null
+++ b/.classpath
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..d46dcb8
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,14 @@
+config
+target
+bin
+*.sh
+*.jar
+*.pl
+*.bak
+node_modules
+package-lock.json
+.algo
+.avm
+.avm/*
+.evm
+.evm/*
diff --git a/.project b/.project
new file mode 100644
index 0000000..5ec4073
--- /dev/null
+++ b/.project
@@ -0,0 +1,23 @@
+
+
+ forestfish
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+
+
+ org.eclipse.m2e.core.maven2Nature
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..f9bcb09
--- /dev/null
+++ b/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/main/java/crypto/forestfish/utils/EVMContractUtils.java=UTF-8
+encoding//src/main/java/crypto/forestfish/utils/EVMUtils.java=UTF-8
+encoding//src/main/resources=UTF-8
+encoding//src/test/java=UTF-8
+encoding/=UTF-8
diff --git a/.settings/org.eclipse.core.runtime.prefs b/.settings/org.eclipse.core.runtime.prefs
new file mode 100644
index 0000000..5a0ad22
--- /dev/null
+++ b/.settings/org.eclipse.core.runtime.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+line.separator=\n
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..af7ce86
--- /dev/null
+++ b/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,16 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=17
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=17
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=17
diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..14b697b
--- /dev/null
+++ b/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..b4b3ee4
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,22 @@
+# Released under MIT License
+
+Copyright (c) 2022 Daniel Dalek
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..d08d5af
--- /dev/null
+++ b/README.md
@@ -0,0 +1,80 @@
+## FORESTFISH
+
+Java wrapper library for EVM compatible blockchains and Algorand.
+
+| ![alt text](https://github.com/p00temkin/forestfish/blob/master/img/forestfishto.png?raw=true) |
+| :--: |
+
+### Why use/contribute to forestFISH?
+
+forestFISH attempts to make it easier to utilize JVM-based web3 SDKs. Typically helper libraries are much more mature for Javascript and are easier to use compared to its Java counterparts. It also provides useful features such as automatic node selection/failover and overall improved error handling.
+
+A simple example of getting the latest block on the POLYGON blockchain is shown below. On launch the connector will automatically grab the RPC node with best performance (based on your connectivity) and print the latest block.
+
+ ```
+ EVMBlockChainConnector connector = new EVMBlockChainConnector(EVMChain.POLYGON);
+ BigInteger latestBlockNR = EVMUtils.getLatestBlockNumber(connector);
+ System.out.println("latestBlockNR: " + latestBlockNR);
+ ```
+
+Similarly for Algorand:
+
+ ```
+ AVMBlockChainConnector connector = new AVMBlockChainConnector(AVMChain.MAINNET);
+ Long lastRound = AVMUtils.getLastRound(connector);
+ System.out.println("lastRound: " + lastRound);
+ ```
+
+If you want to print out an account portfolio across all EVM chains (similar to debank), you can launch an ultraconnector and make a call to getEVMPortfolioForAccount():
+
+ ```
+ // Launch RPC node connectors for all known public chains
+ EVMBlockChainUltraConnector ultra_connector = new EVMBlockChainUltraConnector(BlockchainType.PUBLIC);
+ System.out.println("EVMBlockChainUltraConnector ready ..");
+
+ // Print EVM portfolio, include known NFTs
+ EVMPortfolio evm_chainPortfolio = EVMUtils.getEVMPortfolioForAccount(ultra_connector, public_address);
+ String output = EVMUtils.getEVMPortfolioAsString(evm_chainPortfolio);
+ System.out.println(output);
+ ```
+
+### Building the application
+
+ ```
+ mvn clean package install
+ ```
+
+### How it works
+
+First git clone and install the forestfish library in your local Maven repository
+
+ ```
+ git clone https://github.com/p00temkin/forestfish.git
+ mvn clean package install
+ ```
+
+Next, add a reference to this dependency in your new project pom.xml:
+
+ ```
+
+ crypto.forestfish
+ forestfish
+ 0.0.1-SNAPSHOT
+
+ ```
+
+### Next steps
+- Improved Ethereum and Algorand support
+- Burst/Signum and more
+
+### Support/Donate
+
+To support this project directly:
+
+ ```
+ Ethereum/EVM: forestfish.x / 0x207d907768Df538F32f0F642a281416657692743
+ Algorand: forestfish.x / 3LW6KZ5WZ22KAK4KV2G73H4HL2XBD3PD3Z5ZOSKFWGRWZDB5DTDCXE6NYU
+ ```
+
+Or please consider donating to EFF:
+[Electronic Frontier Foundation](https://supporters.eff.org/donate)
diff --git a/abi/abiAavegotchiDiamond.json b/abi/abiAavegotchiDiamond.json
new file mode 100644
index 0000000..6139eca
--- /dev/null
+++ b/abi/abiAavegotchiDiamond.json
@@ -0,0 +1,7914 @@
+[
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "aavegotchiClaimTime",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "claimTime_",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_owner",
+ "type": "address"
+ }
+ ],
+ "name": "allAavegotchisOfOwner",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "string",
+ "name": "name",
+ "type": "string"
+ },
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "randomNumber",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "status",
+ "type": "uint256"
+ },
+ {
+ "internalType": "int16[6]",
+ "name": "numericTraits",
+ "type": "int16[6]"
+ },
+ {
+ "internalType": "int16[6]",
+ "name": "modifiedNumericTraits",
+ "type": "int16[6]"
+ },
+ {
+ "internalType": "uint16[16]",
+ "name": "equippedWearables",
+ "type": "uint16[16]"
+ },
+ {
+ "internalType": "address",
+ "name": "collateral",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "escrow",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "stakedAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "minimumStake",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "kinship",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "lastInteracted",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "experience",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "toNextLevel",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "usedSkillPoints",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "level",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "hauntId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "baseRarityScore",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "modifiedRarityScore",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "locked",
+ "type": "bool"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint256",
+ "name": "balance",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "itemId",
+ "type": "uint256"
+ },
+ {
+ "components": [
+ {
+ "internalType": "string",
+ "name": "name",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "description",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "author",
+ "type": "string"
+ },
+ {
+ "internalType": "int8[6]",
+ "name": "traitModifiers",
+ "type": "int8[6]"
+ },
+ {
+ "internalType": "bool[16]",
+ "name": "slotPositions",
+ "type": "bool[16]"
+ },
+ {
+ "internalType": "uint8[]",
+ "name": "allowedCollaterals",
+ "type": "uint8[]"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint8",
+ "name": "x",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "y",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "width",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "height",
+ "type": "uint8"
+ }
+ ],
+ "internalType": "struct Dimensions",
+ "name": "dimensions",
+ "type": "tuple"
+ },
+ {
+ "internalType": "uint256",
+ "name": "ghstPrice",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "maxQuantity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "totalQuantity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint32",
+ "name": "svgId",
+ "type": "uint32"
+ },
+ {
+ "internalType": "uint8",
+ "name": "rarityScoreModifier",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bool",
+ "name": "canPurchaseWithGhst",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint16",
+ "name": "minLevel",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bool",
+ "name": "canBeTransferred",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint8",
+ "name": "category",
+ "type": "uint8"
+ },
+ {
+ "internalType": "int16",
+ "name": "kinshipBonus",
+ "type": "int16"
+ },
+ {
+ "internalType": "uint32",
+ "name": "experienceBonus",
+ "type": "uint32"
+ }
+ ],
+ "internalType": "struct ItemType",
+ "name": "itemType",
+ "type": "tuple"
+ }
+ ],
+ "internalType": "struct ItemTypeIO[]",
+ "name": "items",
+ "type": "tuple[]"
+ }
+ ],
+ "internalType": "struct AavegotchiInfo[]",
+ "name": "aavegotchiInfos_",
+ "type": "tuple[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_approved",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_owner",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "balance_",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "getAavegotchi",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "string",
+ "name": "name",
+ "type": "string"
+ },
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "randomNumber",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "status",
+ "type": "uint256"
+ },
+ {
+ "internalType": "int16[6]",
+ "name": "numericTraits",
+ "type": "int16[6]"
+ },
+ {
+ "internalType": "int16[6]",
+ "name": "modifiedNumericTraits",
+ "type": "int16[6]"
+ },
+ {
+ "internalType": "uint16[16]",
+ "name": "equippedWearables",
+ "type": "uint16[16]"
+ },
+ {
+ "internalType": "address",
+ "name": "collateral",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "escrow",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "stakedAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "minimumStake",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "kinship",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "lastInteracted",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "experience",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "toNextLevel",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "usedSkillPoints",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "level",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "hauntId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "baseRarityScore",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "modifiedRarityScore",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "locked",
+ "type": "bool"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint256",
+ "name": "balance",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "itemId",
+ "type": "uint256"
+ },
+ {
+ "components": [
+ {
+ "internalType": "string",
+ "name": "name",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "description",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "author",
+ "type": "string"
+ },
+ {
+ "internalType": "int8[6]",
+ "name": "traitModifiers",
+ "type": "int8[6]"
+ },
+ {
+ "internalType": "bool[16]",
+ "name": "slotPositions",
+ "type": "bool[16]"
+ },
+ {
+ "internalType": "uint8[]",
+ "name": "allowedCollaterals",
+ "type": "uint8[]"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint8",
+ "name": "x",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "y",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "width",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "height",
+ "type": "uint8"
+ }
+ ],
+ "internalType": "struct Dimensions",
+ "name": "dimensions",
+ "type": "tuple"
+ },
+ {
+ "internalType": "uint256",
+ "name": "ghstPrice",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "maxQuantity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "totalQuantity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint32",
+ "name": "svgId",
+ "type": "uint32"
+ },
+ {
+ "internalType": "uint8",
+ "name": "rarityScoreModifier",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bool",
+ "name": "canPurchaseWithGhst",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint16",
+ "name": "minLevel",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bool",
+ "name": "canBeTransferred",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint8",
+ "name": "category",
+ "type": "uint8"
+ },
+ {
+ "internalType": "int16",
+ "name": "kinshipBonus",
+ "type": "int16"
+ },
+ {
+ "internalType": "uint32",
+ "name": "experienceBonus",
+ "type": "uint32"
+ }
+ ],
+ "internalType": "struct ItemType",
+ "name": "itemType",
+ "type": "tuple"
+ }
+ ],
+ "internalType": "struct ItemTypeIO[]",
+ "name": "items",
+ "type": "tuple[]"
+ }
+ ],
+ "internalType": "struct AavegotchiInfo",
+ "name": "aavegotchiInfo_",
+ "type": "tuple"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "getApproved",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "approved_",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_operator",
+ "type": "address"
+ }
+ ],
+ "name": "isApprovedForAll",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "approved_",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ownerOf",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "owner_",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "safeTransferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_tokenId",
+ "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": [],
+ "name": "symbol",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_index",
+ "type": "uint256"
+ }
+ ],
+ "name": "tokenByIndex",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId_",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_owner",
+ "type": "address"
+ }
+ ],
+ "name": "tokenIdsOfOwner",
+ "outputs": [
+ {
+ "internalType": "uint32[]",
+ "name": "tokenIds_",
+ "type": "uint32[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_owner",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_index",
+ "type": "uint256"
+ }
+ ],
+ "name": "tokenOfOwnerByIndex",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId_",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "tokenURI",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "totalSupply",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "totalSupply_",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ClaimAavegotchi",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "_tokenId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "_time",
+ "type": "uint256"
+ }
+ ],
+ "name": "LockAavegotchi",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "_tokenId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "string",
+ "name": "_oldName",
+ "type": "string"
+ },
+ {
+ "indexed": false,
+ "internalType": "string",
+ "name": "_newName",
+ "type": "string"
+ }
+ ],
+ "name": "SetAavegotchiName",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "_batchId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256[]",
+ "name": "tokenIds",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "SetBatchId",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "_tokenId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "int16[4]",
+ "name": "_values",
+ "type": "int16[4]"
+ }
+ ],
+ "name": "SpendSkillpoints",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "_tokenId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "_time",
+ "type": "uint256"
+ }
+ ],
+ "name": "UnLockAavegotchi",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_experience",
+ "type": "uint256"
+ }
+ ],
+ "name": "aavegotchiLevel",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "level_",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "_name",
+ "type": "string"
+ }
+ ],
+ "name": "aavegotchiNameAvailable",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "available_",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "availableSkillPoints",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "int16[6]",
+ "name": "_numericTraits",
+ "type": "int16[6]"
+ }
+ ],
+ "name": "baseRarityScore",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "rarityScore_",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_tokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_option",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_stakeAmount",
+ "type": "uint256"
+ }
+ ],
+ "name": "claimAavegotchi",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "currentHaunt",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "hauntId_",
+ "type": "uint256"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint256",
+ "name": "hauntMaxSize",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "portalPrice",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes3",
+ "name": "bodyColor",
+ "type": "bytes3"
+ },
+ {
+ "internalType": "uint24",
+ "name": "totalCount",
+ "type": "uint24"
+ }
+ ],
+ "internalType": "struct Haunt",
+ "name": "haunt_",
+ "type": "tuple"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "getNumericTraits",
+ "outputs": [
+ {
+ "internalType": "int16[6]",
+ "name": "numericTraits_",
+ "type": "int16[6]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "ghstAddress",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "contract_",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "_tokenIds",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "interact",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "kinship",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "score_",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "modifiedTraitsAndRarityScore",
+ "outputs": [
+ {
+ "internalType": "int16[6]",
+ "name": "numericTraits_",
+ "type": "int16[6]"
+ },
+ {
+ "internalType": "uint256",
+ "name": "rarityScore_",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "portalAavegotchiTraits",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "uint256",
+ "name": "randomNumber",
+ "type": "uint256"
+ },
+ {
+ "internalType": "int16[6]",
+ "name": "numericTraits",
+ "type": "int16[6]"
+ },
+ {
+ "internalType": "address",
+ "name": "collateralType",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "minimumStake",
+ "type": "uint256"
+ }
+ ],
+ "internalType": "struct PortalAavegotchiTraitsIO[10]",
+ "name": "portalAavegotchiTraits_",
+ "type": "tuple[10]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "int16[6]",
+ "name": "_numericTraits",
+ "type": "int16[6]"
+ }
+ ],
+ "name": "rarityMultiplier",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "multiplier_",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "revenueShares",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "burnAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "daoAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "rarityFarming",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "pixelCraft",
+ "type": "address"
+ }
+ ],
+ "internalType": "struct AavegotchiGameFacet.RevenueSharesIO",
+ "name": "",
+ "type": "tuple"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_tokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "string",
+ "name": "_name",
+ "type": "string"
+ }
+ ],
+ "name": "setAavegotchiName",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_tokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "int16[4]",
+ "name": "_values",
+ "type": "int16[4]"
+ }
+ ],
+ "name": "spendSkillPoints",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_experience",
+ "type": "uint256"
+ }
+ ],
+ "name": "xpUntilNextLevel",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "requiredXp_",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256[]",
+ "name": "tokenIds",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "AddedAavegotchiBatch",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256[]",
+ "name": "ids",
+ "type": "uint256[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "AddedItemsBatch",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256[]",
+ "name": "tokenIds",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "WithdrawnBatch",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256[]",
+ "name": "ids",
+ "type": "uint256[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "WithdrawnItems",
+ "type": "event"
+ },
+ {
+ "inputs": [],
+ "name": "childChainManager",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_user",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_depositData",
+ "type": "bytes"
+ }
+ ],
+ "name": "deposit",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_newChildChainManager",
+ "type": "address"
+ }
+ ],
+ "name": "setChildChainManager",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "_tokenIds",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "withdrawAavegotchiBatch",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "_ids",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "_values",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "withdrawItemsBatch",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "_tokenId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "_reduceAmount",
+ "type": "uint256"
+ }
+ ],
+ "name": "DecreaseStake",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "_fromTokenId",
+ "type": "uint256"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "_toTokenId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "experience",
+ "type": "uint256"
+ }
+ ],
+ "name": "ExperienceTransfer",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "_tokenId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "_stakeAmount",
+ "type": "uint256"
+ }
+ ],
+ "name": "IncreaseStake",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "collateralBalance",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "collateralType_",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "escrow_",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "balance_",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_collateralId",
+ "type": "uint256"
+ }
+ ],
+ "name": "collateralInfo",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "collateralType",
+ "type": "address"
+ },
+ {
+ "components": [
+ {
+ "internalType": "int16[6]",
+ "name": "modifiers",
+ "type": "int16[6]"
+ },
+ {
+ "internalType": "bytes3",
+ "name": "primaryColor",
+ "type": "bytes3"
+ },
+ {
+ "internalType": "bytes3",
+ "name": "secondaryColor",
+ "type": "bytes3"
+ },
+ {
+ "internalType": "bytes3",
+ "name": "cheekColor",
+ "type": "bytes3"
+ },
+ {
+ "internalType": "uint8",
+ "name": "svgId",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "eyeShapeSvgId",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint16",
+ "name": "conversionRate",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bool",
+ "name": "delisted",
+ "type": "bool"
+ }
+ ],
+ "internalType": "struct AavegotchiCollateralTypeInfo",
+ "name": "collateralTypeInfo",
+ "type": "tuple"
+ }
+ ],
+ "internalType": "struct AavegotchiCollateralTypeIO",
+ "name": "collateralInfo_",
+ "type": "tuple"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "collaterals",
+ "outputs": [
+ {
+ "internalType": "address[]",
+ "name": "collateralTypes_",
+ "type": "address[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_tokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_toId",
+ "type": "uint256"
+ }
+ ],
+ "name": "decreaseAndDestroy",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_tokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_reduceAmount",
+ "type": "uint256"
+ }
+ ],
+ "name": "decreaseStake",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getCollateralInfo",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "collateralType",
+ "type": "address"
+ },
+ {
+ "components": [
+ {
+ "internalType": "int16[6]",
+ "name": "modifiers",
+ "type": "int16[6]"
+ },
+ {
+ "internalType": "bytes3",
+ "name": "primaryColor",
+ "type": "bytes3"
+ },
+ {
+ "internalType": "bytes3",
+ "name": "secondaryColor",
+ "type": "bytes3"
+ },
+ {
+ "internalType": "bytes3",
+ "name": "cheekColor",
+ "type": "bytes3"
+ },
+ {
+ "internalType": "uint8",
+ "name": "svgId",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "eyeShapeSvgId",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint16",
+ "name": "conversionRate",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bool",
+ "name": "delisted",
+ "type": "bool"
+ }
+ ],
+ "internalType": "struct AavegotchiCollateralTypeInfo",
+ "name": "collateralTypeInfo",
+ "type": "tuple"
+ }
+ ],
+ "internalType": "struct AavegotchiCollateralTypeIO[]",
+ "name": "collateralInfo_",
+ "type": "tuple[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_tokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_stakeAmount",
+ "type": "uint256"
+ }
+ ],
+ "name": "increaseStake",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_collateralToken",
+ "type": "address"
+ },
+ {
+ "internalType": "uint8",
+ "name": "_svgId",
+ "type": "uint8"
+ }
+ ],
+ "name": "setCollateralEyeShapeSvgId",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "collateralType",
+ "type": "address"
+ },
+ {
+ "components": [
+ {
+ "internalType": "int16[6]",
+ "name": "modifiers",
+ "type": "int16[6]"
+ },
+ {
+ "internalType": "bytes3",
+ "name": "primaryColor",
+ "type": "bytes3"
+ },
+ {
+ "internalType": "bytes3",
+ "name": "secondaryColor",
+ "type": "bytes3"
+ },
+ {
+ "internalType": "bytes3",
+ "name": "cheekColor",
+ "type": "bytes3"
+ },
+ {
+ "internalType": "uint8",
+ "name": "svgId",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "eyeShapeSvgId",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint16",
+ "name": "conversionRate",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bool",
+ "name": "delisted",
+ "type": "bool"
+ }
+ ],
+ "internalType": "struct AavegotchiCollateralTypeInfo",
+ "name": "collateralTypeInfo",
+ "type": "tuple"
+ }
+ ],
+ "indexed": false,
+ "internalType": "struct AavegotchiCollateralTypeIO",
+ "name": "_collateralType",
+ "type": "tuple"
+ }
+ ],
+ "name": "AddCollateralType",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "string",
+ "name": "name",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "description",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "author",
+ "type": "string"
+ },
+ {
+ "internalType": "int8[6]",
+ "name": "traitModifiers",
+ "type": "int8[6]"
+ },
+ {
+ "internalType": "bool[16]",
+ "name": "slotPositions",
+ "type": "bool[16]"
+ },
+ {
+ "internalType": "uint8[]",
+ "name": "allowedCollaterals",
+ "type": "uint8[]"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint8",
+ "name": "x",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "y",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "width",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "height",
+ "type": "uint8"
+ }
+ ],
+ "internalType": "struct Dimensions",
+ "name": "dimensions",
+ "type": "tuple"
+ },
+ {
+ "internalType": "uint256",
+ "name": "ghstPrice",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "maxQuantity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "totalQuantity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint32",
+ "name": "svgId",
+ "type": "uint32"
+ },
+ {
+ "internalType": "uint8",
+ "name": "rarityScoreModifier",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bool",
+ "name": "canPurchaseWithGhst",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint16",
+ "name": "minLevel",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bool",
+ "name": "canBeTransferred",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint8",
+ "name": "category",
+ "type": "uint8"
+ },
+ {
+ "internalType": "int16",
+ "name": "kinshipBonus",
+ "type": "int16"
+ },
+ {
+ "internalType": "uint32",
+ "name": "experienceBonus",
+ "type": "uint32"
+ }
+ ],
+ "indexed": false,
+ "internalType": "struct ItemType",
+ "name": "_itemType",
+ "type": "tuple"
+ }
+ ],
+ "name": "AddItemType",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "string",
+ "name": "name",
+ "type": "string"
+ },
+ {
+ "internalType": "uint8[]",
+ "name": "allowedCollaterals",
+ "type": "uint8[]"
+ },
+ {
+ "internalType": "uint16[]",
+ "name": "wearableIds",
+ "type": "uint16[]"
+ },
+ {
+ "internalType": "int8[5]",
+ "name": "traitsBonuses",
+ "type": "int8[5]"
+ }
+ ],
+ "indexed": false,
+ "internalType": "struct WearableSet",
+ "name": "_wearableSet",
+ "type": "tuple"
+ }
+ ],
+ "name": "AddWearableSet",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "_hauntId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "_hauntMaxSize",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "_portalPrice",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes32",
+ "name": "_bodyColor",
+ "type": "bytes32"
+ }
+ ],
+ "name": "CreateHaunt",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "previousDao",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "newDao",
+ "type": "address"
+ }
+ ],
+ "name": "DaoTransferred",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "previousDaoTreasury",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "newDaoTreasury",
+ "type": "address"
+ }
+ ],
+ "name": "DaoTreasuryTransferred",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "previousGameManager",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "newGameManager",
+ "type": "address"
+ }
+ ],
+ "name": "GameManagerTransferred",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256[]",
+ "name": "_tokenIds",
+ "type": "uint256[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256[]",
+ "name": "_xpValues",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "GrantExperience",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256[]",
+ "name": "_itemIds",
+ "type": "uint256[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256[]",
+ "name": "_maxQuanities",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "ItemTypeMaxQuantity",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "int16[6]",
+ "name": "_oldModifiers",
+ "type": "int16[6]"
+ },
+ {
+ "indexed": false,
+ "internalType": "int16[6]",
+ "name": "_newModifiers",
+ "type": "int16[6]"
+ }
+ ],
+ "name": "UpdateCollateralModifiers",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "_setId",
+ "type": "uint256"
+ },
+ {
+ "components": [
+ {
+ "internalType": "string",
+ "name": "name",
+ "type": "string"
+ },
+ {
+ "internalType": "uint8[]",
+ "name": "allowedCollaterals",
+ "type": "uint8[]"
+ },
+ {
+ "internalType": "uint16[]",
+ "name": "wearableIds",
+ "type": "uint16[]"
+ },
+ {
+ "internalType": "int8[5]",
+ "name": "traitsBonuses",
+ "type": "int8[5]"
+ }
+ ],
+ "indexed": false,
+ "internalType": "struct WearableSet",
+ "name": "_wearableSet",
+ "type": "tuple"
+ }
+ ],
+ "name": "UpdateWearableSet",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "collateralType",
+ "type": "address"
+ },
+ {
+ "components": [
+ {
+ "internalType": "int16[6]",
+ "name": "modifiers",
+ "type": "int16[6]"
+ },
+ {
+ "internalType": "bytes3",
+ "name": "primaryColor",
+ "type": "bytes3"
+ },
+ {
+ "internalType": "bytes3",
+ "name": "secondaryColor",
+ "type": "bytes3"
+ },
+ {
+ "internalType": "bytes3",
+ "name": "cheekColor",
+ "type": "bytes3"
+ },
+ {
+ "internalType": "uint8",
+ "name": "svgId",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "eyeShapeSvgId",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint16",
+ "name": "conversionRate",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bool",
+ "name": "delisted",
+ "type": "bool"
+ }
+ ],
+ "internalType": "struct AavegotchiCollateralTypeInfo",
+ "name": "collateralTypeInfo",
+ "type": "tuple"
+ }
+ ],
+ "internalType": "struct AavegotchiCollateralTypeIO[]",
+ "name": "_collateralTypes",
+ "type": "tuple[]"
+ }
+ ],
+ "name": "addCollateralTypes",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "string",
+ "name": "name",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "description",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "author",
+ "type": "string"
+ },
+ {
+ "internalType": "int8[6]",
+ "name": "traitModifiers",
+ "type": "int8[6]"
+ },
+ {
+ "internalType": "bool[16]",
+ "name": "slotPositions",
+ "type": "bool[16]"
+ },
+ {
+ "internalType": "uint8[]",
+ "name": "allowedCollaterals",
+ "type": "uint8[]"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint8",
+ "name": "x",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "y",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "width",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "height",
+ "type": "uint8"
+ }
+ ],
+ "internalType": "struct Dimensions",
+ "name": "dimensions",
+ "type": "tuple"
+ },
+ {
+ "internalType": "uint256",
+ "name": "ghstPrice",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "maxQuantity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "totalQuantity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint32",
+ "name": "svgId",
+ "type": "uint32"
+ },
+ {
+ "internalType": "uint8",
+ "name": "rarityScoreModifier",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bool",
+ "name": "canPurchaseWithGhst",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint16",
+ "name": "minLevel",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bool",
+ "name": "canBeTransferred",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint8",
+ "name": "category",
+ "type": "uint8"
+ },
+ {
+ "internalType": "int16",
+ "name": "kinshipBonus",
+ "type": "int16"
+ },
+ {
+ "internalType": "uint32",
+ "name": "experienceBonus",
+ "type": "uint32"
+ }
+ ],
+ "internalType": "struct ItemType[]",
+ "name": "_itemTypes",
+ "type": "tuple[]"
+ }
+ ],
+ "name": "addItemTypes",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "string",
+ "name": "name",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "description",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "author",
+ "type": "string"
+ },
+ {
+ "internalType": "int8[6]",
+ "name": "traitModifiers",
+ "type": "int8[6]"
+ },
+ {
+ "internalType": "bool[16]",
+ "name": "slotPositions",
+ "type": "bool[16]"
+ },
+ {
+ "internalType": "uint8[]",
+ "name": "allowedCollaterals",
+ "type": "uint8[]"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint8",
+ "name": "x",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "y",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "width",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "height",
+ "type": "uint8"
+ }
+ ],
+ "internalType": "struct Dimensions",
+ "name": "dimensions",
+ "type": "tuple"
+ },
+ {
+ "internalType": "uint256",
+ "name": "ghstPrice",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "maxQuantity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "totalQuantity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint32",
+ "name": "svgId",
+ "type": "uint32"
+ },
+ {
+ "internalType": "uint8",
+ "name": "rarityScoreModifier",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bool",
+ "name": "canPurchaseWithGhst",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint16",
+ "name": "minLevel",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bool",
+ "name": "canBeTransferred",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint8",
+ "name": "category",
+ "type": "uint8"
+ },
+ {
+ "internalType": "int16",
+ "name": "kinshipBonus",
+ "type": "int16"
+ },
+ {
+ "internalType": "uint32",
+ "name": "experienceBonus",
+ "type": "uint32"
+ }
+ ],
+ "internalType": "struct ItemType[]",
+ "name": "_itemTypes",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "string",
+ "name": "_svg",
+ "type": "string"
+ },
+ {
+ "components": [
+ {
+ "internalType": "bytes32",
+ "name": "svgType",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "sizes",
+ "type": "uint256[]"
+ }
+ ],
+ "internalType": "struct LibSvg.SvgTypeAndSizes[]",
+ "name": "_typesAndSizes",
+ "type": "tuple[]"
+ }
+ ],
+ "name": "addItemTypesAndSvgs",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "string",
+ "name": "name",
+ "type": "string"
+ },
+ {
+ "internalType": "uint8[]",
+ "name": "allowedCollaterals",
+ "type": "uint8[]"
+ },
+ {
+ "internalType": "uint16[]",
+ "name": "wearableIds",
+ "type": "uint16[]"
+ },
+ {
+ "internalType": "int8[5]",
+ "name": "traitsBonuses",
+ "type": "int8[5]"
+ }
+ ],
+ "internalType": "struct WearableSet[]",
+ "name": "_wearableSets",
+ "type": "tuple[]"
+ }
+ ],
+ "name": "addWearableSets",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint24",
+ "name": "_hauntMaxSize",
+ "type": "uint24"
+ },
+ {
+ "internalType": "uint96",
+ "name": "_portalPrice",
+ "type": "uint96"
+ },
+ {
+ "internalType": "bytes3",
+ "name": "_bodyColor",
+ "type": "bytes3"
+ }
+ ],
+ "name": "createHaunt",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "hauntId_",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "gameManager",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "_tokenIds",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "_xpValues",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "grantExperience",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "_itemIds",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "_quantities",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "mintItems",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_newDao",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_newDaoTreasury",
+ "type": "address"
+ }
+ ],
+ "name": "setDao",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_gameManager",
+ "type": "address"
+ }
+ ],
+ "name": "setGameManager",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_collateralType",
+ "type": "address"
+ },
+ {
+ "internalType": "int16[6]",
+ "name": "_modifiers",
+ "type": "int16[6]"
+ }
+ ],
+ "name": "updateCollateralModifiers",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "_itemIds",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "_maxQuantities",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "updateItemTypeMaxQuantity",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "_setIds",
+ "type": "uint256[]"
+ },
+ {
+ "components": [
+ {
+ "internalType": "string",
+ "name": "name",
+ "type": "string"
+ },
+ {
+ "internalType": "uint8[]",
+ "name": "allowedCollaterals",
+ "type": "uint8[]"
+ },
+ {
+ "internalType": "uint16[]",
+ "name": "wearableIds",
+ "type": "uint16[]"
+ },
+ {
+ "internalType": "int8[5]",
+ "name": "traitsBonuses",
+ "type": "int8[5]"
+ }
+ ],
+ "internalType": "struct WearableSet[]",
+ "name": "_wearableSets",
+ "type": "tuple[]"
+ }
+ ],
+ "name": "updateWearableSets",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "listingFeeInWei",
+ "type": "uint256"
+ }
+ ],
+ "name": "ChangedListingFee",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "listingId",
+ "type": "uint256"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "seller",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "buyer",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "erc1155TokenAddress",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "erc1155TypeId",
+ "type": "uint256"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "category",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "_quantity",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "priceInWei",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "time",
+ "type": "uint256"
+ }
+ ],
+ "name": "ERC1155ExecutedListing",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "listingId",
+ "type": "uint256"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "seller",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "erc1155TokenAddress",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "erc1155TypeId",
+ "type": "uint256"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "category",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "quantity",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "priceInWei",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "time",
+ "type": "uint256"
+ }
+ ],
+ "name": "ERC1155ListingAdd",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "listingId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ERC1155ListingCancelled",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_listingId",
+ "type": "uint256"
+ }
+ ],
+ "name": "cancelERC1155Listing",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "_listingIds",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "cancelERC1155Listings",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_listingId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_quantity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_priceInWei",
+ "type": "uint256"
+ }
+ ],
+ "name": "executeERC1155Listing",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_erc1155TokenAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_erc1155TypeId",
+ "type": "uint256"
+ }
+ ],
+ "name": "getERC1155Category",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "category_",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_listingId",
+ "type": "uint256"
+ }
+ ],
+ "name": "getERC1155Listing",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "uint256",
+ "name": "listingId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "seller",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "erc1155TokenAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "erc1155TypeId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "category",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "quantity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "priceInWei",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "timeCreated",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "timeLastPurchased",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "sourceListingId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "sold",
+ "type": "bool"
+ },
+ {
+ "internalType": "bool",
+ "name": "cancelled",
+ "type": "bool"
+ }
+ ],
+ "internalType": "struct ERC1155Listing",
+ "name": "listing_",
+ "type": "tuple"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_erc1155TokenAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_erc1155TypeId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "_owner",
+ "type": "address"
+ }
+ ],
+ "name": "getERC1155ListingFromToken",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "uint256",
+ "name": "listingId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "seller",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "erc1155TokenAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "erc1155TypeId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "category",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "quantity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "priceInWei",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "timeCreated",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "timeLastPurchased",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "sourceListingId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "sold",
+ "type": "bool"
+ },
+ {
+ "internalType": "bool",
+ "name": "cancelled",
+ "type": "bool"
+ }
+ ],
+ "internalType": "struct ERC1155Listing",
+ "name": "listing_",
+ "type": "tuple"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_category",
+ "type": "uint256"
+ },
+ {
+ "internalType": "string",
+ "name": "_sort",
+ "type": "string"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_length",
+ "type": "uint256"
+ }
+ ],
+ "name": "getERC1155Listings",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "uint256",
+ "name": "listingId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "seller",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "erc1155TokenAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "erc1155TypeId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "category",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "quantity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "priceInWei",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "timeCreated",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "timeLastPurchased",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "sourceListingId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "sold",
+ "type": "bool"
+ },
+ {
+ "internalType": "bool",
+ "name": "cancelled",
+ "type": "bool"
+ }
+ ],
+ "internalType": "struct ERC1155Listing[]",
+ "name": "listings_",
+ "type": "tuple[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getListingFeeInWei",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_owner",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_category",
+ "type": "uint256"
+ },
+ {
+ "internalType": "string",
+ "name": "_sort",
+ "type": "string"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_length",
+ "type": "uint256"
+ }
+ ],
+ "name": "getOwnerERC1155Listings",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "uint256",
+ "name": "listingId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "seller",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "erc1155TokenAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "erc1155TypeId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "category",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "quantity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "priceInWei",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "timeCreated",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "timeLastPurchased",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "sourceListingId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "sold",
+ "type": "bool"
+ },
+ {
+ "internalType": "bool",
+ "name": "cancelled",
+ "type": "bool"
+ }
+ ],
+ "internalType": "struct ERC1155Listing[]",
+ "name": "listings_",
+ "type": "tuple[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "erc1155TokenAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "erc1155TypeId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "category",
+ "type": "uint256"
+ }
+ ],
+ "internalType": "struct ERC1155MarketplaceFacet.Category[]",
+ "name": "_categories",
+ "type": "tuple[]"
+ }
+ ],
+ "name": "setERC1155Categories",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_erc1155TokenAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_erc1155TypeId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_quantity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_priceInWei",
+ "type": "uint256"
+ }
+ ],
+ "name": "setERC1155Listing",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_listingFeeInWei",
+ "type": "uint256"
+ }
+ ],
+ "name": "setListingFee",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_erc1155TokenAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "_erc1155TypeIds",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "address",
+ "name": "_owner",
+ "type": "address"
+ }
+ ],
+ "name": "updateBatchERC1155Listing",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_erc1155TokenAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_erc1155TypeId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "_owner",
+ "type": "address"
+ }
+ ],
+ "name": "updateERC1155Listing",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "listingId",
+ "type": "uint256"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "seller",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "buyer",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "erc721TokenAddress",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "erc721TokenId",
+ "type": "uint256"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "category",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "priceInWei",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "time",
+ "type": "uint256"
+ }
+ ],
+ "name": "ERC721ExecutedListing",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "listingId",
+ "type": "uint256"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "seller",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "erc721TokenAddress",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "erc721TokenId",
+ "type": "uint256"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "category",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "time",
+ "type": "uint256"
+ }
+ ],
+ "name": "ERC721ListingAdd",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_erc721TokenAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_erc721TokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_priceInWei",
+ "type": "uint256"
+ }
+ ],
+ "name": "addERC721Listing",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_listingId",
+ "type": "uint256"
+ }
+ ],
+ "name": "cancelERC721Listing",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_erc721TokenAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_erc721TokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "cancelERC721ListingByToken",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "_listingIds",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "cancelERC721Listings",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_listingId",
+ "type": "uint256"
+ }
+ ],
+ "name": "executeERC721Listing",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_listingId",
+ "type": "uint256"
+ }
+ ],
+ "name": "getAavegotchiListing",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "uint256",
+ "name": "listingId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "seller",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "erc721TokenAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "erc721TokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "category",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "priceInWei",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "timeCreated",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "timePurchased",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "cancelled",
+ "type": "bool"
+ }
+ ],
+ "internalType": "struct ERC721Listing",
+ "name": "listing_",
+ "type": "tuple"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "string",
+ "name": "name",
+ "type": "string"
+ },
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "randomNumber",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "status",
+ "type": "uint256"
+ },
+ {
+ "internalType": "int16[6]",
+ "name": "numericTraits",
+ "type": "int16[6]"
+ },
+ {
+ "internalType": "int16[6]",
+ "name": "modifiedNumericTraits",
+ "type": "int16[6]"
+ },
+ {
+ "internalType": "uint16[16]",
+ "name": "equippedWearables",
+ "type": "uint16[16]"
+ },
+ {
+ "internalType": "address",
+ "name": "collateral",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "escrow",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "stakedAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "minimumStake",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "kinship",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "lastInteracted",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "experience",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "toNextLevel",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "usedSkillPoints",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "level",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "hauntId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "baseRarityScore",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "modifiedRarityScore",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "locked",
+ "type": "bool"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint256",
+ "name": "balance",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "itemId",
+ "type": "uint256"
+ },
+ {
+ "components": [
+ {
+ "internalType": "string",
+ "name": "name",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "description",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "author",
+ "type": "string"
+ },
+ {
+ "internalType": "int8[6]",
+ "name": "traitModifiers",
+ "type": "int8[6]"
+ },
+ {
+ "internalType": "bool[16]",
+ "name": "slotPositions",
+ "type": "bool[16]"
+ },
+ {
+ "internalType": "uint8[]",
+ "name": "allowedCollaterals",
+ "type": "uint8[]"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint8",
+ "name": "x",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "y",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "width",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "height",
+ "type": "uint8"
+ }
+ ],
+ "internalType": "struct Dimensions",
+ "name": "dimensions",
+ "type": "tuple"
+ },
+ {
+ "internalType": "uint256",
+ "name": "ghstPrice",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "maxQuantity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "totalQuantity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint32",
+ "name": "svgId",
+ "type": "uint32"
+ },
+ {
+ "internalType": "uint8",
+ "name": "rarityScoreModifier",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bool",
+ "name": "canPurchaseWithGhst",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint16",
+ "name": "minLevel",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bool",
+ "name": "canBeTransferred",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint8",
+ "name": "category",
+ "type": "uint8"
+ },
+ {
+ "internalType": "int16",
+ "name": "kinshipBonus",
+ "type": "int16"
+ },
+ {
+ "internalType": "uint32",
+ "name": "experienceBonus",
+ "type": "uint32"
+ }
+ ],
+ "internalType": "struct ItemType",
+ "name": "itemType",
+ "type": "tuple"
+ }
+ ],
+ "internalType": "struct ItemTypeIO[]",
+ "name": "items",
+ "type": "tuple[]"
+ }
+ ],
+ "internalType": "struct AavegotchiInfo",
+ "name": "aavegotchiInfo_",
+ "type": "tuple"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_category",
+ "type": "uint256"
+ },
+ {
+ "internalType": "string",
+ "name": "_sort",
+ "type": "string"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_length",
+ "type": "uint256"
+ }
+ ],
+ "name": "getAavegotchiListings",
+ "outputs": [
+ {
+ "components": [
+ {
+ "components": [
+ {
+ "internalType": "uint256",
+ "name": "listingId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "seller",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "erc721TokenAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "erc721TokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "category",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "priceInWei",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "timeCreated",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "timePurchased",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "cancelled",
+ "type": "bool"
+ }
+ ],
+ "internalType": "struct ERC721Listing",
+ "name": "listing_",
+ "type": "tuple"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "string",
+ "name": "name",
+ "type": "string"
+ },
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "randomNumber",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "status",
+ "type": "uint256"
+ },
+ {
+ "internalType": "int16[6]",
+ "name": "numericTraits",
+ "type": "int16[6]"
+ },
+ {
+ "internalType": "int16[6]",
+ "name": "modifiedNumericTraits",
+ "type": "int16[6]"
+ },
+ {
+ "internalType": "uint16[16]",
+ "name": "equippedWearables",
+ "type": "uint16[16]"
+ },
+ {
+ "internalType": "address",
+ "name": "collateral",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "escrow",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "stakedAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "minimumStake",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "kinship",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "lastInteracted",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "experience",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "toNextLevel",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "usedSkillPoints",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "level",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "hauntId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "baseRarityScore",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "modifiedRarityScore",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "locked",
+ "type": "bool"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint256",
+ "name": "balance",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "itemId",
+ "type": "uint256"
+ },
+ {
+ "components": [
+ {
+ "internalType": "string",
+ "name": "name",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "description",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "author",
+ "type": "string"
+ },
+ {
+ "internalType": "int8[6]",
+ "name": "traitModifiers",
+ "type": "int8[6]"
+ },
+ {
+ "internalType": "bool[16]",
+ "name": "slotPositions",
+ "type": "bool[16]"
+ },
+ {
+ "internalType": "uint8[]",
+ "name": "allowedCollaterals",
+ "type": "uint8[]"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint8",
+ "name": "x",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "y",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "width",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "height",
+ "type": "uint8"
+ }
+ ],
+ "internalType": "struct Dimensions",
+ "name": "dimensions",
+ "type": "tuple"
+ },
+ {
+ "internalType": "uint256",
+ "name": "ghstPrice",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "maxQuantity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "totalQuantity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint32",
+ "name": "svgId",
+ "type": "uint32"
+ },
+ {
+ "internalType": "uint8",
+ "name": "rarityScoreModifier",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bool",
+ "name": "canPurchaseWithGhst",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint16",
+ "name": "minLevel",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bool",
+ "name": "canBeTransferred",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint8",
+ "name": "category",
+ "type": "uint8"
+ },
+ {
+ "internalType": "int16",
+ "name": "kinshipBonus",
+ "type": "int16"
+ },
+ {
+ "internalType": "uint32",
+ "name": "experienceBonus",
+ "type": "uint32"
+ }
+ ],
+ "internalType": "struct ItemType",
+ "name": "itemType",
+ "type": "tuple"
+ }
+ ],
+ "internalType": "struct ItemTypeIO[]",
+ "name": "items",
+ "type": "tuple[]"
+ }
+ ],
+ "internalType": "struct AavegotchiInfo",
+ "name": "aavegotchiInfo_",
+ "type": "tuple"
+ }
+ ],
+ "internalType": "struct ERC721MarketplaceFacet.AavegotchiListing[]",
+ "name": "listings_",
+ "type": "tuple[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_erc721TokenAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_erc721TokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "getERC721Category",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "category_",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_listingId",
+ "type": "uint256"
+ }
+ ],
+ "name": "getERC721Listing",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "uint256",
+ "name": "listingId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "seller",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "erc721TokenAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "erc721TokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "category",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "priceInWei",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "timeCreated",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "timePurchased",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "cancelled",
+ "type": "bool"
+ }
+ ],
+ "internalType": "struct ERC721Listing",
+ "name": "listing_",
+ "type": "tuple"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_erc721TokenAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_erc721TokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "_owner",
+ "type": "address"
+ }
+ ],
+ "name": "getERC721ListingFromToken",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "uint256",
+ "name": "listingId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "seller",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "erc721TokenAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "erc721TokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "category",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "priceInWei",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "timeCreated",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "timePurchased",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "cancelled",
+ "type": "bool"
+ }
+ ],
+ "internalType": "struct ERC721Listing",
+ "name": "listing_",
+ "type": "tuple"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_category",
+ "type": "uint256"
+ },
+ {
+ "internalType": "string",
+ "name": "_sort",
+ "type": "string"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_length",
+ "type": "uint256"
+ }
+ ],
+ "name": "getERC721Listings",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "uint256",
+ "name": "listingId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "seller",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "erc721TokenAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "erc721TokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "category",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "priceInWei",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "timeCreated",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "timePurchased",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "cancelled",
+ "type": "bool"
+ }
+ ],
+ "internalType": "struct ERC721Listing[]",
+ "name": "listings_",
+ "type": "tuple[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_owner",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_category",
+ "type": "uint256"
+ },
+ {
+ "internalType": "string",
+ "name": "_sort",
+ "type": "string"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_length",
+ "type": "uint256"
+ }
+ ],
+ "name": "getOwnerAavegotchiListings",
+ "outputs": [
+ {
+ "components": [
+ {
+ "components": [
+ {
+ "internalType": "uint256",
+ "name": "listingId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "seller",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "erc721TokenAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "erc721TokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "category",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "priceInWei",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "timeCreated",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "timePurchased",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "cancelled",
+ "type": "bool"
+ }
+ ],
+ "internalType": "struct ERC721Listing",
+ "name": "listing_",
+ "type": "tuple"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "string",
+ "name": "name",
+ "type": "string"
+ },
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "randomNumber",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "status",
+ "type": "uint256"
+ },
+ {
+ "internalType": "int16[6]",
+ "name": "numericTraits",
+ "type": "int16[6]"
+ },
+ {
+ "internalType": "int16[6]",
+ "name": "modifiedNumericTraits",
+ "type": "int16[6]"
+ },
+ {
+ "internalType": "uint16[16]",
+ "name": "equippedWearables",
+ "type": "uint16[16]"
+ },
+ {
+ "internalType": "address",
+ "name": "collateral",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "escrow",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "stakedAmount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "minimumStake",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "kinship",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "lastInteracted",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "experience",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "toNextLevel",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "usedSkillPoints",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "level",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "hauntId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "baseRarityScore",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "modifiedRarityScore",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "locked",
+ "type": "bool"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint256",
+ "name": "balance",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "itemId",
+ "type": "uint256"
+ },
+ {
+ "components": [
+ {
+ "internalType": "string",
+ "name": "name",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "description",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "author",
+ "type": "string"
+ },
+ {
+ "internalType": "int8[6]",
+ "name": "traitModifiers",
+ "type": "int8[6]"
+ },
+ {
+ "internalType": "bool[16]",
+ "name": "slotPositions",
+ "type": "bool[16]"
+ },
+ {
+ "internalType": "uint8[]",
+ "name": "allowedCollaterals",
+ "type": "uint8[]"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint8",
+ "name": "x",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "y",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "width",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "height",
+ "type": "uint8"
+ }
+ ],
+ "internalType": "struct Dimensions",
+ "name": "dimensions",
+ "type": "tuple"
+ },
+ {
+ "internalType": "uint256",
+ "name": "ghstPrice",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "maxQuantity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "totalQuantity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint32",
+ "name": "svgId",
+ "type": "uint32"
+ },
+ {
+ "internalType": "uint8",
+ "name": "rarityScoreModifier",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bool",
+ "name": "canPurchaseWithGhst",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint16",
+ "name": "minLevel",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bool",
+ "name": "canBeTransferred",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint8",
+ "name": "category",
+ "type": "uint8"
+ },
+ {
+ "internalType": "int16",
+ "name": "kinshipBonus",
+ "type": "int16"
+ },
+ {
+ "internalType": "uint32",
+ "name": "experienceBonus",
+ "type": "uint32"
+ }
+ ],
+ "internalType": "struct ItemType",
+ "name": "itemType",
+ "type": "tuple"
+ }
+ ],
+ "internalType": "struct ItemTypeIO[]",
+ "name": "items",
+ "type": "tuple[]"
+ }
+ ],
+ "internalType": "struct AavegotchiInfo",
+ "name": "aavegotchiInfo_",
+ "type": "tuple"
+ }
+ ],
+ "internalType": "struct ERC721MarketplaceFacet.AavegotchiListing[]",
+ "name": "listings_",
+ "type": "tuple[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_owner",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_category",
+ "type": "uint256"
+ },
+ {
+ "internalType": "string",
+ "name": "_sort",
+ "type": "string"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_length",
+ "type": "uint256"
+ }
+ ],
+ "name": "getOwnerERC721Listings",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "uint256",
+ "name": "listingId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "seller",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "erc721TokenAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "erc721TokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "category",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "priceInWei",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "timeCreated",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "timePurchased",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "cancelled",
+ "type": "bool"
+ }
+ ],
+ "internalType": "struct ERC721Listing[]",
+ "name": "listings_",
+ "type": "tuple[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_erc721TokenAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_erc721TokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "_owner",
+ "type": "address"
+ }
+ ],
+ "name": "updateERC721Listing",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "_tokenId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint16[16]",
+ "name": "_oldWearables",
+ "type": "uint16[16]"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint16[16]",
+ "name": "_newWearables",
+ "type": "uint16[16]"
+ }
+ ],
+ "name": "EquipWearables",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "_toContract",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "_toTokenId",
+ "type": "uint256"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "_tokenTypeId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "_value",
+ "type": "uint256"
+ }
+ ],
+ "name": "TransferToParent",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "_tokenId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256[]",
+ "name": "_itemIds",
+ "type": "uint256[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256[]",
+ "name": "_quantities",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "UseConsumables",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_owner",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_id",
+ "type": "uint256"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "bal_",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "_owners",
+ "type": "address[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "_ids",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "balanceOfBatch",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "bals",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_tokenContract",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_tokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_id",
+ "type": "uint256"
+ }
+ ],
+ "name": "balanceOfToken",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_tokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint16[16]",
+ "name": "_equippedWearables",
+ "type": "uint16[16]"
+ }
+ ],
+ "name": "equipWearables",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "equippedWearables",
+ "outputs": [
+ {
+ "internalType": "uint16[16]",
+ "name": "wearableIds_",
+ "type": "uint16[16]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "_wearableIds",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "findWearableSets",
+ "outputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "wearableSetIds_",
+ "type": "uint256[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_itemId",
+ "type": "uint256"
+ }
+ ],
+ "name": "getItemType",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "string",
+ "name": "name",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "description",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "author",
+ "type": "string"
+ },
+ {
+ "internalType": "int8[6]",
+ "name": "traitModifiers",
+ "type": "int8[6]"
+ },
+ {
+ "internalType": "bool[16]",
+ "name": "slotPositions",
+ "type": "bool[16]"
+ },
+ {
+ "internalType": "uint8[]",
+ "name": "allowedCollaterals",
+ "type": "uint8[]"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint8",
+ "name": "x",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "y",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "width",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "height",
+ "type": "uint8"
+ }
+ ],
+ "internalType": "struct Dimensions",
+ "name": "dimensions",
+ "type": "tuple"
+ },
+ {
+ "internalType": "uint256",
+ "name": "ghstPrice",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "maxQuantity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "totalQuantity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint32",
+ "name": "svgId",
+ "type": "uint32"
+ },
+ {
+ "internalType": "uint8",
+ "name": "rarityScoreModifier",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bool",
+ "name": "canPurchaseWithGhst",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint16",
+ "name": "minLevel",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bool",
+ "name": "canBeTransferred",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint8",
+ "name": "category",
+ "type": "uint8"
+ },
+ {
+ "internalType": "int16",
+ "name": "kinshipBonus",
+ "type": "int16"
+ },
+ {
+ "internalType": "uint32",
+ "name": "experienceBonus",
+ "type": "uint32"
+ }
+ ],
+ "internalType": "struct ItemType",
+ "name": "itemType_",
+ "type": "tuple"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "_itemIds",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "getItemTypes",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "string",
+ "name": "name",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "description",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "author",
+ "type": "string"
+ },
+ {
+ "internalType": "int8[6]",
+ "name": "traitModifiers",
+ "type": "int8[6]"
+ },
+ {
+ "internalType": "bool[16]",
+ "name": "slotPositions",
+ "type": "bool[16]"
+ },
+ {
+ "internalType": "uint8[]",
+ "name": "allowedCollaterals",
+ "type": "uint8[]"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint8",
+ "name": "x",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "y",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "width",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "height",
+ "type": "uint8"
+ }
+ ],
+ "internalType": "struct Dimensions",
+ "name": "dimensions",
+ "type": "tuple"
+ },
+ {
+ "internalType": "uint256",
+ "name": "ghstPrice",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "maxQuantity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "totalQuantity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint32",
+ "name": "svgId",
+ "type": "uint32"
+ },
+ {
+ "internalType": "uint8",
+ "name": "rarityScoreModifier",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bool",
+ "name": "canPurchaseWithGhst",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint16",
+ "name": "minLevel",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bool",
+ "name": "canBeTransferred",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint8",
+ "name": "category",
+ "type": "uint8"
+ },
+ {
+ "internalType": "int16",
+ "name": "kinshipBonus",
+ "type": "int16"
+ },
+ {
+ "internalType": "uint32",
+ "name": "experienceBonus",
+ "type": "uint32"
+ }
+ ],
+ "internalType": "struct ItemType[]",
+ "name": "itemTypes_",
+ "type": "tuple[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_index",
+ "type": "uint256"
+ }
+ ],
+ "name": "getWearableSet",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "string",
+ "name": "name",
+ "type": "string"
+ },
+ {
+ "internalType": "uint8[]",
+ "name": "allowedCollaterals",
+ "type": "uint8[]"
+ },
+ {
+ "internalType": "uint16[]",
+ "name": "wearableIds",
+ "type": "uint16[]"
+ },
+ {
+ "internalType": "int8[5]",
+ "name": "traitsBonuses",
+ "type": "int8[5]"
+ }
+ ],
+ "internalType": "struct WearableSet",
+ "name": "wearableSet_",
+ "type": "tuple"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getWearableSets",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "string",
+ "name": "name",
+ "type": "string"
+ },
+ {
+ "internalType": "uint8[]",
+ "name": "allowedCollaterals",
+ "type": "uint8[]"
+ },
+ {
+ "internalType": "uint16[]",
+ "name": "wearableIds",
+ "type": "uint16[]"
+ },
+ {
+ "internalType": "int8[5]",
+ "name": "traitsBonuses",
+ "type": "int8[5]"
+ }
+ ],
+ "internalType": "struct WearableSet[]",
+ "name": "wearableSets_",
+ "type": "tuple[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_account",
+ "type": "address"
+ }
+ ],
+ "name": "itemBalances",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "uint256",
+ "name": "itemId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "balance",
+ "type": "uint256"
+ }
+ ],
+ "internalType": "struct ItemsFacet.ItemIdIO[]",
+ "name": "bals_",
+ "type": "tuple[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_tokenContract",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "itemBalancesOfToken",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "uint256",
+ "name": "itemId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "balance",
+ "type": "uint256"
+ }
+ ],
+ "internalType": "struct ItemsFacet.ItemIdIO[]",
+ "name": "bals_",
+ "type": "tuple[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_tokenContract",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "itemBalancesOfTokenWithTypes",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "uint256",
+ "name": "balance",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "itemId",
+ "type": "uint256"
+ },
+ {
+ "components": [
+ {
+ "internalType": "string",
+ "name": "name",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "description",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "author",
+ "type": "string"
+ },
+ {
+ "internalType": "int8[6]",
+ "name": "traitModifiers",
+ "type": "int8[6]"
+ },
+ {
+ "internalType": "bool[16]",
+ "name": "slotPositions",
+ "type": "bool[16]"
+ },
+ {
+ "internalType": "uint8[]",
+ "name": "allowedCollaterals",
+ "type": "uint8[]"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint8",
+ "name": "x",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "y",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "width",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "height",
+ "type": "uint8"
+ }
+ ],
+ "internalType": "struct Dimensions",
+ "name": "dimensions",
+ "type": "tuple"
+ },
+ {
+ "internalType": "uint256",
+ "name": "ghstPrice",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "maxQuantity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "totalQuantity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint32",
+ "name": "svgId",
+ "type": "uint32"
+ },
+ {
+ "internalType": "uint8",
+ "name": "rarityScoreModifier",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bool",
+ "name": "canPurchaseWithGhst",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint16",
+ "name": "minLevel",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bool",
+ "name": "canBeTransferred",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint8",
+ "name": "category",
+ "type": "uint8"
+ },
+ {
+ "internalType": "int16",
+ "name": "kinshipBonus",
+ "type": "int16"
+ },
+ {
+ "internalType": "uint32",
+ "name": "experienceBonus",
+ "type": "uint32"
+ }
+ ],
+ "internalType": "struct ItemType",
+ "name": "itemType",
+ "type": "tuple"
+ }
+ ],
+ "internalType": "struct ItemTypeIO[]",
+ "name": "itemBalancesOfTokenWithTypes_",
+ "type": "tuple[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_owner",
+ "type": "address"
+ }
+ ],
+ "name": "itemBalancesWithTypes",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "uint256",
+ "name": "balance",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "itemId",
+ "type": "uint256"
+ },
+ {
+ "components": [
+ {
+ "internalType": "string",
+ "name": "name",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "description",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "author",
+ "type": "string"
+ },
+ {
+ "internalType": "int8[6]",
+ "name": "traitModifiers",
+ "type": "int8[6]"
+ },
+ {
+ "internalType": "bool[16]",
+ "name": "slotPositions",
+ "type": "bool[16]"
+ },
+ {
+ "internalType": "uint8[]",
+ "name": "allowedCollaterals",
+ "type": "uint8[]"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint8",
+ "name": "x",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "y",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "width",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "height",
+ "type": "uint8"
+ }
+ ],
+ "internalType": "struct Dimensions",
+ "name": "dimensions",
+ "type": "tuple"
+ },
+ {
+ "internalType": "uint256",
+ "name": "ghstPrice",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "maxQuantity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "totalQuantity",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint32",
+ "name": "svgId",
+ "type": "uint32"
+ },
+ {
+ "internalType": "uint8",
+ "name": "rarityScoreModifier",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bool",
+ "name": "canPurchaseWithGhst",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint16",
+ "name": "minLevel",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bool",
+ "name": "canBeTransferred",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint8",
+ "name": "category",
+ "type": "uint8"
+ },
+ {
+ "internalType": "int16",
+ "name": "kinshipBonus",
+ "type": "int16"
+ },
+ {
+ "internalType": "uint32",
+ "name": "experienceBonus",
+ "type": "uint32"
+ }
+ ],
+ "internalType": "struct ItemType",
+ "name": "itemType",
+ "type": "tuple"
+ }
+ ],
+ "internalType": "struct ItemTypeIO[]",
+ "name": "output_",
+ "type": "tuple[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "_value",
+ "type": "string"
+ }
+ ],
+ "name": "setBaseURI",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_wearableId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool[16]",
+ "name": "_slotPositions",
+ "type": "bool[16]"
+ }
+ ],
+ "name": "setWearableSlotPositions",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "totalWearableSets",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_id",
+ "type": "uint256"
+ }
+ ],
+ "name": "uri",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_tokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "_itemIds",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "_quantities",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "useConsumables",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_fromContract",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_fromTokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "_toContract",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_toTokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "_ids",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "_values",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "batchTransferAsChild",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_fromContract",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_fromTokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "_to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "_ids",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "_values",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "batchTransferFromParent",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_toContract",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_toTokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "_ids",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "_values",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "batchTransferToParent",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes",
+ "name": "",
+ "type": "bytes"
+ }
+ ],
+ "name": "onERC1155BatchReceived",
+ "outputs": [
+ {
+ "internalType": "bytes4",
+ "name": "",
+ "type": "bytes4"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "",
+ "type": "bytes"
+ }
+ ],
+ "name": "onERC1155Received",
+ "outputs": [
+ {
+ "internalType": "bytes4",
+ "name": "",
+ "type": "bytes4"
+ }
+ ],
+ "stateMutability": "pure",
+ "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": "_fromContract",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_fromTokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "_toContract",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_toTokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_id",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_value",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferAsChild",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_fromContract",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_fromTokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "_to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_id",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_value",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFromParent",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_toContract",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_toTokenId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_id",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_value",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferToParent",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "userAddress",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address payable",
+ "name": "relayerAddress",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes",
+ "name": "functionSignature",
+ "type": "bytes"
+ }
+ ],
+ "name": "MetaTransactionExecuted",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "userAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "functionSignature",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "sigR",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "sigS",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint8",
+ "name": "sigV",
+ "type": "uint8"
+ }
+ ],
+ "name": "executeMetaTransaction",
+ "outputs": [
+ {
+ "internalType": "bytes",
+ "name": "",
+ "type": "bytes"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "user",
+ "type": "address"
+ }
+ ],
+ "name": "getNonce",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "nonce_",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "_from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "_to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "_tokenId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "_numAavegotchisToPurchase",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "_totalPrice",
+ "type": "uint256"
+ }
+ ],
+ "name": "BuyPortals",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "_buyer",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "_to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256[]",
+ "name": "_itemIds",
+ "type": "uint256[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256[]",
+ "name": "_quantities",
+ "type": "uint256[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "_totalPrice",
+ "type": "uint256"
+ }
+ ],
+ "name": "PurchaseItemsWithGhst",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "_buyer",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "_to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256[]",
+ "name": "_itemIds",
+ "type": "uint256[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256[]",
+ "name": "_quantities",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "PurchaseItemsWithVouchers",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "_buyer",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "_to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256[]",
+ "name": "_itemIds",
+ "type": "uint256[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256[]",
+ "name": "_quantities",
+ "type": "uint256[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "_totalPrice",
+ "type": "uint256"
+ }
+ ],
+ "name": "PurchaseTransferItemsWithGhst",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_ghst",
+ "type": "uint256"
+ }
+ ],
+ "name": "buyPortals",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "_itemIds",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "_quantities",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "purchaseItemsWithGhst",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "_itemIds",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "_quantities",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "purchaseTransferItemsWithGhst",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "_svgType",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_numLayers",
+ "type": "uint256"
+ }
+ ],
+ "name": "deleteLastSvgLayers",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "getAavegotchiSvg",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "ag_",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_itemId",
+ "type": "uint256"
+ }
+ ],
+ "name": "getItemSvg",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "ag_",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "_svgType",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_itemId",
+ "type": "uint256"
+ }
+ ],
+ "name": "getSvg",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "svg_",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "_svgType",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "_itemIds",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "getSvgs",
+ "outputs": [
+ {
+ "internalType": "string[]",
+ "name": "svgs_",
+ "type": "string[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "portalAavegotchisSvg",
+ "outputs": [
+ {
+ "internalType": "string[10]",
+ "name": "svg_",
+ "type": "string[10]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "_itemIds",
+ "type": "uint256[]"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint8",
+ "name": "x",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "y",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "width",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint8",
+ "name": "height",
+ "type": "uint8"
+ }
+ ],
+ "internalType": "struct Dimensions[]",
+ "name": "_dimensions",
+ "type": "tuple[]"
+ }
+ ],
+ "name": "setItemsDimensions",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "uint256",
+ "name": "sleeveId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "wearableId",
+ "type": "uint256"
+ }
+ ],
+ "internalType": "struct SvgFacet.Sleeve[]",
+ "name": "_sleeves",
+ "type": "tuple[]"
+ }
+ ],
+ "name": "setSleeves",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "_svg",
+ "type": "string"
+ },
+ {
+ "components": [
+ {
+ "internalType": "bytes32",
+ "name": "svgType",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "sizes",
+ "type": "uint256[]"
+ }
+ ],
+ "internalType": "struct LibSvg.SvgTypeAndSizes[]",
+ "name": "_typesAndSizes",
+ "type": "tuple[]"
+ }
+ ],
+ "name": "storeSvg",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "_svg",
+ "type": "string"
+ },
+ {
+ "components": [
+ {
+ "internalType": "bytes32",
+ "name": "svgType",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "ids",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "sizes",
+ "type": "uint256[]"
+ }
+ ],
+ "internalType": "struct LibSvg.SvgTypeAndIdsAndSizes[]",
+ "name": "_typesAndIdsAndSizes",
+ "type": "tuple[]"
+ }
+ ],
+ "name": "updateSvg",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256[]",
+ "name": "_tokenIds",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "OpenPortals",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "PortalOpened",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "randomNumber",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "_vrfTimeSet",
+ "type": "uint256"
+ }
+ ],
+ "name": "VrfRandomNumber",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_newFee",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "_keyHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "address",
+ "name": "_vrfCoordinator",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_link",
+ "type": "address"
+ }
+ ],
+ "name": "changeVrf",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "keyHash",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "link",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "linkBalance",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "linkBalance_",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256[]",
+ "name": "_tokenIds",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "openPortals",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "_requestId",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_randomNumber",
+ "type": "uint256"
+ }
+ ],
+ "name": "rawFulfillRandomness",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_value",
+ "type": "uint256"
+ }
+ ],
+ "name": "removeLinkTokens",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "vrfCoordinator",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "_owner",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256[]",
+ "name": "_ids",
+ "type": "uint256[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256[]",
+ "name": "_values",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "MigrateVouchers",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "ids",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "values",
+ "type": "uint256[]"
+ }
+ ],
+ "internalType": "struct VoucherMigrationFacet.VouchersOwner[]",
+ "name": "_vouchersOwners",
+ "type": "tuple[]"
+ }
+ ],
+ "name": "migrateVouchers",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "_buyer",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "_to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256[]",
+ "name": "_itemIds",
+ "type": "uint256[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256[]",
+ "name": "_quantities",
+ "type": "uint256[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "_totalPrice",
+ "type": "uint256"
+ }
+ ],
+ "name": "PurchaseItemsWithGhst",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "_buyer",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "_to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256[]",
+ "name": "_itemIds",
+ "type": "uint256[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256[]",
+ "name": "_quantities",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "PurchaseItemsWithVouchers",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "_buyer",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "_to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256[]",
+ "name": "_itemIds",
+ "type": "uint256[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256[]",
+ "name": "_quantities",
+ "type": "uint256[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "_totalPrice",
+ "type": "uint256"
+ }
+ ],
+ "name": "PurchaseTransferItemsWithGhst",
+ "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": "_tokenId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "_numAavegotchisToPurchase",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "_totalPrice",
+ "type": "uint256"
+ }
+ ],
+ "name": "Xingyun",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "_itemIds",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "_quantities",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "purchaseItemsWithGhst",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "_itemIds",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "_quantities",
+ "type": "uint256[]"
+ }
+ ],
+ "name": "purchaseTransferItemsWithGhst",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_ghst",
+ "type": "uint256"
+ }
+ ],
+ "name": "xingyun",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "_tokenId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "kinship",
+ "type": "uint256"
+ }
+ ],
+ "name": "AavegotchiInteract",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "listingId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "category",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "time",
+ "type": "uint256"
+ }
+ ],
+ "name": "ERC1155ListingCancelled",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "listingId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "category",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "time",
+ "type": "uint256"
+ }
+ ],
+ "name": "ERC1155ListingRemoved",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "listingId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "quantity",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "priceInWei",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "time",
+ "type": "uint256"
+ }
+ ],
+ "name": "UpdateERC1155Listing",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "listingId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "category",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "time",
+ "type": "uint256"
+ }
+ ],
+ "name": "ERC721ListingCancelled",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "listingId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "category",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "time",
+ "type": "uint256"
+ }
+ ],
+ "name": "ERC721ListingRemoved",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "bytes32",
+ "name": "svgType",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "sizes",
+ "type": "uint256[]"
+ }
+ ],
+ "indexed": false,
+ "internalType": "struct LibSvg.SvgTypeAndSizes[]",
+ "name": "_typesAndSizes",
+ "type": "tuple[]"
+ }
+ ],
+ "name": "StoreSvg",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "bytes32",
+ "name": "svgType",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "ids",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "sizes",
+ "type": "uint256[]"
+ }
+ ],
+ "indexed": false,
+ "internalType": "struct LibSvg.SvgTypeAndIdsAndSizes[]",
+ "name": "_typesAndIdsAndSizes",
+ "type": "tuple[]"
+ }
+ ],
+ "name": "UpdateSvg",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "facetAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "enum IDiamondCut.FacetCutAction",
+ "name": "action",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes4[]",
+ "name": "functionSelectors",
+ "type": "bytes4[]"
+ }
+ ],
+ "indexed": false,
+ "internalType": "struct IDiamondCut.FacetCut[]",
+ "name": "_diamondCut",
+ "type": "tuple[]"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "_init",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes",
+ "name": "_calldata",
+ "type": "bytes"
+ }
+ ],
+ "name": "DiamondCut",
+ "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": "_owner",
+ "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": "_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": "_fromContract",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "_fromTokenId",
+ "type": "uint256"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "_tokenTypeId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "_value",
+ "type": "uint256"
+ }
+ ],
+ "name": "TransferFromParent",
+ "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": true,
+ "internalType": "address",
+ "name": "_toContract",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "_toTokenId",
+ "type": "uint256"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "_tokenTypeId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "_value",
+ "type": "uint256"
+ }
+ ],
+ "name": "TransferToParent",
+ "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"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "_owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "_approved",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "_owner",
+ "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": "_from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "_to",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ }
+]
\ No newline at end of file
diff --git a/abi/abiERC1155.json b/abi/abiERC1155.json
new file mode 100644
index 0000000..40e13a2
--- /dev/null
+++ b/abi/abiERC1155.json
@@ -0,0 +1,262 @@
+[{
+ "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": "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": [{
+ "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": "address",
+ "name": "account",
+ "type": "address"
+ }, {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ }
+ ],
+ "name": "isApprovedForAll",
+ "outputs": [{
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }, {
+ "inputs": [{
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ }, {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ }, {
+ "internalType": "uint256[]",
+ "name": "ids",
+ "type": "uint256[]"
+ }, {
+ "internalType": "uint256[]",
+ "name": "amounts",
+ "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": "amount",
+ "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": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [{
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }, {
+ "inputs": [{
+ "internalType": "uint256",
+ "name": "id",
+ "type": "uint256"
+ }
+ ],
+ "name": "uri",
+ "outputs": [{
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+]
\ No newline at end of file
diff --git a/abi/abiERC20Interface.json b/abi/abiERC20Interface.json
new file mode 100644
index 0000000..52f09d4
--- /dev/null
+++ b/abi/abiERC20Interface.json
@@ -0,0 +1,145 @@
+[{
+ "anonymous": false,
+ "inputs": [{
+ "indexed": true,
+ "name": "from",
+ "type": "address"
+ }, {
+ "indexed": true,
+ "name": "to",
+ "type": "address"
+ }, {
+ "indexed": false,
+ "name": "tokens",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ }, {
+ "anonymous": false,
+ "inputs": [{
+ "indexed": true,
+ "name": "tokenOwner",
+ "type": "address"
+ }, {
+ "indexed": true,
+ "name": "spender",
+ "type": "address"
+ }, {
+ "indexed": false,
+ "name": "tokens",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "type": "event"
+ }, {
+ "constant": true,
+ "inputs": [],
+ "name": "totalSupply",
+ "outputs": [{
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ }, {
+ "constant": true,
+ "inputs": [{
+ "name": "tokenOwner",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [{
+ "name": "balance",
+ "type": "uint256"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ }, {
+ "constant": true,
+ "inputs": [{
+ "name": "tokenOwner",
+ "type": "address"
+ }, {
+ "name": "spender",
+ "type": "address"
+ }
+ ],
+ "name": "allowance",
+ "outputs": [{
+ "name": "remaining",
+ "type": "uint256"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ }, {
+ "constant": false,
+ "inputs": [{
+ "name": "to",
+ "type": "address"
+ }, {
+ "name": "tokens",
+ "type": "uint256"
+ }
+ ],
+ "name": "transfer",
+ "outputs": [{
+ "name": "success",
+ "type": "bool"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }, {
+ "constant": false,
+ "inputs": [{
+ "name": "spender",
+ "type": "address"
+ }, {
+ "name": "tokens",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [{
+ "name": "success",
+ "type": "bool"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }, {
+ "constant": false,
+ "inputs": [{
+ "name": "from",
+ "type": "address"
+ }, {
+ "name": "to",
+ "type": "address"
+ }, {
+ "name": "tokens",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [{
+ "name": "success",
+ "type": "bool"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+]
diff --git a/abi/abiERC721Basic.json b/abi/abiERC721Basic.json
new file mode 100644
index 0000000..92ab78d
--- /dev/null
+++ b/abi/abiERC721Basic.json
@@ -0,0 +1,226 @@
+[{
+ "anonymous": false,
+ "inputs": [{
+ "indexed": true,
+ "name": "_from",
+ "type": "address"
+ }, {
+ "indexed": true,
+ "name": "_to",
+ "type": "address"
+ }, {
+ "indexed": false,
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ }, {
+ "anonymous": false,
+ "inputs": [{
+ "indexed": true,
+ "name": "_owner",
+ "type": "address"
+ }, {
+ "indexed": true,
+ "name": "_approved",
+ "type": "address"
+ }, {
+ "indexed": false,
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "type": "event"
+ }, {
+ "anonymous": false,
+ "inputs": [{
+ "indexed": true,
+ "name": "_owner",
+ "type": "address"
+ }, {
+ "indexed": true,
+ "name": "_operator",
+ "type": "address"
+ }, {
+ "indexed": false,
+ "name": "_approved",
+ "type": "bool"
+ }
+ ],
+ "name": "ApprovalForAll",
+ "type": "event"
+ }, {
+ "constant": true,
+ "inputs": [{
+ "name": "_owner",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [{
+ "name": "_balance",
+ "type": "uint256"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ }, {
+ "constant": true,
+ "inputs": [{
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ownerOf",
+ "outputs": [{
+ "name": "_owner",
+ "type": "address"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ }, {
+ "constant": true,
+ "inputs": [{
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "exists",
+ "outputs": [{
+ "name": "_exists",
+ "type": "bool"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ }, {
+ "constant": false,
+ "inputs": [{
+ "name": "_to",
+ "type": "address"
+ }, {
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [],
+ "payable": false,
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }, {
+ "constant": true,
+ "inputs": [{
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "getApproved",
+ "outputs": [{
+ "name": "_operator",
+ "type": "address"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ }, {
+ "constant": false,
+ "inputs": [{
+ "name": "_operator",
+ "type": "address"
+ }, {
+ "name": "_approved",
+ "type": "bool"
+ }
+ ],
+ "name": "setApprovalForAll",
+ "outputs": [],
+ "payable": false,
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }, {
+ "constant": true,
+ "inputs": [{
+ "name": "_owner",
+ "type": "address"
+ }, {
+ "name": "_operator",
+ "type": "address"
+ }
+ ],
+ "name": "isApprovedForAll",
+ "outputs": [{
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ }, {
+ "constant": false,
+ "inputs": [{
+ "name": "_from",
+ "type": "address"
+ }, {
+ "name": "_to",
+ "type": "address"
+ }, {
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [],
+ "payable": false,
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }, {
+ "constant": false,
+ "inputs": [{
+ "name": "_from",
+ "type": "address"
+ }, {
+ "name": "_to",
+ "type": "address"
+ }, {
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "safeTransferFrom",
+ "outputs": [],
+ "payable": false,
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }, {
+ "constant": false,
+ "inputs": [{
+ "name": "_from",
+ "type": "address"
+ }, {
+ "name": "_to",
+ "type": "address"
+ }, {
+ "name": "_tokenId",
+ "type": "uint256"
+ }, {
+ "name": "_data",
+ "type": "bytes"
+ }
+ ],
+ "name": "safeTransferFrom",
+ "outputs": [],
+ "payable": false,
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+]
\ No newline at end of file
diff --git a/abi/abiERC721Enumerable.json b/abi/abiERC721Enumerable.json
new file mode 100644
index 0000000..514d180
--- /dev/null
+++ b/abi/abiERC721Enumerable.json
@@ -0,0 +1,273 @@
+[{
+ "constant": true,
+ "inputs": [{
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "getApproved",
+ "outputs": [{
+ "name": "_operator",
+ "type": "address"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ }, {
+ "constant": false,
+ "inputs": [{
+ "name": "_to",
+ "type": "address"
+ }, {
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [],
+ "payable": false,
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }, {
+ "constant": false,
+ "inputs": [{
+ "name": "_from",
+ "type": "address"
+ }, {
+ "name": "_to",
+ "type": "address"
+ }, {
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [],
+ "payable": false,
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }, {
+ "constant": false,
+ "inputs": [{
+ "name": "_from",
+ "type": "address"
+ }, {
+ "name": "_to",
+ "type": "address"
+ }, {
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "safeTransferFrom",
+ "outputs": [],
+ "payable": false,
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }, {
+ "constant": true,
+ "inputs": [{
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "exists",
+ "outputs": [{
+ "name": "_exists",
+ "type": "bool"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ }, {
+ "constant": true,
+ "inputs": [{
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ownerOf",
+ "outputs": [{
+ "name": "_owner",
+ "type": "address"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ }, {
+ "constant": true,
+ "inputs": [{
+ "name": "_owner",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [{
+ "name": "_balance",
+ "type": "uint256"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ }, {
+ "constant": false,
+ "inputs": [{
+ "name": "_operator",
+ "type": "address"
+ }, {
+ "name": "_approved",
+ "type": "bool"
+ }
+ ],
+ "name": "setApprovalForAll",
+ "outputs": [],
+ "payable": false,
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }, {
+ "constant": false,
+ "inputs": [{
+ "name": "_from",
+ "type": "address"
+ }, {
+ "name": "_to",
+ "type": "address"
+ }, {
+ "name": "_tokenId",
+ "type": "uint256"
+ }, {
+ "name": "_data",
+ "type": "bytes"
+ }
+ ],
+ "name": "safeTransferFrom",
+ "outputs": [],
+ "payable": false,
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }, {
+ "constant": true,
+ "inputs": [{
+ "name": "_owner",
+ "type": "address"
+ }, {
+ "name": "_operator",
+ "type": "address"
+ }
+ ],
+ "name": "isApprovedForAll",
+ "outputs": [{
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ }, {
+ "anonymous": false,
+ "inputs": [{
+ "indexed": true,
+ "name": "_from",
+ "type": "address"
+ }, {
+ "indexed": true,
+ "name": "_to",
+ "type": "address"
+ }, {
+ "indexed": false,
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ }, {
+ "anonymous": false,
+ "inputs": [{
+ "indexed": true,
+ "name": "_owner",
+ "type": "address"
+ }, {
+ "indexed": true,
+ "name": "_approved",
+ "type": "address"
+ }, {
+ "indexed": false,
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "type": "event"
+ }, {
+ "anonymous": false,
+ "inputs": [{
+ "indexed": true,
+ "name": "_owner",
+ "type": "address"
+ }, {
+ "indexed": true,
+ "name": "_operator",
+ "type": "address"
+ }, {
+ "indexed": false,
+ "name": "_approved",
+ "type": "bool"
+ }
+ ],
+ "name": "ApprovalForAll",
+ "type": "event"
+ }, {
+ "constant": true,
+ "inputs": [],
+ "name": "totalSupply",
+ "outputs": [{
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ }, {
+ "constant": true,
+ "inputs": [{
+ "name": "_owner",
+ "type": "address"
+ }, {
+ "name": "_index",
+ "type": "uint256"
+ }
+ ],
+ "name": "tokenOfOwnerByIndex",
+ "outputs": [{
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ }, {
+ "constant": true,
+ "inputs": [{
+ "name": "_index",
+ "type": "uint256"
+ }
+ ],
+ "name": "tokenByIndex",
+ "outputs": [{
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ }
+]
\ No newline at end of file
diff --git a/abi/abiERC721Metadata.json b/abi/abiERC721Metadata.json
new file mode 100644
index 0000000..f6dcc56
--- /dev/null
+++ b/abi/abiERC721Metadata.json
@@ -0,0 +1,266 @@
+[{
+ "constant": true,
+ "inputs": [{
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "getApproved",
+ "outputs": [{
+ "name": "_operator",
+ "type": "address"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ }, {
+ "constant": false,
+ "inputs": [{
+ "name": "_to",
+ "type": "address"
+ }, {
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [],
+ "payable": false,
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }, {
+ "constant": false,
+ "inputs": [{
+ "name": "_from",
+ "type": "address"
+ }, {
+ "name": "_to",
+ "type": "address"
+ }, {
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [],
+ "payable": false,
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }, {
+ "constant": false,
+ "inputs": [{
+ "name": "_from",
+ "type": "address"
+ }, {
+ "name": "_to",
+ "type": "address"
+ }, {
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "safeTransferFrom",
+ "outputs": [],
+ "payable": false,
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }, {
+ "constant": true,
+ "inputs": [{
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "exists",
+ "outputs": [{
+ "name": "_exists",
+ "type": "bool"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ }, {
+ "constant": true,
+ "inputs": [{
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ownerOf",
+ "outputs": [{
+ "name": "_owner",
+ "type": "address"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ }, {
+ "constant": true,
+ "inputs": [{
+ "name": "_owner",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [{
+ "name": "_balance",
+ "type": "uint256"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ }, {
+ "constant": false,
+ "inputs": [{
+ "name": "_operator",
+ "type": "address"
+ }, {
+ "name": "_approved",
+ "type": "bool"
+ }
+ ],
+ "name": "setApprovalForAll",
+ "outputs": [],
+ "payable": false,
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }, {
+ "constant": false,
+ "inputs": [{
+ "name": "_from",
+ "type": "address"
+ }, {
+ "name": "_to",
+ "type": "address"
+ }, {
+ "name": "_tokenId",
+ "type": "uint256"
+ }, {
+ "name": "_data",
+ "type": "bytes"
+ }
+ ],
+ "name": "safeTransferFrom",
+ "outputs": [],
+ "payable": false,
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }, {
+ "constant": true,
+ "inputs": [{
+ "name": "_owner",
+ "type": "address"
+ }, {
+ "name": "_operator",
+ "type": "address"
+ }
+ ],
+ "name": "isApprovedForAll",
+ "outputs": [{
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ }, {
+ "anonymous": false,
+ "inputs": [{
+ "indexed": true,
+ "name": "_from",
+ "type": "address"
+ }, {
+ "indexed": true,
+ "name": "_to",
+ "type": "address"
+ }, {
+ "indexed": false,
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ }, {
+ "anonymous": false,
+ "inputs": [{
+ "indexed": true,
+ "name": "_owner",
+ "type": "address"
+ }, {
+ "indexed": true,
+ "name": "_approved",
+ "type": "address"
+ }, {
+ "indexed": false,
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "type": "event"
+ }, {
+ "anonymous": false,
+ "inputs": [{
+ "indexed": true,
+ "name": "_owner",
+ "type": "address"
+ }, {
+ "indexed": true,
+ "name": "_operator",
+ "type": "address"
+ }, {
+ "indexed": false,
+ "name": "_approved",
+ "type": "bool"
+ }
+ ],
+ "name": "ApprovalForAll",
+ "type": "event"
+ }, {
+ "constant": true,
+ "inputs": [],
+ "name": "name",
+ "outputs": [{
+ "name": "_name",
+ "type": "string"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ }, {
+ "constant": true,
+ "inputs": [],
+ "name": "symbol",
+ "outputs": [{
+ "name": "_symbol",
+ "type": "string"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ }, {
+ "constant": true,
+ "inputs": [{
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "tokenURI",
+ "outputs": [{
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ }
+]
\ No newline at end of file
diff --git a/abi/abiERC721Receiver.json b/abi/abiERC721Receiver.json
new file mode 100644
index 0000000..f72978b
--- /dev/null
+++ b/abi/abiERC721Receiver.json
@@ -0,0 +1,24 @@
+[{
+ "constant": false,
+ "inputs": [{
+ "name": "_from",
+ "type": "address"
+ }, {
+ "name": "_tokenId",
+ "type": "uint256"
+ }, {
+ "name": "_data",
+ "type": "bytes"
+ }
+ ],
+ "name": "onERC721Received",
+ "outputs": [{
+ "name": "",
+ "type": "bytes4"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+]
\ No newline at end of file
diff --git a/abi/abiERC721Token.json b/abi/abiERC721Token.json
new file mode 100644
index 0000000..0d03d18
--- /dev/null
+++ b/abi/abiERC721Token.json
@@ -0,0 +1,325 @@
+[{
+ "constant": true,
+ "inputs": [{
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "getApproved",
+ "outputs": [{
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ }, {
+ "constant": false,
+ "inputs": [{
+ "name": "_to",
+ "type": "address"
+ }, {
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [],
+ "payable": false,
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }, {
+ "constant": false,
+ "inputs": [{
+ "name": "_from",
+ "type": "address"
+ }, {
+ "name": "_to",
+ "type": "address"
+ }, {
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [],
+ "payable": false,
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }, {
+ "constant": false,
+ "inputs": [{
+ "name": "_from",
+ "type": "address"
+ }, {
+ "name": "_to",
+ "type": "address"
+ }, {
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "safeTransferFrom",
+ "outputs": [],
+ "payable": false,
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }, {
+ "constant": true,
+ "inputs": [{
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "exists",
+ "outputs": [{
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ }, {
+ "constant": true,
+ "inputs": [{
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ownerOf",
+ "outputs": [{
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ }, {
+ "constant": true,
+ "inputs": [{
+ "name": "_owner",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [{
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ }, {
+ "constant": false,
+ "inputs": [{
+ "name": "_to",
+ "type": "address"
+ }, {
+ "name": "_approved",
+ "type": "bool"
+ }
+ ],
+ "name": "setApprovalForAll",
+ "outputs": [],
+ "payable": false,
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }, {
+ "constant": false,
+ "inputs": [{
+ "name": "_from",
+ "type": "address"
+ }, {
+ "name": "_to",
+ "type": "address"
+ }, {
+ "name": "_tokenId",
+ "type": "uint256"
+ }, {
+ "name": "_data",
+ "type": "bytes"
+ }
+ ],
+ "name": "safeTransferFrom",
+ "outputs": [],
+ "payable": false,
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }, {
+ "constant": true,
+ "inputs": [{
+ "name": "_owner",
+ "type": "address"
+ }, {
+ "name": "_operator",
+ "type": "address"
+ }
+ ],
+ "name": "isApprovedForAll",
+ "outputs": [{
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ }, {
+ "inputs": [{
+ "name": "_name",
+ "type": "string"
+ }, {
+ "name": "_symbol",
+ "type": "string"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ }, {
+ "anonymous": false,
+ "inputs": [{
+ "indexed": true,
+ "name": "_from",
+ "type": "address"
+ }, {
+ "indexed": true,
+ "name": "_to",
+ "type": "address"
+ }, {
+ "indexed": false,
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ }, {
+ "anonymous": false,
+ "inputs": [{
+ "indexed": true,
+ "name": "_owner",
+ "type": "address"
+ }, {
+ "indexed": true,
+ "name": "_approved",
+ "type": "address"
+ }, {
+ "indexed": false,
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "type": "event"
+ }, {
+ "anonymous": false,
+ "inputs": [{
+ "indexed": true,
+ "name": "_owner",
+ "type": "address"
+ }, {
+ "indexed": true,
+ "name": "_operator",
+ "type": "address"
+ }, {
+ "indexed": false,
+ "name": "_approved",
+ "type": "bool"
+ }
+ ],
+ "name": "ApprovalForAll",
+ "type": "event"
+ }, {
+ "constant": true,
+ "inputs": [],
+ "name": "name",
+ "outputs": [{
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ }, {
+ "constant": true,
+ "inputs": [],
+ "name": "symbol",
+ "outputs": [{
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ }, {
+ "constant": true,
+ "inputs": [{
+ "name": "_tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "tokenURI",
+ "outputs": [{
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ }, {
+ "constant": true,
+ "inputs": [{
+ "name": "_owner",
+ "type": "address"
+ }, {
+ "name": "_index",
+ "type": "uint256"
+ }
+ ],
+ "name": "tokenOfOwnerByIndex",
+ "outputs": [{
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ }, {
+ "constant": true,
+ "inputs": [],
+ "name": "totalSupply",
+ "outputs": [{
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ }, {
+ "constant": true,
+ "inputs": [{
+ "name": "_index",
+ "type": "uint256"
+ }
+ ],
+ "name": "tokenByIndex",
+ "outputs": [{
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ }
+]
\ No newline at end of file
diff --git a/avaxtokenindex.json b/avaxtokenindex.json
new file mode 100644
index 0000000..9478e4b
--- /dev/null
+++ b/avaxtokenindex.json
@@ -0,0 +1,64 @@
+{
+ "tokens": {
+ "STG": {
+ "category": "DEFI",
+ "chain": "AVAX",
+ "contractAddress": "0x2f6f07cdcf3588944bf4c42ac74ff24bf56e7590",
+ "decimals": 18,
+ "name": "StarGate token",
+ "origins": [
+ "https://snowtrace.io/address/0x2f6f07cdcf3588944bf4c42ac74ff24bf56e7590",
+ "https://www.coingecko.com/en/coins/stargate-finance"
+ ],
+ "symbol": "STG"
+ },
+ "PNG": {
+ "category": "DEFI",
+ "chain": "AVAX",
+ "contractAddress": "0x60781c2586d68229fde47564546784ab3faca982",
+ "decimals": 18,
+ "name": "PNG token",
+ "origins": [
+ "https://snowtrace.io/address/0x60781c2586d68229fde47564546784ab3faca982",
+ "https://www.coingecko.com/en/coins/pangolin"
+ ],
+ "symbol": "PNG"
+ },
+ "USDT": {
+ "category": "STABLECOIN",
+ "chain": "AVAX",
+ "contractAddress": "0x9702230a8ea53601f5cd2dc00fdbc13d4df4a8c7",
+ "decimals": 18,
+ "name": "Tether stablecoin token",
+ "origins": [
+ "https://snowtrace.io/address/0x9702230a8ea53601f5cd2dc00fdbc13d4df4a8c7",
+ "https://www.coingecko.com/en/coins/tether"
+ ],
+ "symbol": "USDT"
+ },
+ "USDC": {
+ "category": "STABLECOIN",
+ "chain": "AVAX",
+ "contractAddress": "0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e",
+ "decimals": 6,
+ "name": "USDC stablecoin token",
+ "origins": [
+ "https://snowtrace.io/address/0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e",
+ "https://www.coingecko.com/en/coins/usd-coin"
+ ],
+ "symbol": "USDC"
+ },
+ "DAI": {
+ "category": "STABLECOIN",
+ "chain": "AVAX",
+ "contractAddress": "0xd586e7f844cea2f87f50152665bcbc2c279d8d70",
+ "decimals": 18,
+ "name": "DAI stablecoin token",
+ "origins": [
+ "https://snowtrace.io/address/0xd586e7f844cea2f87f50152665bcbc2c279d8d70",
+ "https://www.coingecko.com/en/coins/dai"
+ ],
+ "symbol": "DAI"
+ }
+ }
+}
diff --git a/bitkubnfttokenindex.json b/bitkubnfttokenindex.json
new file mode 100644
index 0000000..754e8d8
--- /dev/null
+++ b/bitkubnfttokenindex.json
@@ -0,0 +1,32 @@
+{
+ "erc1155tokens": {},
+ "erc721tokens": {
+ "MMV_ITEM": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0xd08ac40b3a0a7fb20b026a3b6cd5d7cfadc3d6f5",
+ "description": "Morning Moon Village game item",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://www.bkcscan.com/address/0xd08ac40b3a0a7fb20b026a3b6cd5d7cfadc3d6f5",
+ "https://morningmoonvillage.com/",
+ "https://mmv.megaland.io/"
+ ],
+ "symbol": "MMV_ITEM"
+ },
+ "SANDX": {
+ "category": "NFT",
+ "chain": "BITKUB",
+ "contractAddress": "0x998c4a4f5231b10ad867bd5d99fa181495f34cd8",
+ "description": "SandX NFT",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://www.bkcscan.com/address/0x998c4a4f5231b10ad867bd5d99fa181495f34cd8",
+ "https://www.megaland.io/"
+ ],
+ "symbol": "SANDX"
+ }
+ }
+}
diff --git a/bitkubtokenindex.json b/bitkubtokenindex.json
new file mode 100644
index 0000000..09573a8
--- /dev/null
+++ b/bitkubtokenindex.json
@@ -0,0 +1,313 @@
+{
+ "tokens": {
+ "MMV_CABBAGESEED": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0x1f8b5af0ec97c44b24366b36c40f2d4aca2c73e2",
+ "decimals": 18,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0x1f8b5af0ec97c44b24366b36c40f2d4aca2c73e2/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_CABBAGESEED"
+ },
+ "MMV_TOMATOSOUP": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0xbE46a81D181069aC0Ff18F4F7239Df10422E6DC3",
+ "decimals": 0,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0xbE46a81D181069aC0Ff18F4F7239Df10422E6DC3/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_TOMATOSOUP"
+ },
+ "MMV_GREENHERB": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0xde496524c30c460922e7810ddc6c806c0e2c5354",
+ "decimals": 0,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0xde496524c30c460922e7810ddc6c806c0e2c5354/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_GREENHERB"
+ },
+ "MMV_SHITAKE_MUSHROOM": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0xd3b314b101b26fa2bd19df0d845a632d72c4fc44",
+ "decimals": 0,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0xd3b314b101b26fa2bd19df0d845a632d72c4fc44/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_SHITAKE_MUSHROOM"
+ },
+ "USDT": {
+ "category": "STABLECOIN",
+ "chain": "BITKUB",
+ "contractAddress": "0x7d984c24d2499d840eb3b7016077164e15e5faa6",
+ "decimals": 18,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0x7d984c24d2499d840eb3b7016077164e15e5faa6/token-transfers"
+ ],
+ "symbol": "USDT"
+ },
+ "MMV_TOMATOSEED": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0xe991151Bf43bD712beAC33e5cFF2580841c9b440",
+ "decimals": 18,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0xe991151Bf43bD712beAC33e5cFF2580841c9b440/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_TOMATOSEED"
+ },
+ "MMV_LEATHER_PIECE": {
+ "category": "DEFI",
+ "chain": "BITKUB",
+ "contractAddress": "0x15aa87eb74069d3800f8e75A93FC04fda79AA24d",
+ "decimals": 0,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0x15aa87eb74069d3800f8e75A93FC04fda79AA24d/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_LEATHER_PIECE"
+ },
+ "MMV_HONEY": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0x575d7bfdbdf255d5741571334f159d903de1544f",
+ "decimals": 0,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0x575d7bfdbdf255d5741571334f159d903de1544f/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_HONEY"
+ },
+ "KKUB": {
+ "category": "DEFI",
+ "chain": "BITKUB",
+ "contractAddress": "0x67eBD850304c70d983B2d1b93ea79c7CD6c3F6b5",
+ "decimals": 18,
+ "name": "Wrapped KUB (KKUB) token",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0x67eBD850304c70d983B2d1b93ea79c7CD6c3F6b5/token-transfers"
+ ],
+ "symbol": "KKUB"
+ },
+ "MMV_SF_CABBAGE": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0xc2990515610028139f68016b321a0c36a5101104",
+ "decimals": 0,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0xc2990515610028139f68016b321a0c36a5101104/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_SF_CABBAGE"
+ },
+ "MMV_SILVERKEY": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0x73d05f935534918bbc87cb353928cb957ed03697",
+ "decimals": 0,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0x73d05f935534918bbc87cb353928cb957ed03697/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_SILVERKEY"
+ },
+ "MMV_LUMI": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0x95013dcb6a561e6c003aed9c43fb8b64008aa361",
+ "decimals": 18,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0x95013dcb6a561e6c003aed9c43fb8b64008aa361/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_LUMI"
+ },
+ "MMV_DRIEDAPPLE": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0xb035c229903a0cff939be36b532d8c11204e6837",
+ "decimals": 0,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0xb035c229903a0cff939be36b532d8c11204e6837/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_DRIEDAPPLE"
+ },
+ "MMV_BANANA": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0x0944882cf373adc8c3de740821fb14c8669e89eb",
+ "decimals": 0,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0x0944882cf373adc8c3de740821fb14c8669e89eb/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_BANANA"
+ },
+ "MMV_REDHERB": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0x3F69C740456150268C5e23bD05a2A10Bf9e5c3CB",
+ "decimals": 0,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0x3F69C740456150268C5e23bD05a2A10Bf9e5c3CB/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_REDHERB"
+ },
+ "MMV_HEALTHPOTION": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0xbd60c8caf6e22907576d9e363ab1f91b43aaf769",
+ "decimals": 0,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0xbd60c8caf6e22907576d9e363ab1f91b43aaf769/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_HEALTHPOTION"
+ },
+ "MMV_DIAMON_LP": {
+ "category": "DEFI",
+ "chain": "BITKUB",
+ "contractAddress": "0x7Bf51541208A70b784006eF7Bd6F774F4012Cd38",
+ "decimals": 18,
+ "name": "Morning Moon Village diamon LP",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0x7Bf51541208A70b784006eF7Bd6F774F4012Cd38/token-transfers"
+ ],
+ "symbol": "MMV_DIAMON_LP"
+ },
+ "MMV_RAG": {
+ "category": "DEFI",
+ "chain": "BITKUB",
+ "contractAddress": "0x1F14690e6c7D02fCeB67c6b818aa2C093e16fe27",
+ "decimals": 0,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0x1F14690e6c7D02fCeB67c6b818aa2C093e16fe27/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_RAG"
+ },
+ "MMV_KTRUMPET_MUSHROOM": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0xc14f24835efe355106ab8725488f16f93c8c5f96",
+ "decimals": 0,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0xc14f24835efe355106ab8725488f16f93c8c5f96/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_KTRUMPET_MUSHROOM"
+ },
+ "MMV_CORNSEED": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0xe27aebed61be207e83fc05fbc408420c737881da",
+ "decimals": 18,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0xe27aebed61be207e83fc05fbc408420c737881da/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_CORNSEED"
+ },
+ "MMV_GREENAPPLE": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0x417e28bd41cd45d9f996b69450f81b02821a6d64",
+ "decimals": 0,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0x417e28bd41cd45d9f996b69450f81b02821a6d64/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_GREENAPPLE"
+ },
+ "MMV_CARROTSEED": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0x7b263d648fff39142abecb07a1bb85297e09982d",
+ "decimals": 18,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0x7b263d648fff39142abecb07a1bb85297e09982d/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_CARROTSEED"
+ },
+ "MMV_LHEALTHPOTION": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0xe66f21d817af8f99129af6023332dd7b37503b9d",
+ "decimals": 0,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0xe66f21d817af8f99129af6023332dd7b37503b9d/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_LHEALTHPOTION"
+ },
+ "MMV_SALAD": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0x2944d051dc66669e04629b827ae9e3ebcb1e48d9",
+ "decimals": 0,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0x2944d051dc66669e04629b827ae9e3ebcb1e48d9/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_SALAD"
+ },
+ "MMV_CORNSOUP": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0x2b09ae76dfc601210407560502b340e104787b34",
+ "decimals": 0,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0x2b09ae76dfc601210407560502b340e104787b34/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_CORNSOUP"
+ },
+ "MMV_WBUTTON_MUSHROOM": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0xcb74a1A9dB4285E97D4dE8aa4B61cd10277Ab479",
+ "decimals": 0,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0xcb74a1A9dB4285E97D4dE8aa4B61cd10277Ab479/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_WBUTTON_MUSHROOM"
+ }
+ }
+}
diff --git a/bscnfttokenindex.json b/bscnfttokenindex.json
new file mode 100644
index 0000000..a880ffd
--- /dev/null
+++ b/bscnfttokenindex.json
@@ -0,0 +1,100 @@
+{
+ "erc1155tokens": {},
+ "erc721tokens": {
+ "DREAMCARD": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0xe6965b4f189dbdb2bd65e60abaeb531b6fe9580b",
+ "description": "X World Games Dreamcard",
+ "linked_tokens": [
+ "BSC:XWG"
+ ],
+ "mintBlock": 0,
+ "origins": [
+ "https://bscscan.com/address/0xe6965b4f189dbdb2bd65e60abaeb531b6fe9580b",
+ "https://babylons.io/outerringofficial"
+ ],
+ "symbol": "DREAMCARD"
+ },
+ "OUTERRINGMMO_SPACEVEH": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0xceaac6759038d4d3b8791683b27b1021efa57003",
+ "description": "Outer Ring MMO Space Vehicle",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://bscscan.com/token/0xceaac6759038d4d3b8791683b27b1021efa57003",
+ "https://babylons.io/outerringofficial"
+ ],
+ "symbol": "OUTERRINGMMO_SPACEVEH"
+ },
+ "OUTERRINGMMO_ARMOR": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0x0b36f379d7b3b4588f8b8e7e65091b2c44fa6dde",
+ "description": "Outer Ring MMO Armor",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://bscscan.com/token/0x0b36f379d7b3b4588f8b8e7e65091b2c44fa6dde",
+ "https://babylons.io/outerringofficial"
+ ],
+ "symbol": "OUTERRINGMMO_ARMOR"
+ },
+ "OUTERRINGMMO_EXOCRED": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0x3fb6e0dd0eefff9615f186a6bb3a66a396ed0a58",
+ "description": "Outer Ring MMO Exocredits",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://bscscan.com/address/0x3fb6e0dd0eefff9615f186a6bb3a66a396ed0a58",
+ "https://babylons.io/outerringofficial"
+ ],
+ "symbol": "OUTERRINGMMO_EXOCRED"
+ },
+ "OUTERRINGMMO_LANDVEH": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0x21d7d56350fcf7470e4ac38bb2f32c1461a73d8c",
+ "description": "Outer Ring MMO Land Vehicle",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://bscscan.com/token/0x21d7d56350fcf7470e4ac38bb2f32c1461a73d8c",
+ "https://babylons.io/outerringofficial"
+ ],
+ "symbol": "OUTERRINGMMO_LANDVEH"
+ },
+ "STELLAFANTASY_ASSET": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0x80461f88de22b2363113226f0749a7a59cc2225a",
+ "description": "Stella Fantasy Asset",
+ "linked_tokens": [
+ "BSC:SFTY"
+ ],
+ "mintBlock": 0,
+ "origins": [
+ "https://bscscan.com/token/0x80461f88de22b2363113226f0749a7a59cc2225a",
+ "https://www.stellafantasy.io/"
+ ],
+ "symbol": "STELLAFANTASY_ASSET"
+ },
+ "OUTERRINGMMO_WEAPON": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0xeb1aca4e9aa3448b7fecb2b555301325b5931ad9",
+ "description": "Outer Ring MMO Weapon",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://bscscan.com/token/0xeb1aca4e9aa3448b7fecb2b555301325b5931ad9",
+ "https://babylons.io/outerringofficial"
+ ],
+ "symbol": "OUTERRINGMMO_WEAPON"
+ }
+ }
+}
diff --git a/bsctokenindex.json b/bsctokenindex.json
new file mode 100644
index 0000000..a036ca4
--- /dev/null
+++ b/bsctokenindex.json
@@ -0,0 +1,364 @@
+{
+ "tokens": {
+ "STARGATE_BUSD_LP": {
+ "category": "LIQUIDITY_PROVIDER",
+ "chain": "BSC",
+ "contractAddress": "0x98a5737749490856b401db5dc27f522fc314a4e1",
+ "decimals": 18,
+ "name": "StarGate sBUSD Pool token",
+ "origins": [
+ "https://bscscan.com/token/0x98a5737749490856b401db5dc27f522fc314a4e1"
+ ],
+ "symbol": "STARGATE_BUSD_LP"
+ },
+ "SUPS": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0xc99cfaa8f5d9bd9050182f29b83cc9888c5846c4",
+ "decimals": 18,
+ "name": "Supremacy game token",
+ "origins": [
+ "https://bscscan.com/address/0xc99cfaa8f5d9bd9050182f29b83cc9888c5846c4",
+ "https://www.coingecko.com/en/coins/supremacy"
+ ],
+ "symbol": "SUPS"
+ },
+ "VAN": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0xd3dbf84f7aed90d5f56e8d7cab2f43004e9ef6a6",
+ "decimals": 18,
+ "name": "Outer Ring MMO Vanadium Token",
+ "origins": [
+ "https://bscscan.com/token/0xd3dbf84f7aed90d5f56e8d7cab2f43004e9ef6a6"
+ ],
+ "symbol": "VAN"
+ },
+ "STG": {
+ "category": "DEFI",
+ "chain": "BSC",
+ "contractAddress": "0xb0d502e938ed5f4df2e681fe6e419ff29631d62b",
+ "decimals": 18,
+ "name": "StarGate token",
+ "origins": [
+ "https://bscscan.com/address/0xb0d502e938ed5f4df2e681fe6e419ff29631d62b",
+ "https://www.coingecko.com/en/coins/stargate-finance"
+ ],
+ "symbol": "STG"
+ },
+ "USDT": {
+ "category": "STABLECOIN",
+ "chain": "BSC",
+ "contractAddress": "0x55d398326f99059ff775485246999027b3197955",
+ "decimals": 18,
+ "name": "Tether stablecoin token",
+ "origins": [
+ "https://bscscan.com/address/0x55d398326f99059ff775485246999027b3197955",
+ "https://www.coingecko.com/en/coins/tether"
+ ],
+ "symbol": "USDT"
+ },
+ "XVS": {
+ "category": "DEFI",
+ "chain": "BSC",
+ "contractAddress": "0xcf6bb5389c92bdda8a3747ddb454cb7a64626c63",
+ "decimals": 18,
+ "name": "Venus Token",
+ "origins": [
+ "https://bscscan.com/address/0xcf6bb5389c92bdda8a3747ddb454cb7a64626c63",
+ "https://www.coingecko.com/en/coins/venus"
+ ],
+ "symbol": "XVS"
+ },
+ "PLU": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0x07958be5d12365db62a6535d0a88105944a2e81e",
+ "decimals": 18,
+ "name": "Outer Ring MMO Plutonium Token",
+ "origins": [
+ "https://bscscan.com/token/0x07958be5d12365db62a6535d0a88105944a2e81e"
+ ],
+ "symbol": "PLU"
+ },
+ "ACE": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0x6bf6c2b429421a55d90a02c56b2d8bffbc636039",
+ "decimals": 18,
+ "name": "Outer Ring MMO Acetylene Token",
+ "origins": [
+ "https://bscscan.com/token/0x6bf6c2b429421a55d90a02c56b2d8bffbc636039"
+ ],
+ "symbol": "ACE"
+ },
+ "COP": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0x892f23e32b82ef0d5394cf33dcd4dff7f4b274b0",
+ "decimals": 18,
+ "name": "Outer Ring MMO Copper Token",
+ "origins": [
+ "https://bscscan.com/token/0x892f23e32b82ef0d5394cf33dcd4dff7f4b274b0"
+ ],
+ "symbol": "COP"
+ },
+ "CHMB": {
+ "category": "DEFI",
+ "chain": "BSC",
+ "contractAddress": "0x5492ef6aeeba1a3896357359ef039a8b11621b45",
+ "decimals": 18,
+ "name": "Chumbi Valley Game Token",
+ "origins": [
+ "https://bscscan.com/token/0x5492ef6aeeba1a3896357359ef039a8b11621b45",
+ "https://www.coingecko.com/en/coins/chumbai-valley"
+ ],
+ "symbol": "CHMB"
+ },
+ "VIKINGSWAP": {
+ "category": "DEFI",
+ "chain": "BSC",
+ "contractAddress": "0x896ede222d3f7f3414e136a2791bdb08aaa25ce0",
+ "decimals": 18,
+ "name": "Vikingswap Token",
+ "origins": [
+ "https://bscscan.com/address/0x896ede222d3f7f3414e136a2791bdb08aaa25ce0",
+ "https://www.coingecko.com/en/coins/viking-swap"
+ ],
+ "symbol": "VIKINGSWAP"
+ },
+ "BABYCAKE": {
+ "category": "DEFI",
+ "chain": "BSC",
+ "contractAddress": "0xdb8d30b74bf098af214e862c90e647bbb1fcc58c",
+ "decimals": 18,
+ "name": "BABYCAKE DEFI reflection Token",
+ "origins": [
+ "https://bscscan.com/token/0xdb8d30b74bf098af214e862c90e647bbb1fcc58c",
+ "https://www.coingecko.com/en/coins/baby-cake"
+ ],
+ "symbol": "BABYCAKE"
+ },
+ "CAKE": {
+ "category": "DEFI",
+ "chain": "BSC",
+ "contractAddress": "0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82",
+ "decimals": 18,
+ "name": "Pancakeswap DEFI Token",
+ "origins": [
+ "https://bscscan.com/token/0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82",
+ "https://www.coingecko.com/en/coins/pancakeswap"
+ ],
+ "symbol": "CAKE"
+ },
+ "MOBOX": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0x3203c9e46ca618c8c1ce5dc67e7e9d75f5da2377",
+ "decimals": 18,
+ "name": "MOBOX game token",
+ "origins": [
+ "https://bscscan.com/address/0x3203c9e46ca618c8c1ce5dc67e7e9d75f5da2377",
+ "https://www.coingecko.com/en/coins/mobox"
+ ],
+ "symbol": "MOBOX"
+ },
+ "NIC": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0xf9a71cba51e260e184a72d9edf888d3f99f3bac1",
+ "decimals": 18,
+ "name": "Outer Ring MMO Nickel Token",
+ "origins": [
+ "https://bscscan.com/token/0xf9a71cba51e260e184a72d9edf888d3f99f3bac1"
+ ],
+ "symbol": "NIC"
+ },
+ "XWG": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0x6b23c89196deb721e6fd9726e6c76e4810a464bc",
+ "decimals": 18,
+ "name": "X World Games Token",
+ "origins": [
+ "https://bscscan.com/address/0x6b23c89196deb721e6fd9726e6c76e4810a464bc",
+ "https://www.coingecko.com/en/coins/x-world-games"
+ ],
+ "symbol": "XWG"
+ },
+ "GQ": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0xf700d4c708c2be1463e355f337603183d20e0808",
+ "decimals": 18,
+ "name": "Outer Ring MMO Game Token",
+ "origins": [
+ "https://bscscan.com/address/0xf700d4c708c2be1463e355f337603183d20e0808",
+ "https://www.coingecko.com/en/coins/outer-ring"
+ ],
+ "symbol": "GQ"
+ },
+ "IRON": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0xbd1945cd85a2be93a6475381c9f5edf19407a921",
+ "decimals": 18,
+ "name": "Outer Ring MMO Iron Token",
+ "origins": [
+ "https://bscscan.com/token/0xbd1945cd85a2be93a6475381c9f5edf19407a921"
+ ],
+ "symbol": "IRON"
+ },
+ "DAI": {
+ "category": "STABLECOIN",
+ "chain": "BSC",
+ "contractAddress": "0x1af3f329e8be154074d8769d1ffa4ee058b1dbc3",
+ "decimals": 18,
+ "name": "DAI stablecoin token",
+ "origins": [
+ "https://bscscan.com/address/0x1af3f329e8be154074d8769d1ffa4ee058b1dbc3",
+ "https://www.coingecko.com/en/coins/dai"
+ ],
+ "symbol": "DAI"
+ },
+ "CAR": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0x253b7a24003684f7b4fe87e531a017c7382a3894",
+ "decimals": 18,
+ "name": "Outer Ring MMO Carbon Token",
+ "origins": [
+ "https://bscscan.com/token/0x253b7a24003684f7b4fe87e531a017c7382a3894"
+ ],
+ "symbol": "CAR"
+ },
+ "TEST": {
+ "category": "TEST",
+ "chain": "BSC",
+ "contractAddress": "0x1c3c3941acb8a9be35e50f086fae6a481f7d9df7",
+ "decimals": 18,
+ "name": "TEST token",
+ "origins": [
+ "https://bscscan.com/token/0xMOJO"
+ ],
+ "symbol": "TEST"
+ },
+ "ARG": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0x0efcf1737b81ce89325b17eafae2686a8afe8bd4",
+ "decimals": 18,
+ "name": "Outer Ring MMO Acetylene Token",
+ "origins": [
+ "https://bscscan.com/token/0x0efcf1737b81ce89325b17eafae2686a8afe8bd4"
+ ],
+ "symbol": "ARG"
+ },
+ "SCK": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0x227a3ef4d41d0215123f3197faa087bf71d2236a",
+ "decimals": 18,
+ "name": "Space Corsair Key",
+ "origins": [
+ "https://bscscan.com/address/0x227a3ef4d41d0215123f3197faa087bf71d2236a",
+ "https://www.coingecko.com/en/coins/space-corsair-key"
+ ],
+ "symbol": "SCK"
+ },
+ "TRON": {
+ "category": "SCAM",
+ "chain": "BSC",
+ "contractAddress": "0x85eac5ac2f758618dfa09bdbe0cf174e7d574d5b",
+ "decimals": 18,
+ "name": "TRON TRX token",
+ "origins": [
+ "https://coinmarketcap.com/currencies/tron/"
+ ],
+ "symbol": "TRON"
+ },
+ "USDC": {
+ "category": "STABLECOIN",
+ "chain": "BSC",
+ "contractAddress": "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d",
+ "decimals": 6,
+ "name": "USDC stablecoin token",
+ "origins": [
+ "https://bscscan.com/address/0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d",
+ "https://www.coingecko.com/en/coins/usd-coin"
+ ],
+ "symbol": "USDC"
+ },
+ "METIS": {
+ "category": "GASCURRENCY",
+ "chain": "BSC",
+ "contractAddress": "0xe552fb52a4f19e44ef5a967632dbc320b0820639",
+ "decimals": 18,
+ "name": "METIS token on BSC",
+ "origins": [
+ "https://bscscan.com/address/0xe552fb52a4f19e44ef5a967632dbc320b0820639",
+ "https://www.coingecko.com/en/coins/metis-token"
+ ],
+ "symbol": "METIS"
+ },
+ "BUSD": {
+ "category": "STABLECOIN",
+ "chain": "BSC",
+ "contractAddress": "0xe9e7cea3dedca5984780bafc599bd69add087d56",
+ "decimals": 18,
+ "name": "Binance stablecoin token",
+ "origins": [
+ "https://bscscan.com/address/0xe9e7cea3dedca5984780bafc599bd69add087d56",
+ "https://www.coingecko.com/en/coins/binance-usd"
+ ],
+ "symbol": "BUSD"
+ },
+ "NFTART": {
+ "category": "DEFI",
+ "chain": "BSC",
+ "contractAddress": "0xf7844cb890f4c339c497aeab599abdc3c874b67a",
+ "decimals": 18,
+ "name": "NFT Art Token",
+ "origins": [
+ "https://bscscan.com/address/0xf7844cb890f4c339c497aeab599abdc3c874b67a",
+ "https://www.coingecko.com/en/coins/nft-art-finance"
+ ],
+ "symbol": "NFTART"
+ },
+ "MET": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0x03697caf2e5458c7c2a8d9f8818079c2ae72f353",
+ "decimals": 18,
+ "name": "Outer Ring MMO Methane Token",
+ "origins": [
+ "https://bscscan.com/token/0x03697caf2e5458c7c2a8d9f8818079c2ae72f353"
+ ],
+ "symbol": "MET"
+ },
+ "SFTY": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0xe9d6d6d7cde5c7d45927f8c37460d932e612c902",
+ "decimals": 18,
+ "name": "Stella Fantasy gaming token",
+ "origins": [
+ "https://bscscan.com/address/0xe9d6d6d7cde5c7d45927f8c37460d932e612c902",
+ "https://www.coingecko.com/en/coins/stella-fantasy-token"
+ ],
+ "symbol": "SFTY"
+ },
+ "CATGIRL": {
+ "category": "NFT",
+ "chain": "BSC",
+ "contractAddress": "0x79ebc9a2ce02277a4b5b3a768b1c0a4ed75bd936",
+ "decimals": 18,
+ "name": "Catgirl NFT Token",
+ "origins": [
+ "https://bscscan.com/address/0x79ebc9a2ce02277a4b5b3a768b1c0a4ed75bd936",
+ "https://www.coingecko.com/en/coins/catgirl"
+ ],
+ "symbol": "CATGIRL"
+ }
+ }
+}
diff --git a/celotokenindex.json b/celotokenindex.json
new file mode 100644
index 0000000..2fab48c
--- /dev/null
+++ b/celotokenindex.json
@@ -0,0 +1,27 @@
+{
+ "tokens": {
+ "ZEROCASINO": {
+ "category": "TEST",
+ "chain": "CELO",
+ "contractAddress": "0xbccEc3bfd4639440b1714a502bb3940F407b890A",
+ "decimals": 18,
+ "name": "0CASINO token",
+ "origins": [
+ "https://explorer.celo.org/token/0xbccEc3bfd4639440b1714a502bb3940F407b890A"
+ ],
+ "symbol": "ZEROCASINO"
+ },
+ "cUSD": {
+ "category": "STABLECOIN",
+ "chain": "CELO",
+ "contractAddress": "0x765DE816845861e75A25fCA122bb6898B8B1282a",
+ "decimals": 18,
+ "name": "CELO USD stable token",
+ "origins": [
+ "https://explorer.celo.org/token/0x765DE816845861e75A25fCA122bb6898B8B1282a",
+ "https://www.coingecko.com/en/coins/celo-dollar"
+ ],
+ "symbol": "cUSD"
+ }
+ }
+}
diff --git a/clients/ethers/blocknr/blocknr.js b/clients/ethers/blocknr/blocknr.js
new file mode 100644
index 0000000..029006b
--- /dev/null
+++ b/clients/ethers/blocknr/blocknr.js
@@ -0,0 +1,18 @@
+const ethers = require('ethers');
+const fs = require('fs')
+const evmchainindex = require('../../../evmchainindex.json');
+
+const nodeURLs = evmchainindex['networks']['ETHEREUM'].nodeURLs;
+var providerurl = nodeURLs[Math.floor(Math.random() * nodeURLs.length)];
+console.log(' - using providerurl: ' + providerurl);
+
+// Initiate provider
+var provider = new ethers.providers.JsonRpcProvider(providerurl);
+
+const getBlock = async() => {
+ const blocknr = await provider.getBlockNumber();
+ console.log(" - latest block: ", blocknr);
+}
+
+getBlock();
+
diff --git a/clients/ethers/blocknr/package.json b/clients/ethers/blocknr/package.json
new file mode 100644
index 0000000..ca2d196
--- /dev/null
+++ b/clients/ethers/blocknr/package.json
@@ -0,0 +1,5 @@
+{
+ "dependencies": {
+ "ethers": "^5.7.0"
+ }
+}
diff --git a/clients/web3j/nft/abi/BoredApe.json b/clients/web3j/nft/abi/BoredApe.json
new file mode 100644
index 0000000..8ea9a3e
--- /dev/null
+++ b/clients/web3j/nft/abi/BoredApe.json
@@ -0,0 +1 @@
+[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"maxNftSupply","type":"uint256"},{"internalType":"uint256","name":"saleStart","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BAYC_PROVENANCE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_APES","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REVEAL_TIMESTAMP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"apePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencySetStartingIndexBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxApePurchase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mintApe","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserveApes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"provenanceHash","type":"string"}],"name":"setProvenanceHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"revealTimeStamp","type":"uint256"}],"name":"setRevealTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setStartingIndex","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startingIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startingIndexBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","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":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
diff --git a/clients/web3j/nft/abi/erc20.json b/clients/web3j/nft/abi/erc20.json
new file mode 100644
index 0000000..06b572d
--- /dev/null
+++ b/clients/web3j/nft/abi/erc20.json
@@ -0,0 +1,222 @@
+[
+ {
+ "constant": true,
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "constant": false,
+ "inputs": [
+ {
+ "name": "_spender",
+ "type": "address"
+ },
+ {
+ "name": "_value",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [
+ {
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "constant": true,
+ "inputs": [],
+ "name": "totalSupply",
+ "outputs": [
+ {
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "constant": false,
+ "inputs": [
+ {
+ "name": "_from",
+ "type": "address"
+ },
+ {
+ "name": "_to",
+ "type": "address"
+ },
+ {
+ "name": "_value",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [
+ {
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "constant": true,
+ "inputs": [],
+ "name": "decimals",
+ "outputs": [
+ {
+ "name": "",
+ "type": "uint8"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "constant": true,
+ "inputs": [
+ {
+ "name": "_owner",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "name": "balance",
+ "type": "uint256"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "constant": true,
+ "inputs": [],
+ "name": "symbol",
+ "outputs": [
+ {
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "constant": false,
+ "inputs": [
+ {
+ "name": "_to",
+ "type": "address"
+ },
+ {
+ "name": "_value",
+ "type": "uint256"
+ }
+ ],
+ "name": "transfer",
+ "outputs": [
+ {
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "constant": true,
+ "inputs": [
+ {
+ "name": "_owner",
+ "type": "address"
+ },
+ {
+ "name": "_spender",
+ "type": "address"
+ }
+ ],
+ "name": "allowance",
+ "outputs": [
+ {
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "payable": true,
+ "stateMutability": "payable",
+ "type": "fallback"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ }
+]
diff --git a/clients/web3j/nft/abi/erc721.json b/clients/web3j/nft/abi/erc721.json
new file mode 100644
index 0000000..0195698
--- /dev/null
+++ b/clients/web3j/nft/abi/erc721.json
@@ -0,0 +1,388 @@
+[
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "approved",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "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": "from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "balance",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "getApproved",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "operator",
+ "type": "address"
+ }
+ ],
+ "name": "isApprovedForAll",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "ownerOf",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "safeTransferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "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": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "symbol",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "index",
+ "type": "uint256"
+ }
+ ],
+ "name": "tokenByIndex",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "index",
+ "type": "uint256"
+ }
+ ],
+ "name": "tokenOfOwnerByIndex",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "tokenURI",
+ "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": "from",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "tokenId",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+]
\ No newline at end of file
diff --git a/clients/web3j/nft/boredape.js b/clients/web3j/nft/boredape.js
new file mode 100644
index 0000000..c14ea1c
--- /dev/null
+++ b/clients/web3j/nft/boredape.js
@@ -0,0 +1,38 @@
+const Web3 = require('web3');
+const fs = require('fs')
+const evmchainindex = require('../../../evmchainindex.json');
+
+const nodeURLs = evmchainindex['networks']['ETHEREUM'].nodeURLs;
+var providerurl = nodeURLs[Math.floor(Math.random() * nodeURLs.length)];
+console.log(' - using providerurl: ' + providerurl);
+
+// BoredApe address
+const boredape_ca = evmchainindex['networks']['ETHEREUM']['nftindex']['erc721tokens']['BORED_APE'].contractAddress;
+console.log(" - BoredApe contract_address:", boredape_ca.toString());
+
+// Initiate web3
+const web3Provider = new Web3.providers.HttpProvider(providerurl);
+const web3 = new Web3(web3Provider);
+
+// Get the contract ABI, https://etherscan.io/address/0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d#code
+const boredape_abi = JSON.parse(fs.readFileSync('./abi/erc721.json', 'utf8'));
+const BoredApe = new web3.eth.Contract(boredape_abi, boredape_ca);
+
+(async function() {
+
+ const blocknr = await web3.eth.getBlockNumber();
+ console.log(" - latest block: ", blocknr);
+
+ const nodeversion = await web3.eth.getNodeInfo();
+ console.log(" - RPC node is running client: " + nodeversion);
+
+ const chainid = await web3.eth.getChainId();
+ console.log(" - RPC node has chainid: " + chainid);
+
+ let totalSupply = await BoredApe.methods.totalSupply().call();
+ console.log(" - ERC721 BoredApe totalSupply: " + totalSupply);
+
+ let tokenURI = await BoredApe.methods.tokenURI(0).call();
+ console.log(" - ERC721 BoredApe tokenURI: " + tokenURI);
+
+})();
diff --git a/clients/web3j/nft/package.json b/clients/web3j/nft/package.json
new file mode 100644
index 0000000..bf73a02
--- /dev/null
+++ b/clients/web3j/nft/package.json
@@ -0,0 +1,5 @@
+{
+ "dependencies": {
+ "web3": "^1.7.5"
+ }
+}
diff --git a/clients/web3j/sign/package.json b/clients/web3j/sign/package.json
new file mode 100644
index 0000000..bf73a02
--- /dev/null
+++ b/clients/web3j/sign/package.json
@@ -0,0 +1,5 @@
+{
+ "dependencies": {
+ "web3": "^1.7.5"
+ }
+}
diff --git a/clients/web3j/sign/sign.js b/clients/web3j/sign/sign.js
new file mode 100644
index 0000000..e9bc6d1
--- /dev/null
+++ b/clients/web3j/sign/sign.js
@@ -0,0 +1,19 @@
+const Web3 = require('web3');
+const evmchainindex = require('../../../evmchainindex.json');
+
+const nodeURLs = evmchainindex['networks']['POLYGON'].nodeURLs;
+var providerurl = nodeURLs[Math.floor(Math.random() * nodeURLs.length)];
+console.log(' - using providerurl: ' + providerurl);
+
+// Initiate web3
+const web3Provider = new Web3.providers.HttpProvider(providerurl);
+const web3 = new Web3(web3Provider);
+
+// https://medium.com/singapore-blockchain-dapps/ethereum-using-web3-js-for-message-signing-a542676b50b5
+const sig = web3.eth.accounts.sign("Hello, I am Kenneth!", '0xb5b1870957d373ef0eeffecc6e4812c0fd08f554b37b233526acc331bf1544f7');
+console.log(" - sig.message: " + sig.message);
+console.log(" - sig.signature: " + sig.signature);
+console.log(" - sig.r: " + sig.r);
+console.log(" - sig.s: " + sig.s);
+console.log(" - sig.v: " + sig.v);
+
diff --git a/ethereumnfttokenindex.json b/ethereumnfttokenindex.json
new file mode 100644
index 0000000..abf5dbb
--- /dev/null
+++ b/ethereumnfttokenindex.json
@@ -0,0 +1,74 @@
+{
+ "erc1155tokens": {},
+ "erc721tokens": {
+ "BORED_APE": {
+ "category": "GAMING",
+ "chain": "ETHEREUM",
+ "contractAddress": "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d",
+ "description": "Bored Ape NFT",
+ "linked_tokens": [
+ "ETHEREUM:APECOIN"
+ ],
+ "mintBlock": 0,
+ "origins": [
+ "https://etherscan.io/address/0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d",
+ "https://opensea.io/collection/boredapeyachtclub"
+ ],
+ "symbol": "BORED_APE"
+ },
+ "ENS_DOMAIN": {
+ "category": "NAMESERVICE",
+ "chain": "ETHEREUM",
+ "contractAddress": "0x57f1887a8bf19b14fc0df6fd9b2acc9af147ea85",
+ "description": "Ethereum Name Service Domain NFT",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://etherscan.io/token/0x57f1887a8bf19b14fc0df6fd9b2acc9af147ea85",
+ "https://opensea.io/collection/ens"
+ ],
+ "symbol": "ENS_DOMAIN"
+ },
+ "LUCHADORES": {
+ "category": "GAMING",
+ "chain": "ETHEREUM",
+ "contractAddress": "0x8b4616926705fb61e9c4eeac07cd946a5d4b0760",
+ "description": "Luchadores game NFT",
+ "linked_tokens": [
+ "POLYGON:LUCHA"
+ ],
+ "mintBlock": 0,
+ "origins": [
+ "https://etherscan.io/address/0x8b4616926705fb61e9c4eeac07cd946a5d4b0760",
+ "https://opensea.io/collection/luchadores-io"
+ ],
+ "symbol": "LUCHADORES"
+ },
+ "WWW_LAND": {
+ "category": "GAMING",
+ "chain": "ETHEREUM",
+ "contractAddress": "0xa1d4657e0e6507d5a94d06da93e94dc7c8c44b51",
+ "description": "World Wide Webb game NFT",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://etherscan.io/address/0xa1d4657e0e6507d5a94d06da93e94dc7c8c44b51",
+ "https://opensea.io/collection/worldwidewebbland"
+ ],
+ "symbol": "WWW_LAND"
+ },
+ "UNSTOPPABLE_DOMAIN": {
+ "category": "NAMESERVICE",
+ "chain": "ETHEREUM",
+ "contractAddress": "0x049aba7510f45ba5b64ea9e658e342f904db358d",
+ "description": "Unstoppable Domains NFT",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://etherscan.io/token/0x049aba7510f45ba5b64ea9e658e342f904db358d",
+ "https://opensea.io/collection/unstoppable-domains"
+ ],
+ "symbol": "UNSTOPPABLE_DOMAIN"
+ }
+ }
+}
diff --git a/ethereumtokenindex.json b/ethereumtokenindex.json
new file mode 100644
index 0000000..4ed8e95
--- /dev/null
+++ b/ethereumtokenindex.json
@@ -0,0 +1,243 @@
+{
+ "tokens": {
+ "APECOIN": {
+ "category": "GAMING",
+ "chain": "ETHEREUM",
+ "contractAddress": "0x4d224452801aced8b2f0aebe155379bb5d594381",
+ "decimals": 18,
+ "name": "Bored Ape game token",
+ "origins": [
+ "https://www.coingecko.com/en/coins/apecoin",
+ "https://etherscan.io/address/0x4d224452801aced8b2f0aebe155379bb5d594381"
+ ],
+ "symbol": "APECOIN"
+ },
+ "CULT": {
+ "category": "MEME",
+ "chain": "ETHEREUM",
+ "contractAddress": "0xf0f9d895aca5c8678f706fb8216fa22957685a13",
+ "decimals": 18,
+ "name": "The CULT DAO token",
+ "origins": [
+ "https://etherscan.io/address/0xf0f9d895aca5c8678f706fb8216fa22957685a13",
+ "https://www.coingecko.com/en/coins/cult-dao"
+ ],
+ "symbol": "CULT"
+ },
+ "VIDYA": {
+ "category": "GAMING",
+ "chain": "ETHEREUM",
+ "contractAddress": "0x3d3d35bb9bec23b06ca00fe472b50e7a4c692c30",
+ "decimals": 18,
+ "name": "VIDYA token",
+ "origins": [
+ "https://etherscan.io/address/0x3d3d35bb9bec23b06ca00fe472b50e7a4c692c30",
+ "https://www.coingecko.com/en/coins/vidya"
+ ],
+ "symbol": "VIDYA"
+ },
+ "TRAC": {
+ "category": "SUPPLYCHAIN",
+ "chain": "ETHEREUM",
+ "contractAddress": "0xaa7a9ca87d3694b5755f213b5d04094b8d0f0a6f",
+ "decimals": 18,
+ "name": "OriginTrail token",
+ "origins": [
+ "https://etherscan.io/address/0xaa7a9ca87d3694b5755f213b5d04094b8d0f0a6f",
+ "https://www.coingecko.com/en/coins/origintrail"
+ ],
+ "symbol": "TRAC"
+ },
+ "USDT": {
+ "category": "STABLECOIN",
+ "chain": "ETHEREUM",
+ "contractAddress": "0xdac17f958d2ee523a2206206994597c13d831ec7",
+ "decimals": 6,
+ "name": "Tether stablecoin token",
+ "origins": [
+ "https://etherscan.io/address/0xdac17f958d2ee523a2206206994597c13d831ec7",
+ "https://www.coingecko.com/en/coins/tether"
+ ],
+ "symbol": "USDT"
+ },
+ "SERUM": {
+ "category": "DEFI",
+ "chain": "ETHEREUM",
+ "contractAddress": "0x476c5e26a75bd202a9683ffd34359c0cc15be0ff",
+ "decimals": 18,
+ "name": "Serum token",
+ "origins": [
+ "https://etherscan.io/address/0x476c5e26a75bd202a9683ffd34359c0cc15be0ff",
+ "https://www.coingecko.com/en/coins/serum"
+ ],
+ "symbol": "SERUM"
+ },
+ "DINU": {
+ "category": "MEME",
+ "chain": "ETHEREUM",
+ "contractAddress": "0xbb1ee07d6c7baeb702949904080eb61f5d5e7732",
+ "decimals": 18,
+ "name": "The Dogey-Inu token",
+ "origins": [
+ "https://etherscan.io/address/0xbb1ee07d6c7baeb702949904080eb61f5d5e7732",
+ "https://www.coingecko.com/en/coins/dogey-inu"
+ ],
+ "symbol": "DINU"
+ },
+ "DAI": {
+ "category": "STABLECOIN",
+ "chain": "ETHEREUM",
+ "contractAddress": "0x6b175474e89094c44da98b954eedeac495271d0f",
+ "decimals": 18,
+ "name": "DAI stablecoin token",
+ "origins": [
+ "https://etherscan.io/address/0x6b175474e89094c44da98b954eedeac495271d0f",
+ "https://www.coingecko.com/en/coins/dai"
+ ],
+ "symbol": "DAI"
+ },
+ "DOBE": {
+ "category": "MEME",
+ "chain": "ETHEREUM",
+ "contractAddress": "0xe7ab45162f5979f09b0bda1cc7dfc97c270ea3d5",
+ "decimals": 18,
+ "name": "The Dobermann token",
+ "origins": [
+ "https://etherscan.io/address/0xe7ab45162f5979f09b0bda1cc7dfc97c270ea3d5",
+ "https://www.coingecko.com/en/coins/dobermann"
+ ],
+ "symbol": "DOBE"
+ },
+ "DOJO": {
+ "category": "MEME",
+ "chain": "ETHEREUM",
+ "contractAddress": "0x180dae91d6d56235453a892d2e56a3e40ba81df8",
+ "decimals": 18,
+ "name": "The DOJO token",
+ "origins": [
+ "https://etherscan.io/address/0x180dae91d6d56235453a892d2e56a3e40ba81df8",
+ "https://www.coingecko.com/en/coins/dojo"
+ ],
+ "symbol": "DOJO"
+ },
+ "FWB": {
+ "category": "SOCIAL",
+ "chain": "ETHEREUM",
+ "contractAddress": "0x35bd01fc9d6d5d81ca9e055db88dc49aa2c699a8",
+ "decimals": 18,
+ "name": "Friends With Benefits token",
+ "origins": [
+ "https://etherscan.io/address/0x35bd01fc9d6d5d81ca9e055db88dc49aa2c699a8",
+ "https://www.coingecko.com/en/coins/friends-with-benefits-pro"
+ ],
+ "symbol": "FWB"
+ },
+ "JINDOGE": {
+ "category": "MEME",
+ "chain": "ETHEREUM",
+ "contractAddress": "0x3f4cd830543db25254ec0f05eac058d4d6e86166",
+ "decimals": 18,
+ "name": "The Jindoge token",
+ "origins": [
+ "https://etherscan.io/address/0x3f4cd830543db25254ec0f05eac058d4d6e86166",
+ "https://www.coingecko.com/en/coins/jindoge"
+ ],
+ "symbol": "JINDOGE"
+ },
+ "JSHIBA": {
+ "category": "MEME",
+ "chain": "ETHEREUM",
+ "contractAddress": "0x1426cc6d52d1b14e2b3b1cb04d57ea42b39c4c7c",
+ "decimals": 18,
+ "name": "The Jomon Shiba token",
+ "origins": [
+ "https://etherscan.io/address/0x1426cc6d52d1b14e2b3b1cb04d57ea42b39c4c7c",
+ "https://www.coingecko.com/en/coins/jomon-shiba"
+ ],
+ "symbol": "JSHIBA"
+ },
+ "NB": {
+ "category": "MEME",
+ "chain": "ETHEREUM",
+ "contractAddress": "0x20be82943e8d9c682580e11d424ec15db95b4a24",
+ "decimals": 18,
+ "name": "The No Bull token",
+ "origins": [
+ "https://etherscan.io/address/0x20be82943e8d9c682580e11d424ec15db95b4a24",
+ "https://www.coingecko.com/en/coins/no-bull"
+ ],
+ "symbol": "NB"
+ },
+ "SHUSHKY": {
+ "category": "MEME",
+ "chain": "ETHEREUM",
+ "contractAddress": "0x236d53148f83706c3d670064809577385f923a75",
+ "decimals": 18,
+ "name": "The Siberian Husky token",
+ "origins": [
+ "https://etherscan.io/address/0x236d53148f83706c3d670064809577385f923a75",
+ "https://www.coingecko.com/en/coins/siberian-husky"
+ ],
+ "symbol": "SHUSHKY"
+ },
+ "TEST": {
+ "category": "TEST",
+ "chain": "ETHEREUM",
+ "contractAddress": "0x2b591e99afe9f32eaa6214f7b7629768c40eeb39",
+ "decimals": 18,
+ "name": "TEST token",
+ "origins": [
+ "https://etherscan.io/token/0xMOJO"
+ ],
+ "symbol": "TEST"
+ },
+ "SOS": {
+ "category": "NFT",
+ "chain": "ETHEREUM",
+ "contractAddress": "0x3b484b82567a09e2588a13d54d032153f0c0aee0",
+ "decimals": 18,
+ "name": "The OpenDAO SOS token",
+ "origins": [
+ "https://etherscan.io/address/0x3b484b82567a09e2588a13d54d032153f0c0aee0",
+ "https://www.coingecko.com/en/coins/opendao"
+ ],
+ "symbol": "SOS"
+ },
+ "UNIDX": {
+ "category": "DEFI",
+ "chain": "ETHEREUM",
+ "contractAddress": "0x95b3497bbcccc46a8f45f5cf54b0878b39f8d96c",
+ "decimals": 18,
+ "name": "UniDex token",
+ "origins": [
+ "https://etherscan.io/address/0x95b3497bbcccc46a8f45f5cf54b0878b39f8d96c",
+ "https://www.coingecko.com/en/coins/unidex"
+ ],
+ "symbol": "UNIDX"
+ },
+ "XOR": {
+ "category": "UNKNOWN",
+ "chain": "ETHEREUM",
+ "contractAddress": "0x40fd72257597aa14c7231a7b1aaa29fce868f677",
+ "decimals": 18,
+ "name": "The SORA token",
+ "origins": [
+ "https://etherscan.io/address/0x40fd72257597aa14c7231a7b1aaa29fce868f677",
+ "https://www.coingecko.com/en/coins/sora"
+ ],
+ "symbol": "XOR"
+ },
+ "USDC": {
+ "category": "STABLECOIN",
+ "chain": "ETHEREUM",
+ "contractAddress": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
+ "decimals": 6,
+ "name": "USDC stablecoin token",
+ "origins": [
+ "https://etherscan.io/address/0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
+ "https://www.coingecko.com/en/coins/usd-coin"
+ ],
+ "symbol": "USDC"
+ }
+ }
+}
diff --git a/evmchainindex.json b/evmchainindex.json
new file mode 100644
index 0000000..2164636
--- /dev/null
+++ b/evmchainindex.json
@@ -0,0 +1,7440 @@
+{
+ "networks": {
+ "GANACHE8545_5777": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://blockexplorer.x"
+ ],
+ "chainId": 5777,
+ "chainName": "Ganache Test Chain, default local port 8545 and chainid 5777",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "faucet-to-be-inserted"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Development Test Token",
+ "symbol": "ETH"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "http://127.0.0.1:8545"
+ ],
+ "origins": [
+ "https://gsthina.medium.com/the-default-chain-id-for-ganache-metamask-is-1337-can-you-try-to-override-it-de5ad1bcb3ab"
+ ],
+ "priceMechanism": "LEGACY",
+ "shortName": "GANACHE8545_5777",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "LOCAL"
+ },
+ "ETHW": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://mainnet.ethwscan.com/"
+ ],
+ "chainId": 10001,
+ "chainName": "ETH PoW Mainnet",
+ "fallbackGasLimitInUnits": "21000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ ""
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "ETHW Gas Token",
+ "symbol": "ETHW"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://mainnet.ethereumpow.org"
+ ],
+ "origins": [
+ "https://ethereumpow.org/"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "ETHW",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "LUKSO": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://explorer.execution.mainnet.lukso.network"
+ ],
+ "chainId": 42,
+ "chainName": "LUKSO Mainnet",
+ "fallbackGasLimitInUnits": "21000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ ""
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "LUKSO Gas Token",
+ "symbol": "LYX"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://rpc.mainnet.lukso.network"
+ ],
+ "origins": [
+ "https://lukso.network/"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "LUKSO",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "ROPSTENTEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://ropsten.etherscan.io"
+ ],
+ "chainId": 3,
+ "chainName": "Ropsten Test Network",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "decomissioned"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Ropsten Test Token",
+ "symbol": "ETH"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://ropsten.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161",
+ "https://rpc.ankr.com/eth_ropsten"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/3"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "ROPSTENTEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "BORKED"
+ },
+ "SCROLL": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://blockscout.scroll.io"
+ ],
+ "chainId": 534352,
+ "chainName": "Scroll Mainnet",
+ "fallbackGasLimitInUnits": "21000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://scroll.io/bridge"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Scroll Test Token",
+ "symbol": "ETH"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://scroll.blockpi.network/v1/rpc/public",
+ "https://rpc-scroll.icecreamswap.com",
+ "https://rpc.scroll.io",
+ "https://1rpc.io/scroll"
+ ],
+ "origins": [
+ "https://scroll.io"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "SCROLL",
+ "tokenIndex": {
+ "tokens": {
+ "PAPYRUS": {
+ "category": "DEFI",
+ "chain": "SCROLL",
+ "contractAddress": "0x0Fc479e2f9b7310BfB1Db606CF565deA6910eedc",
+ "decimals": 18,
+ "name": "Papyrus token",
+ "origins": [
+ "https://blockscout.scroll.io/address/0x0Fc479e2f9b7310BfB1Db606CF565deA6910eedc"
+ ],
+ "symbol": "PAPYRUS"
+ },
+ "gPAPYRUS": {
+ "category": "DEFI",
+ "chain": "SCROLL",
+ "contractAddress": "0xf4BA885557b8E0dCE70e14CCD1a4A73E4a09793e",
+ "decimals": 18,
+ "name": "Papyrus locked token",
+ "origins": [
+ "https://blockscout.scroll.io/address/0xf4BA885557b8E0dCE70e14CCD1a4A73E4a09793e"
+ ],
+ "symbol": "gPAPYRUS"
+ },
+ "USDC": {
+ "category": "DEFI",
+ "chain": "SCROLL",
+ "contractAddress": "0x06eFdBFf2a14a7c8E15944D1F4A48F9F95F663A4",
+ "decimals": 6,
+ "name": "USDC stable token",
+ "origins": [
+ "https://blockscout.scroll.io/address/0x06eFdBFf2a14a7c8E15944D1F4A48F9F95F663A4"
+ ],
+ "symbol": "USDC"
+ }
+ }
+ },
+ "type": "PUBLIC"
+ },
+ "CELO": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://explorer.celo.org"
+ ],
+ "chainId": 42220,
+ "chainName": "Celo Mainnet",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "faucet-to-be-inserted"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "CELO Native Token",
+ "symbol": "CELO"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://forno.celo.org"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/42220"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "CELO",
+ "tokenIndex": {
+ "tokens": {
+ "ZEROCASINO": {
+ "category": "TEST",
+ "chain": "CELO",
+ "contractAddress": "0xbccEc3bfd4639440b1714a502bb3940F407b890A",
+ "decimals": 18,
+ "name": "0CASINO token",
+ "origins": [
+ "https://explorer.celo.org/token/0xbccEc3bfd4639440b1714a502bb3940F407b890A"
+ ],
+ "symbol": "ZEROCASINO"
+ },
+ "cUSD": {
+ "category": "STABLECOIN",
+ "chain": "CELO",
+ "contractAddress": "0x765DE816845861e75A25fCA122bb6898B8B1282a",
+ "decimals": 18,
+ "name": "CELO USD stable token",
+ "origins": [
+ "https://explorer.celo.org/token/0x765DE816845861e75A25fCA122bb6898B8B1282a",
+ "https://www.coingecko.com/en/coins/celo-dollar"
+ ],
+ "symbol": "cUSD"
+ }
+ }
+ },
+ "type": "PUBLIC"
+ },
+ "HARDHAT8545_31337": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://blockexplorer.x"
+ ],
+ "chainId": 31337,
+ "chainName": "Hardhat Test Chain, default local port 8545 and chainid 31337",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "faucet-to-be-inserted"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Development Test Token",
+ "symbol": "ETH"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "http://127.0.0.1:8545",
+ "http://127.0.0.1:8545/rpc"
+ ],
+ "origins": [
+ "https://hardhat.org/hardhat-network/docs/reference"
+ ],
+ "priceMechanism": "LEGACY",
+ "shortName": "HARDHAT8545_31337",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "LOCAL"
+ },
+ "GANACHE7545_5777": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://blockexplorer.x"
+ ],
+ "chainId": 5777,
+ "chainName": "Ganache Test Chain, default local port 7545 and chainid 5777",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "faucet-to-be-inserted"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Development Test Token",
+ "symbol": "ETH"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "http://127.0.0.1:7545"
+ ],
+ "origins": [
+ "https://gsthina.medium.com/the-default-chain-id-for-ganache-metamask-is-1337-can-you-try-to-override-it-de5ad1bcb3ab"
+ ],
+ "priceMechanism": "LEGACY",
+ "shortName": "GANACHE7545_5777",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "LOCAL"
+ },
+ "KAVATEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://explorer.testnet.kava.io"
+ ],
+ "chainId": 2221,
+ "chainName": "KAVA Evm Testnet",
+ "fallbackGasLimitInUnits": "30000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://faucet.kava.io/"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "KAVA Testnet Token",
+ "symbol": "KAVA"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://evm.testnet.kava.io"
+ ],
+ "origins": [
+ "https://kava.io",
+ "https://docs.kava.io/docs/ethereum/metamask/"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "KAVATEST",
+ "tokenIndex": {
+ "tokens": {
+ "USDC": {
+ "category": "STABLECOIN",
+ "chain": "KAVATEST",
+ "contractAddress": "0x43D8814FdFB9B8854422Df13F1c66e34E4fa91fD",
+ "decimals": 6,
+ "name": "USDC token",
+ "origins": [
+ "https://explorer.testnet.kava.io/address/0x43D8814FdFB9B8854422Df13F1c66e34E4fa91fD"
+ ],
+ "symbol": "USDC"
+ }
+ }
+ },
+ "type": "PUBLIC"
+ },
+ "KARURATEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "todo block explorer"
+ ],
+ "chainId": 596,
+ "chainName": "KARURA Testnet",
+ "fallbackGasLimitInUnits": "21000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "todo faucet"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "KARURA Test Token",
+ "symbol": "KAR"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://eth-rpc-karura-testnet.aca-staging.network"
+ ],
+ "origins": [
+ "https://acala.network/karura"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "KARURATEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "BORKED"
+ },
+ "LAMINA1BETATEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://explorer.lamina1.com"
+ ],
+ "chainId": 7649,
+ "chainName": "Lamina1 Betanet",
+ "fallbackGasLimitInUnits": "21000",
+ "fallbackGasPriceInWEI": "1000000000",
+ "faucets": [
+ ""
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Lamina1 Gas Token",
+ "symbol": "L1"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {
+ "CITIZEN": {
+ "category": "CHAINMASCOT",
+ "chain": "MANTLE",
+ "contractAddress": "0x7cf4aC414C94E03Ecb2A7d6EA8F79087453cAEf0",
+ "description": "Citizen of Mantle",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://explorer.mantle.xyz/token/0x7cf4aC414C94E03Ecb2A7d6EA8F79087453cAEf0",
+ "https://journey.mantle.xyz/"
+ ],
+ "symbol": "CITIZEN"
+ }
+ }
+ },
+ "nodeURLs": [
+ "https://rpc-betanet.lamina1.com/ext/bc/C/rpc"
+ ],
+ "origins": [
+ "https://www.mantle.xyz/"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "LAMINA1BETATEST",
+ "tokenIndex": {
+ "tokens": {
+ "USDT": {
+ "category": "STABLECOIN",
+ "chain": "MANTLE",
+ "contractAddress": "0x201EBa5CC46D216Ce6DC03F6a759e8E766e956aE",
+ "decimals": 6,
+ "name": "Tether stable coin",
+ "origins": [
+ "https://explorer.mantle.xyz/token/0x201EBa5CC46D216Ce6DC03F6a759e8E766e956aE"
+ ],
+ "symbol": "USDT"
+ },
+ "WETH": {
+ "category": "DEFI",
+ "chain": "MANTLE",
+ "contractAddress": "0xdEAddEaDdeadDEadDEADDEAddEADDEAddead1111",
+ "decimals": 18,
+ "name": "Wrapped ETH token",
+ "origins": [
+ "https://explorer.mantle.xyz/token/0xdEAddEaDdeadDEadDEADDEAddEADDEAddead1111",
+ "https://www.coingecko.com/en/coins/wrapped-ether-mantle-bridge"
+ ],
+ "symbol": "WETH"
+ },
+ "USDC": {
+ "category": "STABLECOIN",
+ "chain": "MANTLE",
+ "contractAddress": "0x09Bc4E0D864854c6aFB6eB9A9cdF58aC190D0dF9",
+ "decimals": 6,
+ "name": "USDC stable coin",
+ "origins": [
+ "https://explorer.mantle.xyz/address/0x09Bc4E0D864854c6aFB6eB9A9cdF58aC190D0dF9"
+ ],
+ "symbol": "USDC"
+ }
+ }
+ },
+ "type": "PUBLIC"
+ },
+ "POLYGON": {
+ "archivenodeURLs": [
+ "https://polygon-mainnet.g.alchemy.com/v2/"
+ ],
+ "blockexplorerURLs": [
+ "https://polygonscan.com"
+ ],
+ "chainId": 137,
+ "chainName": "Polygon Mainnet",
+ "enforcedMinGasPriceInWEI": "31000000000",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://matic.supply"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "MATIC",
+ "symbol": "MATIC"
+ },
+ "nftindex": {
+ "erc1155tokens": {
+ "AAVEGOTCHI_INSTALLATION": {
+ "category": "GAMING",
+ "chain": "POLYGON",
+ "contractAddress": "0x9216c31d8146bcb3ea5a9162dc1702e8aedca355",
+ "description": "AAvegotchi game land installation NFT",
+ "linked_tokens": [
+ "POLYGON:GHST",
+ "POLYGON:KEK",
+ "POLYGON:ALPHA",
+ "POLYGON:FOMO",
+ "POLYGON:FUD",
+ "POLYGON:GLTR"
+ ],
+ "mintBlock": 0,
+ "origins": [
+ "https://polygonscan.com/address/0x9216c31d8146bcb3ea5a9162dc1702e8aedca355",
+ "https://opensea.io/collection/gotchiverse-installations"
+ ],
+ "symbol": "AAVEGOTCHI_INSTALLATION"
+ }
+ },
+ "erc721tokens": {
+ "UNISWAPV3_POSITION": {
+ "category": "DEFI",
+ "chain": "POLYGON",
+ "contractAddress": "0xC36442b4a4522E871399CD717aBDD847Ab11FE88",
+ "description": "Uniswap v3 position NFT",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://polygonscan.com/token/0xc36442b4a4522e871399cd717abdd847ab11fe88"
+ ],
+ "symbol": "UNISWAPV3_POSITION"
+ },
+ "UAPX_SONG": {
+ "category": "NFT",
+ "chain": "POLYGON",
+ "contractAddress": "0x86c47873dd7d2186f5bd87da4757aecf1e16ac2e",
+ "description": "UAPx song NFT (formerly Terra)",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://polygonscan.com/address/0x86c47873dd7d2186f5bd87da4757aecf1e16ac2e"
+ ],
+ "symbol": "UAPX_SONG"
+ },
+ "UAPX_SHIP": {
+ "category": "NFT",
+ "chain": "POLYGON",
+ "contractAddress": "0x2148da6c55c10ea3d9b33311d19a065592abd24b",
+ "description": "UAPx ship NFT (formerly Terra)",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://polygonscan.com/address/0x2148da6c55c10ea3d9b33311d19a065592abd24b"
+ ],
+ "symbol": "UAPX_SHIP"
+ },
+ "UAPX_ALIEN": {
+ "category": "NFT",
+ "chain": "POLYGON",
+ "contractAddress": "0xd8f000eac06cebab3b967eeb137fbcac842a1472",
+ "description": "UAPx alien NFT (formerly Terra)",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://polygonscan.com/address/0xd8f000eac06cebab3b967eeb137fbcac842a1472"
+ ],
+ "symbol": "UAPX_ALIEN"
+ },
+ "AAVEGOTCHI": {
+ "category": "GAMING",
+ "chain": "POLYGON",
+ "contractAddress": "0x86935f11c86623dec8a25696e1c19a8659cbf95d",
+ "description": "AAvegotchi game NFT",
+ "linked_tokens": [
+ "POLYGON:GHST",
+ "POLYGON:KEK",
+ "POLYGON:ALPHA",
+ "POLYGON:FOMO",
+ "POLYGON:FUD",
+ "POLYGON:GLTR"
+ ],
+ "mintBlock": 0,
+ "origins": [
+ "https://polygonscan.com/token/0x86935f11c86623dec8a25696e1c19a8659cbf95d"
+ ],
+ "symbol": "AAVEGOTCHI"
+ },
+ "UNSTOPPABLE_DOMAIN": {
+ "category": "GAMING",
+ "chain": "POLYGON",
+ "contractAddress": "0xa9a6a3626993d487d2dbda3173cf58ca1a9d9e9f",
+ "description": "Unstoppable domains NFT",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://polygonscan.com/address/0xa9a6a3626993d487d2dbda3173cf58ca1a9d9e9f"
+ ],
+ "symbol": "UNSTOPPABLE_DOMAIN"
+ },
+ "UNIOVERSE": {
+ "category": "NFT",
+ "chain": "POLYGON",
+ "contractAddress": "0xed55e4477b795eaa9bb4bca24df42214e1a05c18",
+ "description": "Unioverse Collectibles",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://polygonscan.com/address/0xed55e4477b795eaa9bb4bca24df42214e1a05c18"
+ ],
+ "symbol": "UNIOVERSE"
+ },
+ "AAVEGOTCHI_LAND": {
+ "category": "GAMING",
+ "chain": "POLYGON",
+ "contractAddress": "0x1d0360bac7299c86ec8e99d0c1c9a95fefaf2a11",
+ "description": "AAvegotchi game LAND NFT",
+ "linked_tokens": [
+ "POLYGON:GHST",
+ "POLYGON:KEK",
+ "POLYGON:ALPHA",
+ "POLYGON:FOMO",
+ "POLYGON:FUD",
+ "POLYGON:GLTR"
+ ],
+ "mintBlock": 0,
+ "origins": [
+ "https://polygonscan.com/address/0x1d0360bac7299c86ec8e99d0c1c9a95fefaf2a11"
+ ],
+ "symbol": "AAVEGOTCHI_LAND"
+ },
+ "LENSPROTOCOLPROFILE": {
+ "category": "GAMING",
+ "chain": "POLYGON",
+ "contractAddress": "0xdb46d1dc155634fbc732f92e853b10b288ad5a1d",
+ "description": "Lens Protocol Profile NFT",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://polygonscan.com/address/0xdb46d1dc155634fbc732f92e853b10b288ad5a1d"
+ ],
+ "symbol": "LENSPROTOCOLPROFILE"
+ },
+ "MYCRYPTOHEROES": {
+ "category": "GAMING",
+ "chain": "POLYGON",
+ "contractAddress": "0x77bd275ff2b3dc007475aac9ce7f408f5a800188",
+ "description": "My Crypto Heroes NFT",
+ "linked_tokens": [],
+ "mintBlock": 16765971,
+ "origins": [
+ "https://polygonscan.com/address/0x77bd275ff2b3dc007475aac9ce7f408f5a800188"
+ ],
+ "symbol": "MYCRYPTOHEROES"
+ },
+ "SANDBOX_LAND": {
+ "category": "GAMING",
+ "chain": "POLYGON",
+ "contractAddress": "0x9d305a42a3975ee4c1c57555bed5919889dce63f",
+ "description": "The Sandbox LAND NFT",
+ "linked_tokens": [
+ "POLYGON:SAND"
+ ],
+ "mintBlock": 0,
+ "origins": [
+ "https://polygonscan.com/address/0x9d305a42a3975ee4c1c57555bed5919889dce63f",
+ "https://opensea.io/collection/sandbox"
+ ],
+ "symbol": "SANDBOX_LAND"
+ },
+ "TRUMP": {
+ "category": "SCAM",
+ "chain": "POLYGON",
+ "contractAddress": "0x24a11e702cd90f034ea44faf1e180c0c654ac5d9",
+ "description": "Trump Digital Trading Card NFT",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://polygonscan.com/address/0x24a11e702cd90f034ea44faf1e180c0c654ac5d9"
+ ],
+ "symbol": "TRUMP"
+ },
+ "AAVEGOTCHI_GMI": {
+ "category": "GAMING",
+ "chain": "POLYGON",
+ "contractAddress": "0x3f0e22b827e51ff567d7388c2b598e2eabfa74be",
+ "description": "AAvegotchi GMI NFT",
+ "linked_tokens": [
+ "POLYGON:GHST",
+ "POLYGON:KEK",
+ "POLYGON:ALPHA",
+ "POLYGON:FOMO",
+ "POLYGON:FUD",
+ "POLYGON:GLTR"
+ ],
+ "mintBlock": 0,
+ "origins": [
+ "https://polygonscan.com/address/0x3f0e22b827e51ff567d7388c2b598e2eabfa74be"
+ ],
+ "symbol": "AAVEGOTCHI_GMI"
+ }
+ }
+ },
+ "nodeURLs": [
+ "https://polygon-rpc.com/",
+ "https://rpc-mainnet.matic.quiknode.pro",
+ "https://rpc-mainnet.maticvigil.com",
+ "https://poly-rpc.gateway.pokt.network",
+ "https://polygon-mainnet.public.blastapi.io",
+ "https://rpc.ankr.com/polygon",
+ "https://1rpc.io/matic",
+ "https://polygon-bor.publicnode.com",
+ "https://polygon.llamarpc.com",
+ "https://polygon.rpc.blxrbdn.com",
+ "https://polygon.blockpi.network/v1/rpc/public",
+ "https://endpoints.omniatech.io/v1/matic/mainnet/public",
+ "https://polygon.api.onfinality.io/public"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/137"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "POLYGON",
+ "tokenIndex": {
+ "tokens": {
+ "GLTR": {
+ "category": "GAMING",
+ "chain": "POLYGON",
+ "contractAddress": "0x3801c3b3b5c98f88a9c9005966aa96aa440b9afc",
+ "decimals": 18,
+ "name": "GAX Liquidity Token Reward, Aavegotchi game token",
+ "origins": [
+ "https://polygonscan.com/token/0x3801c3b3b5c98f88a9c9005966aa96aa440b9afc",
+ "https://www.coingecko.com/en/coins/gax-liquidity-token-reward"
+ ],
+ "symbol": "GLTR"
+ },
+ "RICOCHET_WBTCx": {
+ "category": "DEFI",
+ "chain": "POLYGON",
+ "contractAddress": "0x4086eBf75233e8492F1BCDa41C7f2A8288c2fB92",
+ "decimals": 18,
+ "name": "Ricochet WBTC token, WBTCx",
+ "origins": [
+ "https://polygonscan.com/token/0x4086eBf75233e8492F1BCDa41C7f2A8288c2fB92",
+ "https://docs.superfluid.finance/superfluid/developers/networks"
+ ],
+ "symbol": "RICOCHET_WBTCx"
+ },
+ "RICOCHET_ETHx": {
+ "category": "DEFI",
+ "chain": "POLYGON",
+ "contractAddress": "0x27e1e4E6BC79D93032abef01025811B7E4727e85",
+ "decimals": 18,
+ "name": "Ricochet ETH token, ETHx",
+ "origins": [
+ "https://polygonscan.com/token/0x27e1e4E6BC79D93032abef01025811B7E4727e85",
+ "https://docs.superfluid.finance/superfluid/developers/networks"
+ ],
+ "symbol": "RICOCHET_ETHx"
+ },
+ "LUCHA": {
+ "category": "GAMING",
+ "chain": "POLYGON",
+ "contractAddress": "0x6749441fdc8650b5b5a854ed255c82ef361f1596",
+ "decimals": 18,
+ "name": "Luchadores game token",
+ "origins": [
+ "https://polygonscan.com/address/0x6749441fdc8650b5b5a854ed255c82ef361f1596",
+ "https://www.coingecko.com/en/coins/lucha"
+ ],
+ "symbol": "LUCHA"
+ },
+ "SYNAPSE": {
+ "category": "DEFI",
+ "chain": "POLYGON",
+ "contractAddress": "0xf8f9efc0db77d8881500bb06ff5d6abc3070e695",
+ "decimals": 18,
+ "name": "Synapse Defi token",
+ "origins": [
+ "https://polygonscan.com/token/0xf8f9efc0db77d8881500bb06ff5d6abc3070e695",
+ "https://www.coingecko.com/en/coins/synapse"
+ ],
+ "symbol": "SYNAPSE"
+ },
+ "STG": {
+ "category": "DEFI",
+ "chain": "POLYGON",
+ "contractAddress": "0x2f6f07cdcf3588944bf4c42ac74ff24bf56e7590",
+ "decimals": 18,
+ "name": "StarGate token",
+ "origins": [
+ "https://polygonscan.com/token/0x2f6f07cdcf3588944bf4c42ac74ff24bf56e7590",
+ "https://www.coingecko.com/en/coins/stargate-finance"
+ ],
+ "symbol": "STG"
+ },
+ "VRSW": {
+ "category": "DEFI",
+ "chain": "POLYGON",
+ "contractAddress": "0x57999936fc9a9ec0751a8d146cce11901be8bed0",
+ "decimals": 18,
+ "name": "Virtuswap token",
+ "origins": [
+ "https://polygonscan.com/token/0x57999936fc9a9ec0751a8d146cce11901be8bed0"
+ ],
+ "symbol": "VRSW"
+ },
+ "ALPHA": {
+ "category": "GAMING",
+ "chain": "POLYGON",
+ "contractAddress": "0x6a3e7c3c6ef65ee26975b12293ca1aad7e1daed2",
+ "decimals": 18,
+ "name": "Aavegotchi ALPHA game token",
+ "origins": [
+ "https://polygonscan.com/address/0x6a3e7c3c6ef65ee26975b12293ca1aad7e1daed2",
+ "https://www.coingecko.com/en/coins/aavegotchi-alpha"
+ ],
+ "symbol": "ALPHA"
+ },
+ "QUICKSWAP_aWMATIC_GHST_LP": {
+ "category": "LIQUIDITY_PROVIDER",
+ "chain": "POLYGON",
+ "contractAddress": "0x2ef46196d7d25b5111ca1fcba206b248fee32d8d",
+ "decimals": 18,
+ "name": "WMATIC/GHST Quickswap Pool token",
+ "origins": [
+ "https://polygonscan.com/token/0x2ef46196d7d25b5111ca1fcba206b248fee32d8d"
+ ],
+ "symbol": "QUICKSWAP_aWMATIC_GHST_LP"
+ },
+ "USDT": {
+ "category": "STABLECOIN",
+ "chain": "POLYGON",
+ "contractAddress": "0xc2132d05d31c914a87c6611c10748aeb04b58e8f",
+ "decimals": 18,
+ "name": "Tether stablecoin token",
+ "origins": [
+ "https://polygonscan.com/address/0xc2132d05d31c914a87c6611c10748aeb04b58e8f",
+ "https://www.coingecko.com/en/coins/tether"
+ ],
+ "symbol": "USDT"
+ },
+ "FOMO": {
+ "category": "GAMING",
+ "chain": "POLYGON",
+ "contractAddress": "0x44a6e0be76e1d9620a7f76588e4509fe4fa8e8c8",
+ "decimals": 18,
+ "name": "Aavegotchi FOMO game token",
+ "origins": [
+ "https://polygonscan.com/address/0x44a6e0be76e1d9620a7f76588e4509fe4fa8e8c8",
+ "https://www.coingecko.com/en/coins/aavegotchi-fomo"
+ ],
+ "symbol": "FOMO"
+ },
+ "gDAI": {
+ "category": "STABLECOIN",
+ "chain": "POLYGON",
+ "contractAddress": "0x91993f2101cc758d0deb7279d41e880f7defe827",
+ "decimals": 18,
+ "name": "GAINS Network DAI token",
+ "origins": [
+ "https://polygonscan.com/address/0x91993f2101cc758d0deb7279d41e880f7defe827"
+ ],
+ "symbol": "gDAI"
+ },
+ "amLINK": {
+ "category": "DEFI",
+ "chain": "POLYGON",
+ "contractAddress": "0x0ca2e42e8c21954af73bc9af1213e4e81d6a669a",
+ "decimals": 18,
+ "name": "Aave LINK token",
+ "origins": [
+ "https://polygonscan.com/token/0x0ca2e42e8c21954af73bc9af1213e4e81d6a669a",
+ "https://www.coingecko.com/en/coins/chainlink"
+ ],
+ "symbol": "amLINK"
+ },
+ "CXDOGE": {
+ "category": "WRECKED",
+ "chain": "POLYGON",
+ "contractAddress": "0x9bd9ad490dd3a52f096d229af4483b94d63be618",
+ "decimals": 18,
+ "name": "CelsiusX Wrapped DOGE token (wrecked)",
+ "origins": [
+ "https://polygonscan.com/address/0x9bd9ad490dd3a52f096d229af4483b94d63be618",
+ "https://www.coingecko.com/en/coins/celsiusx-wrapped-doge"
+ ],
+ "symbol": "CXDOGE"
+ },
+ "FUD": {
+ "category": "GAMING",
+ "chain": "POLYGON",
+ "contractAddress": "0x403e967b044d4be25170310157cb1a4bf10bdd0f",
+ "decimals": 18,
+ "name": "Aavegotchi FUD game token",
+ "origins": [
+ "https://polygonscan.com/address/0x403e967b044d4be25170310157cb1a4bf10bdd0f",
+ "https://www.coingecko.com/en/coins/aavegotchi-fud"
+ ],
+ "symbol": "FUD"
+ },
+ "LINK": {
+ "category": "DEFI",
+ "chain": "POLYGON",
+ "contractAddress": "0x53e0bca35ec356bd5dddfebbd1fc0fd03fabad39",
+ "decimals": 18,
+ "name": "LINK token",
+ "origins": [
+ "https://polygonscan.com/address/0x53e0bca35ec356bd5dddfebbd1fc0fd03fabad39",
+ "https://www.coingecko.com/en/coins/chainlink"
+ ],
+ "symbol": "LINK"
+ },
+ "ROLL": {
+ "category": "DUST",
+ "chain": "POLYGON",
+ "contractAddress": "0xC68e83a305b0FaD69E264A1769a0A070F190D2d6",
+ "decimals": 18,
+ "name": "ROLL SCAM token",
+ "origins": [
+ "https://polygonscan.com/token/0xc68e83a305b0fad69e264a1769a0a070f190d2d6#comments",
+ "https://polyroll.org/"
+ ],
+ "symbol": "ROLL"
+ },
+ "MATICX": {
+ "category": "DEFI",
+ "chain": "POLYGON",
+ "contractAddress": "0xfa68fb4628dff1028cfec22b4162fccd0d45efb6",
+ "decimals": 18,
+ "name": "Stader Liquid Staking Matic (PoS) token",
+ "origins": [
+ "https://polygonscan.com/token/0xfa68fb4628dff1028cfec22b4162fccd0d45efb6",
+ "https://www.coingecko.com/en/coins/stader-maticx"
+ ],
+ "symbol": "MATICX"
+ },
+ "SAND": {
+ "category": "GAMING",
+ "chain": "POLYGON",
+ "contractAddress": "0xbbba073c31bf03b8acf7c28ef0738decf3695683",
+ "decimals": 18,
+ "name": "The Sandbox SAND game token",
+ "origins": [
+ "https://polygonscan.com/address/0xbbba073c31bf03b8acf7c28ef0738decf3695683",
+ "https://www.coingecko.com/en/coins/the-sandbox"
+ ],
+ "symbol": "SAND"
+ },
+ "RICOCHET": {
+ "category": "DEFI",
+ "chain": "POLYGON",
+ "contractAddress": "0x263026e7e53dbfdce5ae55ade22493f828922965",
+ "decimals": 18,
+ "name": "Ricochet reward token",
+ "origins": [
+ "https://polygonscan.com/address/0x263026e7e53dbfdce5ae55ade22493f828922965",
+ "https://www.coingecko.com/en/coins/ricochet"
+ ],
+ "symbol": "RICOCHET"
+ },
+ "GHST": {
+ "category": "GAMING",
+ "chain": "POLYGON",
+ "contractAddress": "0x385eeac5cb85a38a9a07a70c73e0a3271cfb54a7",
+ "decimals": 18,
+ "name": "Aavegotchi GHST game token",
+ "origins": [
+ "https://polygonscan.com/address/0x385eeac5cb85a38a9a07a70c73e0a3271cfb54a7",
+ "https://www.coingecko.com/en/coins/aavegotchi"
+ ],
+ "symbol": "GHST"
+ },
+ "MOD": {
+ "category": "DEFI",
+ "chain": "POLYGON",
+ "contractAddress": "0x8346ab8d5ea7a9db0209aed2d1806afa0e2c4c21",
+ "decimals": 18,
+ "name": "MOD token",
+ "origins": [
+ "https://www.coingecko.com/en/coins/modefi",
+ "https://polygonscan.com/token/0x8346ab8d5ea7a9db0209aed2d1806afa0e2c4c21",
+ "https://modefi.io/"
+ ],
+ "symbol": "MOD"
+ },
+ "amWMATIC": {
+ "category": "DEFI",
+ "chain": "POLYGON",
+ "contractAddress": "0x8df3aad3a84da6b69a4da8aec3ea40d9091b2ac4",
+ "decimals": 18,
+ "name": "Aave WMATIC token",
+ "origins": [
+ "https://polygonscan.com/token/0x8df3aad3a84da6b69a4da8aec3ea40d9091b2ac4",
+ "https://www.coingecko.com/en/coins/aave-polygon-wmatic"
+ ],
+ "symbol": "amWMATIC"
+ },
+ "dQUICK": {
+ "category": "DEFI",
+ "chain": "POLYGON",
+ "contractAddress": "0x958d208cdf087843e9ad98d23823d32e17d723a1",
+ "decimals": 18,
+ "name": "Dragon QUICK token",
+ "origins": [
+ "https://polygonscan.com/token/0x958d208cdf087843e9ad98d23823d32e17d723a1",
+ "https://www.coingecko.com/en/exchanges/quickswap"
+ ],
+ "symbol": "dQUICK"
+ },
+ "WETH": {
+ "category": "DEFI",
+ "chain": "POLYGON",
+ "contractAddress": "0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",
+ "decimals": 18,
+ "name": "Wrapped ETH token",
+ "origins": [
+ "https://polygonscan.com/token/0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",
+ "https://www.coingecko.com/en/coins/weth"
+ ],
+ "symbol": "WETH"
+ },
+ "RICOCHET_MATICx": {
+ "category": "DEFI",
+ "chain": "POLYGON",
+ "contractAddress": "0x3aD736904E9e65189c3000c7DD2c8AC8bB7cD4e3",
+ "decimals": 18,
+ "name": "Ricochet MATIC token, MATICx",
+ "origins": [
+ "https://polygonscan.com/token/0x3aD736904E9e65189c3000c7DD2c8AC8bB7cD4e3",
+ "https://docs.superfluid.finance/superfluid/developers/networks"
+ ],
+ "symbol": "RICOCHET_MATICx"
+ },
+ "IDEX": {
+ "category": "DEFI",
+ "chain": "POLYGON",
+ "contractAddress": "0x9cb74c8032b007466865f060ad2c46145d45553d",
+ "decimals": 18,
+ "name": "IDEX token",
+ "origins": [
+ "https://polygonscan.com/token/0x9cb74c8032b007466865f060ad2c46145d45553d"
+ ],
+ "symbol": "IDEX"
+ },
+ "RICOCHET_USDCx": {
+ "category": "DEFI",
+ "chain": "POLYGON",
+ "contractAddress": "0xcaa7349cea390f89641fe306d93591f87595dc1f",
+ "decimals": 18,
+ "name": "Ricochet USDC token, USDCx",
+ "origins": [
+ "https://polygonscan.com/token/0xcaa7349cea390f89641fe306d93591f87595dc1f",
+ "https://docs.superfluid.finance/superfluid/developers/networks"
+ ],
+ "symbol": "RICOCHET_USDCx"
+ },
+ "TOWER": {
+ "category": "GAMING",
+ "chain": "POLYGON",
+ "contractAddress": "0x2bc07124d8dac638e290f401046ad584546bc47b",
+ "decimals": 18,
+ "name": "Crazy Defense Heroes game token",
+ "origins": [
+ "https://polygonscan.com/address/0x2bc07124d8dac638e290f401046ad584546bc47b",
+ "https://www.coingecko.com/en/coins/tower"
+ ],
+ "symbol": "TOWER"
+ },
+ "DAI": {
+ "category": "STABLECOIN",
+ "chain": "POLYGON",
+ "contractAddress": "0x8f3cf7ad23cd3cadbd9735aff958023239c6a063",
+ "decimals": 18,
+ "name": "DAI stablecoin token",
+ "origins": [
+ "https://polygonscan.com/address/0x8f3cf7ad23cd3cadbd9735aff958023239c6a063",
+ "https://www.coingecko.com/en/coins/dai"
+ ],
+ "symbol": "DAI"
+ },
+ "TITAN": {
+ "category": "SCAM",
+ "chain": "POLYGON",
+ "contractAddress": "0xaaa5b9e6c589642f98a1cda99b9d024b8407285a",
+ "decimals": 18,
+ "name": "IRON TITAN scam token",
+ "origins": [
+ "https://polygonscan.com/token/0xaaa5b9e6c589642f98a1cda99b9d024b8407285a"
+ ],
+ "symbol": "TITAN"
+ },
+ "KEK": {
+ "category": "GAMING",
+ "chain": "POLYGON",
+ "contractAddress": "0x42e5e06ef5b90fe15f853f59299fc96259209c5c",
+ "decimals": 18,
+ "name": "Aavegotchi KEK game token",
+ "origins": [
+ "https://polygonscan.com/address/0x42e5e06ef5b90fe15f853f59299fc96259209c5c",
+ "https://www.coingecko.com/en/coins/aavegotchi-kek"
+ ],
+ "symbol": "KEK"
+ },
+ "STARGATE_USDC_LP": {
+ "category": "DEFI",
+ "chain": "POLYGON",
+ "contractAddress": "0x1205f31718499dbf1fca446663b532ef87481fe1",
+ "decimals": 6,
+ "name": "StarGate USDC Pool token",
+ "origins": [
+ "https://polygonscan.com/token/0x1205f31718499dbf1fca446663b532ef87481fe1"
+ ],
+ "symbol": "STARGATE_USDC_LP"
+ },
+ "BGEM": {
+ "category": "GAMING",
+ "chain": "POLYGON",
+ "contractAddress": "0x1386617A1Bb2A6AA712AB3616bCAF1211152D1e8",
+ "decimals": 18,
+ "name": "BitGem gaming token",
+ "origins": [
+ "https://polygonscan.com/token/0x1386617A1Bb2A6AA712AB3616bCAF1211152D1e8",
+ "https://boomland.io/daily"
+ ],
+ "symbol": "BGEM"
+ },
+ "WMATIC": {
+ "category": "DEFI",
+ "chain": "POLYGON",
+ "contractAddress": "0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270",
+ "decimals": 18,
+ "name": "WMATIC token",
+ "origins": [
+ "https://polygonscan.com/address/0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270",
+ "https://www.coingecko.com/en/coins/wmatic"
+ ],
+ "symbol": "WMATIC"
+ },
+ "rETH": {
+ "category": "DEFI",
+ "chain": "POLYGON",
+ "contractAddress": "0x0266f4f08d82372cf0fcbccc0ff74309089c74d1",
+ "decimals": 18,
+ "name": "Rocketpool ETH token",
+ "origins": [
+ "https://polygonscan.com/token/0x0266f4f08d82372cf0fcbccc0ff74309089c74d1",
+ "https://rocketpool.net/"
+ ],
+ "symbol": "rETH"
+ },
+ "SANDBOX_WMATIC_SAND_LP": {
+ "category": "LIQUIDITY_PROVIDER",
+ "chain": "POLYGON",
+ "contractAddress": "0x4ab071c42c28c4858c4bac171f06b13586b20f30",
+ "decimals": 18,
+ "name": "Sandbox WMATIC+SAND LP Token",
+ "origins": [
+ "https://polygonscan.com/token/0x4ab071c42c28c4858c4bac171f06b13586b20f30",
+ "https://medium.com/sandbox-game/introducing-msand-matic-staking-at-the-sandbox-319f983d20a4"
+ ],
+ "symbol": "SANDBOX_WMATIC_SAND_LP"
+ },
+ "TEST": {
+ "category": "TEST",
+ "chain": "POLYGON",
+ "contractAddress": "0x23D29D30e35C5e8D321e1dc9A8a61BFD846D4C5C",
+ "decimals": 18,
+ "name": "TEST token",
+ "origins": [
+ "https://polygonscan.com/token/0xMOJO"
+ ],
+ "symbol": "TEST"
+ },
+ "RICOCHET_DAIx": {
+ "category": "DEFI",
+ "chain": "POLYGON",
+ "contractAddress": "0x8f3cf7ad23cd3cadbd9735aff958023239c6a063",
+ "decimals": 18,
+ "name": "Ricochet DAI token, DAIx",
+ "origins": [
+ "https://polygonscan.com/token/0x8f3cf7ad23cd3cadbd9735aff958023239c6a063",
+ "https://docs.superfluid.finance/superfluid/developers/networks"
+ ],
+ "symbol": "RICOCHET_DAIx"
+ },
+ "AGHST": {
+ "category": "GAMING",
+ "chain": "POLYGON",
+ "contractAddress": "0x8eb270e296023e9d92081fdf967ddd7878724424",
+ "decimals": 18,
+ "name": "AAve Aavegotchi GHST game token",
+ "origins": [
+ "https://polygonscan.com/address/0x8eb270e296023e9d92081fdf967ddd7878724424",
+ "https://www.coingecko.com/en/coins/aavegotchi"
+ ],
+ "symbol": "AGHST"
+ },
+ "USDC": {
+ "category": "STABLECOIN",
+ "chain": "POLYGON",
+ "contractAddress": "0x2791bca1f2de4661ed88a30c99a7a9449aa84174",
+ "decimals": 6,
+ "name": "USDC stablecoin token",
+ "origins": [
+ "https://polygonscan.com/address/0x2791bca1f2de4661ed88a30c99a7a9449aa84174",
+ "https://www.coingecko.com/en/coins/usd-coin"
+ ],
+ "symbol": "USDC"
+ }
+ }
+ },
+ "type": "PUBLIC"
+ },
+ "SCROLLSEPOLIATEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://sepolia.scrollscan.dev"
+ ],
+ "chainId": 534351,
+ "chainName": "Scroll Sepolia Testnet",
+ "fallbackGasLimitInUnits": "21000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://sepolia.scroll.io/bridge"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Scroll Testnet Token",
+ "symbol": "ETH"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://scroll-sepolia.blockpi.network/v1/rpc/public",
+ "https://sepolia-rpc.scroll.io",
+ "https://scroll-public.scroll-testnet.quiknode.pro",
+ "https://rpc.ankr.com/scroll_sepolia_testnet",
+ "https://scroll-testnet-public.unifra.io",
+ "https://1rpc.io/scroll/sepolia",
+ "https://scroll-sepolia.chainstacklabs.com"
+ ],
+ "origins": [
+ "https://scroll.io"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "SCROLLSEPOLIATEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "ZKSYNCERATEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://goerli.explorer.zksync.io"
+ ],
+ "chainId": 280,
+ "chainName": "zkSync Test Network",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "brige test funds from goerli using https://portal.zksync.io/bridge",
+ "https://goerli.portal.zksync.io/faucet"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "zkSync Era Test Token",
+ "symbol": "ETH"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://testnet.era.zksync.dev"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/280"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "ZKSYNCERATEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "BORKED"
+ },
+ "ZETAATHENSTEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://explorer.athens.zetachain.com"
+ ],
+ "chainId": 7001,
+ "chainName": "ZetaChain Athens Testnet",
+ "fallbackGasLimitInUnits": "21000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://labs.zetachain.com/get-zeta"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Zetachain Testnet Token",
+ "symbol": "aZETA"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://zetachain-athens-evm.blockpi.network/v1/rpc/public",
+ "https://rpc.ankr.com/zetachain_evm_testnet"
+ ],
+ "origins": [
+ "https://www.zetachain.com/"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "ZETAATHENSTEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "OASISSAPPHIRETEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://explorer.sapphire.oasis.io/"
+ ],
+ "chainId": 23295,
+ "chainName": "Oasis Sapphire Test Network",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://faucet.testnet.oasis.dev/"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Oasis Test Token",
+ "symbol": "TEST"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://testnet.sapphire.oasis.dev"
+ ],
+ "origins": [
+ "https://oasisprotocol.org/"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "OASISSAPPHIRETEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "BORKED"
+ },
+ "TOMOCHAINTEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://scan.testnet.tomochain.com"
+ ],
+ "chainId": 89,
+ "chainName": "Tomochain Mainnet",
+ "fallbackGasLimitInUnits": "21000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ ""
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Tomo Gas Token",
+ "symbol": "TOMO"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://rpc.testnet.tomochain.com"
+ ],
+ "origins": [
+ "https://tomochain.com"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "TOMOCHAINTEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "HARDHAT443_31337": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://blockexplorer.x"
+ ],
+ "chainId": 31337,
+ "chainName": "Hardhat Test Chain, default local https port 443 and chainid 31337",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "faucet-to-be-inserted"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Development Test Token",
+ "symbol": "ETH"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://localhost"
+ ],
+ "origins": [
+ "https://hardhat.org/hardhat-network/docs/reference"
+ ],
+ "priceMechanism": "LEGACY",
+ "shortName": "HARDHAT443_31337",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "LOCAL"
+ },
+ "TAIKOALPHATEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://l2explorer.a1.taiko.xyz"
+ ],
+ "chainId": 167003,
+ "chainName": "Taiko Ethereum A1 Test Network",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://l2faucet.a1.taiko.xyz/"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Taiko A1 Test Token",
+ "symbol": "ETH"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://l2rpc.a1.taiko.xyz"
+ ],
+ "origins": [
+ "https://taiko.xyz/docs/alpha-1-testnet/configure-wallet"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "TAIKOALPHATEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "BORKED"
+ },
+ "CONFLUX": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://evm.confluxscan.net",
+ "https://conflux-espace-public.unifra.io"
+ ],
+ "chainId": 1030,
+ "chainName": "Conflux eSpace",
+ "fallbackGasLimitInUnits": "21000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "faucet todo"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Conflux Token",
+ "symbol": "CFX"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://evm.confluxrpc.com",
+ "https://conflux-espace-public.unifra.io"
+ ],
+ "origins": [
+ "https://confluxnetwork.org/"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "CONFLUX",
+ "tokenIndex": {
+ "tokens": {
+ "SWAPPI_CFX_PPI_LP": {
+ "category": "LIQUIDITY_PROVIDER",
+ "chain": "CONFLUX",
+ "contractAddress": "0x1112a6c61a2eec4bd3aec78bd5bf3396bdd37d57",
+ "decimals": 18,
+ "name": "Swappi CFX-PPI LP token",
+ "origins": [
+ "https://evm.confluxscan.io/token/0x1112a6c61a2eec4bd3aec78bd5bf3396bdd37d57"
+ ],
+ "symbol": "SWAPPI_CFX_PPI_LP"
+ },
+ "WCFX": {
+ "category": "DEFI",
+ "chain": "CONFLUX",
+ "contractAddress": "0x14b2d3bc65e74dae1030eafd8ac30c533c976a9b",
+ "decimals": 18,
+ "name": "Wrapped Conflux token",
+ "origins": [
+ "https://evm.confluxscan.io/token/0x14b2d3bc65e74dae1030eafd8ac30c533c976a9b"
+ ],
+ "symbol": "WCFX"
+ },
+ "vePPI": {
+ "category": "DEFI",
+ "chain": "CONFLUX",
+ "contractAddress": "0xf270e44105c1270bc7a4ffedbcb699486ada7a6a",
+ "decimals": 18,
+ "name": "Swappi Vote Escrowed token",
+ "origins": [
+ "https://evm.confluxscan.io/address/0xf270e44105c1270bc7a4ffedbcb699486ada7a6a"
+ ],
+ "symbol": "vePPI"
+ },
+ "PPI": {
+ "category": "DEFI",
+ "chain": "CONFLUX",
+ "contractAddress": "0x22f41abf77905f50df398f21213290597e7414dd",
+ "decimals": 18,
+ "name": "Swappi token",
+ "origins": [
+ "https://evm.confluxscan.io/token/0x22f41abf77905f50df398f21213290597e7414dd",
+ "https://app.swappi.io/"
+ ],
+ "symbol": "PPI"
+ },
+ "USDT": {
+ "category": "STABLECOIN",
+ "chain": "CONFLUX",
+ "contractAddress": "0xfe97e85d13abd9c1c33384e796f10b73905637ce",
+ "decimals": 18,
+ "name": "Tether stable token",
+ "origins": [
+ "https://evm.confluxscan.io/token/0xfe97e85d13abd9c1c33384e796f10b73905637ce"
+ ],
+ "symbol": "USDT"
+ }
+ }
+ },
+ "type": "PUBLIC"
+ },
+ "BITKUBTEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://testnet.bkcscan.com"
+ ],
+ "chainId": 25925,
+ "chainName": "Bitkub Test Network",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://faucet.bitkubchain.com"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Bitkub Native Token",
+ "symbol": "tKUB"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://rpc-testnet.bitkubchain.io"
+ ],
+ "origins": [
+ "https://bitkub.com"
+ ],
+ "priceMechanism": "LEGACY",
+ "shortName": "BITKUBTEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "FANTOMTEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://testnet.ftmscan.com/"
+ ],
+ "chainId": 4002,
+ "chainName": "Fantom Test Network",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://faucet.fantom.network/"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Fantom Native Token",
+ "symbol": "FTM"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://fantom.api.onfinality.io/public",
+ "https://fantom-testnet.public.blastapi.io",
+ "https://rpc.testnet.fantom.network",
+ "https://rpc.ankr.com/fantom_testnet"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/4002"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "FANTOMTEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "MODETEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://sepolia.explorer.mode.network"
+ ],
+ "chainId": 919,
+ "chainName": "MODE Testnet",
+ "fallbackGasLimitInUnits": "21000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://www.mode.network"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Mode Token",
+ "symbol": "ETH"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://sepolia.mode.network"
+ ],
+ "origins": [
+ "https://confluxnetwork.org/"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "MODETEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "EVMOS": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://www.mintscan.io/evmos",
+ "https://evm.evmos.org/"
+ ],
+ "chainId": 9001,
+ "chainName": "EVMOS Mainnet",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://stakely.io/en/faucet/evmos-evm"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "EVMOS",
+ "symbol": "EVMOS"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://evmos-json-rpc.agoranodes.com",
+ "https://json-rpc.evmos.blockhunters.org",
+ "https://evmos-mainnet.public.blastapi.io",
+ "https://evmos-evm.publicnode.com",
+ "https://evmos-json-rpc.stakely.io",
+ "https://evmos-mainnet.gateway.pokt.network/v1/lb/627586ddea1b320039c95205"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/9001"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "EVMOS",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "BORKED"
+ },
+ "OPBNBTEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://testnet.opbnbscan.com"
+ ],
+ "chainId": 5611,
+ "chainName": "opBNB Testnet",
+ "fallbackGasLimitInUnits": "21000",
+ "fallbackGasPriceInWEI": "1000000000",
+ "faucets": [
+ "https://opbnb-testnet-bridge.bnbchain.org/deposit"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "opBNB Gas Token",
+ "symbol": "tBNB"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://opbnb-testnet-rpc.bnbchain.org",
+ "https://opbnb-testnet.nodereal.io/v1/64a9df0874fb4a93b9d0a3849de012d3",
+ "https://opbnb-testnet.nodereal.io/v1/e9a36765eb8a40b9bd12e680a1fd2bc5"
+ ],
+ "origins": [
+ "https://opbnb.bnbchain.org"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "OPBNBTEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "METIS": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://andromeda-explorer.metis.io/"
+ ],
+ "chainId": 1088,
+ "chainName": "Metis Mainnet",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "faucet-to-be-inserted"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Metis Native Token",
+ "symbol": "METIS"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://andromeda.metis.io/?owner=1088",
+ "https://metis-mainnet.public.blastapi.io"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/1088"
+ ],
+ "priceMechanism": "LEGACY",
+ "shortName": "METIS",
+ "tokenIndex": {
+ "tokens": {
+ "HERMES_M_USDC_LP": {
+ "category": "LIQUIDITY_PROVIDER",
+ "chain": "METIS",
+ "contractAddress": "0x5ab390084812E145b619ECAA8671d39174a1a6d1",
+ "decimals": 18,
+ "name": "VolatileV1 AMM - Metis/m.USDC LP token",
+ "origins": [
+ "https://andromeda-explorer.metis.io/address/0x5ab390084812E145b619ECAA8671d39174a1a6d1"
+ ],
+ "symbol": "HERMES_M_USDC_LP"
+ },
+ "USDT": {
+ "category": "STABLECOIN",
+ "chain": "METIS",
+ "contractAddress": "0xbB06DCA3AE6887fAbF931640f67cab3e3a16F4dC",
+ "decimals": 6,
+ "name": "USDT stable token",
+ "origins": [
+ "https://andromeda-explorer.metis.io/token/0xbB06DCA3AE6887fAbF931640f67cab3e3a16F4dC"
+ ],
+ "symbol": "USDT"
+ },
+ "USDC": {
+ "category": "STABLECOIN",
+ "chain": "METIS",
+ "contractAddress": "0xEA32A96608495e54156Ae48931A7c20f0dcc1a21",
+ "decimals": 6,
+ "name": "USDC stable token",
+ "origins": [
+ "https://andromeda-explorer.metis.io/address/0xEA32A96608495e54156Ae48931A7c20f0dcc1a21"
+ ],
+ "symbol": "USDC"
+ }
+ }
+ },
+ "type": "PUBLIC"
+ },
+ "CORETEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://scan.test.btcs.network"
+ ],
+ "chainId": 1115,
+ "chainName": "Core DAO Testnet",
+ "fallbackGasLimitInUnits": "21000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://bridge.coredao.org/"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Core Test Token",
+ "symbol": "tCORE"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://rpc.test.btcs.network"
+ ],
+ "origins": [
+ "https://coredao.org/"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "CORETEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "MILKOMEDAA1TEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://testnet-algorand-rollup.a1.milkomeda.com"
+ ],
+ "chainId": 200202,
+ "chainName": "Milkomeda Algorand testnet",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "faucet-to-be-inserted"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "milkTALGO",
+ "symbol": "milkTALGO"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://rpc-devnet-algorand-rollup.a1.milkomeda.com"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/200202",
+ "https://dcspark.github.io/milkomeda-documentation/algorand/for-end-users/configuring-metamask/",
+ "https://algorand-bridge.milkomeda.com/devnet/"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "MILKOMEDAA1TEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "SATOSHICHAINTEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://satoshiscan.io"
+ ],
+ "chainId": 5758,
+ "chainName": "SatoshiChain Testnet",
+ "fallbackGasLimitInUnits": "21000",
+ "fallbackGasPriceInWEI": "550030000000000",
+ "faucets": [
+ "https://faucet.satoshichain.io/"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "SATS Token",
+ "symbol": "SATS"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://testnet-rpc.satoshichain.io/"
+ ],
+ "origins": [
+ "https://satoshix.io/"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "SATOSHICHAINTEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "OASISCHAIN": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://scan.oasischain.io/"
+ ],
+ "chainId": 26863,
+ "chainName": "Oasis Chain",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "faucet-todo"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Oasis Token",
+ "symbol": "OAC"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://rpc1.oasischain.io",
+ "https://rpc2.oasischain.io",
+ "https://rpc3.oasischain.io"
+ ],
+ "origins": [
+ "https://oasischain.io/"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "OASISCHAIN",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "GOERLITEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://goerli.etherscan.io"
+ ],
+ "chainId": 5,
+ "chainName": "Goerli Test Network",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://goerli-faucet.mudit.blog/",
+ "https://faucets.chain.link/goerli",
+ "https://goerli-faucet.slock.it/"
+ ],
+ "flashbotnodeURLs": [
+ "https://rpc-goerli.flashbots.net"
+ ],
+ "flashbotrelaynodeURLs": [
+ "https://relay-goerli.flashbots.net"
+ ],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Goerli ETH Test Token",
+ "symbol": "ETH"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {
+ "MFNFT": {
+ "category": "DEFI",
+ "chain": "GOERLITEST",
+ "contractAddress": "0xf5de760f2e916647fd766b4ad9e85ff943ce3a2b",
+ "description": "MultiFaucet NFT",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://goerli.etherscan.io/token/0xf5de760f2e916647fd766b4ad9e85ff943ce3a2b"
+ ],
+ "symbol": "MFNFT"
+ }
+ }
+ },
+ "nodeURLs": [
+ "https://goerli.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161",
+ "https://rpc.ankr.com/eth_goerli"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/5"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "GOERLITEST",
+ "tokenIndex": {
+ "tokens": {
+ "ZETA": {
+ "category": "DEFI",
+ "chain": "GOERLITEST",
+ "contractAddress": "0xCc7bb2D219A0FC08033E130629C2B854b7bA9195",
+ "decimals": 18,
+ "name": "ZETA swap/bridge gas token",
+ "origins": [
+ "https://goerli.etherscan.io/token/0xCc7bb2D219A0FC08033E130629C2B854b7bA9195"
+ ],
+ "symbol": "ZETA"
+ },
+ "MNT": {
+ "category": "DEFI",
+ "chain": "GOERLITEST",
+ "contractAddress": "0xc1dC2d65A2243c22344E725677A3E3BEBD26E604",
+ "decimals": 18,
+ "name": "Mantle ERC-20 token",
+ "origins": [
+ "https://goerli.etherscan.io/token/0xc1dC2d65A2243c22344E725677A3E3BEBD26E604"
+ ],
+ "symbol": "MNT"
+ },
+ "TSTv4": {
+ "category": "TEST",
+ "chain": "GOERLITEST",
+ "contractAddress": "0x499d11E0b6eAC7c0593d8Fb292DCBbF815Fb29Ae",
+ "decimals": 18,
+ "name": "Goerli ERC-20 TST token",
+ "origins": [
+ "https://goerli.etherscan.io/token/0x499d11E0b6eAC7c0593d8Fb292DCBbF815Fb29Ae"
+ ],
+ "symbol": "TSTv4"
+ },
+ "TEST": {
+ "category": "TEST",
+ "chain": "GOERLITEST",
+ "contractAddress": "0x3f152b63ec5ca5831061b2dccfb29a874c317502",
+ "decimals": 18,
+ "name": "TEST token",
+ "origins": [
+ "https://goerli.etherscan.io/token/0xMOJO"
+ ],
+ "symbol": "TEST"
+ },
+ "TST4": {
+ "category": "TEST",
+ "chain": "GOERLITEST",
+ "contractAddress": "0x3f152b63ec5ca5831061b2dccfb29a874c317502",
+ "decimals": 18,
+ "name": "Official Goerli ERC-20 TST token",
+ "origins": [
+ "https://goerli.etherscan.io/token/0x3f152b63ec5ca5831061b2dccfb29a874c317502"
+ ],
+ "symbol": "TST4"
+ },
+ "USDC": {
+ "category": "STABLECOIN",
+ "chain": "GOERLITEST",
+ "contractAddress": "0x07865c6e87b9f70255377e024ace6630c1eaa37f",
+ "decimals": 6,
+ "name": "USDC Stable token",
+ "origins": [
+ "https://goerli.etherscan.io/token/0x07865c6e87b9f70255377e024ace6630c1eaa37f"
+ ],
+ "symbol": "USDC"
+ },
+ "WETH": {
+ "category": "DEFI",
+ "chain": "GOERLITEST",
+ "contractAddress": "0xb4fbf271143f4fbf7b91a5ded31805e42b2208d6",
+ "decimals": 18,
+ "name": "Wrapped ETH token",
+ "origins": [
+ "https://goerli.etherscan.io/address/0xb4fbf271143f4fbf7b91a5ded31805e42b2208d6"
+ ],
+ "symbol": "WETH"
+ },
+ "DAI": {
+ "category": "DEFI",
+ "chain": "GOERLITEST",
+ "contractAddress": "0x11fe4b6ae13d2a6055c8d9cf65c55bac32b5d844",
+ "decimals": 18,
+ "name": "DAI USD stablecoin token",
+ "origins": [
+ "https://goerli.etherscan.io/address/0x11fe4b6ae13d2a6055c8d9cf65c55bac32b5d844"
+ ],
+ "symbol": "DAI"
+ }
+ }
+ },
+ "type": "PUBLIC"
+ },
+ "KLAYTN": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://scope.klaytn.com"
+ ],
+ "chainId": 8217,
+ "chainName": "KLAYTN Mainnet",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "faucet-to-be-inserted"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "KLAYTN Native Token",
+ "symbol": "KLAY"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://public-node-api.klaytnapi.com/v1/cypress",
+ "https://klaytn.blockpi.network/v1/rpc/public",
+ "https://klaytn.api.onfinality.io/public",
+ "https://klaytn.drpc.org"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/8217",
+ "https://medium.com/klaytn/how-to-add-klaytn-to-metamask-b3bdd970c0e8"
+ ],
+ "priceMechanism": "LEGACY",
+ "shortName": "KLAYTN",
+ "tokenIndex": {
+ "tokens": {
+ "BORA": {
+ "category": "GAMING",
+ "chain": "KLAYTN",
+ "contractAddress": "0x02cbe46fb8a1f579254a9b485788f2d86cad51aa",
+ "decimals": 18,
+ "name": "BORA game token",
+ "origins": [
+ "https://scope.klaytn.com/token/0x02cbe46fb8a1f579254a9b485788f2d86cad51aa",
+ "https://www.coingecko.com/en/coins/bora"
+ ],
+ "symbol": "BORA"
+ },
+ "WEMIX": {
+ "category": "GAMING",
+ "chain": "KLAYTN",
+ "contractAddress": "0x5096db80b21ef45230c9e423c373f1fc9c0198dd",
+ "decimals": 18,
+ "name": "WEMIX game token",
+ "origins": [
+ "https://scope.klaytn.com/token/0x5096db80b21ef45230c9e423c373f1fc9c0198dd",
+ "https://www.coingecko.com/en/coins/wemix-token"
+ ],
+ "symbol": "WEMIX"
+ },
+ "TEST": {
+ "category": "TEST",
+ "chain": "KLAYTN",
+ "contractAddress": "0x7f1712f846a69bf2a9dbc4d48f45f1d52ca32e28",
+ "decimals": 18,
+ "name": "TEST token",
+ "origins": [
+ "https://scope.klaytn.com/token/0xMOJO"
+ ],
+ "symbol": "TEST"
+ },
+ "KSP": {
+ "category": "DEFI",
+ "chain": "KLAYTN",
+ "contractAddress": "0xc6a2ad8cc6e4a7e08fc37cc5954be07d499e7654",
+ "decimals": 18,
+ "name": "Klay Swap token",
+ "origins": [
+ "https://scope.klaytn.com/token/0xc6a2ad8cc6e4a7e08fc37cc5954be07d499e7654",
+ "https://www.coingecko.com/en/coins/klayswap-protocol"
+ ],
+ "symbol": "KSP"
+ }
+ }
+ },
+ "type": "PUBLIC"
+ },
+ "TARAXATEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://explorer.testnet.taraxa.io"
+ ],
+ "chainId": 842,
+ "chainName": "Taraxa Testnet",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://testnet.explorer.taraxa.io/faucet"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Taraxa Native Token",
+ "symbol": "TARA"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://rpc.testnet.taraxa.io"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/842",
+ "https://www.coingecko.com/sv/coins/taraxa",
+ "https://www.taraxa.io/"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "TARAXATEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "OASISSAPPHIRE": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://explorer.sapphire.oasis.io/"
+ ],
+ "chainId": 23294,
+ "chainName": "Oasis Sapphire Network",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "faucet-todo"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Oasis Token",
+ "symbol": "ROSE"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://sapphire.oasis.io"
+ ],
+ "origins": [
+ "https://oasisprotocol.org/"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "OASISSAPPHIRE",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "HARMONY": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://explorer.harmony.one"
+ ],
+ "chainId": 1666600000,
+ "chainName": "Harmony Mainnet Shard 0",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "faucet-to-be-inserted"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Harmony Native Token",
+ "symbol": "ONE"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://api.harmony.one",
+ "https://harmony-0-rpc.gateway.pokt.network",
+ "https://harmony-mainnet.chainstacklabs.com",
+ "https://api.s0.t.hmny.io",
+ "https://rpc.ankr.com/harmony",
+ "https://a.api.s0.t.hmny.io"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/1666600000"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "HARMONY",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "BORKED"
+ },
+ "TOMOCHAIN": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://tomoscan.io"
+ ],
+ "chainId": 88,
+ "chainName": "Tomochain Mainnet",
+ "fallbackGasLimitInUnits": "21000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ ""
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Tomo Gas Token",
+ "symbol": "TOMO"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://rpc.tomochain.com",
+ "https://tomo.blockpi.network/v1/rpc/public"
+ ],
+ "origins": [
+ "https://tomochain.com"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "TOMOCHAIN",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "BSCTEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://testnet.bscscan.com"
+ ],
+ "chainId": 97,
+ "chainName": "Binance Smart Chain Testnet",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://testnet.binance.org/faucet-smart"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Binance Chain Test Native Token",
+ "symbol": "tBNB"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://data-seed-prebsc-1-s1.binance.org:8545",
+ "https://data-seed-prebsc-1-s2.binance.org:8545",
+ "https://data-seed-prebsc-1-s3.binance.org:8545",
+ "https://data-seed-prebsc-2-s2.binance.org:8545",
+ "https://bsc-testnet.public.blastapi.io",
+ "https://bsc-testnet.publicnode.com",
+ "https://bsc-testnet.blockpi.network/v1/rpc/public"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/97"
+ ],
+ "priceMechanism": "LEGACY",
+ "shortName": "BSCTEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "BORKED"
+ },
+ "FUSE": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://explorer.fuse.io/"
+ ],
+ "chainId": 122,
+ "chainName": "FUSE Mainnet",
+ "fallbackGasLimitInUnits": "21000",
+ "fallbackGasPriceInWEI": "10000000000",
+ "faucets": [
+ ""
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "FUSE Gas Token",
+ "symbol": "FUSE"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://fuse-mainnet.chainstacklabs.com",
+ "https://rpc.fuse.io",
+ "https://fuse-rpc.gateway.pokt.network",
+ "https://fuse.api.onfinality.io/public"
+ ],
+ "origins": [
+ "https://www.fuse.io/"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "FUSE",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "FUJITEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://testnet.snowtrace.io"
+ ],
+ "chainId": 43113,
+ "chainName": "Avalanche Fuji Test Network",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://faucet.avax.network/"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "AVAX FUJI Test Token",
+ "symbol": "AVAX"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://api.avax-test.network/ext/bc/C/rpc",
+ "https://avalanche-fuji-c-chain.publicnode.com",
+ "https://ava-testnet.public.blastapi.io/ext/bc/C/rpc",
+ "https://rpc.ankr.com/avalanche_fuji",
+ "https://endpoints.omniatech.io/v1/avax/fuji/public"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/43113"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "FUJITEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "AVAX": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://snowtrace.io/"
+ ],
+ "chainId": 43114,
+ "chainName": "Avalanche C-Chain",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "faucet-to-be-inserted"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Avalanche Native Token",
+ "symbol": "AVAX"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://api.avax.network/ext/bc/C/rpc",
+ "https://rpc.ankr.com/avalanche",
+ "https://ava-mainnet.public.blastapi.io/ext/bc/C/rpc",
+ "https://avax.meowrpc.com"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/43114"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "AVAX",
+ "tokenIndex": {
+ "tokens": {
+ "STG": {
+ "category": "DEFI",
+ "chain": "AVAX",
+ "contractAddress": "0x2f6f07cdcf3588944bf4c42ac74ff24bf56e7590",
+ "decimals": 18,
+ "name": "StarGate token",
+ "origins": [
+ "https://snowtrace.io/address/0x2f6f07cdcf3588944bf4c42ac74ff24bf56e7590",
+ "https://www.coingecko.com/en/coins/stargate-finance"
+ ],
+ "symbol": "STG"
+ },
+ "PNG": {
+ "category": "DEFI",
+ "chain": "AVAX",
+ "contractAddress": "0x60781c2586d68229fde47564546784ab3faca982",
+ "decimals": 18,
+ "name": "PNG token",
+ "origins": [
+ "https://snowtrace.io/address/0x60781c2586d68229fde47564546784ab3faca982",
+ "https://www.coingecko.com/en/coins/pangolin"
+ ],
+ "symbol": "PNG"
+ },
+ "USDT": {
+ "category": "STABLECOIN",
+ "chain": "AVAX",
+ "contractAddress": "0x9702230a8ea53601f5cd2dc00fdbc13d4df4a8c7",
+ "decimals": 18,
+ "name": "Tether stablecoin token",
+ "origins": [
+ "https://snowtrace.io/address/0x9702230a8ea53601f5cd2dc00fdbc13d4df4a8c7",
+ "https://www.coingecko.com/en/coins/tether"
+ ],
+ "symbol": "USDT"
+ },
+ "USDC": {
+ "category": "STABLECOIN",
+ "chain": "AVAX",
+ "contractAddress": "0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e",
+ "decimals": 6,
+ "name": "USDC stablecoin token",
+ "origins": [
+ "https://snowtrace.io/address/0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e",
+ "https://www.coingecko.com/en/coins/usd-coin"
+ ],
+ "symbol": "USDC"
+ },
+ "DAI": {
+ "category": "STABLECOIN",
+ "chain": "AVAX",
+ "contractAddress": "0xd586e7f844cea2f87f50152665bcbc2c279d8d70",
+ "decimals": 18,
+ "name": "DAI stablecoin token",
+ "origins": [
+ "https://snowtrace.io/address/0xd586e7f844cea2f87f50152665bcbc2c279d8d70",
+ "https://www.coingecko.com/en/coins/dai"
+ ],
+ "symbol": "DAI"
+ }
+ }
+ },
+ "type": "PUBLIC"
+ },
+ "OASISEMERALD": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://explorer.emerald.oasis.dev/"
+ ],
+ "chainId": 42262,
+ "chainName": "Oasis Emerald Network",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "faucet-todo"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Oasis Token",
+ "symbol": "ROSE"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://emerald.oasis.dev",
+ "https://1rpc.io/oasis/emerald"
+ ],
+ "origins": [
+ "https://oasisprotocol.org/"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "OASISEMERALD",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "ARBITRUMGOERLITEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://goerli.arbiscan.io/",
+ "https://goerli-rollup-explorer.arbitrum.io"
+ ],
+ "chainId": 421613,
+ "chainName": "Arbitrum Goerli Test Network",
+ "fallbackGasLimitInUnits": "20000000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://faucetttt",
+ "https://bridge.arbitrum.io"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Arbitrum Goerli ETH Test Token",
+ "symbol": "AGOR"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://goerli-rollup.arbitrum.io/rpc",
+ "https://arbitrum-goerli.public.blastapi.io",
+ "https://endpoints.omniatech.io/v1/arbitrum/goerli/public"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/421613"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "ARBITRUMGOERLITEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "CRONOS": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://cronoscan.com/"
+ ],
+ "chainId": 25,
+ "chainName": "Cronos Main Network",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://cronos.org/faucet"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "CRONOS Main Token",
+ "symbol": "CRO"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://cronosrpc-1.xstaking.sg",
+ "https://evm.cronos.org",
+ "https://cronos.blockpi.network/v1/rpc/public",
+ "https://cronos-evm.publicnode.com"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/25"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "CRONOS",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "LINEA": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://lineascan.build"
+ ],
+ "chainId": 59144,
+ "chainName": "Linea Mainnet",
+ "fallbackGasLimitInUnits": "21000",
+ "fallbackGasPriceInWEI": "1600000000",
+ "faucets": [
+ "faucet-todo"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Linea Token",
+ "symbol": "ETH"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {
+ "HRZNLP": {
+ "category": "LIQUIDITY_PROVIDER",
+ "chain": "LINEA",
+ "contractAddress": "0x438670d41d5118003b2f42cc0466fbadd760dbf4",
+ "description": "HorizonDEX Reinvestment Token",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://lineascan.build/token/0x438670d41d5118003b2f42cc0466fbadd760dbf4"
+ ],
+ "symbol": "HRZNLP"
+ },
+ "BATTLEMON_LGEM": {
+ "category": "GAMING",
+ "chain": "LINEA",
+ "contractAddress": "0x6bf309ad2b7c0ebe44e69a53bb2cced79f17fc66",
+ "description": "BattleMon Lemon GEM",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://lineascan.build/token/0x6bf309ad2b7c0ebe44e69a53bb2cced79f17fc66",
+ "https://battlemon.com/"
+ ],
+ "symbol": "BATTLEMON_LGEM"
+ },
+ "BATTLEMON_PAXE": {
+ "category": "GAMING",
+ "chain": "LINEA",
+ "contractAddress": "0x35d42d4bdc36cfe33a5ea6672a1b81752a963d6d",
+ "description": "BattleMon PickAxe",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://lineascan.build/token/0x35d42d4bdc36cfe33a5ea6672a1b81752a963d6d",
+ "https://battlemon.com/"
+ ],
+ "symbol": "BATTLEMON_PAXE"
+ }
+ }
+ },
+ "nodeURLs": [
+ "https://rpc.linea.build/",
+ "https://linea.drpc.org",
+ "https://linea.blockpi.network/v1/rpc/public",
+ "https://1rpc.io/linea"
+ ],
+ "origins": [
+ "https://linea.build/"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "LINEA",
+ "tokenIndex": {
+ "tokens": {
+ "MATIC": {
+ "category": "DEFI",
+ "chain": "LINEA",
+ "contractAddress": "0x265b25e22bcd7f10a5bd6e6410f10537cc7567e8",
+ "decimals": 18,
+ "name": "MATIC token",
+ "origins": [
+ "https://lineascan.build/token/0x265b25e22bcd7f10a5bd6e6410f10537cc7567e8"
+ ],
+ "symbol": "MATIC"
+ },
+ "veLVC": {
+ "category": "DEFI",
+ "chain": "LINEA",
+ "contractAddress": "0xaec06345b26451bda999d83b361beaad6ea93f87",
+ "decimals": 18,
+ "name": "Locked Velocore token",
+ "origins": [
+ "https://lineascan.build/token/0xaec06345b26451bda999d83b361beaad6ea93f87"
+ ],
+ "symbol": "veLVC"
+ },
+ "LVC": {
+ "category": "DEFI",
+ "chain": "LINEA",
+ "contractAddress": "0xcc22f6aa610d1b2a0e89ef228079cb3e1831b1d1",
+ "decimals": 18,
+ "name": "Velocore token",
+ "origins": [
+ "https://lineascan.build/token/0xcc22f6aa610d1b2a0e89ef228079cb3e1831b1d1"
+ ],
+ "symbol": "LVC"
+ },
+ "WETH": {
+ "category": "DEFI",
+ "chain": "LINEA",
+ "contractAddress": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f",
+ "decimals": 18,
+ "name": "WETH token",
+ "origins": [
+ "https://lineascan.build/address/0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f"
+ ],
+ "symbol": "WETH"
+ },
+ "USDC": {
+ "category": "DEFI",
+ "chain": "LINEA",
+ "contractAddress": "0x176211869ca2b568f2a7d4ee941e073a821ee1ff",
+ "decimals": 6,
+ "name": "USDC stable token",
+ "origins": [
+ "https://lineascan.build/token/0x176211869ca2b568f2a7d4ee941e073a821ee1ff"
+ ],
+ "symbol": "USDC"
+ }
+ }
+ },
+ "type": "PUBLIC"
+ },
+ "SATOSHICHAIN": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://satoshiscan.io"
+ ],
+ "chainId": 12009,
+ "chainName": "SatoshiChain Mainnet",
+ "fallbackGasLimitInUnits": "21000",
+ "fallbackGasPriceInWEI": "550030000000000",
+ "faucets": [
+ "https://faucet.satoshichain.io/"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "SATS Token",
+ "symbol": "SATS"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://mainnet-rpc.satoshichain.io"
+ ],
+ "origins": [
+ "https://satoshix.io/"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "SATOSHICHAIN",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "ETHOTEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://testnetexplorer.ethoprotocol.com/"
+ ],
+ "chainId": 27292,
+ "chainName": "ETHO HC Test Network",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ ""
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "ETHOTest Token",
+ "symbol": "ETHO"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://testnetrpc.ethoprotocol.com/"
+ ],
+ "origins": [
+ "https://docs.ethoprotocol.com/install-metamask"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "ETHOTEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "SCROLLALPHATEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://blockscout.scroll.io"
+ ],
+ "chainId": 534353,
+ "chainName": "Scroll Alpha Testnet",
+ "fallbackGasLimitInUnits": "21000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://scroll.io/alpha/bridge"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Scroll Alpha Token",
+ "symbol": "ETH"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://alpha-rpc.scroll.io/l2",
+ "https://scroll-alphanet.public.blastapi.io",
+ "https://scroll-testnet.blockpi.network/v1/rpc/public"
+ ],
+ "origins": [
+ "https://scroll.io"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "SCROLLALPHATEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "TARAXA": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://explorer.mainnet.taraxa.io"
+ ],
+ "chainId": 841,
+ "chainName": "Taraxa Mainnet",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ ""
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Taraxa Native Token",
+ "symbol": "TARA"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://rpc.mainnet.taraxa.io"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/841",
+ "https://www.coingecko.com/sv/coins/taraxa",
+ "https://www.taraxa.io/"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "TARAXA",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "BSC": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://bscscan.com"
+ ],
+ "chainId": 56,
+ "chainName": "Binance Smart Chain Mainnet",
+ "fallbackGasLimitInUnits": "500000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "faucet-to-be-inserted"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Binance Chain Native Token",
+ "symbol": "BNB"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {
+ "DREAMCARD": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0xe6965b4f189dbdb2bd65e60abaeb531b6fe9580b",
+ "description": "X World Games Dreamcard",
+ "linked_tokens": [
+ "BSC:XWG"
+ ],
+ "mintBlock": 0,
+ "origins": [
+ "https://bscscan.com/address/0xe6965b4f189dbdb2bd65e60abaeb531b6fe9580b",
+ "https://babylons.io/outerringofficial"
+ ],
+ "symbol": "DREAMCARD"
+ },
+ "OUTERRINGMMO_SPACEVEH": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0xceaac6759038d4d3b8791683b27b1021efa57003",
+ "description": "Outer Ring MMO Space Vehicle",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://bscscan.com/token/0xceaac6759038d4d3b8791683b27b1021efa57003",
+ "https://babylons.io/outerringofficial"
+ ],
+ "symbol": "OUTERRINGMMO_SPACEVEH"
+ },
+ "OUTERRINGMMO_ARMOR": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0x0b36f379d7b3b4588f8b8e7e65091b2c44fa6dde",
+ "description": "Outer Ring MMO Armor",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://bscscan.com/token/0x0b36f379d7b3b4588f8b8e7e65091b2c44fa6dde",
+ "https://babylons.io/outerringofficial"
+ ],
+ "symbol": "OUTERRINGMMO_ARMOR"
+ },
+ "OUTERRINGMMO_EXOCRED": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0x3fb6e0dd0eefff9615f186a6bb3a66a396ed0a58",
+ "description": "Outer Ring MMO Exocredits",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://bscscan.com/address/0x3fb6e0dd0eefff9615f186a6bb3a66a396ed0a58",
+ "https://babylons.io/outerringofficial"
+ ],
+ "symbol": "OUTERRINGMMO_EXOCRED"
+ },
+ "OUTERRINGMMO_LANDVEH": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0x21d7d56350fcf7470e4ac38bb2f32c1461a73d8c",
+ "description": "Outer Ring MMO Land Vehicle",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://bscscan.com/token/0x21d7d56350fcf7470e4ac38bb2f32c1461a73d8c",
+ "https://babylons.io/outerringofficial"
+ ],
+ "symbol": "OUTERRINGMMO_LANDVEH"
+ },
+ "STELLAFANTASY_ASSET": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0x80461f88de22b2363113226f0749a7a59cc2225a",
+ "description": "Stella Fantasy Asset",
+ "linked_tokens": [
+ "BSC:SFTY"
+ ],
+ "mintBlock": 0,
+ "origins": [
+ "https://bscscan.com/token/0x80461f88de22b2363113226f0749a7a59cc2225a",
+ "https://www.stellafantasy.io/"
+ ],
+ "symbol": "STELLAFANTASY_ASSET"
+ },
+ "OUTERRINGMMO_WEAPON": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0xeb1aca4e9aa3448b7fecb2b555301325b5931ad9",
+ "description": "Outer Ring MMO Weapon",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://bscscan.com/token/0xeb1aca4e9aa3448b7fecb2b555301325b5931ad9",
+ "https://babylons.io/outerringofficial"
+ ],
+ "symbol": "OUTERRINGMMO_WEAPON"
+ }
+ }
+ },
+ "nodeURLs": [
+ "https://bsc-dataseed.binance.org",
+ "https://bsc-dataseed1.binance.org",
+ "https://bsc-dataseed2.binance.org",
+ "https://bsc-dataseed3.binance.org",
+ "https://bsc-dataseed4.binance.org",
+ "https://bsc-dataseed1.defibit.io",
+ "https://bsc-dataseed2.defibit.io",
+ "https://bsc-dataseed3.defibit.io",
+ "https://bsc-dataseed4.defibit.io",
+ "https://bsc-dataseed1.ninicoin.io",
+ "https://bsc-dataseed2.ninicoin.io",
+ "https://bsc-dataseed3.ninicoin.io",
+ "https://bsc-dataseed4.ninicoin.io"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/56"
+ ],
+ "priceMechanism": "LEGACY",
+ "shortName": "BSC",
+ "tokenIndex": {
+ "tokens": {
+ "STARGATE_BUSD_LP": {
+ "category": "LIQUIDITY_PROVIDER",
+ "chain": "BSC",
+ "contractAddress": "0x98a5737749490856b401db5dc27f522fc314a4e1",
+ "decimals": 18,
+ "name": "StarGate sBUSD Pool token",
+ "origins": [
+ "https://bscscan.com/token/0x98a5737749490856b401db5dc27f522fc314a4e1"
+ ],
+ "symbol": "STARGATE_BUSD_LP"
+ },
+ "SUPS": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0xc99cfaa8f5d9bd9050182f29b83cc9888c5846c4",
+ "decimals": 18,
+ "name": "Supremacy game token",
+ "origins": [
+ "https://bscscan.com/address/0xc99cfaa8f5d9bd9050182f29b83cc9888c5846c4",
+ "https://www.coingecko.com/en/coins/supremacy"
+ ],
+ "symbol": "SUPS"
+ },
+ "VAN": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0xd3dbf84f7aed90d5f56e8d7cab2f43004e9ef6a6",
+ "decimals": 18,
+ "name": "Outer Ring MMO Vanadium Token",
+ "origins": [
+ "https://bscscan.com/token/0xd3dbf84f7aed90d5f56e8d7cab2f43004e9ef6a6"
+ ],
+ "symbol": "VAN"
+ },
+ "STG": {
+ "category": "DEFI",
+ "chain": "BSC",
+ "contractAddress": "0xb0d502e938ed5f4df2e681fe6e419ff29631d62b",
+ "decimals": 18,
+ "name": "StarGate token",
+ "origins": [
+ "https://bscscan.com/address/0xb0d502e938ed5f4df2e681fe6e419ff29631d62b",
+ "https://www.coingecko.com/en/coins/stargate-finance"
+ ],
+ "symbol": "STG"
+ },
+ "USDT": {
+ "category": "STABLECOIN",
+ "chain": "BSC",
+ "contractAddress": "0x55d398326f99059ff775485246999027b3197955",
+ "decimals": 18,
+ "name": "Tether stablecoin token",
+ "origins": [
+ "https://bscscan.com/address/0x55d398326f99059ff775485246999027b3197955",
+ "https://www.coingecko.com/en/coins/tether"
+ ],
+ "symbol": "USDT"
+ },
+ "XVS": {
+ "category": "DEFI",
+ "chain": "BSC",
+ "contractAddress": "0xcf6bb5389c92bdda8a3747ddb454cb7a64626c63",
+ "decimals": 18,
+ "name": "Venus Token",
+ "origins": [
+ "https://bscscan.com/address/0xcf6bb5389c92bdda8a3747ddb454cb7a64626c63",
+ "https://www.coingecko.com/en/coins/venus"
+ ],
+ "symbol": "XVS"
+ },
+ "PLU": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0x07958be5d12365db62a6535d0a88105944a2e81e",
+ "decimals": 18,
+ "name": "Outer Ring MMO Plutonium Token",
+ "origins": [
+ "https://bscscan.com/token/0x07958be5d12365db62a6535d0a88105944a2e81e"
+ ],
+ "symbol": "PLU"
+ },
+ "ACE": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0x6bf6c2b429421a55d90a02c56b2d8bffbc636039",
+ "decimals": 18,
+ "name": "Outer Ring MMO Acetylene Token",
+ "origins": [
+ "https://bscscan.com/token/0x6bf6c2b429421a55d90a02c56b2d8bffbc636039"
+ ],
+ "symbol": "ACE"
+ },
+ "COP": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0x892f23e32b82ef0d5394cf33dcd4dff7f4b274b0",
+ "decimals": 18,
+ "name": "Outer Ring MMO Copper Token",
+ "origins": [
+ "https://bscscan.com/token/0x892f23e32b82ef0d5394cf33dcd4dff7f4b274b0"
+ ],
+ "symbol": "COP"
+ },
+ "CHMB": {
+ "category": "DEFI",
+ "chain": "BSC",
+ "contractAddress": "0x5492ef6aeeba1a3896357359ef039a8b11621b45",
+ "decimals": 18,
+ "name": "Chumbi Valley Game Token",
+ "origins": [
+ "https://bscscan.com/token/0x5492ef6aeeba1a3896357359ef039a8b11621b45",
+ "https://www.coingecko.com/en/coins/chumbai-valley"
+ ],
+ "symbol": "CHMB"
+ },
+ "VIKINGSWAP": {
+ "category": "DEFI",
+ "chain": "BSC",
+ "contractAddress": "0x896ede222d3f7f3414e136a2791bdb08aaa25ce0",
+ "decimals": 18,
+ "name": "Vikingswap Token",
+ "origins": [
+ "https://bscscan.com/address/0x896ede222d3f7f3414e136a2791bdb08aaa25ce0",
+ "https://www.coingecko.com/en/coins/viking-swap"
+ ],
+ "symbol": "VIKINGSWAP"
+ },
+ "BABYCAKE": {
+ "category": "DEFI",
+ "chain": "BSC",
+ "contractAddress": "0xdb8d30b74bf098af214e862c90e647bbb1fcc58c",
+ "decimals": 18,
+ "name": "BABYCAKE DEFI reflection Token",
+ "origins": [
+ "https://bscscan.com/token/0xdb8d30b74bf098af214e862c90e647bbb1fcc58c",
+ "https://www.coingecko.com/en/coins/baby-cake"
+ ],
+ "symbol": "BABYCAKE"
+ },
+ "CAKE": {
+ "category": "DEFI",
+ "chain": "BSC",
+ "contractAddress": "0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82",
+ "decimals": 18,
+ "name": "Pancakeswap DEFI Token",
+ "origins": [
+ "https://bscscan.com/token/0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82",
+ "https://www.coingecko.com/en/coins/pancakeswap"
+ ],
+ "symbol": "CAKE"
+ },
+ "MOBOX": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0x3203c9e46ca618c8c1ce5dc67e7e9d75f5da2377",
+ "decimals": 18,
+ "name": "MOBOX game token",
+ "origins": [
+ "https://bscscan.com/address/0x3203c9e46ca618c8c1ce5dc67e7e9d75f5da2377",
+ "https://www.coingecko.com/en/coins/mobox"
+ ],
+ "symbol": "MOBOX"
+ },
+ "NIC": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0xf9a71cba51e260e184a72d9edf888d3f99f3bac1",
+ "decimals": 18,
+ "name": "Outer Ring MMO Nickel Token",
+ "origins": [
+ "https://bscscan.com/token/0xf9a71cba51e260e184a72d9edf888d3f99f3bac1"
+ ],
+ "symbol": "NIC"
+ },
+ "XWG": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0x6b23c89196deb721e6fd9726e6c76e4810a464bc",
+ "decimals": 18,
+ "name": "X World Games Token",
+ "origins": [
+ "https://bscscan.com/address/0x6b23c89196deb721e6fd9726e6c76e4810a464bc",
+ "https://www.coingecko.com/en/coins/x-world-games"
+ ],
+ "symbol": "XWG"
+ },
+ "GQ": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0xf700d4c708c2be1463e355f337603183d20e0808",
+ "decimals": 18,
+ "name": "Outer Ring MMO Game Token",
+ "origins": [
+ "https://bscscan.com/address/0xf700d4c708c2be1463e355f337603183d20e0808",
+ "https://www.coingecko.com/en/coins/outer-ring"
+ ],
+ "symbol": "GQ"
+ },
+ "IRON": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0xbd1945cd85a2be93a6475381c9f5edf19407a921",
+ "decimals": 18,
+ "name": "Outer Ring MMO Iron Token",
+ "origins": [
+ "https://bscscan.com/token/0xbd1945cd85a2be93a6475381c9f5edf19407a921"
+ ],
+ "symbol": "IRON"
+ },
+ "DAI": {
+ "category": "STABLECOIN",
+ "chain": "BSC",
+ "contractAddress": "0x1af3f329e8be154074d8769d1ffa4ee058b1dbc3",
+ "decimals": 18,
+ "name": "DAI stablecoin token",
+ "origins": [
+ "https://bscscan.com/address/0x1af3f329e8be154074d8769d1ffa4ee058b1dbc3",
+ "https://www.coingecko.com/en/coins/dai"
+ ],
+ "symbol": "DAI"
+ },
+ "CAR": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0x253b7a24003684f7b4fe87e531a017c7382a3894",
+ "decimals": 18,
+ "name": "Outer Ring MMO Carbon Token",
+ "origins": [
+ "https://bscscan.com/token/0x253b7a24003684f7b4fe87e531a017c7382a3894"
+ ],
+ "symbol": "CAR"
+ },
+ "TEST": {
+ "category": "TEST",
+ "chain": "BSC",
+ "contractAddress": "0x1c3c3941acb8a9be35e50f086fae6a481f7d9df7",
+ "decimals": 18,
+ "name": "TEST token",
+ "origins": [
+ "https://bscscan.com/token/0xMOJO"
+ ],
+ "symbol": "TEST"
+ },
+ "ARG": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0x0efcf1737b81ce89325b17eafae2686a8afe8bd4",
+ "decimals": 18,
+ "name": "Outer Ring MMO Acetylene Token",
+ "origins": [
+ "https://bscscan.com/token/0x0efcf1737b81ce89325b17eafae2686a8afe8bd4"
+ ],
+ "symbol": "ARG"
+ },
+ "SCK": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0x227a3ef4d41d0215123f3197faa087bf71d2236a",
+ "decimals": 18,
+ "name": "Space Corsair Key",
+ "origins": [
+ "https://bscscan.com/address/0x227a3ef4d41d0215123f3197faa087bf71d2236a",
+ "https://www.coingecko.com/en/coins/space-corsair-key"
+ ],
+ "symbol": "SCK"
+ },
+ "TRON": {
+ "category": "SCAM",
+ "chain": "BSC",
+ "contractAddress": "0x85eac5ac2f758618dfa09bdbe0cf174e7d574d5b",
+ "decimals": 18,
+ "name": "TRON TRX token",
+ "origins": [
+ "https://coinmarketcap.com/currencies/tron/"
+ ],
+ "symbol": "TRON"
+ },
+ "USDC": {
+ "category": "STABLECOIN",
+ "chain": "BSC",
+ "contractAddress": "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d",
+ "decimals": 6,
+ "name": "USDC stablecoin token",
+ "origins": [
+ "https://bscscan.com/address/0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d",
+ "https://www.coingecko.com/en/coins/usd-coin"
+ ],
+ "symbol": "USDC"
+ },
+ "METIS": {
+ "category": "GASCURRENCY",
+ "chain": "BSC",
+ "contractAddress": "0xe552fb52a4f19e44ef5a967632dbc320b0820639",
+ "decimals": 18,
+ "name": "METIS token on BSC",
+ "origins": [
+ "https://bscscan.com/address/0xe552fb52a4f19e44ef5a967632dbc320b0820639",
+ "https://www.coingecko.com/en/coins/metis-token"
+ ],
+ "symbol": "METIS"
+ },
+ "BUSD": {
+ "category": "STABLECOIN",
+ "chain": "BSC",
+ "contractAddress": "0xe9e7cea3dedca5984780bafc599bd69add087d56",
+ "decimals": 18,
+ "name": "Binance stablecoin token",
+ "origins": [
+ "https://bscscan.com/address/0xe9e7cea3dedca5984780bafc599bd69add087d56",
+ "https://www.coingecko.com/en/coins/binance-usd"
+ ],
+ "symbol": "BUSD"
+ },
+ "NFTART": {
+ "category": "DEFI",
+ "chain": "BSC",
+ "contractAddress": "0xf7844cb890f4c339c497aeab599abdc3c874b67a",
+ "decimals": 18,
+ "name": "NFT Art Token",
+ "origins": [
+ "https://bscscan.com/address/0xf7844cb890f4c339c497aeab599abdc3c874b67a",
+ "https://www.coingecko.com/en/coins/nft-art-finance"
+ ],
+ "symbol": "NFTART"
+ },
+ "MET": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0x03697caf2e5458c7c2a8d9f8818079c2ae72f353",
+ "decimals": 18,
+ "name": "Outer Ring MMO Methane Token",
+ "origins": [
+ "https://bscscan.com/token/0x03697caf2e5458c7c2a8d9f8818079c2ae72f353"
+ ],
+ "symbol": "MET"
+ },
+ "SFTY": {
+ "category": "GAMING",
+ "chain": "BSC",
+ "contractAddress": "0xe9d6d6d7cde5c7d45927f8c37460d932e612c902",
+ "decimals": 18,
+ "name": "Stella Fantasy gaming token",
+ "origins": [
+ "https://bscscan.com/address/0xe9d6d6d7cde5c7d45927f8c37460d932e612c902",
+ "https://www.coingecko.com/en/coins/stella-fantasy-token"
+ ],
+ "symbol": "SFTY"
+ },
+ "CATGIRL": {
+ "category": "NFT",
+ "chain": "BSC",
+ "contractAddress": "0x79ebc9a2ce02277a4b5b3a768b1c0a4ed75bd936",
+ "decimals": 18,
+ "name": "Catgirl NFT Token",
+ "origins": [
+ "https://bscscan.com/address/0x79ebc9a2ce02277a4b5b3a768b1c0a4ed75bd936",
+ "https://www.coingecko.com/en/coins/catgirl"
+ ],
+ "symbol": "CATGIRL"
+ }
+ }
+ },
+ "type": "PUBLIC"
+ },
+ "MOONBEAM": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://moonscan.io"
+ ],
+ "chainId": 1284,
+ "chainName": "Moonbeam Network",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "faucet-to-be-inserted"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Moonbeam Native Token",
+ "symbol": "GLMR"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {
+ "SNAKESOLDIERS": {
+ "category": "SOCIAL",
+ "chain": "MOONBEAM",
+ "contractAddress": "0x3ab955216bdd76f51fbe02a3fe237d6612bbd09f",
+ "description": "ZKSyncEra Ape",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://moonscan.io/token/0x3ab955216bdd76f51fbe02a3fe237d6612bbd09f",
+ "https://snakesoldiers.com"
+ ],
+ "symbol": "SNAKESOLDIERS"
+ }
+ }
+ },
+ "nodeURLs": [
+ "https://rpc.api.moonbeam.network",
+ "https://rpc.ankr.com/moonbeam",
+ "https://moonbeam.public.blastapi.io",
+ "https://moonbeam.unitedbloc.com:3000",
+ "https://moonbeam.api.onfinality.io/public"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/1284"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "MOONBEAM",
+ "tokenIndex": {
+ "tokens": {
+ "mGLMR": {
+ "category": "DEFI",
+ "chain": "MOONBEAM",
+ "contractAddress": "0x091608f4e4a15335145be0A279483C0f8E4c7955",
+ "decimals": 8,
+ "name": "Moonwell GLMR token",
+ "origins": [
+ "https://moonscan.io/token/0x091608f4e4a15335145be0a279483c0f8e4c7955",
+ "https://moonwell.fi/artemis/GLMR"
+ ],
+ "symbol": "mGLMR"
+ },
+ "WELL": {
+ "category": "DEFI",
+ "chain": "MOONBEAM",
+ "contractAddress": "0x511ab53f793683763e5a8829738301368a2411e3",
+ "decimals": 18,
+ "name": "Moonwell WELL token",
+ "origins": [
+ "https://moonscan.io/address/0x511ab53f793683763e5a8829738301368a2411e3",
+ "https://www.coingecko.com/en/coins/moonwell"
+ ],
+ "symbol": "WELL"
+ }
+ }
+ },
+ "type": "PUBLIC"
+ },
+ "ZORATEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://testnet.explorer.zora.co",
+ "https://goerli.etherscan.io/address/0xDb9F51790365e7dc196e7D072728df39Be958ACe"
+ ],
+ "chainId": 999,
+ "chainName": "Zora Goerli Testnet",
+ "fallbackGasLimitInUnits": "21000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://bridgetozora.world/"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Zora Testnet Gas Token",
+ "symbol": "GöETH"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://testnet.rpc.zora.co"
+ ],
+ "origins": [
+ "https://zora.energy"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "ZORATEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "BITKUB": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://bkcscan.com"
+ ],
+ "chainId": 96,
+ "chainName": "Bitkub Network",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "faucet-to-be-inserted"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Bitkub Native Token",
+ "symbol": "KUB"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {
+ "MMV_ITEM": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0xd08ac40b3a0a7fb20b026a3b6cd5d7cfadc3d6f5",
+ "description": "Morning Moon Village game item",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://www.bkcscan.com/address/0xd08ac40b3a0a7fb20b026a3b6cd5d7cfadc3d6f5",
+ "https://morningmoonvillage.com/",
+ "https://mmv.megaland.io/"
+ ],
+ "symbol": "MMV_ITEM"
+ },
+ "SANDX": {
+ "category": "NFT",
+ "chain": "BITKUB",
+ "contractAddress": "0x998c4a4f5231b10ad867bd5d99fa181495f34cd8",
+ "description": "SandX NFT",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://www.bkcscan.com/address/0x998c4a4f5231b10ad867bd5d99fa181495f34cd8",
+ "https://www.megaland.io/"
+ ],
+ "symbol": "SANDX"
+ }
+ }
+ },
+ "nodeURLs": [
+ "https://rpc.bitkubchain.io"
+ ],
+ "origins": [
+ "https://support.bitkub.com/hc/en-us/articles/360061315771-How-to-connect-an-online-wallet-to-Bitkub-Chain-Metamask"
+ ],
+ "priceMechanism": "LEGACY",
+ "shortName": "BITKUB",
+ "tokenIndex": {
+ "tokens": {
+ "MMV_CABBAGESEED": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0x1f8b5af0ec97c44b24366b36c40f2d4aca2c73e2",
+ "decimals": 18,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0x1f8b5af0ec97c44b24366b36c40f2d4aca2c73e2/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_CABBAGESEED"
+ },
+ "MMV_TOMATOSOUP": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0xbE46a81D181069aC0Ff18F4F7239Df10422E6DC3",
+ "decimals": 0,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0xbE46a81D181069aC0Ff18F4F7239Df10422E6DC3/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_TOMATOSOUP"
+ },
+ "MMV_GREENHERB": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0xde496524c30c460922e7810ddc6c806c0e2c5354",
+ "decimals": 0,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0xde496524c30c460922e7810ddc6c806c0e2c5354/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_GREENHERB"
+ },
+ "MMV_SHITAKE_MUSHROOM": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0xd3b314b101b26fa2bd19df0d845a632d72c4fc44",
+ "decimals": 0,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0xd3b314b101b26fa2bd19df0d845a632d72c4fc44/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_SHITAKE_MUSHROOM"
+ },
+ "USDT": {
+ "category": "STABLECOIN",
+ "chain": "BITKUB",
+ "contractAddress": "0x7d984c24d2499d840eb3b7016077164e15e5faa6",
+ "decimals": 18,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0x7d984c24d2499d840eb3b7016077164e15e5faa6/token-transfers"
+ ],
+ "symbol": "USDT"
+ },
+ "MMV_TOMATOSEED": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0xe991151Bf43bD712beAC33e5cFF2580841c9b440",
+ "decimals": 18,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0xe991151Bf43bD712beAC33e5cFF2580841c9b440/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_TOMATOSEED"
+ },
+ "MMV_LEATHER_PIECE": {
+ "category": "DEFI",
+ "chain": "BITKUB",
+ "contractAddress": "0x15aa87eb74069d3800f8e75A93FC04fda79AA24d",
+ "decimals": 0,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0x15aa87eb74069d3800f8e75A93FC04fda79AA24d/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_LEATHER_PIECE"
+ },
+ "MMV_HONEY": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0x575d7bfdbdf255d5741571334f159d903de1544f",
+ "decimals": 0,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0x575d7bfdbdf255d5741571334f159d903de1544f/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_HONEY"
+ },
+ "KKUB": {
+ "category": "DEFI",
+ "chain": "BITKUB",
+ "contractAddress": "0x67eBD850304c70d983B2d1b93ea79c7CD6c3F6b5",
+ "decimals": 18,
+ "name": "Wrapped KUB (KKUB) token",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0x67eBD850304c70d983B2d1b93ea79c7CD6c3F6b5/token-transfers"
+ ],
+ "symbol": "KKUB"
+ },
+ "MMV_SF_CABBAGE": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0xc2990515610028139f68016b321a0c36a5101104",
+ "decimals": 0,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0xc2990515610028139f68016b321a0c36a5101104/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_SF_CABBAGE"
+ },
+ "MMV_SILVERKEY": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0x73d05f935534918bbc87cb353928cb957ed03697",
+ "decimals": 0,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0x73d05f935534918bbc87cb353928cb957ed03697/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_SILVERKEY"
+ },
+ "MMV_LUMI": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0x95013dcb6a561e6c003aed9c43fb8b64008aa361",
+ "decimals": 18,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0x95013dcb6a561e6c003aed9c43fb8b64008aa361/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_LUMI"
+ },
+ "MMV_DRIEDAPPLE": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0xb035c229903a0cff939be36b532d8c11204e6837",
+ "decimals": 0,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0xb035c229903a0cff939be36b532d8c11204e6837/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_DRIEDAPPLE"
+ },
+ "MMV_BANANA": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0x0944882cf373adc8c3de740821fb14c8669e89eb",
+ "decimals": 0,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0x0944882cf373adc8c3de740821fb14c8669e89eb/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_BANANA"
+ },
+ "MMV_REDHERB": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0x3F69C740456150268C5e23bD05a2A10Bf9e5c3CB",
+ "decimals": 0,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0x3F69C740456150268C5e23bD05a2A10Bf9e5c3CB/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_REDHERB"
+ },
+ "MMV_HEALTHPOTION": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0xbd60c8caf6e22907576d9e363ab1f91b43aaf769",
+ "decimals": 0,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0xbd60c8caf6e22907576d9e363ab1f91b43aaf769/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_HEALTHPOTION"
+ },
+ "MMV_DIAMON_LP": {
+ "category": "DEFI",
+ "chain": "BITKUB",
+ "contractAddress": "0x7Bf51541208A70b784006eF7Bd6F774F4012Cd38",
+ "decimals": 18,
+ "name": "Morning Moon Village diamon LP",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0x7Bf51541208A70b784006eF7Bd6F774F4012Cd38/token-transfers"
+ ],
+ "symbol": "MMV_DIAMON_LP"
+ },
+ "MMV_RAG": {
+ "category": "DEFI",
+ "chain": "BITKUB",
+ "contractAddress": "0x1F14690e6c7D02fCeB67c6b818aa2C093e16fe27",
+ "decimals": 0,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0x1F14690e6c7D02fCeB67c6b818aa2C093e16fe27/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_RAG"
+ },
+ "MMV_KTRUMPET_MUSHROOM": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0xc14f24835efe355106ab8725488f16f93c8c5f96",
+ "decimals": 0,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0xc14f24835efe355106ab8725488f16f93c8c5f96/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_KTRUMPET_MUSHROOM"
+ },
+ "MMV_CORNSEED": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0xe27aebed61be207e83fc05fbc408420c737881da",
+ "decimals": 18,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0xe27aebed61be207e83fc05fbc408420c737881da/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_CORNSEED"
+ },
+ "MMV_GREENAPPLE": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0x417e28bd41cd45d9f996b69450f81b02821a6d64",
+ "decimals": 0,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0x417e28bd41cd45d9f996b69450f81b02821a6d64/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_GREENAPPLE"
+ },
+ "MMV_CARROTSEED": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0x7b263d648fff39142abecb07a1bb85297e09982d",
+ "decimals": 18,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0x7b263d648fff39142abecb07a1bb85297e09982d/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_CARROTSEED"
+ },
+ "MMV_LHEALTHPOTION": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0xe66f21d817af8f99129af6023332dd7b37503b9d",
+ "decimals": 0,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0xe66f21d817af8f99129af6023332dd7b37503b9d/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_LHEALTHPOTION"
+ },
+ "MMV_SALAD": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0x2944d051dc66669e04629b827ae9e3ebcb1e48d9",
+ "decimals": 0,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0x2944d051dc66669e04629b827ae9e3ebcb1e48d9/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_SALAD"
+ },
+ "MMV_CORNSOUP": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0x2b09ae76dfc601210407560502b340e104787b34",
+ "decimals": 0,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0x2b09ae76dfc601210407560502b340e104787b34/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_CORNSOUP"
+ },
+ "MMV_WBUTTON_MUSHROOM": {
+ "category": "GAMING",
+ "chain": "BITKUB",
+ "contractAddress": "0xcb74a1A9dB4285E97D4dE8aa4B61cd10277Ab479",
+ "decimals": 0,
+ "name": "Morning Moon Village game item",
+ "origins": [
+ "https://www.bkcscan.com/tokens/0xcb74a1A9dB4285E97D4dE8aa4B61cd10277Ab479/token-transfers",
+ "https://morningmoonvillage.com/"
+ ],
+ "symbol": "MMV_WBUTTON_MUSHROOM"
+ }
+ }
+ },
+ "type": "PUBLIC"
+ },
+ "MOONRIVER": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://moonriver.moonscan.io"
+ ],
+ "chainId": 1285,
+ "chainName": "Moonbeam Network",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "faucet-to-be-inserted"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "MoonRiver Native Token",
+ "symbol": "MOVR"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://moonriver.unitedbloc.com:2000",
+ "https://moonriver.public.blastapi.io",
+ "https://rpc.api.moonriver.moonbeam.network",
+ "https://moonriver.api.onfinality.io/public"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/1285"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "MOONRIVER",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "TENET": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://tenetscan.io"
+ ],
+ "chainId": 1559,
+ "chainName": "Tenet Mainnet",
+ "fallbackGasLimitInUnits": "21000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ ""
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "TENET Gas Token",
+ "symbol": "TENET"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://rpc.tenet.org",
+ "https://tenet-evm.publicnode.com"
+ ],
+ "origins": [
+ "https://ethereumpow.org/"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "TENET",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "AURORATEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://explorer.testnet.aurora.dev/"
+ ],
+ "chainId": 1313161555,
+ "chainName": "Aurora Testnet",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "faucet-to-be-inserted"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Aurora Token",
+ "symbol": "AETH"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://endpoints.omniatech.io/v1/aurora/testnet/public",
+ "https://1rpc.io/aurora"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/1313161555"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "AURORATEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "SHARDEUMLIBERTY2xTEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://explorer.liberty20.shardeum.org"
+ ],
+ "chainId": 8081,
+ "chainName": "Shardeum Liberty 2.0",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://docs.shardeum.org/faucet/claim"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Shardeum Native Token",
+ "symbol": "SHM"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://liberty20.shardeum.org"
+ ],
+ "origins": [
+ "https://docs.shardeum.org/wallets/MetaMask/add-shardeum-network"
+ ],
+ "priceMechanism": "LEGACY",
+ "shortName": "SHARDEUMLIBERTY2xTEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "BORKED"
+ },
+ "CONFLUXTEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://evmtestnet.confluxscan.net"
+ ],
+ "chainId": 71,
+ "chainName": "Conflux Testnet",
+ "fallbackGasLimitInUnits": "21000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://efaucet.confluxnetwork.org/"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Conflux Token",
+ "symbol": "CFX"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://evmtestnet.confluxrpc.com"
+ ],
+ "origins": [
+ "https://confluxnetwork.org/"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "CONFLUXTEST",
+ "tokenIndex": {
+ "tokens": {
+ "USDT": {
+ "category": "STABLECOIN",
+ "chain": "CONFLUXTEST",
+ "contractAddress": "0x7d682e65efc5c13bf4e394b8f376c48e6bae0355",
+ "decimals": 18,
+ "name": "Tether stable coin",
+ "origins": [
+ "https://evmtestnet.confluxscan.net/address/0x7d682e65efc5c13bf4e394b8f376c48e6bae0355"
+ ],
+ "symbol": "USDT"
+ },
+ "WETH": {
+ "category": "DEFI",
+ "chain": "CONFLUXTEST",
+ "contractAddress": "0xcd71270f82f319e0498ff98af8269c3f0d547c65",
+ "decimals": 18,
+ "name": "Wrapped ETH token",
+ "origins": [
+ "https://evmtestnet.confluxscan.io/address/0xcd71270f82f319e0498ff98af8269c3f0d547c65"
+ ],
+ "symbol": "WETH"
+ },
+ "USDC": {
+ "category": "STABLECOIN",
+ "chain": "CONFLUXTEST",
+ "contractAddress": "0x349298b0e20df67defd6efb8f3170cf4a32722ef",
+ "decimals": 18,
+ "name": "USDC stable coin",
+ "origins": [
+ "https://evmtestnet.confluxscan.io/address/0x349298b0e20df67defd6efb8f3170cf4a32722ef"
+ ],
+ "symbol": "USDC"
+ },
+ "VSWAP": {
+ "category": "DEFI",
+ "chain": "CONFLUXTEST",
+ "contractAddress": "0x2c0230516cfcddcd2a5256400c4593deaa243259",
+ "decimals": 18,
+ "name": "Vswap token",
+ "origins": [
+ "https://evmtestnet.confluxscan.io/address/0x2c0230516cfcddcd2a5256400c4593deaa243259",
+ "https://app-testnet.vswap.finance"
+ ],
+ "symbol": "VSWAP"
+ }
+ }
+ },
+ "type": "PUBLIC"
+ },
+ "FANTOM": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://ftmscan.com"
+ ],
+ "chainId": 250,
+ "chainName": "Fantom Network",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://faucet.fantom.network/"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Fantom Native Token",
+ "symbol": "FTM"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://rpc.ftm.tools",
+ "https://fantom-mainnet.gateway.pokt.network/v1/lb/62759259ea1b320039c9e7ac",
+ "https://rpc.ankr.com/fantom",
+ "https://rpc2.fantom.network",
+ "https://rpcapi.fantom.network",
+ "https://fantom-mainnet.public.blastapi.io"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/250"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "FANTOM",
+ "tokenIndex": {
+ "tokens": {
+ "SPOOKYSWAP_FTM_MULTI_LP": {
+ "category": "LIQUIDITY_PROVIDER",
+ "chain": "FANTOM",
+ "contractAddress": "0x297C8990134bf1eE08aE5D8805042fbac8781201",
+ "decimals": 18,
+ "name": "Spookyswap FTM+MULTI LP token",
+ "origins": [
+ "https://ftmscan.com/token/0x297c8990134bf1ee08ae5d8805042fbac8781201?a=0xf0803b4cf6359d64913ec6a0b8227640afe69b2a",
+ "https://spooky.fi/#/add/FTM/0x9Fb9a33956351cf4fa040f65A13b835A3C8764E3"
+ ],
+ "symbol": "SPOOKYSWAP_FTM_MULTI_LP"
+ },
+ "TEST": {
+ "category": "TEST",
+ "chain": "FANTOM",
+ "contractAddress": "0x62b65f4b89e9a56b687ccebb57b4afeafa933894",
+ "decimals": 18,
+ "name": "TEST token",
+ "origins": [
+ "https://polygonscan.com/token/0xMOJO"
+ ],
+ "symbol": "TEST"
+ },
+ "STG": {
+ "category": "DEFI",
+ "chain": "FANTOM",
+ "contractAddress": "0x2f6f07cdcf3588944bf4c42ac74ff24bf56e7590",
+ "decimals": 18,
+ "name": "StarGate token",
+ "origins": [
+ "https://ftmscan.com/address/0x2f6f07cdcf3588944bf4c42ac74ff24bf56e7590",
+ "https://www.coingecko.com/en/coins/stargate-finance"
+ ],
+ "symbol": "STG"
+ },
+ "USDT": {
+ "category": "STABLECOIN",
+ "chain": "FANTOM",
+ "contractAddress": "0x049d68029688eabf473097a2fc38ef61633a3c7a",
+ "decimals": 18,
+ "name": "Tether stablecoin token",
+ "origins": [
+ "https://ftmscan.com/address/0x049d68029688eabf473097a2fc38ef61633a3c7a",
+ "https://www.coingecko.com/en/coins/tether"
+ ],
+ "symbol": "USDT"
+ },
+ "USDC": {
+ "category": "STABLECOIN",
+ "chain": "FANTOM",
+ "contractAddress": "0x04068da6c83afcfa0e13ba15a6696662335d5b75",
+ "decimals": 6,
+ "name": "USDC stablecoin token",
+ "origins": [
+ "https://ftmscan.com/address/0x04068da6c83afcfa0e13ba15a6696662335d5b75",
+ "https://www.coingecko.com/en/coins/usd-coin"
+ ],
+ "symbol": "USDC"
+ },
+ "MULTI": {
+ "category": "DEFI",
+ "chain": "FANTOM",
+ "contractAddress": "0x9fb9a33956351cf4fa040f65a13b835a3c8764e3",
+ "decimals": 18,
+ "name": "Multichain token",
+ "origins": [
+ "https://ftmscan.com/address/0x9fb9a33956351cf4fa040f65a13b835a3c8764e3",
+ "https://www.coingecko.com/en/coins/multichain"
+ ],
+ "symbol": "MULTI"
+ },
+ "DAI": {
+ "category": "STABLECOIN",
+ "chain": "FANTOM",
+ "contractAddress": "0x8d11ec38a3eb5e956b052f67da8bdc9bef8abf3e",
+ "decimals": 18,
+ "name": "DAI stablecoin token",
+ "origins": [
+ "https://ftmscan.com/address/0x8d11ec38a3eb5e956b052f67da8bdc9bef8abf3e",
+ "https://www.coingecko.com/en/coins/dai"
+ ],
+ "symbol": "DAI"
+ }
+ }
+ },
+ "type": "PUBLIC"
+ },
+ "ZKEVM": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://zkevm.polygonscan.com/"
+ ],
+ "chainId": 1101,
+ "chainName": "Polygon ZKEVM Network",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://bridge.zkevm-rpc.com/"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "ETH Token",
+ "symbol": "ETH"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://zkevm-rpc.com",
+ "https://rpc.polygon-zkevm.gateway.fm",
+ "https://rpc.ankr.com/polygon_zkevm"
+ ],
+ "origins": [
+ "https://wiki.polygon.technology/docs/zkEVM/develop"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "ZKEVM",
+ "tokenIndex": {
+ "tokens": {
+ "GAMMA_aUSDC_DAI_LP": {
+ "category": "LIQUIDITY_PROVIDER",
+ "chain": "ZKEVM",
+ "contractAddress": "0xafad6e114cfbc8a19e91b8d7d04da740a7698595",
+ "decimals": 18,
+ "name": "aUSDC-DAI LP token",
+ "origins": [
+ "https://zkevm.polygonscan.com/token/0xafad6e114cfbc8a19e91b8d7d04da740a7698595"
+ ],
+ "symbol": "GAMMA_aUSDC_DAI_LP"
+ },
+ "USDT": {
+ "category": "STABLECOIN",
+ "chain": "ZKEVM",
+ "contractAddress": "0x1e4a5963abfd975d8c9021ce480b42188849d41d",
+ "decimals": 6,
+ "name": "USDT stablecoin token",
+ "origins": [
+ "https://zkevm.polygonscan.com/token/0x1e4a5963abfd975d8c9021ce480b42188849d41d",
+ "https://www.coingecko.com/en/coins/tether"
+ ],
+ "symbol": "USDT"
+ },
+ "USDC": {
+ "category": "STABLECOIN",
+ "chain": "ZKEVM",
+ "contractAddress": "0xa8ce8aee21bc2a48a5ef670afcc9274c7bbbc035",
+ "decimals": 6,
+ "name": "USDC stablecoin token",
+ "origins": [
+ "https://zkevm.polygonscan.com/token/0xa8ce8aee21bc2a48a5ef670afcc9274c7bbbc035",
+ "https://www.coingecko.com/en/coins/usd-coin"
+ ],
+ "symbol": "USDC"
+ },
+ "DAI": {
+ "category": "STABLECOIN",
+ "chain": "ZKEVM",
+ "contractAddress": "0xc5015b9d9161dca7e18e32f6f25c4ad850731fd4",
+ "decimals": 18,
+ "name": "DAI stablecoin token",
+ "origins": [
+ "https://zkevm.polygonscan.com/address/0xc5015b9d9161dca7e18e32f6f25c4ad850731fd4",
+ "https://www.coingecko.com/en/coins/dai"
+ ],
+ "symbol": "DAI"
+ }
+ }
+ },
+ "type": "PUBLIC"
+ },
+ "TAIKOALPHA3TEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://explorer.test.taiko.xyz"
+ ],
+ "chainId": 167005,
+ "chainName": "Taiko Ethereum A3 Test Network",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://bridge.test.taiko.xyz/"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Taiko A3 Test Token",
+ "symbol": "ETH"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://rpc.test.taiko.xyz"
+ ],
+ "origins": [
+ "https://taiko.xyz"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "TAIKOALPHA3TEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "BORKED"
+ },
+ "TAIKOALPHA2TEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://explorer.a2.taiko.xyz"
+ ],
+ "chainId": 167004,
+ "chainName": "Taiko Ethereum A2 Test Network",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://bridge.test.taiko.xyz/"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Taiko A2 Test Token",
+ "symbol": "ETH"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://rpc.a2.taiko.xyz"
+ ],
+ "origins": [
+ "https://taiko.xyz"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "TAIKOALPHA2TEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "BORKED"
+ },
+ "WEMIX": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://explorer.wemix.com"
+ ],
+ "chainId": 1111,
+ "chainName": "WEMIX mainnet",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "101000000000",
+ "faucets": [
+ "faucet-to-be-inserted"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "WEMIX",
+ "symbol": "WEMIX"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://api.wemix.com/"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/1111",
+ "https://medium.com/wemix-communication/metamask-wemix3-0-mainnet-setting-guide-1a249fcaf866"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "WEMIX",
+ "tokenIndex": {
+ "tokens": {
+ "WEMIX$": {
+ "category": "STABLECOIN",
+ "chain": "WEMIX",
+ "contractAddress": "0x8e81fcc2d4a3baa0ee9044e0d7e36f59c9bba9c1",
+ "decimals": 18,
+ "name": "WEMIX USD token",
+ "origins": [
+ "https://explorer.wemix.com/token/0x8e81fcc2d4a3baa0ee9044e0d7e36f59c9bba9c1/transfers"
+ ],
+ "symbol": "WEMIX$"
+ },
+ "KLAY": {
+ "category": "DEFI",
+ "chain": "WEMIX",
+ "contractAddress": "0x461d52769884ca6235B685EF2040F47d30C94EB5",
+ "decimals": 18,
+ "name": "Wrapped KLAY token",
+ "origins": [
+ "https://explorer.wemix.com/address/0x461d52769884ca6235B685EF2040F47d30C94EB5"
+ ],
+ "symbol": "KLAY"
+ }
+ }
+ },
+ "type": "PUBLIC"
+ },
+ "LINEATEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://explorer.goerli.linea.build"
+ ],
+ "chainId": 59140,
+ "chainName": "Linea Testnet",
+ "fallbackGasLimitInUnits": "21000",
+ "fallbackGasPriceInWEI": "1600000000",
+ "faucets": [
+ "faucet-todo"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Linea Token",
+ "symbol": "ETH"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://rpc.goerli.linea.build"
+ ],
+ "origins": [
+ "https://linea.build/"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "LINEATEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "BORKED"
+ },
+ "KOVANTEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://kovan.etherscan.io"
+ ],
+ "chainId": 42,
+ "chainName": "Kovan Test Network",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "discontinued"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Kovan Test Token",
+ "symbol": "KOV"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://kovan.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161",
+ "https://kovan.poa.network"
+ ],
+ "origins": [
+ "https://rpc.info/"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "KOVANTEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "BORKED"
+ },
+ "BOBARINKEBYTEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://blockexplorer.rinkeby.boba.network"
+ ],
+ "chainId": 28,
+ "chainName": "Boba Rinkeby Test Token",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "faucet-to-be-inserted"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Boba Rinkeby Test Token",
+ "symbol": "ETH"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://rinkeby.boba.network"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/28"
+ ],
+ "priceMechanism": "LEGACY",
+ "shortName": "BOBARINKEBYTEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "BORKED"
+ },
+ "EVMOSTEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://evm.evmos.dev/"
+ ],
+ "chainId": 9000,
+ "chainName": "EVMOS Testnet",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://faucet.evmos.dev/"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "tEVMOS",
+ "symbol": "tEVMOS"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://eth.bd.evmos.dev:8545"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/9000"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "EVMOSTEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "BORKED"
+ },
+ "MILKOMEDAA1": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://explorer-mainnet-algorand-rollup.a1.milkomeda.com"
+ ],
+ "chainId": 2002,
+ "chainName": "Milkomeda Algorand mainnet",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "faucet-to-be-inserted"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "milkALGO",
+ "symbol": "milkALGO"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://rpc-mainnet-algorand-rollup.a1.milkomeda.com"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/2002",
+ "https://dcspark.github.io/milkomeda-documentation/algorand/for-end-users/configuring-metamask/",
+ "https://algorand-bridge.milkomeda.com/mainnet"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "MILKOMEDAA1",
+ "tokenIndex": {
+ "tokens": {
+ "USDC": {
+ "category": "STABLECOIN",
+ "chain": "MILKOMEDAA1",
+ "contractAddress": "0xBc31960A049Fe10297Ed8432Fb61DD734fEAd4ea",
+ "decimals": 6,
+ "name": "USDC stable token",
+ "origins": [
+ "https://explorer-mainnet-algorand-rollup.a1.milkomeda.com/address/0xBc31960A049Fe10297Ed8432Fb61DD734fEAd4ea"
+ ],
+ "symbol": "USDC"
+ },
+ "BLUES": {
+ "category": "DEFI",
+ "chain": "MILKOMEDAA1",
+ "contractAddress": "0xc9BAA8cfdDe8E328787E29b4B078abf2DaDc2055",
+ "decimals": 18,
+ "name": "BlueShift DEFI token",
+ "origins": [
+ "https://explorer-mainnet-algorand-rollup.a1.milkomeda.com/address/0xc9BAA8cfdDe8E328787E29b4B078abf2DaDc2055"
+ ],
+ "symbol": "USDC"
+ }
+ }
+ },
+ "type": "PUBLIC"
+ },
+ "FUSESPARKTEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://explorer.fusespark.io"
+ ],
+ "chainId": 123,
+ "chainName": "FUSE Spark Testnet",
+ "fallbackGasLimitInUnits": "21000",
+ "fallbackGasPriceInWEI": "10000000000",
+ "faucets": [
+ "https://get.fusespark.io/"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "FUSE Test Token",
+ "symbol": "FUSE"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://rpc.fusespark.io"
+ ],
+ "origins": [
+ "https://www.fuse.io/"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "FUSESPARKTEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "OASISEMERALDTEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://explorer.emerald.oasis.dev/"
+ ],
+ "chainId": 42261,
+ "chainName": "Oasis Emerald Test Network",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://faucet.testnet.oasis.dev/"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Oasis Test Token",
+ "symbol": "TEST"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://testnet.emerald.oasis.dev"
+ ],
+ "origins": [
+ "https://oasisprotocol.org/"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "OASISEMERALDTEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "BORKED"
+ },
+ "GANACHE8545_1337": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://blockexplorer.x"
+ ],
+ "chainId": 1337,
+ "chainName": "Ganache Test Chain, default local port 8545 and chainid 1337",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "faucet-to-be-inserted"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Development Test Token",
+ "symbol": "ETH"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "http://127.0.0.1:8545"
+ ],
+ "origins": [
+ "https://gsthina.medium.com/the-default-chain-id-for-ganache-metamask-is-1337-can-you-try-to-override-it-de5ad1bcb3ab"
+ ],
+ "priceMechanism": "LEGACY",
+ "shortName": "GANACHE8545_1337",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "LOCAL"
+ },
+ "KAVA": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://explorer.kava.io/"
+ ],
+ "chainId": 2222,
+ "chainName": "KAVA Evm Mainnet",
+ "fallbackGasLimitInUnits": "21000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "faucet-todo"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "KAVA Token",
+ "symbol": "KAVA"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://evm2.kava.io",
+ "https://evm.kava.io",
+ "https://kava-rpc.gateway.pokt.network",
+ "https://evm.kava.chainstacklabs.com",
+ "https://kava-evm.publicnode.com"
+ ],
+ "origins": [
+ "https://kava.io",
+ "https://docs.kava.io/docs/ethereum/metamask/"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "KAVA",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "ETHO": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://explorer.ethoprotocol.com"
+ ],
+ "chainId": 1313114,
+ "chainName": "ETHO Network",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "faucet-to-be-inserted"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "ETHO Native Token",
+ "symbol": "ETHO"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://rpc.ethoprotocol.com"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/1313114"
+ ],
+ "priceMechanism": "LEGACY",
+ "shortName": "ETHO",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "AURORA": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://aurorascan.dev/",
+ "https://explorer.mainnet.aurora.dev/",
+ "https://explorer.aurorachain.io/"
+ ],
+ "chainId": 1313161554,
+ "chainName": "Aurora Mainnet",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "faucet-to-be-inserted"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Aurora Token",
+ "symbol": "AETH"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://mainnet.aurora.dev",
+ "https://1rpc.io/aurora",
+ "https://aurora.drpc.org"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/1313161554"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "AURORA",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "CRONOSTEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://testnet.cronoscan.com/"
+ ],
+ "chainId": 338,
+ "chainName": "Cronos Test Network",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "2000000000000",
+ "faucets": [
+ "https://cronos.org/faucet"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "CRONOS Test Token",
+ "symbol": "TCRO"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://evm-t3.cronos.org"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/338"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "CRONOSTEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "OPBNB": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://mainnet.opbnbscan.com"
+ ],
+ "chainId": 204,
+ "chainName": "opBNB Mainnet",
+ "fallbackGasLimitInUnits": "21000",
+ "fallbackGasPriceInWEI": "1000000000",
+ "faucets": [
+ "https://opbnb-bridge.bnbchain.org/deposit"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "opBNB Gas Token",
+ "symbol": "BNB"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://opbnb.publicnode.com",
+ "https://opbnb-mainnet.nodereal.io/v1/64a9df0874fb4a93b9d0a3849de012d3",
+ "https://opbnb-mainnet-rpc.bnbchain.org",
+ "https://opbnb-mainnet.nodereal.io/v1/e9a36765eb8a40b9bd12e680a1fd2bc5"
+ ],
+ "origins": [
+ "https://opbnb.bnbchain.org"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "OPBNB",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "ZORA": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://explorer.zora.energy"
+ ],
+ "chainId": 7777777,
+ "chainName": "Zora Mainnet",
+ "fallbackGasLimitInUnits": "21000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://bridge.zora.energy/"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Zora Gas Token",
+ "symbol": "ETH"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://rpc.zora.energy"
+ ],
+ "origins": [
+ "https://zora.energy"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "ZORA",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "RINKEBYTEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://rinkeby.etherscan.io"
+ ],
+ "chainId": 4,
+ "chainName": "Rinkeby Test Network",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "discontinued"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Rinkeby Test Token",
+ "symbol": "ETH"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://rpc.ankr.com/eth_rinkeby",
+ "https://rinkeby.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161\t"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/4"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "RINKEBYTEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "BORKED"
+ },
+ "SHIBUYATEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://shibuya.subscan.io"
+ ],
+ "chainId": 81,
+ "chainName": "ASTAR Testnet",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://portal.astar.network"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "SBY",
+ "symbol": "SBY"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://evm.shibuya.astar.network"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/81"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "SHIBUYATEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "ETHEREUM": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://etherscan.io"
+ ],
+ "chainId": 1,
+ "chainName": "Ethereum Main Network",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "faucet-to-be-inserted"
+ ],
+ "flashbotnodeURLs": [
+ "https://rpc.flashbots.net"
+ ],
+ "flashbotrelaynodeURLs": [
+ "https://relay.flashbots.net"
+ ],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Ethereum Main Token",
+ "symbol": "ETH"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {
+ "BORED_APE": {
+ "category": "GAMING",
+ "chain": "ETHEREUM",
+ "contractAddress": "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d",
+ "description": "Bored Ape NFT",
+ "linked_tokens": [
+ "ETHEREUM:APECOIN"
+ ],
+ "mintBlock": 0,
+ "origins": [
+ "https://etherscan.io/address/0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d",
+ "https://opensea.io/collection/boredapeyachtclub"
+ ],
+ "symbol": "BORED_APE"
+ },
+ "ENS_DOMAIN": {
+ "category": "NAMESERVICE",
+ "chain": "ETHEREUM",
+ "contractAddress": "0x57f1887a8bf19b14fc0df6fd9b2acc9af147ea85",
+ "description": "Ethereum Name Service Domain NFT",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://etherscan.io/token/0x57f1887a8bf19b14fc0df6fd9b2acc9af147ea85",
+ "https://opensea.io/collection/ens"
+ ],
+ "symbol": "ENS_DOMAIN"
+ },
+ "LUCHADORES": {
+ "category": "GAMING",
+ "chain": "ETHEREUM",
+ "contractAddress": "0x8b4616926705fb61e9c4eeac07cd946a5d4b0760",
+ "description": "Luchadores game NFT",
+ "linked_tokens": [
+ "POLYGON:LUCHA"
+ ],
+ "mintBlock": 0,
+ "origins": [
+ "https://etherscan.io/address/0x8b4616926705fb61e9c4eeac07cd946a5d4b0760",
+ "https://opensea.io/collection/luchadores-io"
+ ],
+ "symbol": "LUCHADORES"
+ },
+ "WWW_LAND": {
+ "category": "GAMING",
+ "chain": "ETHEREUM",
+ "contractAddress": "0xa1d4657e0e6507d5a94d06da93e94dc7c8c44b51",
+ "description": "World Wide Webb game NFT",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://etherscan.io/address/0xa1d4657e0e6507d5a94d06da93e94dc7c8c44b51",
+ "https://opensea.io/collection/worldwidewebbland"
+ ],
+ "symbol": "WWW_LAND"
+ },
+ "UNSTOPPABLE_DOMAIN": {
+ "category": "NAMESERVICE",
+ "chain": "ETHEREUM",
+ "contractAddress": "0x049aba7510f45ba5b64ea9e658e342f904db358d",
+ "description": "Unstoppable Domains NFT",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://etherscan.io/token/0x049aba7510f45ba5b64ea9e658e342f904db358d",
+ "https://opensea.io/collection/unstoppable-domains"
+ ],
+ "symbol": "UNSTOPPABLE_DOMAIN"
+ }
+ }
+ },
+ "nodeURLs": [
+ "https://mainnet.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161",
+ "https://eth-mainnet.public.blastapi.io",
+ "https://rpc.ankr.com/eth",
+ "https://eth-rpc.gateway.pokt.network",
+ "https://eth-mainnet.gateway.pokt.network/v1/5f3453978e354ab992c4da79",
+ "https://cloudflare-eth.com",
+ "https://nodes.mewapi.io/rpc/eth",
+ "https://rpc.mevblocker.io"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/1"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "ETHEREUM",
+ "tokenIndex": {
+ "tokens": {
+ "APECOIN": {
+ "category": "GAMING",
+ "chain": "ETHEREUM",
+ "contractAddress": "0x4d224452801aced8b2f0aebe155379bb5d594381",
+ "decimals": 18,
+ "name": "Bored Ape game token",
+ "origins": [
+ "https://www.coingecko.com/en/coins/apecoin",
+ "https://etherscan.io/address/0x4d224452801aced8b2f0aebe155379bb5d594381"
+ ],
+ "symbol": "APECOIN"
+ },
+ "CULT": {
+ "category": "MEME",
+ "chain": "ETHEREUM",
+ "contractAddress": "0xf0f9d895aca5c8678f706fb8216fa22957685a13",
+ "decimals": 18,
+ "name": "The CULT DAO token",
+ "origins": [
+ "https://etherscan.io/address/0xf0f9d895aca5c8678f706fb8216fa22957685a13",
+ "https://www.coingecko.com/en/coins/cult-dao"
+ ],
+ "symbol": "CULT"
+ },
+ "VIDYA": {
+ "category": "GAMING",
+ "chain": "ETHEREUM",
+ "contractAddress": "0x3d3d35bb9bec23b06ca00fe472b50e7a4c692c30",
+ "decimals": 18,
+ "name": "VIDYA token",
+ "origins": [
+ "https://etherscan.io/address/0x3d3d35bb9bec23b06ca00fe472b50e7a4c692c30",
+ "https://www.coingecko.com/en/coins/vidya"
+ ],
+ "symbol": "VIDYA"
+ },
+ "TRAC": {
+ "category": "SUPPLYCHAIN",
+ "chain": "ETHEREUM",
+ "contractAddress": "0xaa7a9ca87d3694b5755f213b5d04094b8d0f0a6f",
+ "decimals": 18,
+ "name": "OriginTrail token",
+ "origins": [
+ "https://etherscan.io/address/0xaa7a9ca87d3694b5755f213b5d04094b8d0f0a6f",
+ "https://www.coingecko.com/en/coins/origintrail"
+ ],
+ "symbol": "TRAC"
+ },
+ "USDT": {
+ "category": "STABLECOIN",
+ "chain": "ETHEREUM",
+ "contractAddress": "0xdac17f958d2ee523a2206206994597c13d831ec7",
+ "decimals": 6,
+ "name": "Tether stablecoin token",
+ "origins": [
+ "https://etherscan.io/address/0xdac17f958d2ee523a2206206994597c13d831ec7",
+ "https://www.coingecko.com/en/coins/tether"
+ ],
+ "symbol": "USDT"
+ },
+ "SERUM": {
+ "category": "DEFI",
+ "chain": "ETHEREUM",
+ "contractAddress": "0x476c5e26a75bd202a9683ffd34359c0cc15be0ff",
+ "decimals": 18,
+ "name": "Serum token",
+ "origins": [
+ "https://etherscan.io/address/0x476c5e26a75bd202a9683ffd34359c0cc15be0ff",
+ "https://www.coingecko.com/en/coins/serum"
+ ],
+ "symbol": "SERUM"
+ },
+ "DINU": {
+ "category": "MEME",
+ "chain": "ETHEREUM",
+ "contractAddress": "0xbb1ee07d6c7baeb702949904080eb61f5d5e7732",
+ "decimals": 18,
+ "name": "The Dogey-Inu token",
+ "origins": [
+ "https://etherscan.io/address/0xbb1ee07d6c7baeb702949904080eb61f5d5e7732",
+ "https://www.coingecko.com/en/coins/dogey-inu"
+ ],
+ "symbol": "DINU"
+ },
+ "DAI": {
+ "category": "STABLECOIN",
+ "chain": "ETHEREUM",
+ "contractAddress": "0x6b175474e89094c44da98b954eedeac495271d0f",
+ "decimals": 18,
+ "name": "DAI stablecoin token",
+ "origins": [
+ "https://etherscan.io/address/0x6b175474e89094c44da98b954eedeac495271d0f",
+ "https://www.coingecko.com/en/coins/dai"
+ ],
+ "symbol": "DAI"
+ },
+ "DOBE": {
+ "category": "MEME",
+ "chain": "ETHEREUM",
+ "contractAddress": "0xe7ab45162f5979f09b0bda1cc7dfc97c270ea3d5",
+ "decimals": 18,
+ "name": "The Dobermann token",
+ "origins": [
+ "https://etherscan.io/address/0xe7ab45162f5979f09b0bda1cc7dfc97c270ea3d5",
+ "https://www.coingecko.com/en/coins/dobermann"
+ ],
+ "symbol": "DOBE"
+ },
+ "DOJO": {
+ "category": "MEME",
+ "chain": "ETHEREUM",
+ "contractAddress": "0x180dae91d6d56235453a892d2e56a3e40ba81df8",
+ "decimals": 18,
+ "name": "The DOJO token",
+ "origins": [
+ "https://etherscan.io/address/0x180dae91d6d56235453a892d2e56a3e40ba81df8",
+ "https://www.coingecko.com/en/coins/dojo"
+ ],
+ "symbol": "DOJO"
+ },
+ "FWB": {
+ "category": "SOCIAL",
+ "chain": "ETHEREUM",
+ "contractAddress": "0x35bd01fc9d6d5d81ca9e055db88dc49aa2c699a8",
+ "decimals": 18,
+ "name": "Friends With Benefits token",
+ "origins": [
+ "https://etherscan.io/address/0x35bd01fc9d6d5d81ca9e055db88dc49aa2c699a8",
+ "https://www.coingecko.com/en/coins/friends-with-benefits-pro"
+ ],
+ "symbol": "FWB"
+ },
+ "JINDOGE": {
+ "category": "MEME",
+ "chain": "ETHEREUM",
+ "contractAddress": "0x3f4cd830543db25254ec0f05eac058d4d6e86166",
+ "decimals": 18,
+ "name": "The Jindoge token",
+ "origins": [
+ "https://etherscan.io/address/0x3f4cd830543db25254ec0f05eac058d4d6e86166",
+ "https://www.coingecko.com/en/coins/jindoge"
+ ],
+ "symbol": "JINDOGE"
+ },
+ "JSHIBA": {
+ "category": "MEME",
+ "chain": "ETHEREUM",
+ "contractAddress": "0x1426cc6d52d1b14e2b3b1cb04d57ea42b39c4c7c",
+ "decimals": 18,
+ "name": "The Jomon Shiba token",
+ "origins": [
+ "https://etherscan.io/address/0x1426cc6d52d1b14e2b3b1cb04d57ea42b39c4c7c",
+ "https://www.coingecko.com/en/coins/jomon-shiba"
+ ],
+ "symbol": "JSHIBA"
+ },
+ "NB": {
+ "category": "MEME",
+ "chain": "ETHEREUM",
+ "contractAddress": "0x20be82943e8d9c682580e11d424ec15db95b4a24",
+ "decimals": 18,
+ "name": "The No Bull token",
+ "origins": [
+ "https://etherscan.io/address/0x20be82943e8d9c682580e11d424ec15db95b4a24",
+ "https://www.coingecko.com/en/coins/no-bull"
+ ],
+ "symbol": "NB"
+ },
+ "SHUSHKY": {
+ "category": "MEME",
+ "chain": "ETHEREUM",
+ "contractAddress": "0x236d53148f83706c3d670064809577385f923a75",
+ "decimals": 18,
+ "name": "The Siberian Husky token",
+ "origins": [
+ "https://etherscan.io/address/0x236d53148f83706c3d670064809577385f923a75",
+ "https://www.coingecko.com/en/coins/siberian-husky"
+ ],
+ "symbol": "SHUSHKY"
+ },
+ "TEST": {
+ "category": "TEST",
+ "chain": "ETHEREUM",
+ "contractAddress": "0x2b591e99afe9f32eaa6214f7b7629768c40eeb39",
+ "decimals": 18,
+ "name": "TEST token",
+ "origins": [
+ "https://etherscan.io/token/0xMOJO"
+ ],
+ "symbol": "TEST"
+ },
+ "SOS": {
+ "category": "NFT",
+ "chain": "ETHEREUM",
+ "contractAddress": "0x3b484b82567a09e2588a13d54d032153f0c0aee0",
+ "decimals": 18,
+ "name": "The OpenDAO SOS token",
+ "origins": [
+ "https://etherscan.io/address/0x3b484b82567a09e2588a13d54d032153f0c0aee0",
+ "https://www.coingecko.com/en/coins/opendao"
+ ],
+ "symbol": "SOS"
+ },
+ "UNIDX": {
+ "category": "DEFI",
+ "chain": "ETHEREUM",
+ "contractAddress": "0x95b3497bbcccc46a8f45f5cf54b0878b39f8d96c",
+ "decimals": 18,
+ "name": "UniDex token",
+ "origins": [
+ "https://etherscan.io/address/0x95b3497bbcccc46a8f45f5cf54b0878b39f8d96c",
+ "https://www.coingecko.com/en/coins/unidex"
+ ],
+ "symbol": "UNIDX"
+ },
+ "XOR": {
+ "category": "UNKNOWN",
+ "chain": "ETHEREUM",
+ "contractAddress": "0x40fd72257597aa14c7231a7b1aaa29fce868f677",
+ "decimals": 18,
+ "name": "The SORA token",
+ "origins": [
+ "https://etherscan.io/address/0x40fd72257597aa14c7231a7b1aaa29fce868f677",
+ "https://www.coingecko.com/en/coins/sora"
+ ],
+ "symbol": "XOR"
+ },
+ "USDC": {
+ "category": "STABLECOIN",
+ "chain": "ETHEREUM",
+ "contractAddress": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
+ "decimals": 6,
+ "name": "USDC stablecoin token",
+ "origins": [
+ "https://etherscan.io/address/0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
+ "https://www.coingecko.com/en/coins/usd-coin"
+ ],
+ "symbol": "USDC"
+ }
+ }
+ },
+ "type": "PUBLIC"
+ },
+ "BOBABNBTEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://blockexplorer.testnet.bnb.boba.network"
+ ],
+ "chainId": 9728,
+ "chainName": "Boba BNB Test Token",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://gateway.testnet.bnb.boba.network/wallet"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Boba BNB Test Token",
+ "symbol": "BOBA"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://testnet.bnb.boba.network"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/9728"
+ ],
+ "priceMechanism": "LEGACY",
+ "shortName": "BOBABNBTEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "METISSTARDUSTTEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://goerli.explorer.metisdevops.link"
+ ],
+ "chainId": 599,
+ "chainName": "Metis Stardust Testnet",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://goerli.faucet.metisdevops.link/",
+ "bridge assets from goerli https://bridge.metis.io/home"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Metis Goerli Test Token",
+ "symbol": "METIS"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://goerli.gateway.metisdevops.link"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/599"
+ ],
+ "priceMechanism": "LEGACY",
+ "shortName": "METISSTARDUSTTEST",
+ "tokenIndex": {
+ "tokens": {
+ "WETH": {
+ "category": "DEFI",
+ "chain": "METISSTARDUSTTEST",
+ "contractAddress": "0x420000000000000000000000000000000000000A",
+ "decimals": 18,
+ "name": "Wrapped ETH token",
+ "origins": [
+ "https://bscscan.com/address/0x420000000000000000000000000000000000000A",
+ "https://www.coingecko.com/en/coins/weth"
+ ],
+ "symbol": "WETH"
+ }
+ }
+ },
+ "type": "PUBLIC"
+ },
+ "SHARDEUMLIBERTY1xTEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://explorer.liberty10.shardeum.org"
+ ],
+ "chainId": 8080,
+ "chainName": "Shardeum Liberty 1.5",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://docs.shardeum.org/faucet/claim"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Shardeum Native Token",
+ "symbol": "SHM"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://liberty10.shardeum.org"
+ ],
+ "origins": [
+ "https://docs.shardeum.org/wallets/MetaMask/add-shardeum-network"
+ ],
+ "priceMechanism": "LEGACY",
+ "shortName": "SHARDEUMLIBERTY1xTEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "BORKED"
+ },
+ "PULSECHAIN": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://scan.pulsechain.com"
+ ],
+ "chainId": 369,
+ "chainName": "PulseChain",
+ "fallbackGasLimitInUnits": "21000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "faucet-todo"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "PulseChain Token",
+ "symbol": "PLS"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://rpc.pulsechain.com",
+ "https://rpc-pulsechain.g4mm4.io",
+ "https://pulsechain.publicnode.com"
+ ],
+ "origins": [
+ "https://pulsechain.com/"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "PULSECHAIN",
+ "tokenIndex": {
+ "tokens": {
+ "PLSX": {
+ "category": "DEFI",
+ "chain": "PULSECHAIN",
+ "contractAddress": "0x95B303987A60C71504D99Aa1b13B4DA07b0790ab",
+ "decimals": 18,
+ "name": "Pulsechain PLSX token",
+ "origins": [
+ "https://scan.pulsechain.com/address/0x95B303987A60C71504D99Aa1b13B4DA07b0790ab"
+ ],
+ "symbol": "PLSX"
+ }
+ }
+ },
+ "type": "PUBLIC"
+ },
+ "MILKOMEDAC1": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://explorer-mainnet-cardano-evm.c1.milkomeda.com/"
+ ],
+ "chainId": 2001,
+ "chainName": "Milkomeda Cardano mainnet",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "faucet-to-be-inserted"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "milkADA",
+ "symbol": "mADA"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {
+ "PAIMA_VOLCANEERS": {
+ "category": "GAMING",
+ "chain": "MILKOMEDAC1",
+ "contractAddress": "0xa335d662BB47409e04F06dC7Fd03cEc854530172",
+ "description": "Paima Volcaneers (PV)",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://explorer-mainnet-cardano-evm.c1.milkomeda.com/address/0xa335d662BB47409e04F06dC7Fd03cEc854530172"
+ ],
+ "symbol": "PAIMA_VOLCANEERS"
+ }
+ }
+ },
+ "nodeURLs": [
+ "https://rpc-mainnet-cardano-evm.c1.milkomeda.com"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/2001",
+ "https://app.blueshift.fi/#/bridge"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "MILKOMEDAC1",
+ "tokenIndex": {
+ "tokens": {
+ "BLUES": {
+ "category": "DEFI",
+ "chain": "MILKOMEDAC1",
+ "contractAddress": "0x8c008BBA2Dd56b99f4A6aB276bE3a478cB075F0C",
+ "decimals": 18,
+ "name": "Blueshift token",
+ "origins": [
+ "https://explorer-mainnet-cardano-evm.c1.milkomeda.com/address/0x8c008BBA2Dd56b99f4A6aB276bE3a478cB075F0C"
+ ],
+ "symbol": "BLUES"
+ },
+ "BLUESHIFT_mADA_BLUES_LP": {
+ "category": "LIQUIDITY_PROVIDER",
+ "chain": "MILKOMEDAC1",
+ "contractAddress": "0x4a2360fD03eD50C9496cbEB4FD3e1776FA90F04c",
+ "decimals": 18,
+ "name": "Blueshift LP 006 (mADA/BLUES) token",
+ "origins": [
+ "https://explorer-mainnet-cardano-evm.c1.milkomeda.com/address/0x4a2360fD03eD50C9496cbEB4FD3e1776FA90F04c"
+ ],
+ "symbol": "BLUESHIFT_mADA_BLUES_LP"
+ },
+ "WADA": {
+ "category": "DEFI",
+ "chain": "MILKOMEDAC1",
+ "contractAddress": "0xAE83571000aF4499798d1e3b0fA0070EB3A3E3F9",
+ "decimals": 18,
+ "name": "Wrapped ADA token",
+ "origins": [
+ "https://explorer-mainnet-cardano-evm.c1.milkomeda.com/address/0xAE83571000aF4499798d1e3b0fA0070EB3A3E3F9"
+ ],
+ "symbol": "WADA"
+ }
+ }
+ },
+ "type": "PUBLIC"
+ },
+ "BORACHAIN": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://scope.boraportal.com/"
+ ],
+ "chainId": 77001,
+ "chainName": "Bora Chain, gaming side-chain of KLAYTN",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "faucet-to-be-inserted"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "BORAChain Native Token",
+ "symbol": "BGAS"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://public-node.api.boraportal.io/bora/mainnet"
+ ],
+ "origins": [
+ "https://medium.com/@DAO_FE/1-add-rpc-network-name-borachain-mainnet-network-url-https-public-node-api-boraportal-io-b-59f422588926"
+ ],
+ "priceMechanism": "LEGACY",
+ "shortName": "BORACHAIN",
+ "tokenIndex": {
+ "tokens": {
+ "tBORA": {
+ "category": "GASCURRENCY",
+ "chain": "BORACHAIN",
+ "contractAddress": "0x797115bcdbD85DC865222724eD67d473CE168962",
+ "decimals": 18,
+ "name": "tBORA token",
+ "origins": [
+ "https://scope.boraportal.com/token/0x797115bcdbd85dc865222724ed67d473ce168962"
+ ],
+ "symbol": "tBORA"
+ },
+ "TEST": {
+ "category": "TEST",
+ "chain": "KLAYTN",
+ "contractAddress": "0x7769cf946c011BB3A22d20ba6bF7f0bC419c722f",
+ "decimals": 18,
+ "name": "TEST token",
+ "origins": [
+ "https://scope.boraportal.com/token/0x7769cf946c011BB3A22d20ba6bF7f0bC419c722f"
+ ],
+ "symbol": "TEST"
+ },
+ "BSLT": {
+ "category": "GAMING",
+ "chain": "BORACHAIN",
+ "contractAddress": "0xcfdbf6a1f765c295d8d557e841c1304019318525",
+ "decimals": 18,
+ "name": "ArcheWorld Blue Salt game token",
+ "origins": [
+ "https://scope.boraportal.com/address/0xcFdbf6a1f765C295d8D557E841C1304019318525"
+ ],
+ "symbol": "BSLT"
+ }
+ }
+ },
+ "type": "PUBLIC"
+ },
+ "OPTIMISMGOERLITEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://optimistic.etherscan.io/"
+ ],
+ "chainId": 420,
+ "chainName": "Optimism Goerli Testnet",
+ "fallbackGasLimitInUnits": "21000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://goerli.hop.exchange/"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Optimism Gas Token",
+ "symbol": "ETH"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://endpoints.omniatech.io/v1/op/goerli/public",
+ "https://opt-goerli.g.alchemy.com/v2/demo",
+ "https://goerli.optimism.io",
+ "https://optimism-goerli.public.blastapi.io"
+ ],
+ "origins": [
+ "https://www.optimism.io/"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "OPTIMISMGOERLITEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "BOBA": {
+ "archivenodeURLs": [
+ "https://blockexplorer.boba.network",
+ "https://mainnet.boba.network\t",
+ "https://boba-mainnet.gateway.pokt.network/v1/lb/623ad21b20354900396fed7f\t"
+ ],
+ "blockexplorerURLs": [],
+ "chainId": 288,
+ "chainName": "Boba Network",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://gateway.testnet.bnb.boba.network/wallet"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Boba Token",
+ "symbol": "ETH"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://lightning-replica.boba.network",
+ "https://mainnet.boba.network"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/288"
+ ],
+ "priceMechanism": "LEGACY",
+ "shortName": "BOBA",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "MUMBAITEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://mumbai.polygonscan.com"
+ ],
+ "chainId": 80001,
+ "chainName": "Polygon Test Network",
+ "enforcedMinGasPriceInWEI": "31000000000",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://faucet.polygon.technology/",
+ "https://mumbaifaucet.com/"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Polygon Test Token",
+ "symbol": "MATIC"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://rpc-mumbai.maticvigil.com",
+ "https://rpc.ankr.com/polygon_mumbai",
+ "https://rpc-mumbai.maticvigil.com",
+ "https://polygon-testnet.public.blastapi.io"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/80001"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "MUMBAITEST",
+ "tokenIndex": {
+ "tokens": {
+ "RICOCHET_fUSDCx": {
+ "category": "DEFI",
+ "chain": "MUMBAITEST",
+ "contractAddress": "0x42bb40bF79730451B11f6De1CbA222F17b87Afd7",
+ "decimals": 18,
+ "name": "Ricochet fUSDC token, fUSDCx",
+ "origins": [
+ "https://mumbai.polygonscan.com/token/0x42bb40bF79730451B11f6De1CbA222F17b87Afd7",
+ "https://docs.superfluid.finance/superfluid/developers/networks"
+ ],
+ "symbol": "RICOCHET_fUSDCx"
+ },
+ "TST": {
+ "category": "TEST",
+ "chain": "MUMBAITEST",
+ "contractAddress": "0x2d7882bedcbfddce29ba99965dd3cdf7fcb10a1e",
+ "decimals": 18,
+ "name": "Official Mumbai ERC-20 TST token",
+ "origins": [
+ "https://mumbai.polygonscan.com/address/0x2d7882bedcbfddce29ba99965dd3cdf7fcb10a1e"
+ ],
+ "symbol": "TST"
+ },
+ "TEST": {
+ "category": "TEST",
+ "chain": "MUMBAITEST",
+ "contractAddress": "0xeedb61304686f4b544baa1cb19f87c30bb8d38b9",
+ "decimals": 18,
+ "name": "TEST token",
+ "origins": [
+ "https://mumbai.polygonscan.com/token/0xMOJO"
+ ],
+ "symbol": "TEST"
+ },
+ "fUSDC": {
+ "category": "DEFI",
+ "chain": "MUMBAITEST",
+ "contractAddress": "0xbe49ac1EadAc65dccf204D4Df81d650B50122aB2",
+ "decimals": 18,
+ "name": "Flux fUSDC token",
+ "origins": [
+ "https://mumbai.polygonscan.com/token/0xbe49ac1EadAc65dccf204D4Df81d650B50122aB2",
+ "https://docs.superfluid.finance/superfluid/developers/networks"
+ ],
+ "symbol": "fUSDC"
+ },
+ "RICOCHET_fTUSDx": {
+ "category": "DEFI",
+ "chain": "MUMBAITEST",
+ "contractAddress": "0x918E0d5C96cAC79674E2D38066651212be3C9C48",
+ "decimals": 18,
+ "name": "Ricochet fTUSD token, fTUSDx",
+ "origins": [
+ "https://mumbai.polygonscan.com/token/0x918E0d5C96cAC79674E2D38066651212be3C9C48",
+ "https://docs.superfluid.finance/superfluid/developers/networks"
+ ],
+ "symbol": "RICOCHET_fTUSDx"
+ },
+ "fDAI": {
+ "category": "STABLECOIN",
+ "chain": "MUMBAITEST",
+ "contractAddress": "0x15F0Ca26781C3852f8166eD2ebce5D18265cceb7",
+ "decimals": 18,
+ "name": "Flux fDAI stablecoin",
+ "origins": [
+ "https://mumbai.polygonscan.com/token/0x15F0Ca26781C3852f8166eD2ebce5D18265cceb7",
+ "https://docs.superfluid.finance/superfluid/developers/networks"
+ ],
+ "symbol": "fDAI"
+ },
+ "LINK": {
+ "category": "DEFI",
+ "chain": "MUMBAITEST",
+ "contractAddress": "0x326C977E6efc84E512bB9C30f76E30c160eD06FB",
+ "decimals": 18,
+ "name": "LINK token",
+ "origins": [
+ "https://mumbai.polygonscan.com/token/0x326c977e6efc84e512bb9c30f76e30c160ed06fb",
+ "https://www.coingecko.com/en/coins/chainlink"
+ ],
+ "symbol": "LINK"
+ },
+ "fTUSD": {
+ "category": "STABLECOIN",
+ "chain": "MUMBAITEST",
+ "contractAddress": "0xA794C9ee519FD31BbCE643e8D8138f735E97D1DB",
+ "decimals": 18,
+ "name": "Flux fTUSD stablecoin",
+ "origins": [
+ "https://mumbai.polygonscan.com/token/0xA794C9ee519FD31BbCE643e8D8138f735E97D1DB",
+ "https://docs.superfluid.finance/superfluid/developers/networks"
+ ],
+ "symbol": "fTUSD"
+ },
+ "RICOCHET_fDAIx": {
+ "category": "DEFI",
+ "chain": "MUMBAITEST",
+ "contractAddress": "0x15F0Ca26781C3852f8166eD2ebce5D18265cceb7",
+ "decimals": 18,
+ "name": "Ricochet fDAI token, fDAIx",
+ "origins": [
+ "https://mumbai.polygonscan.com/token/0x15F0Ca26781C3852f8166eD2ebce5D18265cceb7",
+ "https://docs.superfluid.finance/superfluid/developers/networks"
+ ],
+ "symbol": "RICOCHET_fDAIx"
+ },
+ "RICOCHET_MATICx": {
+ "category": "DEFI",
+ "chain": "MUMBAITEST",
+ "contractAddress": "0x96B82B65ACF7072eFEb00502F45757F254c2a0D4",
+ "decimals": 18,
+ "name": "Ricochet MATIC token, MATICx",
+ "origins": [
+ "https://mumbai.polygonscan.com/token/0x96B82B65ACF7072eFEb00502F45757F254c2a0D4",
+ "https://docs.superfluid.finance/superfluid/developers/networks"
+ ],
+ "symbol": "RICOCHET_MATICx"
+ },
+ "DERC20": {
+ "category": "TEST",
+ "chain": "MUMBAITEST",
+ "contractAddress": "0x2d7882bedcbfddce29ba99965dd3cdf7fcb10a1e",
+ "decimals": 18,
+ "name": "Official Mumbai ERC-20 Dummy ERC20 token",
+ "origins": [
+ "https://mumbai.polygonscan.com/token/0xfe4f5145f6e09952a5ba9e956ed0c25e3fa4c7f1"
+ ],
+ "symbol": "DERC20"
+ }
+ }
+ },
+ "type": "PUBLIC"
+ },
+ "CANTO": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://tuber.build/"
+ ],
+ "chainId": 7700,
+ "chainName": "Canto Network",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "faucet-todo"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Canto Token",
+ "symbol": "CANTO"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://canto.gravitychain.io",
+ "https://canto.slingshot.finance/",
+ "https://canto.evm.chandrastation.com/",
+ "https://jsonrpc.canto.nodestake.top"
+ ],
+ "origins": [
+ "https://docs.canto.io/user-guides/connecting-to-canto"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "CANTO",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "SEPOLIATEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://sepolia.etherscan.io/"
+ ],
+ "chainId": 11155111,
+ "chainName": "Sepolia Test Network",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://faucet.sepolia.dev/"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Sepolia Test Token",
+ "symbol": "SEP"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://rpc.sepolia.org",
+ "https://rpc2.sepolia.org",
+ "https://ethereum-sepolia.blockpi.network/v1/rpc/public",
+ "https://eth-sepolia.public.blastapi.io",
+ "https://gateway.tenderly.co/public/sepolia",
+ "https://eth-sepolia.public.blastapi.io",
+ "https://endpoints.omniatech.io/v1/eth/sepolia/public",
+ "https://eth-sepolia-public.unifra.io",
+ "https://rpc.notadegen.com/sepolia"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/11155111"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "SEPOLIATEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "ZKEVMTEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://testnet-zkevm.polygonscan.com"
+ ],
+ "chainId": 1442,
+ "chainName": "Polygon ZKEVM Test Network",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://wallet.polygon.technology/zkEVM-Bridge/bridge"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "ETH Test Token",
+ "symbol": "ETH"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://rpc.public.zkevm-test.net"
+ ],
+ "origins": [
+ "https://wiki.polygon.technology/docs/zkEVM/develop"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "ZKEVMTEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "SHARDEUMSPHINX1xTEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://explorer-sphinx.shardeum.org"
+ ],
+ "chainId": 8082,
+ "chainName": "Shardeum Sphinx 1.x",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://docs.shardeum.org/faucet/claim"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Shardeum Native Token",
+ "symbol": "SHM"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://sphinx.shardeum.org"
+ ],
+ "origins": [
+ "https://docs.shardeum.org/wallets/MetaMask/add-shardeum-network"
+ ],
+ "priceMechanism": "LEGACY",
+ "shortName": "SHARDEUMSPHINX1xTEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "BORKED"
+ },
+ "TENETTEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://testnet.tenetscan.io"
+ ],
+ "chainId": 155,
+ "chainName": "Tenet Testnet",
+ "fallbackGasLimitInUnits": "21000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://faucet.testnet.tenet.org/"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "TENET Gas Token",
+ "symbol": "TENET"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://rpc.testnet.tenet.org"
+ ],
+ "origins": [
+ "https://tenet.org"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "TENETTEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "LUKSOTEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://explorer.execution.testnet.lukso.network"
+ ],
+ "chainId": 4201,
+ "chainName": "LUKSO Testnet",
+ "fallbackGasLimitInUnits": "21000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://faucet.testnet.lukso.network/"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "LUKSO Test Token",
+ "symbol": "LYXt"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://rpc.testnet.lukso.network"
+ ],
+ "origins": [
+ "https://lukso.network/"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "LUKSOTEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "OPTIMISM": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://optimistic.etherscan.io"
+ ],
+ "chainId": 10,
+ "chainName": "Optimism Mainnet",
+ "fallbackGasLimitInUnits": "21000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ ""
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Optimism Gas Token",
+ "symbol": "ETH"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://mainnet.optimism.io"
+ ],
+ "origins": [
+ "https://www.optimism.io/",
+ "https://chainid.link/?network=optimism"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "OPTIMISM",
+ "tokenIndex": {
+ "tokens": {
+ "SDS": {
+ "category": "DEFI",
+ "chain": "OPTIMISM",
+ "contractAddress": "0x45c55bf488d3cb8640f12f63cbedc027e8261e79",
+ "decimals": 18,
+ "name": "Synthetix Debt Shares token",
+ "origins": [
+ "https://optimistic.etherscan.io/token/0x45c55bf488d3cb8640f12f63cbedc027e8261e79"
+ ],
+ "symbol": "SDS"
+ },
+ "SUSD": {
+ "category": "STABLECOIN",
+ "chain": "OPTIMISM",
+ "contractAddress": "0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9",
+ "decimals": 18,
+ "name": "sUSD stablecoin token",
+ "origins": [
+ "https://optimistic.etherscan.io/token/0x8c6f28f2f1a3c87f0f938b96d27520d9751ec8d9"
+ ],
+ "symbol": "SUSD"
+ },
+ "SNX": {
+ "category": "DEFI",
+ "chain": "OPTIMISM",
+ "contractAddress": "0x8700daec35af8ff88c16bdf0418774cb3d7599b4",
+ "decimals": 18,
+ "name": "SNX token",
+ "origins": [
+ "https://optimistic.etherscan.io/token/0x8700daec35af8ff88c16bdf0418774cb3d7599b4"
+ ],
+ "symbol": "SNX"
+ }
+ }
+ },
+ "type": "PUBLIC"
+ },
+ "SYSCOIN": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://explorer.syscoin.org"
+ ],
+ "chainId": 57,
+ "chainName": "SYSCoin Mainnet",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://faucet.syscoin.org/"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "SYS",
+ "symbol": "SYS"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://rpc.syscoin.org",
+ "https://syscoin-evm.publicnode.com",
+ "https://rpc.ankr.com/syscoin",
+ "https://syscoin.public-rpc.com"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/57",
+ "https://syscoin.medium.com/setting-up-metamask-for-syscoin-nevm-ea0012d6d1c8",
+ "https://www.coingecko.com/en/coins/syscoin",
+ "https://bridge.syscoin.org"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "SYSCOIN",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "KARURA": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://karura.network"
+ ],
+ "chainId": 686,
+ "chainName": "KARURA Mainnet",
+ "fallbackGasLimitInUnits": "21000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ ""
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "KARURA Gas Token",
+ "symbol": "KAR"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://rpc.evm.karura.network",
+ "https://eth-rpc-karura.aca-api.network",
+ "https://eth-rpc-karura.aca-staging.network"
+ ],
+ "origins": [
+ "https://acala.network/karura"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "KARURA",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "BORKED"
+ },
+ "ARBITRUMONE": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://arb1.arbitrum.io/rpc"
+ ],
+ "chainId": 42161,
+ "chainName": "Arbitrum ONE mainnet",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "faucet-to-be-inserted"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "ETH",
+ "symbol": "ETH"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {
+ "TREASURETAG": {
+ "category": "GAMING",
+ "chain": "ARBITRUMONE",
+ "contractAddress": "0xe50abe4756809b51b0041bb5ab12ec4c5c67af47",
+ "description": "MAGIC Treasuretag NFT",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://arbiscan.io/token/0xe50abe4756809b51b0041bb5ab12ec4c5c67af47",
+ "https://app.treasure.lol/treasuretag"
+ ],
+ "symbol": "TREASURETAG"
+ }
+ }
+ },
+ "nodeURLs": [
+ "https://arb1.arbitrum.io/rpc",
+ "https://arbitrum.llamarpc.com",
+ "https://arbitrum.drpc.org",
+ "https://arbitrum-one.publicnode.com",
+ "https://arbitrum-one.public.blastapi.io",
+ "https://rpc.arb1.arbitrum.gateway.fm",
+ "https://1rpc.io/arb",
+ "https://rpc.ankr.com/arbitrum"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/42161"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "ARBITRUMONE",
+ "tokenIndex": {
+ "tokens": {
+ "BAL_MAGICUSDC_LP": {
+ "category": "LIQUIDITY_PROVIDER",
+ "chain": "ARBITRUMONE",
+ "contractAddress": "0xb3028ca124b80cfe6e9ca57b70ef2f0ccc41ebd4",
+ "decimals": 18,
+ "name": "Balancer 50/50 MAGIC/USDC LP token",
+ "origins": [
+ "https://arbiscan.io/token/0xb3028ca124b80cfe6e9ca57b70ef2f0ccc41ebd4"
+ ],
+ "symbol": "BAL_MAGICUSDC_LP"
+ },
+ "USDT": {
+ "category": "STABLECOIN",
+ "chain": "ARBITRUMONE",
+ "contractAddress": "0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9",
+ "decimals": 6,
+ "name": "Tether stablecoin token",
+ "origins": [
+ "https://arbiscan.io/address/0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9",
+ "https://www.coingecko.com/en/coins/tether"
+ ],
+ "symbol": "USDT"
+ },
+ "gDAI": {
+ "category": "STABLECOIN",
+ "chain": "ARBITRUMONE",
+ "contractAddress": "0xd85E038593d7A098614721EaE955EC2022B9B91B",
+ "decimals": 18,
+ "name": "GAINS Network DAI token",
+ "origins": [
+ "https://arbiscan.io/address/0xd85e038593d7a098614721eae955ec2022b9b91b"
+ ],
+ "symbol": "gDAI"
+ },
+ "DMT": {
+ "category": "GAMING",
+ "chain": "ARBITRUMONE",
+ "contractAddress": "0x8b0e6f19ee57089f7649a455d89d7bc6314d04e8",
+ "decimals": 18,
+ "name": "DMT gaming token",
+ "origins": [
+ "https://arbiscan.io/token/0x8b0e6f19ee57089f7649a455d89d7bc6314d04e8",
+ "https://www.coingecko.com/en/coins/dream-machine-token"
+ ],
+ "symbol": "DMT"
+ },
+ "DAI": {
+ "category": "STABLECOIN",
+ "chain": "ARBITRUMONE",
+ "contractAddress": "0xda10009cbd5d07dd0cecc66161fc93d7c9000da1",
+ "decimals": 18,
+ "name": "DAI stablecoin token",
+ "origins": [
+ "https://arbiscan.io/address/0xda10009cbd5d07dd0cecc66161fc93d7c9000da1",
+ "https://www.coingecko.com/en/coins/dai"
+ ],
+ "symbol": "DAI"
+ },
+ "BAL": {
+ "category": "DEFI",
+ "chain": "ARBITRUMONE",
+ "contractAddress": "0x040d1edc9569d4bab2d15287dc5a4f10f56a56b8",
+ "decimals": 18,
+ "name": "Balancer DEFI GOV token",
+ "origins": [
+ "https://arbiscan.io/token/0x040d1edc9569d4bab2d15287dc5a4f10f56a56b8"
+ ],
+ "symbol": "BAL"
+ },
+ "GNS": {
+ "category": "DEFI",
+ "chain": "ARBITRUMONE",
+ "contractAddress": "0x18c11fd286c5ec11c3b683caa813b77f5163a122",
+ "decimals": 18,
+ "name": "Gains token",
+ "origins": [
+ "https://arbiscan.io/address/0x18c11fd286c5ec11c3b683caa813b77f5163a122",
+ "https://www.coingecko.com/en/coins/gains-network"
+ ],
+ "symbol": "GNS"
+ },
+ "rETH": {
+ "category": "DEFI",
+ "chain": "ARBITRUMONE",
+ "contractAddress": "0xEC70Dcb4A1EFa46b8F2D97C310C9c4790ba5ffA8",
+ "decimals": 18,
+ "name": "Rocketpool ETH token",
+ "origins": [
+ "https://arbiscan.io/address/0xec70dcb4a1efa46b8f2d97c310c9c4790ba5ffa8",
+ "https://rocketpool.net/"
+ ],
+ "symbol": "rETH"
+ },
+ "GMX": {
+ "category": "DEFI",
+ "chain": "ARBITRUMONE",
+ "contractAddress": "0xfc5A1A6EB076a2C7aD06eD22C90d7E710E35ad0a",
+ "decimals": 18,
+ "name": "GMX token",
+ "origins": [
+ "https://arbiscan.io/address/0xfc5a1a6eb076a2c7ad06ed22c90d7e710e35ad0a",
+ "https://www.coingecko.com/en/coins/gmx"
+ ],
+ "symbol": "GMX"
+ },
+ "MAGIC": {
+ "category": "GAMING",
+ "chain": "ARBITRUMONE",
+ "contractAddress": "0x539bde0d7dbd336b79148aa742883198bbf60342",
+ "decimals": 18,
+ "name": "MAGIC gaming token",
+ "origins": [
+ "https://arbiscan.io/address/0x539bde0d7dbd336b79148aa742883198bbf60342",
+ "https://www.coingecko.com/en/coins/magic"
+ ],
+ "symbol": "MAGIC"
+ },
+ "ARBITRUM": {
+ "category": "GOVERNANCE",
+ "chain": "ARBITRUMONE",
+ "contractAddress": "0x912ce59144191c1204e64559fe8253a0e49e6548",
+ "decimals": 18,
+ "name": "Arbitrum GOV token",
+ "origins": [
+ "https://arbiscan.io/address/0x912ce59144191c1204e64559fe8253a0e49e6548"
+ ],
+ "symbol": "ARBITRUM"
+ },
+ "USDC": {
+ "category": "STABLECOIN",
+ "chain": "ARBITRUMONE",
+ "contractAddress": "0xaf88d065e77c8cc2239327c5edb3a432268e5831",
+ "decimals": 6,
+ "name": "USDC stablecoin token",
+ "origins": [
+ "https://arbiscan.io/address/0xaf88d065e77c8cc2239327c5edb3a432268e5831",
+ "https://www.coingecko.com/en/coins/usd-coin"
+ ],
+ "symbol": "USDC"
+ },
+ "USDCe": {
+ "category": "STABLECOIN",
+ "chain": "ARBITRUMONE",
+ "contractAddress": "0xff970a61a04b1ca14834a43f5de4533ebddb5cc8",
+ "decimals": 6,
+ "name": "Bridged USDC stablecoin token (USDC.e)",
+ "origins": [
+ "https://arbiscan.io/address/0xff970a61a04b1ca14834a43f5de4533ebddb5cc8",
+ "https://www.coingecko.com/en/coins/usd-coin-ethereum-bridged"
+ ],
+ "symbol": "USDCe"
+ }
+ }
+ },
+ "type": "PUBLIC"
+ },
+ "KARDIACHAIN": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://explorer.kardiachain.io/"
+ ],
+ "chainId": 24,
+ "chainName": "KARURA Mainnet",
+ "fallbackGasLimitInUnits": "21000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ ""
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "KARDIACHAIN Gas Token",
+ "symbol": "KAI"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://rpc.kardiachain.io"
+ ],
+ "origins": [
+ "https://kardiachain.io/"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "KARDIACHAIN",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "CANTOTEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://testnet-explorer.canto.neobase.one/"
+ ],
+ "chainId": 740,
+ "chainName": "Canto Test Network",
+ "fallbackGasLimitInUnits": "21000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://discord.com/invite/canto, social-faucet channel"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Canto Test Token",
+ "symbol": "CANTO"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://eth.plexnode.wtf"
+ ],
+ "origins": [
+ "https://docs.canto.io/user-guides/connecting-to-canto",
+ "https://chainlist.org/chain/740"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "CANTOTEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "BORKED"
+ },
+ "MANTLETEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://explorer.testnet.mantle.xyz"
+ ],
+ "chainId": 5001,
+ "chainName": "Mantle Testnet",
+ "fallbackGasLimitInUnits": "21000",
+ "fallbackGasPriceInWEI": "1000000000",
+ "faucets": [
+ "https://faucet.testnet.mantle.xyz",
+ "https://bridge.testnet.mantle.xyz",
+ "https://goerli.etherscan.io/address/0xc1dc2d65a2243c22344e725677a3e3bebd26e604#writeProxyContract mint()"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Mantle Gas Token",
+ "symbol": "MNT"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://rpc.testnet.mantle.xyz"
+ ],
+ "origins": [
+ "https://www.mantle.xyz/"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "MANTLETEST",
+ "tokenIndex": {
+ "tokens": {
+ "USDT": {
+ "category": "STABLECOIN",
+ "chain": "MANTLETEST",
+ "contractAddress": "0x093790D873e87B45Cee9CA70B12056C705861ecD",
+ "decimals": 6,
+ "name": "Tether stable coin",
+ "origins": [
+ "https://explorer.testnet.mantle.xyz/token/0x093790D873e87B45Cee9CA70B12056C705861ecD"
+ ],
+ "symbol": "USDT"
+ },
+ "WETH": {
+ "category": "DEFI",
+ "chain": "MANTLETEST",
+ "contractAddress": "0xdEAddEaDdeadDEadDEADDEAddEADDEAddead1111",
+ "decimals": 18,
+ "name": "Wrapped ETH token",
+ "origins": [
+ "https://explorer.testnet.mantle.xyz/token/0xdEAddEaDdeadDEadDEADDEAddEADDEAddead1111"
+ ],
+ "symbol": "WETH"
+ },
+ "USDC": {
+ "category": "STABLECOIN",
+ "chain": "MANTLETEST",
+ "contractAddress": "0xbAF72402f98f16e77638Ce5FCC5689CD1627E8ff",
+ "decimals": 6,
+ "name": "USDC stable coin",
+ "origins": [
+ "https://explorer.testnet.mantle.xyz/token/0xbAF72402f98f16e77638Ce5FCC5689CD1627E8ff/"
+ ],
+ "symbol": "USDC"
+ }
+ }
+ },
+ "type": "PUBLIC"
+ },
+ "ASTAR": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://astar.subscan.io",
+ "https://blockscout.com/astar"
+ ],
+ "chainId": 592,
+ "chainName": "ASTAR Mainnet",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://portal.astar.network"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "ASTR",
+ "symbol": "ASTR"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://astar.public.blastapi.io",
+ "https://evm.astar.network",
+ "https://1rpc.io/astr",
+ "https://astar-rpc.dwellir.com"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/592"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "ASTAR",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "CORE": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://scan.coredao.org"
+ ],
+ "chainId": 1116,
+ "chainName": "Core DAO Mainnet",
+ "fallbackGasLimitInUnits": "21000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://bridge.coredao.org/"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Core Gas Token",
+ "symbol": "CORE"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://rpc.coredao.org",
+ "https://rpc-core.icecreamswap.com"
+ ],
+ "origins": [
+ "https://coredao.org/"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "CORE",
+ "tokenIndex": {
+ "tokens": {
+ "USDT": {
+ "category": "STABLECOIN",
+ "chain": "CORE",
+ "contractAddress": "0x900101d06a7426441ae63e9ab3b9b0f63be145f1",
+ "decimals": 6,
+ "name": "Tether stable token",
+ "origins": [
+ "https://scan.coredao.org/token/0x900101d06a7426441ae63e9ab3b9b0f63be145f1"
+ ],
+ "symbol": "USDT"
+ }
+ }
+ },
+ "type": "PUBLIC"
+ },
+ "BASETEST": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://goerli.basescan.org"
+ ],
+ "chainId": 84531,
+ "chainName": "Base Goerli Test Network",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "https://bridge.base.org/"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Base Goerli Test Token",
+ "symbol": "ETH"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://goerli.base.org",
+ "https://base-goerli.public.blastapi.io",
+ "https://base-goerli.diamondswap.org/rpc",
+ "https://1rpc.io/base-goerli",
+ "https://base-goerli.publicnode.com"
+ ],
+ "origins": [
+ "https://base.org/"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "BASETEST",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "PUBLIC"
+ },
+ "GANACHE7545_1337": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://blockexplorer.x"
+ ],
+ "chainId": 1337,
+ "chainName": "Ganache Test Chain, default local port 7545 and chainid 1337",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "faucet-to-be-inserted"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Development Test Token",
+ "symbol": "ETH"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "http://127.0.0.1:7545"
+ ],
+ "origins": [
+ "https://gsthina.medium.com/the-default-chain-id-for-ganache-metamask-is-1337-can-you-try-to-override-it-de5ad1bcb3ab"
+ ],
+ "priceMechanism": "LEGACY",
+ "shortName": "GANACHE7545_1337",
+ "tokenIndex": {
+ "tokens": {}
+ },
+ "type": "LOCAL"
+ },
+ "MANTLE": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://explorer.mantle.xyz"
+ ],
+ "chainId": 5000,
+ "chainName": "Mantle Mainnet",
+ "fallbackGasLimitInUnits": "21000",
+ "fallbackGasPriceInWEI": "1000000000",
+ "faucets": [
+ "https://bridge.mantle.xyz/"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "Mantle Gas Token",
+ "symbol": "MNT"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {
+ "CITIZEN": {
+ "category": "CHAINMASCOT",
+ "chain": "MANTLE",
+ "contractAddress": "0x7cf4aC414C94E03Ecb2A7d6EA8F79087453cAEf0",
+ "description": "Citizen of Mantle",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://explorer.mantle.xyz/token/0x7cf4aC414C94E03Ecb2A7d6EA8F79087453cAEf0",
+ "https://journey.mantle.xyz/"
+ ],
+ "symbol": "CITIZEN"
+ }
+ }
+ },
+ "nodeURLs": [
+ "https://rpc.mantle.xyz",
+ "https://mantle.publicnode.com",
+ "https://mantle-mainnet.public.blastapi.io",
+ "https://mantle.drpc.org",
+ "https://rpc.ankr.com/mantle",
+ "https://1rpc.io/mantle"
+ ],
+ "origins": [
+ "https://www.mantle.xyz/"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "MANTLE",
+ "tokenIndex": {
+ "tokens": {
+ "USDT": {
+ "category": "STABLECOIN",
+ "chain": "MANTLE",
+ "contractAddress": "0x201EBa5CC46D216Ce6DC03F6a759e8E766e956aE",
+ "decimals": 6,
+ "name": "Tether stable coin",
+ "origins": [
+ "https://explorer.mantle.xyz/token/0x201EBa5CC46D216Ce6DC03F6a759e8E766e956aE"
+ ],
+ "symbol": "USDT"
+ },
+ "WETH": {
+ "category": "DEFI",
+ "chain": "MANTLE",
+ "contractAddress": "0xdEAddEaDdeadDEadDEADDEAddEADDEAddead1111",
+ "decimals": 18,
+ "name": "Wrapped ETH token",
+ "origins": [
+ "https://explorer.mantle.xyz/token/0xdEAddEaDdeadDEadDEADDEAddEADDEAddead1111",
+ "https://www.coingecko.com/en/coins/wrapped-ether-mantle-bridge"
+ ],
+ "symbol": "WETH"
+ },
+ "USDC": {
+ "category": "STABLECOIN",
+ "chain": "MANTLE",
+ "contractAddress": "0x09Bc4E0D864854c6aFB6eB9A9cdF58aC190D0dF9",
+ "decimals": 6,
+ "name": "USDC stable coin",
+ "origins": [
+ "https://explorer.mantle.xyz/address/0x09Bc4E0D864854c6aFB6eB9A9cdF58aC190D0dF9"
+ ],
+ "symbol": "USDC"
+ }
+ }
+ },
+ "type": "PUBLIC"
+ },
+ "BASE": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://basescan.org"
+ ],
+ "chainId": 8453,
+ "chainName": "BASE Mainnet",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "30000000000",
+ "faucets": [
+ "faucet-to-be-inserted"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "BASE Native Token",
+ "symbol": "ETH"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {}
+ },
+ "nodeURLs": [
+ "https://base.blockpi.network/v1/rpc/public",
+ "https://developer-access-mainnet.base.org",
+ "https://base-mainnet.public.blastapi.io",
+ "https://base.meowrpc.com",
+ "https://base.publicnode.com",
+ "https://1rpc.io/base",
+ "https://mainnet.base.org",
+ "https://rpc.notadegen.com/base",
+ "https://base-mainnet.diamondswap.org/rpc"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/8453",
+ "https://base.org/"
+ ],
+ "priceMechanism": "LEGACY",
+ "shortName": "BASE",
+ "tokenIndex": {
+ "tokens": {
+ "USDbC": {
+ "category": "STABLECOIN",
+ "chain": "BASE",
+ "contractAddress": "0xd9aaec86b65d86f6a7b5b1b0c42ffa531710b6ca",
+ "decimals": 6,
+ "name": "USDbC stablecoin token",
+ "origins": [
+ "https://basescan.org/address/0xd9aaec86b65d86f6a7b5b1b0c42ffa531710b6ca"
+ ],
+ "symbol": "USDbC"
+ },
+ "AERODOME_AERO_WETH_LP": {
+ "category": "LIQUIDITY_PROVIDER",
+ "chain": "BASE",
+ "contractAddress": "0x7f670f78b17dec44d5ef68a48740b6f8849cc2e6",
+ "decimals": 18,
+ "name": "Aerodome Finance AERO/WETH LP position",
+ "origins": [
+ "https://basescan.org/token/0x7f670f78b17dec44d5ef68a48740b6f8849cc2e6",
+ "https://aerodrome.finance/"
+ ],
+ "symbol": "AERODOME_AERO_WETH_LP"
+ },
+ "WETH": {
+ "category": "DEFI",
+ "chain": "BASE",
+ "contractAddress": "0x4200000000000000000000000000000000000006",
+ "decimals": 18,
+ "name": "Wrapped ETH token",
+ "origins": [
+ "https://basescan.org/address/0x4200000000000000000000000000000000000006"
+ ],
+ "symbol": "WETH"
+ },
+ "USDC": {
+ "category": "STABLECOIN",
+ "chain": "BASE",
+ "contractAddress": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
+ "decimals": 6,
+ "name": "USDC stablecoin token",
+ "origins": [
+ "https://basescan.org/address/0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
+ "https://www.coingecko.com/en/coins/usd-coin"
+ ],
+ "symbol": "USDC"
+ },
+ "AERODOME_DAI_WETH_LP": {
+ "category": "LIQUIDITY_PROVIDER",
+ "chain": "BASE",
+ "contractAddress": "0x9287c921f5d920ceee0d07d7c58d476e46acc640",
+ "decimals": 18,
+ "name": "Aerodome Finance DAI/WETH LP position",
+ "origins": [
+ "https://basescan.org/token/0x9287c921f5d920ceee0d07d7c58d476e46acc640",
+ "https://aerodrome.finance/"
+ ],
+ "symbol": "AERODOME_DAI_WETH_LP"
+ },
+ "DAI": {
+ "category": "STABLECOIN",
+ "chain": "BASE",
+ "contractAddress": "0x50c5725949a6f0c72e6c4a641f24049a917db0cb",
+ "decimals": 18,
+ "name": "DAI stablecoin token",
+ "origins": [
+ "https://basescan.org/address/0x50c5725949a6f0c72e6c4a641f24049a917db0cb",
+ "https://www.coingecko.com/en/coins/dai"
+ ],
+ "symbol": "DAI"
+ },
+ "AERO": {
+ "category": "DEFI",
+ "chain": "BASE",
+ "contractAddress": "0x940181a94a35a4569e4529a3cdfb74e38fd98631",
+ "decimals": 18,
+ "name": "AERO DEFI token",
+ "origins": [
+ "https://basescan.org/address/0x940181a94a35a4569e4529a3cdfb74e38fd98631"
+ ],
+ "symbol": "AERO"
+ }
+ }
+ },
+ "type": "PUBLIC"
+ },
+ "ZKSYNCERA": {
+ "archivenodeURLs": [],
+ "blockexplorerURLs": [
+ "https://explorer.zksync.io"
+ ],
+ "chainId": 324,
+ "chainName": "zkSync Era Mainnet",
+ "fallbackGasLimitInUnits": "300000",
+ "fallbackGasPriceInWEI": "250000000",
+ "faucets": [
+ "brige test funds from goerli using https://portal.zksync.io/bridge"
+ ],
+ "flashbotnodeURLs": [],
+ "flashbotrelaynodeURLs": [],
+ "nativeCurrency": {
+ "decimal": 18,
+ "name": "zkSync Token",
+ "symbol": "ETH"
+ },
+ "nftindex": {
+ "erc1155tokens": {},
+ "erc721tokens": {
+ "ZKAPE": {
+ "category": "SOCIAL",
+ "chain": "ZKSYNCERA",
+ "contractAddress": "0x5e6f0f1d604d7300c10933aa8834afa034d448ea",
+ "description": "ZKSyncEra Ape",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://explorer.zksync.io/address/0x5e6f0f1d604d7300c10933aa8834afa034d448ea",
+ "https://zkape.io",
+ "https://mintsquare.io/collection/zksync/0x5e6f0f1d604d7300c10933aa8834afa034d448ea"
+ ],
+ "symbol": "ZKAPE"
+ },
+ "ERANAMESERVICE": {
+ "category": "NAMESERVICE",
+ "chain": "ZKSYNCERA",
+ "contractAddress": "0x935442AF47F3dc1c11F006D551E13769F12eab13",
+ "description": "ERA Name service",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://explorer.zksync.io/address/0x935442AF47F3dc1c11F006D551E13769F12eab13",
+ "https://era.name"
+ ],
+ "symbol": "ERANAMESERVICE"
+ }
+ }
+ },
+ "nodeURLs": [
+ "https://mainnet.era.zksync.io",
+ "https://zksync.drpc.org",
+ "https://zksync-era.blockpi.network/v1/rpc/public",
+ "https://zksync.meowrpc.com"
+ ],
+ "origins": [
+ "https://chainlist.org/chain/324"
+ ],
+ "priceMechanism": "EIP1559",
+ "shortName": "ZKSYNCERA",
+ "tokenIndex": {
+ "tokens": {
+ "PERP": {
+ "category": "DEFI",
+ "chain": "ZKSYNCERA",
+ "contractAddress": "0x42c1c56be243c250AB24D2ecdcC77F9cCAa59601",
+ "decimals": 18,
+ "name": "PERP token",
+ "origins": [
+ "https://explorer.zksync.io/address/0x42c1c56be243c250AB24D2ecdcC77F9cCAa59601",
+ "https://www.coingecko.com/en/coins/perpetual-protocol"
+ ],
+ "symbol": "PERP"
+ },
+ "SYNCSWAP_USDC_WETH_LP": {
+ "category": "DEFI",
+ "chain": "ZKSYNCERA",
+ "contractAddress": "0x80115c708E12eDd42E504c1cD52Aea96C547c05c",
+ "decimals": 18,
+ "name": "Syncswap USDC/WETH LP position",
+ "origins": [
+ "https://explorer.zksync.io/address/0x80115c708E12eDd42E504c1cD52Aea96C547c05c",
+ "https://syncswap.xyz"
+ ],
+ "symbol": "SYNCSWAP_USDC_WETH_LP"
+ },
+ "YSYNC": {
+ "category": "DEFI",
+ "chain": "ZKSYNCERA",
+ "contractAddress": "0xE0eF1c039a36eC77339E7277ECd4D48e57b61eec",
+ "decimals": 18,
+ "name": "YSYNC token",
+ "origins": [
+ "https://explorer.zksync.io/address/0xE0eF1c039a36eC77339E7277ECd4D48e57b61eec",
+ "https://syncswap.xyz"
+ ],
+ "symbol": "YSYNC"
+ },
+ "USDC": {
+ "category": "STABLECOIN",
+ "chain": "ZKSYNCERA",
+ "contractAddress": "0x3355df6D4c9C3035724Fd0e3914dE96A5a83aaf4",
+ "decimals": 6,
+ "name": "USDC stablecoin token",
+ "origins": [
+ "https://explorer.zksync.io/address/0x3355df6D4c9C3035724Fd0e3914dE96A5a83aaf4",
+ "https://www.coingecko.com/en/coins/usd-coin"
+ ],
+ "symbol": "USDC"
+ },
+ "COMBO": {
+ "category": "DEFI",
+ "chain": "ZKSYNCERA",
+ "contractAddress": "0xc2B13Bb90E33F1E191b8aA8F44Ce11534D5698E3",
+ "decimals": 18,
+ "name": "COMBO token",
+ "origins": [
+ "https://explorer.zksync.io/address/0xc2B13Bb90E33F1E191b8aA8F44Ce11534D5698E3",
+ "https://www.coingecko.com/en/coins/furucombo"
+ ],
+ "symbol": "COMBO"
+ },
+ "zkUSD": {
+ "category": "STABLECOIN",
+ "chain": "ZKSYNCERA",
+ "contractAddress": "0xfC7E56298657B002b3e656400E746b7212912757",
+ "decimals": 6,
+ "name": "zkUSD stablecoin token",
+ "origins": [
+ "https://explorer.zksync.io/address/0xfC7E56298657B002b3e656400E746b7212912757"
+ ],
+ "symbol": "zkUSD"
+ },
+ "ZAT": {
+ "category": "GAMING",
+ "chain": "ZKSYNCERA",
+ "contractAddress": "0x47EF4A5641992A72CFd57b9406c9D9cefEE8e0C4",
+ "decimals": 18,
+ "name": "zkApes token",
+ "origins": [
+ "https://explorer.zksync.io/address/0x47EF4A5641992A72CFd57b9406c9D9cefEE8e0C4",
+ "https://zkape.io"
+ ],
+ "symbol": "ZAT"
+ },
+ "MUTE": {
+ "category": "DEFI",
+ "chain": "ZKSYNCERA",
+ "contractAddress": "0x0e97C7a0F8B2C9885C8ac9fC6136e829CbC21d42",
+ "decimals": 18,
+ "name": "MUTE token",
+ "origins": [
+ "https://explorer.zksync.io/address/0x0e97C7a0F8B2C9885C8ac9fC6136e829CbC21d42",
+ "https://www.coingecko.com/en/coins/mute"
+ ],
+ "symbol": "MUTE"
+ },
+ "VC": {
+ "category": "DEFI",
+ "chain": "ZKSYNCERA",
+ "contractAddress": "0x99bBE51be7cCe6C8b84883148fD3D12aCe5787F2",
+ "decimals": 18,
+ "name": "Velocore token",
+ "origins": [
+ "https://explorer.zksync.io/address/0x99bBE51be7cCe6C8b84883148fD3D12aCe5787F2",
+ "https://zksync-v2.velocore.xyz"
+ ],
+ "symbol": "VC"
+ }
+ }
+ },
+ "type": "PUBLIC"
+ }
+ }
+}
diff --git a/fantomtokenindex.json b/fantomtokenindex.json
new file mode 100644
index 0000000..c406374
--- /dev/null
+++ b/fantomtokenindex.json
@@ -0,0 +1,87 @@
+{
+ "tokens": {
+ "SPOOKYSWAP_FTM_MULTI_LP": {
+ "category": "LIQUIDITY_PROVIDER",
+ "chain": "FANTOM",
+ "contractAddress": "0x297C8990134bf1eE08aE5D8805042fbac8781201",
+ "decimals": 18,
+ "name": "Spookyswap FTM+MULTI LP token",
+ "origins": [
+ "https://ftmscan.com/token/0x297c8990134bf1ee08ae5d8805042fbac8781201?a=0xf0803b4cf6359d64913ec6a0b8227640afe69b2a",
+ "https://spooky.fi/#/add/FTM/0x9Fb9a33956351cf4fa040f65A13b835A3C8764E3"
+ ],
+ "symbol": "SPOOKYSWAP_FTM_MULTI_LP"
+ },
+ "TEST": {
+ "category": "TEST",
+ "chain": "FANTOM",
+ "contractAddress": "0x62b65f4b89e9a56b687ccebb57b4afeafa933894",
+ "decimals": 18,
+ "name": "TEST token",
+ "origins": [
+ "https://polygonscan.com/token/0xMOJO"
+ ],
+ "symbol": "TEST"
+ },
+ "STG": {
+ "category": "DEFI",
+ "chain": "FANTOM",
+ "contractAddress": "0x2f6f07cdcf3588944bf4c42ac74ff24bf56e7590",
+ "decimals": 18,
+ "name": "StarGate token",
+ "origins": [
+ "https://ftmscan.com/address/0x2f6f07cdcf3588944bf4c42ac74ff24bf56e7590",
+ "https://www.coingecko.com/en/coins/stargate-finance"
+ ],
+ "symbol": "STG"
+ },
+ "USDT": {
+ "category": "STABLECOIN",
+ "chain": "FANTOM",
+ "contractAddress": "0x049d68029688eabf473097a2fc38ef61633a3c7a",
+ "decimals": 18,
+ "name": "Tether stablecoin token",
+ "origins": [
+ "https://ftmscan.com/address/0x049d68029688eabf473097a2fc38ef61633a3c7a",
+ "https://www.coingecko.com/en/coins/tether"
+ ],
+ "symbol": "USDT"
+ },
+ "USDC": {
+ "category": "STABLECOIN",
+ "chain": "FANTOM",
+ "contractAddress": "0x04068da6c83afcfa0e13ba15a6696662335d5b75",
+ "decimals": 6,
+ "name": "USDC stablecoin token",
+ "origins": [
+ "https://ftmscan.com/address/0x04068da6c83afcfa0e13ba15a6696662335d5b75",
+ "https://www.coingecko.com/en/coins/usd-coin"
+ ],
+ "symbol": "USDC"
+ },
+ "MULTI": {
+ "category": "DEFI",
+ "chain": "FANTOM",
+ "contractAddress": "0x9fb9a33956351cf4fa040f65a13b835a3c8764e3",
+ "decimals": 18,
+ "name": "Multichain token",
+ "origins": [
+ "https://ftmscan.com/address/0x9fb9a33956351cf4fa040f65a13b835a3c8764e3",
+ "https://www.coingecko.com/en/coins/multichain"
+ ],
+ "symbol": "MULTI"
+ },
+ "DAI": {
+ "category": "STABLECOIN",
+ "chain": "FANTOM",
+ "contractAddress": "0x8d11ec38a3eb5e956b052f67da8bdc9bef8abf3e",
+ "decimals": 18,
+ "name": "DAI stablecoin token",
+ "origins": [
+ "https://ftmscan.com/address/0x8d11ec38a3eb5e956b052f67da8bdc9bef8abf3e",
+ "https://www.coingecko.com/en/coins/dai"
+ ],
+ "symbol": "DAI"
+ }
+ }
+}
diff --git a/goerlitokenindex.json b/goerlitokenindex.json
new file mode 100644
index 0000000..8d53a4f
--- /dev/null
+++ b/goerlitokenindex.json
@@ -0,0 +1,92 @@
+{
+ "tokens": {
+ "ZETA": {
+ "category": "DEFI",
+ "chain": "GOERLITEST",
+ "contractAddress": "0xCc7bb2D219A0FC08033E130629C2B854b7bA9195",
+ "decimals": 18,
+ "name": "ZETA swap/bridge gas token",
+ "origins": [
+ "https://goerli.etherscan.io/token/0xCc7bb2D219A0FC08033E130629C2B854b7bA9195"
+ ],
+ "symbol": "ZETA"
+ },
+ "MNT": {
+ "category": "DEFI",
+ "chain": "GOERLITEST",
+ "contractAddress": "0xc1dC2d65A2243c22344E725677A3E3BEBD26E604",
+ "decimals": 18,
+ "name": "Mantle ERC-20 token",
+ "origins": [
+ "https://goerli.etherscan.io/token/0xc1dC2d65A2243c22344E725677A3E3BEBD26E604"
+ ],
+ "symbol": "MNT"
+ },
+ "TSTv4": {
+ "category": "TEST",
+ "chain": "GOERLITEST",
+ "contractAddress": "0x499d11E0b6eAC7c0593d8Fb292DCBbF815Fb29Ae",
+ "decimals": 18,
+ "name": "Goerli ERC-20 TST token",
+ "origins": [
+ "https://goerli.etherscan.io/token/0x499d11E0b6eAC7c0593d8Fb292DCBbF815Fb29Ae"
+ ],
+ "symbol": "TSTv4"
+ },
+ "TEST": {
+ "category": "TEST",
+ "chain": "GOERLITEST",
+ "contractAddress": "0x3f152b63ec5ca5831061b2dccfb29a874c317502",
+ "decimals": 18,
+ "name": "TEST token",
+ "origins": [
+ "https://goerli.etherscan.io/token/0xMOJO"
+ ],
+ "symbol": "TEST"
+ },
+ "TST4": {
+ "category": "TEST",
+ "chain": "GOERLITEST",
+ "contractAddress": "0x3f152b63ec5ca5831061b2dccfb29a874c317502",
+ "decimals": 18,
+ "name": "Official Goerli ERC-20 TST token",
+ "origins": [
+ "https://goerli.etherscan.io/token/0x3f152b63ec5ca5831061b2dccfb29a874c317502"
+ ],
+ "symbol": "TST4"
+ },
+ "USDC": {
+ "category": "STABLECOIN",
+ "chain": "GOERLITEST",
+ "contractAddress": "0x07865c6e87b9f70255377e024ace6630c1eaa37f",
+ "decimals": 6,
+ "name": "USDC Stable token",
+ "origins": [
+ "https://goerli.etherscan.io/token/0x07865c6e87b9f70255377e024ace6630c1eaa37f"
+ ],
+ "symbol": "USDC"
+ },
+ "WETH": {
+ "category": "DEFI",
+ "chain": "GOERLITEST",
+ "contractAddress": "0xb4fbf271143f4fbf7b91a5ded31805e42b2208d6",
+ "decimals": 18,
+ "name": "Wrapped ETH token",
+ "origins": [
+ "https://goerli.etherscan.io/address/0xb4fbf271143f4fbf7b91a5ded31805e42b2208d6"
+ ],
+ "symbol": "WETH"
+ },
+ "DAI": {
+ "category": "DEFI",
+ "chain": "GOERLITEST",
+ "contractAddress": "0x11fe4b6ae13d2a6055c8d9cf65c55bac32b5d844",
+ "decimals": 18,
+ "name": "DAI USD stablecoin token",
+ "origins": [
+ "https://goerli.etherscan.io/address/0x11fe4b6ae13d2a6055c8d9cf65c55bac32b5d844"
+ ],
+ "symbol": "DAI"
+ }
+ }
+}
diff --git a/img/forestfishto.png b/img/forestfishto.png
new file mode 100644
index 0000000..4955306
Binary files /dev/null and b/img/forestfishto.png differ
diff --git a/mumbaitokenindex.json b/mumbaitokenindex.json
new file mode 100644
index 0000000..70ab716
--- /dev/null
+++ b/mumbaitokenindex.json
@@ -0,0 +1,133 @@
+{
+ "tokens": {
+ "RICOCHET_fUSDCx": {
+ "category": "DEFI",
+ "chain": "MUMBAITEST",
+ "contractAddress": "0x42bb40bF79730451B11f6De1CbA222F17b87Afd7",
+ "decimals": 18,
+ "name": "Ricochet fUSDC token, fUSDCx",
+ "origins": [
+ "https://mumbai.polygonscan.com/token/0x42bb40bF79730451B11f6De1CbA222F17b87Afd7",
+ "https://docs.superfluid.finance/superfluid/developers/networks"
+ ],
+ "symbol": "RICOCHET_fUSDCx"
+ },
+ "TST": {
+ "category": "TEST",
+ "chain": "MUMBAITEST",
+ "contractAddress": "0x2d7882bedcbfddce29ba99965dd3cdf7fcb10a1e",
+ "decimals": 18,
+ "name": "Official Mumbai ERC-20 TST token",
+ "origins": [
+ "https://mumbai.polygonscan.com/address/0x2d7882bedcbfddce29ba99965dd3cdf7fcb10a1e"
+ ],
+ "symbol": "TST"
+ },
+ "TEST": {
+ "category": "TEST",
+ "chain": "MUMBAITEST",
+ "contractAddress": "0xeedb61304686f4b544baa1cb19f87c30bb8d38b9",
+ "decimals": 18,
+ "name": "TEST token",
+ "origins": [
+ "https://mumbai.polygonscan.com/token/0xMOJO"
+ ],
+ "symbol": "TEST"
+ },
+ "fUSDC": {
+ "category": "DEFI",
+ "chain": "MUMBAITEST",
+ "contractAddress": "0xbe49ac1EadAc65dccf204D4Df81d650B50122aB2",
+ "decimals": 18,
+ "name": "Flux fUSDC token",
+ "origins": [
+ "https://mumbai.polygonscan.com/token/0xbe49ac1EadAc65dccf204D4Df81d650B50122aB2",
+ "https://docs.superfluid.finance/superfluid/developers/networks"
+ ],
+ "symbol": "fUSDC"
+ },
+ "RICOCHET_fTUSDx": {
+ "category": "DEFI",
+ "chain": "MUMBAITEST",
+ "contractAddress": "0x918E0d5C96cAC79674E2D38066651212be3C9C48",
+ "decimals": 18,
+ "name": "Ricochet fTUSD token, fTUSDx",
+ "origins": [
+ "https://mumbai.polygonscan.com/token/0x918E0d5C96cAC79674E2D38066651212be3C9C48",
+ "https://docs.superfluid.finance/superfluid/developers/networks"
+ ],
+ "symbol": "RICOCHET_fTUSDx"
+ },
+ "fDAI": {
+ "category": "STABLECOIN",
+ "chain": "MUMBAITEST",
+ "contractAddress": "0x15F0Ca26781C3852f8166eD2ebce5D18265cceb7",
+ "decimals": 18,
+ "name": "Flux fDAI stablecoin",
+ "origins": [
+ "https://mumbai.polygonscan.com/token/0x15F0Ca26781C3852f8166eD2ebce5D18265cceb7",
+ "https://docs.superfluid.finance/superfluid/developers/networks"
+ ],
+ "symbol": "fDAI"
+ },
+ "LINK": {
+ "category": "DEFI",
+ "chain": "MUMBAITEST",
+ "contractAddress": "0x326C977E6efc84E512bB9C30f76E30c160eD06FB",
+ "decimals": 18,
+ "name": "LINK token",
+ "origins": [
+ "https://mumbai.polygonscan.com/token/0x326c977e6efc84e512bb9c30f76e30c160ed06fb",
+ "https://www.coingecko.com/en/coins/chainlink"
+ ],
+ "symbol": "LINK"
+ },
+ "fTUSD": {
+ "category": "STABLECOIN",
+ "chain": "MUMBAITEST",
+ "contractAddress": "0xA794C9ee519FD31BbCE643e8D8138f735E97D1DB",
+ "decimals": 18,
+ "name": "Flux fTUSD stablecoin",
+ "origins": [
+ "https://mumbai.polygonscan.com/token/0xA794C9ee519FD31BbCE643e8D8138f735E97D1DB",
+ "https://docs.superfluid.finance/superfluid/developers/networks"
+ ],
+ "symbol": "fTUSD"
+ },
+ "RICOCHET_fDAIx": {
+ "category": "DEFI",
+ "chain": "MUMBAITEST",
+ "contractAddress": "0x15F0Ca26781C3852f8166eD2ebce5D18265cceb7",
+ "decimals": 18,
+ "name": "Ricochet fDAI token, fDAIx",
+ "origins": [
+ "https://mumbai.polygonscan.com/token/0x15F0Ca26781C3852f8166eD2ebce5D18265cceb7",
+ "https://docs.superfluid.finance/superfluid/developers/networks"
+ ],
+ "symbol": "RICOCHET_fDAIx"
+ },
+ "RICOCHET_MATICx": {
+ "category": "DEFI",
+ "chain": "MUMBAITEST",
+ "contractAddress": "0x96B82B65ACF7072eFEb00502F45757F254c2a0D4",
+ "decimals": 18,
+ "name": "Ricochet MATIC token, MATICx",
+ "origins": [
+ "https://mumbai.polygonscan.com/token/0x96B82B65ACF7072eFEb00502F45757F254c2a0D4",
+ "https://docs.superfluid.finance/superfluid/developers/networks"
+ ],
+ "symbol": "RICOCHET_MATICx"
+ },
+ "DERC20": {
+ "category": "TEST",
+ "chain": "MUMBAITEST",
+ "contractAddress": "0x2d7882bedcbfddce29ba99965dd3cdf7fcb10a1e",
+ "decimals": 18,
+ "name": "Official Mumbai ERC-20 Dummy ERC20 token",
+ "origins": [
+ "https://mumbai.polygonscan.com/token/0xfe4f5145f6e09952a5ba9e956ed0c25e3fa4c7f1"
+ ],
+ "symbol": "DERC20"
+ }
+ }
+}
diff --git a/polygonnfttokenindex.json b/polygonnfttokenindex.json
new file mode 100644
index 0000000..9a0e15b
--- /dev/null
+++ b/polygonnfttokenindex.json
@@ -0,0 +1,206 @@
+{
+ "erc1155tokens": {
+ "AAVEGOTCHI_INSTALLATION": {
+ "category": "GAMING",
+ "chain": "POLYGON",
+ "contractAddress": "0x9216c31d8146bcb3ea5a9162dc1702e8aedca355",
+ "description": "AAvegotchi game land installation NFT",
+ "linked_tokens": [
+ "POLYGON:GHST",
+ "POLYGON:KEK",
+ "POLYGON:ALPHA",
+ "POLYGON:FOMO",
+ "POLYGON:FUD",
+ "POLYGON:GLTR"
+ ],
+ "mintBlock": 0,
+ "origins": [
+ "https://polygonscan.com/address/0x9216c31d8146bcb3ea5a9162dc1702e8aedca355",
+ "https://opensea.io/collection/gotchiverse-installations"
+ ],
+ "symbol": "AAVEGOTCHI_INSTALLATION"
+ }
+ },
+ "erc721tokens": {
+ "UNISWAPV3_POSITION": {
+ "category": "DEFI",
+ "chain": "POLYGON",
+ "contractAddress": "0xC36442b4a4522E871399CD717aBDD847Ab11FE88",
+ "description": "Uniswap v3 position NFT",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://polygonscan.com/token/0xc36442b4a4522e871399cd717abdd847ab11fe88"
+ ],
+ "symbol": "UNISWAPV3_POSITION"
+ },
+ "UAPX_SONG": {
+ "category": "NFT",
+ "chain": "POLYGON",
+ "contractAddress": "0x86c47873dd7d2186f5bd87da4757aecf1e16ac2e",
+ "description": "UAPx song NFT (formerly Terra)",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://polygonscan.com/address/0x86c47873dd7d2186f5bd87da4757aecf1e16ac2e"
+ ],
+ "symbol": "UAPX_SONG"
+ },
+ "UAPX_SHIP": {
+ "category": "NFT",
+ "chain": "POLYGON",
+ "contractAddress": "0x2148da6c55c10ea3d9b33311d19a065592abd24b",
+ "description": "UAPx ship NFT (formerly Terra)",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://polygonscan.com/address/0x2148da6c55c10ea3d9b33311d19a065592abd24b"
+ ],
+ "symbol": "UAPX_SHIP"
+ },
+ "UAPX_ALIEN": {
+ "category": "NFT",
+ "chain": "POLYGON",
+ "contractAddress": "0xd8f000eac06cebab3b967eeb137fbcac842a1472",
+ "description": "UAPx alien NFT (formerly Terra)",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://polygonscan.com/address/0xd8f000eac06cebab3b967eeb137fbcac842a1472"
+ ],
+ "symbol": "UAPX_ALIEN"
+ },
+ "AAVEGOTCHI": {
+ "category": "GAMING",
+ "chain": "POLYGON",
+ "contractAddress": "0x86935f11c86623dec8a25696e1c19a8659cbf95d",
+ "description": "AAvegotchi game NFT",
+ "linked_tokens": [
+ "POLYGON:GHST",
+ "POLYGON:KEK",
+ "POLYGON:ALPHA",
+ "POLYGON:FOMO",
+ "POLYGON:FUD",
+ "POLYGON:GLTR"
+ ],
+ "mintBlock": 0,
+ "origins": [
+ "https://polygonscan.com/token/0x86935f11c86623dec8a25696e1c19a8659cbf95d"
+ ],
+ "symbol": "AAVEGOTCHI"
+ },
+ "UNSTOPPABLE_DOMAIN": {
+ "category": "GAMING",
+ "chain": "POLYGON",
+ "contractAddress": "0xa9a6a3626993d487d2dbda3173cf58ca1a9d9e9f",
+ "description": "Unstoppable domains NFT",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://polygonscan.com/address/0xa9a6a3626993d487d2dbda3173cf58ca1a9d9e9f"
+ ],
+ "symbol": "UNSTOPPABLE_DOMAIN"
+ },
+ "UNIOVERSE": {
+ "category": "NFT",
+ "chain": "POLYGON",
+ "contractAddress": "0xed55e4477b795eaa9bb4bca24df42214e1a05c18",
+ "description": "Unioverse Collectibles",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://polygonscan.com/address/0xed55e4477b795eaa9bb4bca24df42214e1a05c18"
+ ],
+ "symbol": "UNIOVERSE"
+ },
+ "AAVEGOTCHI_LAND": {
+ "category": "GAMING",
+ "chain": "POLYGON",
+ "contractAddress": "0x1d0360bac7299c86ec8e99d0c1c9a95fefaf2a11",
+ "description": "AAvegotchi game LAND NFT",
+ "linked_tokens": [
+ "POLYGON:GHST",
+ "POLYGON:KEK",
+ "POLYGON:ALPHA",
+ "POLYGON:FOMO",
+ "POLYGON:FUD",
+ "POLYGON:GLTR"
+ ],
+ "mintBlock": 0,
+ "origins": [
+ "https://polygonscan.com/address/0x1d0360bac7299c86ec8e99d0c1c9a95fefaf2a11"
+ ],
+ "symbol": "AAVEGOTCHI_LAND"
+ },
+ "LENSPROTOCOLPROFILE": {
+ "category": "GAMING",
+ "chain": "POLYGON",
+ "contractAddress": "0xdb46d1dc155634fbc732f92e853b10b288ad5a1d",
+ "description": "Lens Protocol Profile NFT",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://polygonscan.com/address/0xdb46d1dc155634fbc732f92e853b10b288ad5a1d"
+ ],
+ "symbol": "LENSPROTOCOLPROFILE"
+ },
+ "MYCRYPTOHEROES": {
+ "category": "GAMING",
+ "chain": "POLYGON",
+ "contractAddress": "0x77bd275ff2b3dc007475aac9ce7f408f5a800188",
+ "description": "My Crypto Heroes NFT",
+ "linked_tokens": [],
+ "mintBlock": 16765971,
+ "origins": [
+ "https://polygonscan.com/address/0x77bd275ff2b3dc007475aac9ce7f408f5a800188"
+ ],
+ "symbol": "MYCRYPTOHEROES"
+ },
+ "SANDBOX_LAND": {
+ "category": "GAMING",
+ "chain": "POLYGON",
+ "contractAddress": "0x9d305a42a3975ee4c1c57555bed5919889dce63f",
+ "description": "The Sandbox LAND NFT",
+ "linked_tokens": [
+ "POLYGON:SAND"
+ ],
+ "mintBlock": 0,
+ "origins": [
+ "https://polygonscan.com/address/0x9d305a42a3975ee4c1c57555bed5919889dce63f",
+ "https://opensea.io/collection/sandbox"
+ ],
+ "symbol": "SANDBOX_LAND"
+ },
+ "TRUMP": {
+ "category": "SCAM",
+ "chain": "POLYGON",
+ "contractAddress": "0x24a11e702cd90f034ea44faf1e180c0c654ac5d9",
+ "description": "Trump Digital Trading Card NFT",
+ "linked_tokens": [],
+ "mintBlock": 0,
+ "origins": [
+ "https://polygonscan.com/address/0x24a11e702cd90f034ea44faf1e180c0c654ac5d9"
+ ],
+ "symbol": "TRUMP"
+ },
+ "AAVEGOTCHI_GMI": {
+ "category": "GAMING",
+ "chain": "POLYGON",
+ "contractAddress": "0x3f0e22b827e51ff567d7388c2b598e2eabfa74be",
+ "description": "AAvegotchi GMI NFT",
+ "linked_tokens": [
+ "POLYGON:GHST",
+ "POLYGON:KEK",
+ "POLYGON:ALPHA",
+ "POLYGON:FOMO",
+ "POLYGON:FUD",
+ "POLYGON:GLTR"
+ ],
+ "mintBlock": 0,
+ "origins": [
+ "https://polygonscan.com/address/0x3f0e22b827e51ff567d7388c2b598e2eabfa74be"
+ ],
+ "symbol": "AAVEGOTCHI_GMI"
+ }
+ }
+}
diff --git a/polygontokenindex.json b/polygontokenindex.json
new file mode 100644
index 0000000..52fa0b9
--- /dev/null
+++ b/polygontokenindex.json
@@ -0,0 +1,490 @@
+{
+ "tokens": {
+ "GLTR": {
+ "category": "GAMING",
+ "chain": "POLYGON",
+ "contractAddress": "0x3801c3b3b5c98f88a9c9005966aa96aa440b9afc",
+ "decimals": 18,
+ "name": "GAX Liquidity Token Reward, Aavegotchi game token",
+ "origins": [
+ "https://polygonscan.com/token/0x3801c3b3b5c98f88a9c9005966aa96aa440b9afc",
+ "https://www.coingecko.com/en/coins/gax-liquidity-token-reward"
+ ],
+ "symbol": "GLTR"
+ },
+ "RICOCHET_WBTCx": {
+ "category": "DEFI",
+ "chain": "POLYGON",
+ "contractAddress": "0x4086eBf75233e8492F1BCDa41C7f2A8288c2fB92",
+ "decimals": 18,
+ "name": "Ricochet WBTC token, WBTCx",
+ "origins": [
+ "https://polygonscan.com/token/0x4086eBf75233e8492F1BCDa41C7f2A8288c2fB92",
+ "https://docs.superfluid.finance/superfluid/developers/networks"
+ ],
+ "symbol": "RICOCHET_WBTCx"
+ },
+ "RICOCHET_ETHx": {
+ "category": "DEFI",
+ "chain": "POLYGON",
+ "contractAddress": "0x27e1e4E6BC79D93032abef01025811B7E4727e85",
+ "decimals": 18,
+ "name": "Ricochet ETH token, ETHx",
+ "origins": [
+ "https://polygonscan.com/token/0x27e1e4E6BC79D93032abef01025811B7E4727e85",
+ "https://docs.superfluid.finance/superfluid/developers/networks"
+ ],
+ "symbol": "RICOCHET_ETHx"
+ },
+ "LUCHA": {
+ "category": "GAMING",
+ "chain": "POLYGON",
+ "contractAddress": "0x6749441fdc8650b5b5a854ed255c82ef361f1596",
+ "decimals": 18,
+ "name": "Luchadores game token",
+ "origins": [
+ "https://polygonscan.com/address/0x6749441fdc8650b5b5a854ed255c82ef361f1596",
+ "https://www.coingecko.com/en/coins/lucha"
+ ],
+ "symbol": "LUCHA"
+ },
+ "SYNAPSE": {
+ "category": "DEFI",
+ "chain": "POLYGON",
+ "contractAddress": "0xf8f9efc0db77d8881500bb06ff5d6abc3070e695",
+ "decimals": 18,
+ "name": "Synapse Defi token",
+ "origins": [
+ "https://polygonscan.com/token/0xf8f9efc0db77d8881500bb06ff5d6abc3070e695",
+ "https://www.coingecko.com/en/coins/synapse"
+ ],
+ "symbol": "SYNAPSE"
+ },
+ "STG": {
+ "category": "DEFI",
+ "chain": "POLYGON",
+ "contractAddress": "0x2f6f07cdcf3588944bf4c42ac74ff24bf56e7590",
+ "decimals": 18,
+ "name": "StarGate token",
+ "origins": [
+ "https://polygonscan.com/token/0x2f6f07cdcf3588944bf4c42ac74ff24bf56e7590",
+ "https://www.coingecko.com/en/coins/stargate-finance"
+ ],
+ "symbol": "STG"
+ },
+ "VRSW": {
+ "category": "DEFI",
+ "chain": "POLYGON",
+ "contractAddress": "0x57999936fc9a9ec0751a8d146cce11901be8bed0",
+ "decimals": 18,
+ "name": "Virtuswap token",
+ "origins": [
+ "https://polygonscan.com/token/0x57999936fc9a9ec0751a8d146cce11901be8bed0"
+ ],
+ "symbol": "VRSW"
+ },
+ "ALPHA": {
+ "category": "GAMING",
+ "chain": "POLYGON",
+ "contractAddress": "0x6a3e7c3c6ef65ee26975b12293ca1aad7e1daed2",
+ "decimals": 18,
+ "name": "Aavegotchi ALPHA game token",
+ "origins": [
+ "https://polygonscan.com/address/0x6a3e7c3c6ef65ee26975b12293ca1aad7e1daed2",
+ "https://www.coingecko.com/en/coins/aavegotchi-alpha"
+ ],
+ "symbol": "ALPHA"
+ },
+ "QUICKSWAP_aWMATIC_GHST_LP": {
+ "category": "LIQUIDITY_PROVIDER",
+ "chain": "POLYGON",
+ "contractAddress": "0x2ef46196d7d25b5111ca1fcba206b248fee32d8d",
+ "decimals": 18,
+ "name": "WMATIC/GHST Quickswap Pool token",
+ "origins": [
+ "https://polygonscan.com/token/0x2ef46196d7d25b5111ca1fcba206b248fee32d8d"
+ ],
+ "symbol": "QUICKSWAP_aWMATIC_GHST_LP"
+ },
+ "USDT": {
+ "category": "STABLECOIN",
+ "chain": "POLYGON",
+ "contractAddress": "0xc2132d05d31c914a87c6611c10748aeb04b58e8f",
+ "decimals": 18,
+ "name": "Tether stablecoin token",
+ "origins": [
+ "https://polygonscan.com/address/0xc2132d05d31c914a87c6611c10748aeb04b58e8f",
+ "https://www.coingecko.com/en/coins/tether"
+ ],
+ "symbol": "USDT"
+ },
+ "FOMO": {
+ "category": "GAMING",
+ "chain": "POLYGON",
+ "contractAddress": "0x44a6e0be76e1d9620a7f76588e4509fe4fa8e8c8",
+ "decimals": 18,
+ "name": "Aavegotchi FOMO game token",
+ "origins": [
+ "https://polygonscan.com/address/0x44a6e0be76e1d9620a7f76588e4509fe4fa8e8c8",
+ "https://www.coingecko.com/en/coins/aavegotchi-fomo"
+ ],
+ "symbol": "FOMO"
+ },
+ "gDAI": {
+ "category": "STABLECOIN",
+ "chain": "POLYGON",
+ "contractAddress": "0x91993f2101cc758d0deb7279d41e880f7defe827",
+ "decimals": 18,
+ "name": "GAINS Network DAI token",
+ "origins": [
+ "https://polygonscan.com/address/0x91993f2101cc758d0deb7279d41e880f7defe827"
+ ],
+ "symbol": "gDAI"
+ },
+ "amLINK": {
+ "category": "DEFI",
+ "chain": "POLYGON",
+ "contractAddress": "0x0ca2e42e8c21954af73bc9af1213e4e81d6a669a",
+ "decimals": 18,
+ "name": "Aave LINK token",
+ "origins": [
+ "https://polygonscan.com/token/0x0ca2e42e8c21954af73bc9af1213e4e81d6a669a",
+ "https://www.coingecko.com/en/coins/chainlink"
+ ],
+ "symbol": "amLINK"
+ },
+ "CXDOGE": {
+ "category": "WRECKED",
+ "chain": "POLYGON",
+ "contractAddress": "0x9bd9ad490dd3a52f096d229af4483b94d63be618",
+ "decimals": 18,
+ "name": "CelsiusX Wrapped DOGE token (wrecked)",
+ "origins": [
+ "https://polygonscan.com/address/0x9bd9ad490dd3a52f096d229af4483b94d63be618",
+ "https://www.coingecko.com/en/coins/celsiusx-wrapped-doge"
+ ],
+ "symbol": "CXDOGE"
+ },
+ "FUD": {
+ "category": "GAMING",
+ "chain": "POLYGON",
+ "contractAddress": "0x403e967b044d4be25170310157cb1a4bf10bdd0f",
+ "decimals": 18,
+ "name": "Aavegotchi FUD game token",
+ "origins": [
+ "https://polygonscan.com/address/0x403e967b044d4be25170310157cb1a4bf10bdd0f",
+ "https://www.coingecko.com/en/coins/aavegotchi-fud"
+ ],
+ "symbol": "FUD"
+ },
+ "LINK": {
+ "category": "DEFI",
+ "chain": "POLYGON",
+ "contractAddress": "0x53e0bca35ec356bd5dddfebbd1fc0fd03fabad39",
+ "decimals": 18,
+ "name": "LINK token",
+ "origins": [
+ "https://polygonscan.com/address/0x53e0bca35ec356bd5dddfebbd1fc0fd03fabad39",
+ "https://www.coingecko.com/en/coins/chainlink"
+ ],
+ "symbol": "LINK"
+ },
+ "ROLL": {
+ "category": "DUST",
+ "chain": "POLYGON",
+ "contractAddress": "0xC68e83a305b0FaD69E264A1769a0A070F190D2d6",
+ "decimals": 18,
+ "name": "ROLL SCAM token",
+ "origins": [
+ "https://polygonscan.com/token/0xc68e83a305b0fad69e264a1769a0a070f190d2d6#comments",
+ "https://polyroll.org/"
+ ],
+ "symbol": "ROLL"
+ },
+ "MATICX": {
+ "category": "DEFI",
+ "chain": "POLYGON",
+ "contractAddress": "0xfa68fb4628dff1028cfec22b4162fccd0d45efb6",
+ "decimals": 18,
+ "name": "Stader Liquid Staking Matic (PoS) token",
+ "origins": [
+ "https://polygonscan.com/token/0xfa68fb4628dff1028cfec22b4162fccd0d45efb6",
+ "https://www.coingecko.com/en/coins/stader-maticx"
+ ],
+ "symbol": "MATICX"
+ },
+ "SAND": {
+ "category": "GAMING",
+ "chain": "POLYGON",
+ "contractAddress": "0xbbba073c31bf03b8acf7c28ef0738decf3695683",
+ "decimals": 18,
+ "name": "The Sandbox SAND game token",
+ "origins": [
+ "https://polygonscan.com/address/0xbbba073c31bf03b8acf7c28ef0738decf3695683",
+ "https://www.coingecko.com/en/coins/the-sandbox"
+ ],
+ "symbol": "SAND"
+ },
+ "RICOCHET": {
+ "category": "DEFI",
+ "chain": "POLYGON",
+ "contractAddress": "0x263026e7e53dbfdce5ae55ade22493f828922965",
+ "decimals": 18,
+ "name": "Ricochet reward token",
+ "origins": [
+ "https://polygonscan.com/address/0x263026e7e53dbfdce5ae55ade22493f828922965",
+ "https://www.coingecko.com/en/coins/ricochet"
+ ],
+ "symbol": "RICOCHET"
+ },
+ "GHST": {
+ "category": "GAMING",
+ "chain": "POLYGON",
+ "contractAddress": "0x385eeac5cb85a38a9a07a70c73e0a3271cfb54a7",
+ "decimals": 18,
+ "name": "Aavegotchi GHST game token",
+ "origins": [
+ "https://polygonscan.com/address/0x385eeac5cb85a38a9a07a70c73e0a3271cfb54a7",
+ "https://www.coingecko.com/en/coins/aavegotchi"
+ ],
+ "symbol": "GHST"
+ },
+ "MOD": {
+ "category": "DEFI",
+ "chain": "POLYGON",
+ "contractAddress": "0x8346ab8d5ea7a9db0209aed2d1806afa0e2c4c21",
+ "decimals": 18,
+ "name": "MOD token",
+ "origins": [
+ "https://www.coingecko.com/en/coins/modefi",
+ "https://polygonscan.com/token/0x8346ab8d5ea7a9db0209aed2d1806afa0e2c4c21",
+ "https://modefi.io/"
+ ],
+ "symbol": "MOD"
+ },
+ "amWMATIC": {
+ "category": "DEFI",
+ "chain": "POLYGON",
+ "contractAddress": "0x8df3aad3a84da6b69a4da8aec3ea40d9091b2ac4",
+ "decimals": 18,
+ "name": "Aave WMATIC token",
+ "origins": [
+ "https://polygonscan.com/token/0x8df3aad3a84da6b69a4da8aec3ea40d9091b2ac4",
+ "https://www.coingecko.com/en/coins/aave-polygon-wmatic"
+ ],
+ "symbol": "amWMATIC"
+ },
+ "dQUICK": {
+ "category": "DEFI",
+ "chain": "POLYGON",
+ "contractAddress": "0x958d208cdf087843e9ad98d23823d32e17d723a1",
+ "decimals": 18,
+ "name": "Dragon QUICK token",
+ "origins": [
+ "https://polygonscan.com/token/0x958d208cdf087843e9ad98d23823d32e17d723a1",
+ "https://www.coingecko.com/en/exchanges/quickswap"
+ ],
+ "symbol": "dQUICK"
+ },
+ "WETH": {
+ "category": "DEFI",
+ "chain": "POLYGON",
+ "contractAddress": "0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",
+ "decimals": 18,
+ "name": "Wrapped ETH token",
+ "origins": [
+ "https://polygonscan.com/token/0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",
+ "https://www.coingecko.com/en/coins/weth"
+ ],
+ "symbol": "WETH"
+ },
+ "RICOCHET_MATICx": {
+ "category": "DEFI",
+ "chain": "POLYGON",
+ "contractAddress": "0x3aD736904E9e65189c3000c7DD2c8AC8bB7cD4e3",
+ "decimals": 18,
+ "name": "Ricochet MATIC token, MATICx",
+ "origins": [
+ "https://polygonscan.com/token/0x3aD736904E9e65189c3000c7DD2c8AC8bB7cD4e3",
+ "https://docs.superfluid.finance/superfluid/developers/networks"
+ ],
+ "symbol": "RICOCHET_MATICx"
+ },
+ "IDEX": {
+ "category": "DEFI",
+ "chain": "POLYGON",
+ "contractAddress": "0x9cb74c8032b007466865f060ad2c46145d45553d",
+ "decimals": 18,
+ "name": "IDEX token",
+ "origins": [
+ "https://polygonscan.com/token/0x9cb74c8032b007466865f060ad2c46145d45553d"
+ ],
+ "symbol": "IDEX"
+ },
+ "RICOCHET_USDCx": {
+ "category": "DEFI",
+ "chain": "POLYGON",
+ "contractAddress": "0xcaa7349cea390f89641fe306d93591f87595dc1f",
+ "decimals": 18,
+ "name": "Ricochet USDC token, USDCx",
+ "origins": [
+ "https://polygonscan.com/token/0xcaa7349cea390f89641fe306d93591f87595dc1f",
+ "https://docs.superfluid.finance/superfluid/developers/networks"
+ ],
+ "symbol": "RICOCHET_USDCx"
+ },
+ "TOWER": {
+ "category": "GAMING",
+ "chain": "POLYGON",
+ "contractAddress": "0x2bc07124d8dac638e290f401046ad584546bc47b",
+ "decimals": 18,
+ "name": "Crazy Defense Heroes game token",
+ "origins": [
+ "https://polygonscan.com/address/0x2bc07124d8dac638e290f401046ad584546bc47b",
+ "https://www.coingecko.com/en/coins/tower"
+ ],
+ "symbol": "TOWER"
+ },
+ "DAI": {
+ "category": "STABLECOIN",
+ "chain": "POLYGON",
+ "contractAddress": "0x8f3cf7ad23cd3cadbd9735aff958023239c6a063",
+ "decimals": 18,
+ "name": "DAI stablecoin token",
+ "origins": [
+ "https://polygonscan.com/address/0x8f3cf7ad23cd3cadbd9735aff958023239c6a063",
+ "https://www.coingecko.com/en/coins/dai"
+ ],
+ "symbol": "DAI"
+ },
+ "TITAN": {
+ "category": "SCAM",
+ "chain": "POLYGON",
+ "contractAddress": "0xaaa5b9e6c589642f98a1cda99b9d024b8407285a",
+ "decimals": 18,
+ "name": "IRON TITAN scam token",
+ "origins": [
+ "https://polygonscan.com/token/0xaaa5b9e6c589642f98a1cda99b9d024b8407285a"
+ ],
+ "symbol": "TITAN"
+ },
+ "KEK": {
+ "category": "GAMING",
+ "chain": "POLYGON",
+ "contractAddress": "0x42e5e06ef5b90fe15f853f59299fc96259209c5c",
+ "decimals": 18,
+ "name": "Aavegotchi KEK game token",
+ "origins": [
+ "https://polygonscan.com/address/0x42e5e06ef5b90fe15f853f59299fc96259209c5c",
+ "https://www.coingecko.com/en/coins/aavegotchi-kek"
+ ],
+ "symbol": "KEK"
+ },
+ "STARGATE_USDC_LP": {
+ "category": "DEFI",
+ "chain": "POLYGON",
+ "contractAddress": "0x1205f31718499dbf1fca446663b532ef87481fe1",
+ "decimals": 6,
+ "name": "StarGate USDC Pool token",
+ "origins": [
+ "https://polygonscan.com/token/0x1205f31718499dbf1fca446663b532ef87481fe1"
+ ],
+ "symbol": "STARGATE_USDC_LP"
+ },
+ "BGEM": {
+ "category": "GAMING",
+ "chain": "POLYGON",
+ "contractAddress": "0x1386617A1Bb2A6AA712AB3616bCAF1211152D1e8",
+ "decimals": 18,
+ "name": "BitGem gaming token",
+ "origins": [
+ "https://polygonscan.com/token/0x1386617A1Bb2A6AA712AB3616bCAF1211152D1e8",
+ "https://boomland.io/daily"
+ ],
+ "symbol": "BGEM"
+ },
+ "WMATIC": {
+ "category": "DEFI",
+ "chain": "POLYGON",
+ "contractAddress": "0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270",
+ "decimals": 18,
+ "name": "WMATIC token",
+ "origins": [
+ "https://polygonscan.com/address/0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270",
+ "https://www.coingecko.com/en/coins/wmatic"
+ ],
+ "symbol": "WMATIC"
+ },
+ "rETH": {
+ "category": "DEFI",
+ "chain": "POLYGON",
+ "contractAddress": "0x0266f4f08d82372cf0fcbccc0ff74309089c74d1",
+ "decimals": 18,
+ "name": "Rocketpool ETH token",
+ "origins": [
+ "https://polygonscan.com/token/0x0266f4f08d82372cf0fcbccc0ff74309089c74d1",
+ "https://rocketpool.net/"
+ ],
+ "symbol": "rETH"
+ },
+ "SANDBOX_WMATIC_SAND_LP": {
+ "category": "LIQUIDITY_PROVIDER",
+ "chain": "POLYGON",
+ "contractAddress": "0x4ab071c42c28c4858c4bac171f06b13586b20f30",
+ "decimals": 18,
+ "name": "Sandbox WMATIC+SAND LP Token",
+ "origins": [
+ "https://polygonscan.com/token/0x4ab071c42c28c4858c4bac171f06b13586b20f30",
+ "https://medium.com/sandbox-game/introducing-msand-matic-staking-at-the-sandbox-319f983d20a4"
+ ],
+ "symbol": "SANDBOX_WMATIC_SAND_LP"
+ },
+ "TEST": {
+ "category": "TEST",
+ "chain": "POLYGON",
+ "contractAddress": "0x23D29D30e35C5e8D321e1dc9A8a61BFD846D4C5C",
+ "decimals": 18,
+ "name": "TEST token",
+ "origins": [
+ "https://polygonscan.com/token/0xMOJO"
+ ],
+ "symbol": "TEST"
+ },
+ "RICOCHET_DAIx": {
+ "category": "DEFI",
+ "chain": "POLYGON",
+ "contractAddress": "0x8f3cf7ad23cd3cadbd9735aff958023239c6a063",
+ "decimals": 18,
+ "name": "Ricochet DAI token, DAIx",
+ "origins": [
+ "https://polygonscan.com/token/0x8f3cf7ad23cd3cadbd9735aff958023239c6a063",
+ "https://docs.superfluid.finance/superfluid/developers/networks"
+ ],
+ "symbol": "RICOCHET_DAIx"
+ },
+ "AGHST": {
+ "category": "GAMING",
+ "chain": "POLYGON",
+ "contractAddress": "0x8eb270e296023e9d92081fdf967ddd7878724424",
+ "decimals": 18,
+ "name": "AAve Aavegotchi GHST game token",
+ "origins": [
+ "https://polygonscan.com/address/0x8eb270e296023e9d92081fdf967ddd7878724424",
+ "https://www.coingecko.com/en/coins/aavegotchi"
+ ],
+ "symbol": "AGHST"
+ },
+ "USDC": {
+ "category": "STABLECOIN",
+ "chain": "POLYGON",
+ "contractAddress": "0x2791bca1f2de4661ed88a30c99a7a9449aa84174",
+ "decimals": 6,
+ "name": "USDC stablecoin token",
+ "origins": [
+ "https://polygonscan.com/address/0x2791bca1f2de4661ed88a30c99a7a9449aa84174",
+ "https://www.coingecko.com/en/coins/usd-coin"
+ ],
+ "symbol": "USDC"
+ }
+ }
+}
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..c07b2f3
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,236 @@
+
+ 4.0.0
+ crypto.forestfish
+ forestfish
+ 0.0.1-SNAPSHOT
+
+
+ UTF-8
+ UTF-8
+ 17
+ 17
+ none
+
+
+
+
+
+ maven-compiler-plugin
+ 3.8.1
+
+
+ 17
+
+
+
+
+
+
+
+ jitpack.io
+ https://jitpack.io
+
+
+
+
+
+ github
+ GitHub Packages
+ https://maven.pkg.github.com/p00temkin/forestfish
+
+
+
+
+
+
+
+ commons-codec
+ commons-codec
+ 1.16.0
+
+
+ org.apache.commons
+ commons-text
+ 1.11.0
+
+
+ com.google.guava
+ guava
+ 32.1.3-jre
+
+
+ org.json
+ json
+ 20231013
+
+
+ commons-io
+ commons-io
+ 2.15.0
+
+
+ org.apache.commons
+ commons-compress
+ 1.24.0
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ 2.15.3
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+ 2.15.3
+
+
+ com.alibaba
+ fastjson
+ 2.0.42
+
+
+ org.jsoup
+ jsoup
+ 1.16.2
+
+
+ org.apache.commons
+ commons-collections4
+ 4.4
+
+
+
+
+ com.github.sps.pushover.net
+ pushover-client
+ 1.0.0
+
+
+
+
+ org.slf4j
+ slf4j-api
+ 1.7.32
+
+
+ ch.qos.logback
+ logback-classic
+ 1.2.11
+
+
+
+
+ com.netflix.graphql.dgs
+ graphql-dgs-client
+ 7.6.0
+
+
+ org.springframework
+ spring-web
+ 6.0.13
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ 3.1.5
+
+
+ org.springframework
+ spring-core
+ 6.0.13
+
+
+ com.squareup.okio
+ okio
+ 3.6.0
+
+
+
+
+ org.web3j
+ core
+ 4.10.3
+
+
+ org.web3j
+ contracts
+ 4.10.3
+
+
+ com.esaulpaugh
+ headlong
+ 10.0.1
+
+
+ com.klaytn.caver
+ core
+ 1.11.1-android
+
+
+
+
+ org.bitcoinj
+ bitcoinj-core
+ 0.16.2
+
+
+
+
+ com.github.signum-network
+ signumj
+ 1.3.0
+
+
+
+
+ com.github.ipfs
+ java-ipfs-http-client
+ 1.4.4
+
+
+
+
+ com.algorand
+ algosdk
+ 2.4.0
+
+
+ com.github.ipld
+ java-cid
+ 1.3.8
+
+
+
+
+ io.jsonwebtoken
+ jjwt-api
+ 0.11.5
+
+
+ io.jsonwebtoken
+ jjwt-impl
+ 0.11.5
+ runtime
+
+
+ io.jsonwebtoken
+ jjwt-jackson
+ 0.11.5
+ runtime
+
+
+ com.google.code.gson
+ gson
+ 2.10.1
+
+
+
+
+ junit
+ junit
+ 4.13.2
+
+
+
+
+
diff --git a/src/main/java/crypto/forestfish/enums/AccountOrigin.java b/src/main/java/crypto/forestfish/enums/AccountOrigin.java
new file mode 100644
index 0000000..47e3b70
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/AccountOrigin.java
@@ -0,0 +1,8 @@
+package crypto.forestfish.enums;
+
+public enum AccountOrigin {
+ RECOVERY_MNEMONIC,
+ PRIVATEKEY,
+ EXISTING_LOCALWALLETFILE,
+ NEW_LOCALWALLETFILE
+}
diff --git a/src/main/java/crypto/forestfish/enums/AddressCategory.java b/src/main/java/crypto/forestfish/enums/AddressCategory.java
new file mode 100644
index 0000000..24e281b
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/AddressCategory.java
@@ -0,0 +1,12 @@
+package crypto.forestfish.enums;
+
+public enum AddressCategory {
+ CORE,
+
+ EXCHANGE,
+ PERSONAL,
+ TUMBLER,
+ EXPOSED,
+ SCAM,
+
+}
diff --git a/src/main/java/crypto/forestfish/enums/BlockchainType.java b/src/main/java/crypto/forestfish/enums/BlockchainType.java
new file mode 100644
index 0000000..998aea4
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/BlockchainType.java
@@ -0,0 +1,8 @@
+package crypto.forestfish.enums;
+
+public enum BlockchainType {
+ PUBLIC,
+ LOCAL,
+ ENTERPRISE,
+ BORKED
+}
diff --git a/src/main/java/crypto/forestfish/enums/CustomContractCategory.java b/src/main/java/crypto/forestfish/enums/CustomContractCategory.java
new file mode 100644
index 0000000..d8fa419
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/CustomContractCategory.java
@@ -0,0 +1,7 @@
+package crypto.forestfish.enums;
+
+public enum CustomContractCategory {
+ PRIVACY,
+ STAKING,
+ SCAM,
+}
diff --git a/src/main/java/crypto/forestfish/enums/ExceptionType.java b/src/main/java/crypto/forestfish/enums/ExceptionType.java
new file mode 100644
index 0000000..e909ad7
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/ExceptionType.java
@@ -0,0 +1,9 @@
+package crypto.forestfish.enums;
+
+public enum ExceptionType {
+ RECOVERABLE,
+ FATAL,
+ IGNORE,
+ MOVEON,
+ UNKNOWN
+}
diff --git a/src/main/java/crypto/forestfish/enums/TokenCategory.java b/src/main/java/crypto/forestfish/enums/TokenCategory.java
new file mode 100644
index 0000000..2a483c9
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/TokenCategory.java
@@ -0,0 +1,36 @@
+package crypto.forestfish.enums;
+
+public enum TokenCategory {
+
+ // Chain
+ CHAINMASCOT,
+
+ // Defi
+ DEFI,
+ GAMING,
+ STABLECOIN,
+ NFT,
+ GASCURRENCY,
+ LIQUIDITY_PROVIDER,
+
+ // Utility
+ NAMESERVICE,
+ SUPPLYCHAIN,
+ MFT,
+ GOVERNANCE,
+
+ // Social
+ SOCIAL,
+ GREEN,
+
+ // Security
+ SCAM,
+ DUST,
+ WRECKED,
+
+ // Misc
+ MISC,
+ MEME,
+ TEST,
+ UNKNOWN
+}
diff --git a/src/main/java/crypto/forestfish/enums/avm/AVMChain.java b/src/main/java/crypto/forestfish/enums/avm/AVMChain.java
new file mode 100644
index 0000000..55c3bb5
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/avm/AVMChain.java
@@ -0,0 +1,9 @@
+package crypto.forestfish.enums.avm;
+
+public enum AVMChain {
+ MAINNET,
+ TESTNET,
+ TESTNET_SANDBOX4001,
+ BETANET,
+ VOI_TESTNET
+}
diff --git a/src/main/java/crypto/forestfish/enums/avm/AVMNFTStandard.java b/src/main/java/crypto/forestfish/enums/avm/AVMNFTStandard.java
new file mode 100644
index 0000000..8fa081e
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/avm/AVMNFTStandard.java
@@ -0,0 +1,8 @@
+package crypto.forestfish.enums.avm;
+
+public enum AVMNFTStandard {
+ ARC3,
+ ARC19,
+ ARC69,
+ UNKNOWN
+}
diff --git a/src/main/java/crypto/forestfish/enums/avm/AVMNFTState.java b/src/main/java/crypto/forestfish/enums/avm/AVMNFTState.java
new file mode 100644
index 0000000..72469fe
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/avm/AVMNFTState.java
@@ -0,0 +1,6 @@
+package crypto.forestfish.enums.avm;
+
+public enum AVMNFTState {
+ MUTABLE,
+ IMMUTABLE,
+}
diff --git a/src/main/java/crypto/forestfish/enums/avm/AVMNFTType.java b/src/main/java/crypto/forestfish/enums/avm/AVMNFTType.java
new file mode 100644
index 0000000..5b1c752
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/avm/AVMNFTType.java
@@ -0,0 +1,6 @@
+package crypto.forestfish.enums.avm;
+
+public enum AVMNFTType {
+ PURE,
+ FRACTIONAL,
+}
diff --git a/src/main/java/crypto/forestfish/enums/avm/MainnetARC69.java b/src/main/java/crypto/forestfish/enums/avm/MainnetARC69.java
new file mode 100644
index 0000000..90a9db2
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/avm/MainnetARC69.java
@@ -0,0 +1,12 @@
+package crypto.forestfish.enums.avm;
+
+public enum MainnetARC69 {
+
+ // Gaming
+ ALCH0046, // Alchemon ZIP
+
+ // Utility
+ //ALGO_DOMAIN,
+ //UNSTOPPABLE_DOMAIN,
+
+}
diff --git a/src/main/java/crypto/forestfish/enums/avm/MainnetASA.java b/src/main/java/crypto/forestfish/enums/avm/MainnetASA.java
new file mode 100644
index 0000000..e2aa732
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/avm/MainnetASA.java
@@ -0,0 +1,25 @@
+package crypto.forestfish.enums.avm;
+
+public enum MainnetASA {
+
+ // Meme
+ COOP,
+
+ // Green
+ PLANET,
+
+ // Defi
+
+ // LP
+
+ // Stables
+ USDC,
+
+ // MFT
+ OPUL,
+
+ // Scam, dust tokens
+
+ // Testing purposes
+ //TEST
+}
diff --git a/src/main/java/crypto/forestfish/enums/avm/TestnetASA.java b/src/main/java/crypto/forestfish/enums/avm/TestnetASA.java
new file mode 100644
index 0000000..363d53b
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/avm/TestnetASA.java
@@ -0,0 +1,16 @@
+package crypto.forestfish.enums.avm;
+
+public enum TestnetASA {
+
+ // Defi
+
+ // LP
+
+ // Stables
+ USDC,
+
+ // Scam, dust tokens
+
+ // Testing purposes
+ //TEST
+}
diff --git a/src/main/java/crypto/forestfish/enums/avm/Unit.java b/src/main/java/crypto/forestfish/enums/avm/Unit.java
new file mode 100644
index 0000000..e78e80a
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/avm/Unit.java
@@ -0,0 +1,6 @@
+package crypto.forestfish.enums.avm;
+
+public enum Unit {
+ ALGO,
+ microAlgo
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/ArbitrumONEERC20Token.java b/src/main/java/crypto/forestfish/enums/evm/ArbitrumONEERC20Token.java
new file mode 100644
index 0000000..24cb650
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/ArbitrumONEERC20Token.java
@@ -0,0 +1,34 @@
+package crypto.forestfish.enums.evm;
+
+public enum ArbitrumONEERC20Token {
+
+ // Defi
+ GMX,
+ GNS,
+ rETH,
+ BAL,
+ AURA,
+
+ // Governance
+ ARBITRUM,
+
+ // LP
+ BAL_MAGICUSDC_LP,
+
+ // Game
+ MAGIC,
+ DMT,
+
+ // Stables
+ USDC,
+ USDCe,
+ USDT,
+ DAI,
+ gDAI,
+
+ // Meme
+
+ // Scam, dust tokens
+
+ // Testing purposes
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/ArbitrumONEERC721Token.java b/src/main/java/crypto/forestfish/enums/evm/ArbitrumONEERC721Token.java
new file mode 100644
index 0000000..879c341
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/ArbitrumONEERC721Token.java
@@ -0,0 +1,7 @@
+package crypto.forestfish.enums.evm;
+
+public enum ArbitrumONEERC721Token {
+
+ // Gaming
+ TREASURETAG,
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/AvaxERC20Token.java b/src/main/java/crypto/forestfish/enums/evm/AvaxERC20Token.java
new file mode 100644
index 0000000..eb11154
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/AvaxERC20Token.java
@@ -0,0 +1,20 @@
+package crypto.forestfish.enums.evm;
+
+public enum AvaxERC20Token {
+
+ // Defi
+ STG,
+ PNG,
+
+ // LP
+
+ // Stables
+ USDT,
+ USDC,
+ DAI,
+
+ // Scam, dust tokens
+
+ // Testing purposes
+ TEST
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/BSCBEP20Token.java b/src/main/java/crypto/forestfish/enums/evm/BSCBEP20Token.java
new file mode 100644
index 0000000..346c782
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/BSCBEP20Token.java
@@ -0,0 +1,51 @@
+package crypto.forestfish.enums.evm;
+
+public enum BSCBEP20Token {
+
+ // Currency/gas
+ METIS,
+
+ // Defi
+ STG,
+ CAKE,
+ BABYCAKE,
+ XVS,
+ VIKINGSWAP,
+
+ // Game
+ SUPS,
+ MOBOX,
+ GQ,
+ PLU,
+ VAN,
+ CAR,
+ NIC,
+ MET,
+ ACE,
+ ARG,
+ COP,
+ IRON,
+ SCK,
+ CHMB,
+ XWG,
+ SFTY,
+
+ // NFT
+ CATGIRL,
+ NFTART,
+
+ // Liquidity,
+ STARGATE_BUSD_LP,
+
+ // Stables
+ USDT,
+ USDC,
+ DAI,
+ BUSD,
+
+ // Scam, dust tokens
+ TRON,
+
+ // Testing purposes
+ TEST
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/BSCERC721Token.java b/src/main/java/crypto/forestfish/enums/evm/BSCERC721Token.java
new file mode 100644
index 0000000..1af1210
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/BSCERC721Token.java
@@ -0,0 +1,13 @@
+package crypto.forestfish.enums.evm;
+
+public enum BSCERC721Token {
+
+ // Gaming
+ OUTERRINGMMO_WEAPON,
+ OUTERRINGMMO_ARMOR,
+ OUTERRINGMMO_LANDVEH,
+ OUTERRINGMMO_SPACEVEH,
+ OUTERRINGMMO_EXOCRED,
+ DREAMCARD,
+ STELLAFANTASY_ASSET
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/BaseERC20Token.java b/src/main/java/crypto/forestfish/enums/evm/BaseERC20Token.java
new file mode 100644
index 0000000..3d65bba
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/BaseERC20Token.java
@@ -0,0 +1,24 @@
+package crypto.forestfish.enums.evm;
+
+public enum BaseERC20Token {
+
+ // Defi
+ WETH,
+ AERO,
+
+ // LP
+ AERODOME_DAI_WETH_LP,
+ AERODOME_AERO_WETH_LP,
+
+ // Stables
+ DAI,
+ USDC,
+ USDbC
+
+ // Gaming
+
+ // Scam, dust tokens
+
+ // Testing purposes
+ //TEST
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/BitkubERC721Token.java b/src/main/java/crypto/forestfish/enums/evm/BitkubERC721Token.java
new file mode 100644
index 0000000..da5e0b2
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/BitkubERC721Token.java
@@ -0,0 +1,10 @@
+package crypto.forestfish.enums.evm;
+
+public enum BitkubERC721Token {
+
+ // Gaming
+ MMV_ITEM,
+
+ // NFT,
+ SANDX,
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/BitkubKAP20Token.java b/src/main/java/crypto/forestfish/enums/evm/BitkubKAP20Token.java
new file mode 100644
index 0000000..7c0304b
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/BitkubKAP20Token.java
@@ -0,0 +1,43 @@
+package crypto.forestfish.enums.evm;
+
+public enum BitkubKAP20Token {
+
+ // Defi
+ KKUB,
+
+ // LP
+ MMV_DIAMON_LP,
+
+ // Stables
+ USDT,
+
+ // Gaming
+ MMV_WBUTTON_MUSHROOM,
+ MMV_SHITAKE_MUSHROOM,
+ MMV_KTRUMPET_MUSHROOM,
+ MMV_TOMATOSOUP,
+ MMV_TOMATOSEED,
+ MMV_SF_CABBAGE,
+ MMV_SILVERKEY,
+ MMV_SALAD,
+ MMV_HONEY,
+ MMV_GREENAPPLE,
+ MMV_DRIEDAPPLE,
+ MMV_LUMI,
+ MMV_CORNSOUP,
+ MMV_CORNSEED,
+ MMV_CARROTSEED,
+ MMV_CABBAGESEED,
+ MMV_BANANA,
+ MMV_GREENHERB,
+ MMV_REDHERB,
+ MMV_LHEALTHPOTION,
+ MMV_HEALTHPOTION,
+ MMV_LEATHER_PIECE,
+ MMV_RAG,
+
+ // Scam, dust tokens
+
+ // Testing purposes
+ TEST
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/BoraChainKIP7Token.java b/src/main/java/crypto/forestfish/enums/evm/BoraChainKIP7Token.java
new file mode 100644
index 0000000..1bfa7a9
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/BoraChainKIP7Token.java
@@ -0,0 +1,20 @@
+package crypto.forestfish.enums.evm;
+
+public enum BoraChainKIP7Token {
+
+ // https://kips.klaytn.foundation/KIPs/kip-7
+
+ tBORA,
+
+ // Game
+ BSLT,
+
+ // NFT
+
+ // Stables
+
+ // Scam, dust tokens
+
+ // Testing purposes
+ TEST
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/CeloERC20Token.java b/src/main/java/crypto/forestfish/enums/evm/CeloERC20Token.java
new file mode 100644
index 0000000..51e16f9
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/CeloERC20Token.java
@@ -0,0 +1,19 @@
+package crypto.forestfish.enums.evm;
+
+public enum CeloERC20Token {
+
+ // Defi
+
+ // Game
+
+ // NFT
+
+ // Stables
+ cUSD,
+
+ // Scam, dust tokens
+ ZEROCASINO,
+
+ // Testing purposes
+ TEST
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/ConfluxERC20Token.java b/src/main/java/crypto/forestfish/enums/evm/ConfluxERC20Token.java
new file mode 100644
index 0000000..7e11f83
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/ConfluxERC20Token.java
@@ -0,0 +1,20 @@
+package crypto.forestfish.enums.evm;
+
+public enum ConfluxERC20Token {
+
+ // Defi
+ WCFX,
+ PPI,
+ vePPI,
+
+ // LP
+ SWAPPI_CFX_PPI_LP,
+
+ // Stables
+ USDT,
+
+ // Scam, dust tokens
+
+ // Testing purposes
+ //TEST
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/ConfluxTestnetERC20Token.java b/src/main/java/crypto/forestfish/enums/evm/ConfluxTestnetERC20Token.java
new file mode 100644
index 0000000..af5d4ee
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/ConfluxTestnetERC20Token.java
@@ -0,0 +1,19 @@
+package crypto.forestfish.enums.evm;
+
+public enum ConfluxTestnetERC20Token {
+
+ // Defi
+ VSWAP,
+ WETH,
+
+ // LP
+
+ // Stables
+ USDT,
+ USDC,
+
+ // Scam, dust tokens
+
+ // Testing purposes
+ //TEST
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/CoreERC20Token.java b/src/main/java/crypto/forestfish/enums/evm/CoreERC20Token.java
new file mode 100644
index 0000000..c4f2c93
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/CoreERC20Token.java
@@ -0,0 +1,16 @@
+package crypto.forestfish.enums.evm;
+
+public enum CoreERC20Token {
+
+ // Defi
+
+ // LP
+
+ // Stables
+ USDT,
+
+ // Scam, dust tokens
+
+ // Testing purposes
+ //TEST
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/EVMChain.java b/src/main/java/crypto/forestfish/enums/evm/EVMChain.java
new file mode 100644
index 0000000..0c77449
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/EVMChain.java
@@ -0,0 +1,120 @@
+package crypto.forestfish.enums.evm;
+
+public enum EVMChain {
+
+ // Main nets
+ ETHEREUM,
+ POLYGON,
+ BSC,
+ METIS,
+ AURORA,
+ BITKUB,
+ FANTOM,
+ CRONOS,
+ BOBA,
+ MOONBEAM,
+ MOONRIVER,
+ KLAYTN,
+ BASE,
+ BORACHAIN,
+ CELO,
+ AVAX,
+ ETHO,
+ EVMOS,
+ ASTAR,
+ HARMONY,
+ ARBITRUMONE,
+ WEMIX,
+ MILKOMEDAA1,
+ MILKOMEDAC1,
+ SYSCOIN,
+ CANTO,
+ OASISCHAIN,
+ OASISEMERALD,
+ OASISSAPPHIRE,
+ ZKSYNCERA,
+ ZKEVM,
+ PULSECHAIN,
+ KAVA,
+ CONFLUX,
+ CORE,
+ FUSE,
+ LUKSO,
+ KARURA,
+ KARDIACHAIN,
+ ETHW,
+ LINEA,
+ OPTIMISM,
+ TARAXA,
+ TENET,
+ TOMOCHAIN,
+ SATOSHICHAIN,
+ ZORA,
+ SCROLL,
+ OPBNB,
+ MANTLE,
+
+ // Test nets
+ SHARDEUMLIBERTY1xTEST,
+ SHARDEUMLIBERTY2xTEST,
+ SHARDEUMSPHINX1xTEST,
+ CRONOSTEST,
+ SHIBUYATEST,
+ EVMOSTEST,
+ ROPSTENTEST,
+ SEPOLIATEST,
+ MUMBAITEST,
+ RINKEBYTEST,
+ GOERLITEST,
+ ARBITRUMGOERLITEST,
+ TAIKOALPHATEST,
+ TAIKOALPHA2TEST,
+ TAIKOALPHA3TEST,
+ FUJITEST,
+ KOVANTEST,
+ BOBARINKEBYTEST,
+ BOBABNBTEST,
+ ZKSYNCERATEST,
+ BSCTEST,
+ METISSTARDUSTTEST,
+ FANTOMTEST,
+ MILKOMEDAA1TEST,
+ CANTOTEST,
+ OASISEMERALDTEST,
+ OASISSAPPHIRETEST,
+ BASETEST,
+ ETHOTEST,
+ ZKEVMTEST,
+ SATOSHICHAINTEST,
+ LINEATEST,
+ SCROLLALPHATEST,
+ SCROLLSEPOLIATEST,
+ KAVATEST,
+ ZETAATHENSTEST,
+ CONFLUXTEST,
+ MODETEST,
+ OPTIMISMGOERLITEST,
+ CORETEST,
+ FUSESPARKTEST,
+ LUKSOTEST,
+ KARURATEST,
+ TARAXATEST,
+ TENETTEST,
+ BITKUBTEST,
+ TOMOCHAINTEST,
+ AURORATEST,
+ ZORATEST,
+ OPBNBTEST,
+ MANTLETEST,
+
+ // Beta nets
+ LAMINA1BETATEST,
+
+ // Local dev envs
+ GANACHE8545_5777,
+ GANACHE7545_5777,
+ GANACHE8545_1337,
+ GANACHE7545_1337,
+ HARDHAT8545_31337,
+ HARDHAT443_31337
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/EVMPriceMechanism.java b/src/main/java/crypto/forestfish/enums/evm/EVMPriceMechanism.java
new file mode 100644
index 0000000..bb6362f
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/EVMPriceMechanism.java
@@ -0,0 +1,6 @@
+package crypto.forestfish.enums.evm;
+
+public enum EVMPriceMechanism {
+ LEGACY,
+ EIP1559
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/EthereumERC20Token.java b/src/main/java/crypto/forestfish/enums/evm/EthereumERC20Token.java
new file mode 100644
index 0000000..2c3e6e4
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/EthereumERC20Token.java
@@ -0,0 +1,39 @@
+package crypto.forestfish.enums.evm;
+
+public enum EthereumERC20Token {
+
+ // Misc
+ SOS,
+ XOR,
+
+ // Defi,
+ UNIDX,
+ SERUM,
+
+ // Meme
+ DINU,
+ JINDOGE,
+ NB,
+ DOJO,
+ SHUSHKY,
+ JSHIBA,
+ DOBE,
+ CULT,
+
+ // Social
+ FWB,
+
+ // Stables
+ USDT,
+ USDC,
+ DAI,
+
+ // Utility
+ TRAC,
+
+ // Gaming
+ APECOIN,
+ VIDYA,
+
+ TEST,
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/EthereumERC721Token.java b/src/main/java/crypto/forestfish/enums/evm/EthereumERC721Token.java
new file mode 100644
index 0000000..9767a32
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/EthereumERC721Token.java
@@ -0,0 +1,14 @@
+package crypto.forestfish.enums.evm;
+
+public enum EthereumERC721Token {
+
+ // Gaming
+ LUCHADORES,
+ WWW_LAND,
+ BORED_APE,
+
+ // Utility
+ ENS_DOMAIN,
+ UNSTOPPABLE_DOMAIN,
+
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/FantomERC20Token.java b/src/main/java/crypto/forestfish/enums/evm/FantomERC20Token.java
new file mode 100644
index 0000000..d2a1148
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/FantomERC20Token.java
@@ -0,0 +1,21 @@
+package crypto.forestfish.enums.evm;
+
+public enum FantomERC20Token {
+
+ // Defi
+ STG,
+ MULTI,
+
+ // LP
+ SPOOKYSWAP_FTM_MULTI_LP,
+
+ // Stables
+ USDT,
+ USDC,
+ DAI,
+
+ // Scam, dust tokens
+
+ // Testing purposes
+ TEST
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/GoerliERC20Token.java b/src/main/java/crypto/forestfish/enums/evm/GoerliERC20Token.java
new file mode 100644
index 0000000..5e506e5
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/GoerliERC20Token.java
@@ -0,0 +1,21 @@
+package crypto.forestfish.enums.evm;
+
+public enum GoerliERC20Token {
+
+ // Defi
+ WETH,
+ ZETA,
+
+ // Chains
+ MNT,
+
+ // Stablecoins
+ DAI,
+ USDC,
+
+ // Testing purposes
+ TST4, // Goerli official test token (ERC20-Testv4)
+ TSTv4,
+
+ TEST
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/GoerliERC721Token.java b/src/main/java/crypto/forestfish/enums/evm/GoerliERC721Token.java
new file mode 100644
index 0000000..c38a4bb
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/GoerliERC721Token.java
@@ -0,0 +1,7 @@
+package crypto.forestfish.enums.evm;
+
+public enum GoerliERC721Token {
+
+ // NFT,
+ MFNFT,
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/KavaTestERC20Token.java b/src/main/java/crypto/forestfish/enums/evm/KavaTestERC20Token.java
new file mode 100644
index 0000000..0dccd8e
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/KavaTestERC20Token.java
@@ -0,0 +1,19 @@
+package crypto.forestfish.enums.evm;
+
+public enum KavaTestERC20Token {
+
+ // Defi
+
+ // LP
+
+ // Game
+
+ // Stables
+ USDC,
+
+ // Meme
+
+ // Scam, dust tokens
+
+ // Testing purposes
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/KlaytnKIP7Token.java b/src/main/java/crypto/forestfish/enums/evm/KlaytnKIP7Token.java
new file mode 100644
index 0000000..e672c3f
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/KlaytnKIP7Token.java
@@ -0,0 +1,22 @@
+package crypto.forestfish.enums.evm;
+
+public enum KlaytnKIP7Token {
+
+ // https://kips.klaytn.foundation/KIPs/kip-7
+
+ // Defi
+ KSP,
+
+ // Game
+ WEMIX,
+ BORA,
+
+ // NFT
+
+ // Stables
+
+ // Scam, dust tokens
+
+ // Testing purposes
+ TEST
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/LineaERC20Token.java b/src/main/java/crypto/forestfish/enums/evm/LineaERC20Token.java
new file mode 100644
index 0000000..bd96b58
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/LineaERC20Token.java
@@ -0,0 +1,23 @@
+package crypto.forestfish.enums.evm;
+
+public enum LineaERC20Token {
+
+ // Defi
+ WETH,
+ MATIC,
+ LVC,
+ veLVC,
+
+ // LP
+
+ // Game
+
+ // Stables
+ USDC,
+
+ // Meme
+
+ // Scam, dust tokens
+
+ // Testing purposes
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/LineaERC721Token.java b/src/main/java/crypto/forestfish/enums/evm/LineaERC721Token.java
new file mode 100644
index 0000000..d865358
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/LineaERC721Token.java
@@ -0,0 +1,11 @@
+package crypto.forestfish.enums.evm;
+
+public enum LineaERC721Token {
+
+ // Gaming
+ BATTLEMON_PAXE,
+ BATTLEMON_LGEM,
+
+ // LP
+ HRZNLP,
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/MantleERC20Token.java b/src/main/java/crypto/forestfish/enums/evm/MantleERC20Token.java
new file mode 100644
index 0000000..80ecae7
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/MantleERC20Token.java
@@ -0,0 +1,18 @@
+package crypto.forestfish.enums.evm;
+
+public enum MantleERC20Token {
+
+ // Defi
+ WETH,
+
+ // LP
+
+ // Stables
+ USDT,
+ USDC,
+
+ // Scam, dust tokens
+
+ // Testing purposes
+ //TEST
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/MantleERC721Token.java b/src/main/java/crypto/forestfish/enums/evm/MantleERC721Token.java
new file mode 100644
index 0000000..8182c0f
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/MantleERC721Token.java
@@ -0,0 +1,9 @@
+package crypto.forestfish.enums.evm;
+
+public enum MantleERC721Token {
+
+ // Chain mascot
+ CITIZEN,
+
+ // LP
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/MantleTestnetERC20Token.java b/src/main/java/crypto/forestfish/enums/evm/MantleTestnetERC20Token.java
new file mode 100644
index 0000000..e18c651
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/MantleTestnetERC20Token.java
@@ -0,0 +1,18 @@
+package crypto.forestfish.enums.evm;
+
+public enum MantleTestnetERC20Token {
+
+ // Defi
+ WETH,
+
+ // LP
+
+ // Stables
+ USDT,
+ USDC,
+
+ // Scam, dust tokens
+
+ // Testing purposes
+ //TEST
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/MetisERC20Token.java b/src/main/java/crypto/forestfish/enums/evm/MetisERC20Token.java
new file mode 100644
index 0000000..d64bd69
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/MetisERC20Token.java
@@ -0,0 +1,22 @@
+package crypto.forestfish.enums.evm;
+
+public enum MetisERC20Token {
+
+ // Defi
+ WETH,
+
+ // Game
+
+ // NFT
+
+ // Liquidity,
+ HERMES_M_USDC_LP,
+
+ // Stables
+ USDT,
+ USDC,
+
+ // Scam, dust tokens
+
+ // Testing purposes
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/MilkomedaA1ERC20Token.java b/src/main/java/crypto/forestfish/enums/evm/MilkomedaA1ERC20Token.java
new file mode 100644
index 0000000..728844f
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/MilkomedaA1ERC20Token.java
@@ -0,0 +1,20 @@
+package crypto.forestfish.enums.evm;
+
+public enum MilkomedaA1ERC20Token {
+
+ // Defi
+ BLUES,
+
+ // LP
+
+ // Game
+
+ // Stables
+ USDC,
+
+ // Meme
+
+ // Scam, dust tokens
+
+ // Testing purposes
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/MilkomedaC1ERC20Token.java b/src/main/java/crypto/forestfish/enums/evm/MilkomedaC1ERC20Token.java
new file mode 100644
index 0000000..cea6546
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/MilkomedaC1ERC20Token.java
@@ -0,0 +1,21 @@
+package crypto.forestfish.enums.evm;
+
+public enum MilkomedaC1ERC20Token {
+
+ // Defi
+ WADA,
+ BLUES,
+
+ // LP
+ BLUESHIFT_mADA_BLUES_LP,
+
+ // Game
+
+ // Stables
+
+ // Meme
+
+ // Scam, dust tokens
+
+ // Testing purposes
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/MilkomedaC1ERC721Token.java b/src/main/java/crypto/forestfish/enums/evm/MilkomedaC1ERC721Token.java
new file mode 100644
index 0000000..f6c2c42
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/MilkomedaC1ERC721Token.java
@@ -0,0 +1,8 @@
+package crypto.forestfish.enums.evm;
+
+public enum MilkomedaC1ERC721Token {
+
+ // Gaming
+ PAIMA_VOLCANEERS,
+
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/MoonbeamERC20Token.java b/src/main/java/crypto/forestfish/enums/evm/MoonbeamERC20Token.java
new file mode 100644
index 0000000..59a7889
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/MoonbeamERC20Token.java
@@ -0,0 +1,17 @@
+package crypto.forestfish.enums.evm;
+
+public enum MoonbeamERC20Token {
+
+ // Defi
+ mGLMR,
+ WELL,
+
+ // LP
+
+ // Stables
+
+ // Scam, dust tokens
+
+ // Testing purposes
+ //TEST
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/MoonbeamERC721Token.java b/src/main/java/crypto/forestfish/enums/evm/MoonbeamERC721Token.java
new file mode 100644
index 0000000..8f2481f
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/MoonbeamERC721Token.java
@@ -0,0 +1,7 @@
+package crypto.forestfish.enums.evm;
+
+public enum MoonbeamERC721Token {
+
+ // Gaming
+ SNAKESOLDIERS
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/MumbaiERC20Token.java b/src/main/java/crypto/forestfish/enums/evm/MumbaiERC20Token.java
new file mode 100644
index 0000000..8c4688f
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/MumbaiERC20Token.java
@@ -0,0 +1,22 @@
+package crypto.forestfish.enums.evm;
+
+public enum MumbaiERC20Token {
+
+ // Defi
+ LINK,
+ RICOCHET_MATICx,
+ RICOCHET_fUSDCx,
+ RICOCHET_fTUSDx,
+ RICOCHET_fDAIx,
+
+ // Stablecoins
+ fUSDC,
+ fTUSD,
+ fDAI,
+
+ // Testing purposes
+ TST, // Mumbai official test token (PLASMA)
+ DERC20, // Mumbai official test token (PoS)
+
+ TEST
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/OptimismERC20Token.java b/src/main/java/crypto/forestfish/enums/evm/OptimismERC20Token.java
new file mode 100644
index 0000000..86a682e
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/OptimismERC20Token.java
@@ -0,0 +1,19 @@
+package crypto.forestfish.enums.evm;
+
+public enum OptimismERC20Token {
+
+ // Defi
+ SNX,
+ SDS,
+
+ // LP
+
+ // Stables
+ //USDT,
+ SUSD,
+
+ // Scam, dust tokens
+
+ // Testing purposes
+ //TEST
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/PolygonERC1155Token.java b/src/main/java/crypto/forestfish/enums/evm/PolygonERC1155Token.java
new file mode 100644
index 0000000..1859639
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/PolygonERC1155Token.java
@@ -0,0 +1,5 @@
+package crypto.forestfish.enums.evm;
+
+public enum PolygonERC1155Token {
+ AAVEGOTCHI_INSTALLATION,
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/PolygonERC20Token.java b/src/main/java/crypto/forestfish/enums/evm/PolygonERC20Token.java
new file mode 100644
index 0000000..95a8520
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/PolygonERC20Token.java
@@ -0,0 +1,59 @@
+package crypto.forestfish.enums.evm;
+
+public enum PolygonERC20Token {
+
+ // Defi
+ IDEX,
+ TITAN,
+ MOD,
+ STG,
+ WETH,
+ rETH,
+ LINK,
+ amLINK,
+ amWMATIC,
+ WMATIC,
+ SYNAPSE,
+ RICOCHET,
+ RICOCHET_USDCx,
+ RICOCHET_MATICx,
+ RICOCHET_ETHx,
+ RICOCHET_DAIx,
+ RICOCHET_WBTCx,
+ VRSW,
+ dQUICK,
+ MATICX,
+
+ // LP
+ SANDBOX_WMATIC_SAND_LP,
+ STARGATE_USDC_LP,
+ QUICKSWAP_aWMATIC_GHST_LP,
+
+ // Game
+ GHST,
+ AGHST,
+ KEK,
+ GLTR,
+ ALPHA,
+ FOMO,
+ FUD,
+ SAND,
+ LUCHA,
+ TOWER,
+ BGEM,
+
+ // Stables
+ USDT,
+ USDC,
+ DAI,
+ gDAI,
+
+ // Meme
+ CXDOGE,
+
+ // Scam, dust tokens
+ ROLL,
+
+ // Testing purposes
+ TEST
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/PolygonERC721Token.java b/src/main/java/crypto/forestfish/enums/evm/PolygonERC721Token.java
new file mode 100644
index 0000000..f524803
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/PolygonERC721Token.java
@@ -0,0 +1,27 @@
+package crypto.forestfish.enums.evm;
+
+public enum PolygonERC721Token {
+
+ // Gaming
+ AAVEGOTCHI,
+ AAVEGOTCHI_LAND,
+ AAVEGOTCHI_GMI,
+ SANDBOX_LAND,
+ UNIOVERSE,
+ MYCRYPTOHEROES,
+
+ // Defi,
+ UNISWAPV3_POSITION,
+
+ // Social
+ LENSPROTOCOLPROFILE,
+ TRUMP,
+
+ // NFT,
+ UAPX_ALIEN,
+ UAPX_SHIP,
+ UAPX_SONG,
+
+ // Utility
+ UNSTOPPABLE_DOMAIN,
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/PulsechainERC20Token.java b/src/main/java/crypto/forestfish/enums/evm/PulsechainERC20Token.java
new file mode 100644
index 0000000..e38cc3a
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/PulsechainERC20Token.java
@@ -0,0 +1,19 @@
+package crypto.forestfish.enums.evm;
+
+public enum PulsechainERC20Token {
+
+ // Defi
+ PLSX,
+
+ // LP
+
+ // Game
+
+ // Stables
+
+ // Meme
+
+ // Scam, dust tokens
+
+ // Testing purposes
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/ScrollERC20Token.java b/src/main/java/crypto/forestfish/enums/evm/ScrollERC20Token.java
new file mode 100644
index 0000000..58fbf47
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/ScrollERC20Token.java
@@ -0,0 +1,22 @@
+package crypto.forestfish.enums.evm;
+
+public enum ScrollERC20Token {
+
+ // Defi
+ //WETH,
+ PAPYRUS,
+ gPAPYRUS,
+
+ // LP
+
+ // Game
+
+ // Stables
+ USDC,
+
+ // Meme
+
+ // Scam, dust tokens
+
+ // Testing purposes
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/WemixERC20Token.java b/src/main/java/crypto/forestfish/enums/evm/WemixERC20Token.java
new file mode 100644
index 0000000..d54cef5
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/WemixERC20Token.java
@@ -0,0 +1,20 @@
+package crypto.forestfish.enums.evm;
+
+public enum WemixERC20Token {
+
+ // Defi
+ KLAY,
+
+ // LP
+
+ // Game
+
+ // Stables
+ WEMIX$,
+
+ // Meme
+
+ // Scam, dust tokens
+
+ // Testing purposes
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/ZKEVMERC20Token.java b/src/main/java/crypto/forestfish/enums/evm/ZKEVMERC20Token.java
new file mode 100644
index 0000000..c918602
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/ZKEVMERC20Token.java
@@ -0,0 +1,22 @@
+package crypto.forestfish.enums.evm;
+
+public enum ZKEVMERC20Token {
+
+ // Defi
+
+ // LP
+ GAMMA_aUSDC_DAI_LP,
+
+ // Game
+
+ // Stables
+ USDC,
+ USDT,
+ DAI,
+
+ // Meme
+
+ // Scam, dust tokens
+
+ // Testing purposes
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/ZKSyncEraERC721Token.java b/src/main/java/crypto/forestfish/enums/evm/ZKSyncEraERC721Token.java
new file mode 100644
index 0000000..a6a33a8
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/ZKSyncEraERC721Token.java
@@ -0,0 +1,10 @@
+package crypto.forestfish.enums.evm;
+
+public enum ZKSyncEraERC721Token {
+
+ // Social
+ ZKAPE,
+
+ // Utility
+ ERANAMESERVICE
+}
diff --git a/src/main/java/crypto/forestfish/enums/evm/ZkSyncERC20Token.java b/src/main/java/crypto/forestfish/enums/evm/ZkSyncERC20Token.java
new file mode 100644
index 0000000..b120422
--- /dev/null
+++ b/src/main/java/crypto/forestfish/enums/evm/ZkSyncERC20Token.java
@@ -0,0 +1,26 @@
+package crypto.forestfish.enums.evm;
+
+public enum ZkSyncERC20Token {
+
+ // Defi
+ MUTE,
+ COMBO,
+ PERP,
+ YSYNC,
+ VC,
+
+ // LP
+ SYNCSWAP_USDC_WETH_LP,
+
+ // Stables
+ USDC,
+ zkUSD,
+
+ // Gaming
+ ZAT,
+
+ // Scam, dust tokens
+
+ // Testing purposes
+ //TEST
+}
diff --git a/src/main/java/crypto/forestfish/forestfishd/api/v1/ForestFishV1Request_authenticate.java b/src/main/java/crypto/forestfish/forestfishd/api/v1/ForestFishV1Request_authenticate.java
new file mode 100644
index 0000000..1e8150e
--- /dev/null
+++ b/src/main/java/crypto/forestfish/forestfishd/api/v1/ForestFishV1Request_authenticate.java
@@ -0,0 +1,53 @@
+package crypto.forestfish.forestfishd.api.v1;
+
+public class ForestFishV1Request_authenticate {
+
+ private String version = "v1";
+ private String challenge = "";
+ private String signature = "";
+ private String address = "";
+
+ public ForestFishV1Request_authenticate() {
+ super();
+ }
+
+ public ForestFishV1Request_authenticate(String challenge, String signature, String address) {
+ super();
+ this.challenge = challenge;
+ this.signature = signature;
+ this.address = address;
+ }
+
+ public String getVersion() {
+ return version;
+ }
+
+ public void setVersion(String version) {
+ this.version = version;
+ }
+
+ public String getChallenge() {
+ return challenge;
+ }
+
+ public void setChallenge(String challenge) {
+ this.challenge = challenge;
+ }
+
+ public String getSignature() {
+ return signature;
+ }
+
+ public void setSignature(String signature) {
+ this.signature = signature;
+ }
+
+ public String getAddress() {
+ return address;
+ }
+
+ public void setAddress(String address) {
+ this.address = address;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/forestfishd/api/v1/ForestFishV1Request_knockknock.java b/src/main/java/crypto/forestfish/forestfishd/api/v1/ForestFishV1Request_knockknock.java
new file mode 100644
index 0000000..3dd0910
--- /dev/null
+++ b/src/main/java/crypto/forestfish/forestfishd/api/v1/ForestFishV1Request_knockknock.java
@@ -0,0 +1,33 @@
+package crypto.forestfish.forestfishd.api.v1;
+
+public class ForestFishV1Request_knockknock {
+
+ private String version = "v1";
+ private String address = "";
+
+ public ForestFishV1Request_knockknock() {
+ super();
+ }
+
+ public ForestFishV1Request_knockknock(String _address) {
+ super();
+ this.address = _address;
+ }
+
+ public String getVersion() {
+ return version;
+ }
+
+ public void setVersion(String version) {
+ this.version = version;
+ }
+
+ public String getAddress() {
+ return address;
+ }
+
+ public void setAddress(String address) {
+ this.address = address;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/forestfishd/api/v1/ForestFishV1Response_authenticate.java b/src/main/java/crypto/forestfish/forestfishd/api/v1/ForestFishV1Response_authenticate.java
new file mode 100644
index 0000000..4e43da6
--- /dev/null
+++ b/src/main/java/crypto/forestfish/forestfishd/api/v1/ForestFishV1Response_authenticate.java
@@ -0,0 +1,73 @@
+package crypto.forestfish.forestfishd.api.v1;
+
+public class ForestFishV1Response_authenticate {
+
+ private String version = "v1";
+ private String address = "";
+ private boolean success = false;
+ private int authcode = 404;
+ private String authmessage = "";
+ private String jwtToken = "";
+
+ public ForestFishV1Response_authenticate() {
+ super();
+ }
+
+ public ForestFishV1Response_authenticate(String _address, boolean _success, int _authcode, String _authmessage, String _jwtToken) {
+ super();
+ this.address = _address;
+ this.success = _success;
+ this.authcode = _authcode;
+ this.authmessage = _authmessage;
+ this.jwtToken = _jwtToken;
+ }
+
+ public String getVersion() {
+ return version;
+ }
+
+ public void setVersion(String version) {
+ this.version = version;
+ }
+
+ public String getAddress() {
+ return address;
+ }
+
+ public void setAddress(String address) {
+ this.address = address;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public String getJwtToken() {
+ return jwtToken;
+ }
+
+ public void setJwtToken(String jwtToken) {
+ this.jwtToken = jwtToken;
+ }
+
+ public String getAuthmessage() {
+ return authmessage;
+ }
+
+ public void setAuthmessage(String authmessage) {
+ this.authmessage = authmessage;
+ }
+
+ public int getAuthcode() {
+ return authcode;
+ }
+
+ public void setAuthcode(int authcode) {
+ this.authcode = authcode;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/forestfishd/api/v1/ForestFishV1Response_challenge.java b/src/main/java/crypto/forestfish/forestfishd/api/v1/ForestFishV1Response_challenge.java
new file mode 100644
index 0000000..290483b
--- /dev/null
+++ b/src/main/java/crypto/forestfish/forestfishd/api/v1/ForestFishV1Response_challenge.java
@@ -0,0 +1,53 @@
+package crypto.forestfish.forestfishd.api.v1;
+
+public class ForestFishV1Response_challenge {
+
+ private String version = "v1";
+ private String challenge = "";
+ private String address = "";
+ private boolean valid = false;
+
+ public ForestFishV1Response_challenge() {
+ super();
+ }
+
+ public ForestFishV1Response_challenge(String address, String challenge, Boolean valid) {
+ super();
+ this.address = address;
+ this.challenge = challenge;
+ this.valid = valid;
+ }
+
+ public String getVersion() {
+ return version;
+ }
+
+ public void setVersion(String version) {
+ this.version = version;
+ }
+
+ public String getChallenge() {
+ return challenge;
+ }
+
+ public void setChallenge(String challenge) {
+ this.challenge = challenge;
+ }
+
+ public String getAddress() {
+ return address;
+ }
+
+ public void setAddress(String address) {
+ this.address = address;
+ }
+
+ public boolean isValid() {
+ return valid;
+ }
+
+ public void setValid(boolean valid) {
+ this.valid = valid;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/forestfishd/api/v1/ForestFishV1Response_knockknock.java b/src/main/java/crypto/forestfish/forestfishd/api/v1/ForestFishV1Response_knockknock.java
new file mode 100644
index 0000000..394835c
--- /dev/null
+++ b/src/main/java/crypto/forestfish/forestfishd/api/v1/ForestFishV1Response_knockknock.java
@@ -0,0 +1,83 @@
+package crypto.forestfish.forestfishd.api.v1;
+
+public class ForestFishV1Response_knockknock {
+
+ private String version = "v1";
+ private String wallet = "";
+ private String ip = "";
+ private String cc = "";
+ private String msg = "";
+ private Boolean preregistered = false;
+ private String role = "";
+
+ public ForestFishV1Response_knockknock() {
+ super();
+ }
+
+ public ForestFishV1Response_knockknock(String _wallet, String _ip, String _cc, String _msg, Boolean _preregistered, String _role) {
+ super();
+ this.wallet = _wallet;
+ this.ip = _ip;
+ this.cc = _cc;
+ this.msg = _msg;
+ this.preregistered = _preregistered;
+ this.role = _role;
+ }
+
+ public String getVersion() {
+ return version;
+ }
+
+ public void setVersion(String version) {
+ this.version = version;
+ }
+
+ public String getMsg() {
+ return msg;
+ }
+
+ public void setMsg(String msg) {
+ this.msg = msg;
+ }
+
+ public String getWallet() {
+ return wallet;
+ }
+
+ public void setWallet(String wallet) {
+ this.wallet = wallet;
+ }
+
+ public String getIp() {
+ return ip;
+ }
+
+ public void setIp(String ip) {
+ this.ip = ip;
+ }
+
+ public String getCc() {
+ return cc;
+ }
+
+ public void setCc(String cc) {
+ this.cc = cc;
+ }
+
+ public Boolean getPreregistered() {
+ return preregistered;
+ }
+
+ public void setPreregistered(Boolean preregistered) {
+ this.preregistered = preregistered;
+ }
+
+ public String getRole() {
+ return role;
+ }
+
+ public void setRole(String role) {
+ this.role = role;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/forestfishd/api/v1/ForestFishV1Response_protectedcontent.java b/src/main/java/crypto/forestfish/forestfishd/api/v1/ForestFishV1Response_protectedcontent.java
new file mode 100644
index 0000000..7f25a4a
--- /dev/null
+++ b/src/main/java/crypto/forestfish/forestfishd/api/v1/ForestFishV1Response_protectedcontent.java
@@ -0,0 +1,63 @@
+package crypto.forestfish.forestfishd.api.v1;
+
+public class ForestFishV1Response_protectedcontent {
+
+ private String version = "v1";
+ private String contentid = "";
+ private String contenttype = "text/html";
+ private String content = "";
+ private boolean valid = false;
+
+ public ForestFishV1Response_protectedcontent() {
+ super();
+ }
+
+ public ForestFishV1Response_protectedcontent(String contentid, String contenttype, String content, boolean valid) {
+ super();
+ this.contentid = contentid;
+ this.contenttype = contenttype;
+ this.content = content;
+ this.valid = valid;
+ }
+
+ public String getVersion() {
+ return version;
+ }
+
+ public void setVersion(String version) {
+ this.version = version;
+ }
+
+ public String getContentid() {
+ return contentid;
+ }
+
+ public void setContentid(String contentid) {
+ this.contentid = contentid;
+ }
+
+ public String getContenttype() {
+ return contenttype;
+ }
+
+ public void setContenttype(String contenttype) {
+ this.contenttype = contenttype;
+ }
+
+ public String getContent() {
+ return content;
+ }
+
+ public void setContent(String content) {
+ this.content = content;
+ }
+
+ public boolean isValid() {
+ return valid;
+ }
+
+ public void setValid(boolean valid) {
+ this.valid = valid;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/forestfishd/api/v1/ForestFishV1Response_status.java b/src/main/java/crypto/forestfish/forestfishd/api/v1/ForestFishV1Response_status.java
new file mode 100644
index 0000000..8035a5a
--- /dev/null
+++ b/src/main/java/crypto/forestfish/forestfishd/api/v1/ForestFishV1Response_status.java
@@ -0,0 +1,29 @@
+package crypto.forestfish.forestfishd.api.v1;
+
+public class ForestFishV1Response_status {
+
+ private String version = "v1";
+ private String status = "up";
+
+ public ForestFishV1Response_status() {
+ super();
+ }
+
+ public ForestFishV1Response_status(String status) {
+ this.status = status;
+ }
+
+ public String getVersion() {
+ return version;
+ }
+ public void setVersion(String version) {
+ this.version = version;
+ }
+ public String getStatus() {
+ return status;
+ }
+ public void setStatus(String status) {
+ this.status = status;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/forestfishd/model/policy/Policy.java b/src/main/java/crypto/forestfish/forestfishd/model/policy/Policy.java
new file mode 100644
index 0000000..703d7e1
--- /dev/null
+++ b/src/main/java/crypto/forestfish/forestfishd/model/policy/Policy.java
@@ -0,0 +1,73 @@
+package crypto.forestfish.forestfishd.model.policy;
+
+import java.util.HashMap;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import crypto.forestfish.enums.evm.EVMChain;
+
+public class Policy {
+
+ @SuppressWarnings("unused")
+ private static final Logger LOGGER = LoggerFactory.getLogger(Policy.class);
+
+ @SuppressWarnings("serial")
+ private HashMap blockchains_enabled = new HashMap() {{
+ this.put(EVMChain.POLYGON.toString(), true);
+ this.put(EVMChain.ETHEREUM.toString(), true);
+ }};
+
+ // geoip access policy
+ @SuppressWarnings("serial")
+ private HashMap allowedCC = new HashMap<>() {{
+ this.put("ALL", true); // no restriction
+
+ // Examples
+ //this.put("LOCALHOST", true);
+ //this.put("RFC1918", true);
+ //this.put("US", true);
+
+ }};
+
+ private HashMap accounts = new HashMap<>();
+
+ public Policy() {
+ super();
+ }
+
+ public HashMap getBlockchains_enabled() {
+ return blockchains_enabled;
+ }
+
+ public void setBlockchains_enabled(HashMap blockchains_enabled) {
+ this.blockchains_enabled = blockchains_enabled;
+ }
+
+ public HashMap getAccounts() {
+ return accounts;
+ }
+
+ public void setAccounts(HashMap accounts) {
+ this.accounts = accounts;
+ }
+
+ public HashMap getAllowedCC() {
+ return allowedCC;
+ }
+
+ public void setAllowedCC(HashMap allowedCC) {
+ this.allowedCC = allowedCC;
+ }
+
+ public void update() {
+ // Make sure we handle all accounts in lowercase
+ HashMap accounts_lc = new HashMap<>();
+ for (String address: accounts.keySet()) {
+ Role r = accounts.get(address);
+ accounts_lc.put(address.toLowerCase(), r);
+ }
+ this.accounts = accounts_lc;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/forestfishd/model/policy/Role.java b/src/main/java/crypto/forestfish/forestfishd/model/policy/Role.java
new file mode 100644
index 0000000..4d4d4a8
--- /dev/null
+++ b/src/main/java/crypto/forestfish/forestfishd/model/policy/Role.java
@@ -0,0 +1,8 @@
+package crypto.forestfish.forestfishd.model.policy;
+
+public enum Role {
+ CONSUMER,
+ CONTRIBUTOR,
+ ADMIN,
+ UNDEFINED
+}
\ No newline at end of file
diff --git a/src/main/java/crypto/forestfish/objects/avm/AVMASAMutables.java b/src/main/java/crypto/forestfish/objects/avm/AVMASAMutables.java
new file mode 100644
index 0000000..06cdf25
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/avm/AVMASAMutables.java
@@ -0,0 +1,92 @@
+package crypto.forestfish.objects.avm;
+
+import com.algorand.algosdk.crypto.Address;
+
+public class AVMASAMutables {
+
+ private Address manager = null;
+ private Address reserve = null;
+ private Address freeze = null;
+ private Address clawback = null;
+
+ public AVMASAMutables(Address manager, Address reserve, Address freeze, Address clawback) {
+ super();
+ this.manager = manager;
+ this.reserve = reserve;
+ this.freeze = freeze;
+ this.clawback = clawback;
+ }
+
+ public Address getManager() {
+ return manager;
+ }
+
+ public void setManager(Address manager) {
+ this.manager = manager;
+ }
+
+ public Address getReserve() {
+ return reserve;
+ }
+
+ public void setReserve(Address reserve) {
+ this.reserve = reserve;
+ }
+
+ public Address getFreeze() {
+ return freeze;
+ }
+
+ public void setFreeze(Address freeze) {
+ this.freeze = freeze;
+ }
+
+ public Address getClawback() {
+ return clawback;
+ }
+
+ public void setClawback(Address clawback) {
+ this.clawback = clawback;
+ }
+
+ public void printStatus() {
+
+ if (null == this.manager) {
+ System.out.println("manager : ");
+ } else {
+ System.out.println("manager : " + this.manager);
+ }
+
+ if (null == this.reserve) {
+ System.out.println("reserve : ");
+ } else {
+ System.out.println("reserve : " + this.reserve);
+ }
+
+ if (null == this.freeze) {
+ System.out.println("freeze : ");
+ } else {
+ System.out.println("freeze : " + this.freeze);
+ }
+
+ if (null == this.clawback) {
+ System.out.println("clawback: ");
+ } else {
+ System.out.println("clawback: " + this.clawback);
+ }
+
+ }
+
+ public boolean allImmutable() {
+ if (true &&
+ (null == this.manager) &&
+ (null == this.reserve) &&
+ (null == this.freeze) &&
+ (null == this.clawback) &&
+ true) {
+ return true;
+ }
+ return false;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/objects/avm/AVMAccountASABalance.java b/src/main/java/crypto/forestfish/objects/avm/AVMAccountASABalance.java
new file mode 100644
index 0000000..f2121e8
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/avm/AVMAccountASABalance.java
@@ -0,0 +1,54 @@
+package crypto.forestfish.objects.avm;
+
+import java.math.BigInteger;
+
+import crypto.forestfish.objects.avm.model.asa.AVMASAInfo;
+
+public class AVMAccountASABalance {
+
+ private boolean isEmpty = true;
+ private Double balanceWithDecimalNotation;
+ private BigInteger balance;
+ private AVMASAInfo asaInfo;
+
+ public AVMAccountASABalance(BigInteger _balance, AVMASAInfo _asaInfo) {
+ super();
+ this.balance = _balance;
+ this.asaInfo = _asaInfo;
+ this.balanceWithDecimalNotation = _balance.longValue()/Math.pow(10L, asaInfo.getDecimals());
+ if (_balance.longValue() != 0L) this.isEmpty = false;
+ }
+
+ public boolean isEmpty() {
+ return isEmpty;
+ }
+
+ public void setEmpty(boolean isEmpty) {
+ this.isEmpty = isEmpty;
+ }
+
+ public Double getBalanceWithDecimalNotation() {
+ return balanceWithDecimalNotation;
+ }
+
+ public void setBalanceWithDecimalNotation(Double balanceWithDecimalNotation) {
+ this.balanceWithDecimalNotation = balanceWithDecimalNotation;
+ }
+
+ public AVMASAInfo getAsaInfo() {
+ return asaInfo;
+ }
+
+ public void setAsaInfo(AVMASAInfo asaInfo) {
+ this.asaInfo = asaInfo;
+ }
+
+ public BigInteger getBalance() {
+ return balance;
+ }
+
+ public void setBalance(BigInteger balance) {
+ this.balance = balance;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/objects/avm/AVMAccountBalance.java b/src/main/java/crypto/forestfish/objects/avm/AVMAccountBalance.java
new file mode 100644
index 0000000..6878b97
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/avm/AVMAccountBalance.java
@@ -0,0 +1,71 @@
+package crypto.forestfish.objects.avm;
+
+import crypto.forestfish.objects.avm.model.chain.AVMCurrency;
+
+public class AVMAccountBalance {
+
+ private boolean isEmpty = true;
+ private Long balanceInMicroAlgo;
+ private Double balanceInALGO;
+ private AVMCurrency currency;
+
+ public AVMAccountBalance() {
+ super();
+ }
+
+ public AVMAccountBalance(Long _balanceInMicroAlgo, Double _balanceInALGO, AVMCurrency _currency, boolean isEmpty) {
+ super();
+ this.balanceInMicroAlgo = _balanceInMicroAlgo;
+ this.balanceInALGO = _balanceInALGO;
+ this.currency = _currency;
+ this.isEmpty = isEmpty;
+ }
+
+ public boolean isEmpty() {
+ return isEmpty;
+ }
+
+ public void setEmpty(boolean isEmpty) {
+ this.isEmpty = isEmpty;
+ }
+
+ public Long getBalanceInMicroAlgo() {
+ return balanceInMicroAlgo;
+ }
+
+ public void setBalanceInMicroAlgo(Long balanceInMicroAlgo) {
+ this.balanceInMicroAlgo = balanceInMicroAlgo;
+ }
+
+ public Double getBalanceInALGO() {
+ return balanceInALGO;
+ }
+
+ public void setBalanceInALGO(Double balanceInALGO) {
+ this.balanceInALGO = balanceInALGO;
+ }
+
+ public AVMCurrency getCurrency() {
+ return currency;
+ }
+
+ public void setCurrency(AVMCurrency currency) {
+ this.currency = currency;
+ }
+
+ public String getBalanceInALGOPrettyPrint() {
+ if (balanceInALGO < 0.001d) {
+ return "..." + this.balanceInALGO;
+ } else {
+ return this.balanceInALGO + "";
+ }
+ }
+
+ public String getBalanceInuAlgoPrettyPrint() {
+ if (this.getCurrency().getDecimal() == 18) {
+ return this.balanceInMicroAlgo + "";
+ } else {
+ return "-";
+ }
+ }
+}
diff --git a/src/main/java/crypto/forestfish/objects/avm/AVMAccountTxSummary.java b/src/main/java/crypto/forestfish/objects/avm/AVMAccountTxSummary.java
new file mode 100644
index 0000000..f843a9d
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/avm/AVMAccountTxSummary.java
@@ -0,0 +1,36 @@
+package crypto.forestfish.objects.avm;
+
+import java.util.HashMap;
+
+public class AVMAccountTxSummary {
+
+ private HashMap txtype_counts = new HashMap<>();
+ private long txcount = 0L;
+
+ public AVMAccountTxSummary() {
+ super();
+ }
+
+ public AVMAccountTxSummary(HashMap txtype_counts, long txcount) {
+ super();
+ this.txtype_counts = txtype_counts;
+ this.txcount = txcount;
+ }
+
+ public HashMap getTxtype_counts() {
+ return txtype_counts;
+ }
+
+ public void setTxtype_counts(HashMap txtype_counts) {
+ this.txtype_counts = txtype_counts;
+ }
+
+ public long getTxcount() {
+ return txcount;
+ }
+
+ public void setTxcount(long txcount) {
+ this.txcount = txcount;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/objects/avm/AVMChainPortfolio.java b/src/main/java/crypto/forestfish/objects/avm/AVMChainPortfolio.java
new file mode 100644
index 0000000..3d137b6
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/avm/AVMChainPortfolio.java
@@ -0,0 +1,127 @@
+package crypto.forestfish.objects.avm;
+
+import java.util.HashMap;
+
+public class AVMChainPortfolio {
+
+ private String account_address;
+ private String chain;
+ private AVMAccountBalance nativeBalance;
+ private HashMap tokens = new HashMap<>();
+ private HashMap nfttokens = new HashMap<>();
+
+ private Long txCount = 0L;
+ private Long calculatedMinimumBalance = 0L;
+ private Long total_apps_optedin = 0L;
+ private Long total_created_apps = 0L;
+ boolean accounts_holds_assets = false;
+
+ public AVMChainPortfolio() {
+ super();
+ }
+
+ public AVMChainPortfolio(String _account_address, String chain, AVMAccountBalance _nativeBalance, Long _txCount, HashMap _tokens, HashMap _nfttokens) {
+ super();
+ this.account_address = _account_address;
+ this.chain = chain;
+ this.nativeBalance = _nativeBalance;
+ this.txCount = _txCount;
+ this.tokens = _tokens;
+ this.nfttokens = _nfttokens;
+ }
+
+ public AVMChainPortfolio(String _account_address, String chain, AVMAccountBalance _nativeBalance, Long _txCount, HashMap _tokens, HashMap _nfttokens, Long _calculatedMinimumBalance, Long _total_apps_optedin, Long _total_created_apps, Boolean _accounts_holds_assets) {
+ super();
+ this.account_address = _account_address;
+ this.chain = chain;
+ this.nativeBalance = _nativeBalance;
+ this.txCount = _txCount;
+ this.tokens = _tokens;
+ this.nfttokens = _nfttokens;
+ this.calculatedMinimumBalance = _calculatedMinimumBalance;
+ this.total_apps_optedin = _total_apps_optedin;
+ this.total_created_apps = _total_created_apps;
+ this.accounts_holds_assets = _accounts_holds_assets;
+ }
+
+ public AVMAccountBalance getNativeBalance() {
+ return nativeBalance;
+ }
+
+ public void setNativeBalance(AVMAccountBalance nativeBalance) {
+ this.nativeBalance = nativeBalance;
+ }
+
+ public String getChain() {
+ return chain;
+ }
+
+ public void setChain(String chain) {
+ this.chain = chain;
+ }
+
+ public String getAccount_address() {
+ return account_address;
+ }
+
+ public void setAccount_address(String account_address) {
+ this.account_address = account_address;
+ }
+
+ public HashMap getTokens() {
+ return tokens;
+ }
+
+ public void setTokens(HashMap tokens) {
+ this.tokens = tokens;
+ }
+
+ public HashMap getNfttokens() {
+ return nfttokens;
+ }
+
+ public void setNfttokens(HashMap nfttokens) {
+ this.nfttokens = nfttokens;
+ }
+
+ public Long getTxCount() {
+ return txCount;
+ }
+
+ public void setTxCount(Long txCount) {
+ this.txCount = txCount;
+ }
+
+ public Long getCalculatedMinimumBalance() {
+ return calculatedMinimumBalance;
+ }
+
+ public void setCalculatedMinimumBalance(Long calculatedMinimumBalance) {
+ this.calculatedMinimumBalance = calculatedMinimumBalance;
+ }
+
+ public Long getTotal_apps_optedin() {
+ return total_apps_optedin;
+ }
+
+ public void setTotal_apps_optedin(Long total_apps_optedin) {
+ this.total_apps_optedin = total_apps_optedin;
+ }
+
+ public Long getTotal_created_apps() {
+ return total_created_apps;
+ }
+
+ public void setTotal_created_apps(Long total_created_apps) {
+ this.total_created_apps = total_created_apps;
+ }
+
+ public boolean isAccounts_holds_assets() {
+ return accounts_holds_assets;
+ }
+
+ public void setAccounts_holds_assets(boolean accounts_holds_assets) {
+ this.accounts_holds_assets = accounts_holds_assets;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/objects/avm/AVMChainPortfolioDiff.java b/src/main/java/crypto/forestfish/objects/avm/AVMChainPortfolioDiff.java
new file mode 100644
index 0000000..5998f68
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/avm/AVMChainPortfolioDiff.java
@@ -0,0 +1,76 @@
+package crypto.forestfish.objects.avm;
+
+import java.util.HashMap;
+
+public class AVMChainPortfolioDiff {
+
+ private String account_address;
+ private String chain;
+ private AVMAccountBalance nativeBalance;
+ private String txCount;
+ private HashMap asatokens = new HashMap<>();
+ private HashMap arctokens = new HashMap<>();
+
+ public AVMChainPortfolioDiff() {
+ super();
+ }
+
+ public AVMChainPortfolioDiff(String account_address, String chain, AVMAccountBalance nativeBalance, String txCount, HashMap asatokens, HashMap arctokens) {
+ super();
+ this.account_address = account_address;
+ this.chain = chain;
+ this.nativeBalance = nativeBalance;
+ this.txCount = txCount;
+ this.asatokens = asatokens;
+ this.arctokens = arctokens;
+ }
+
+ public AVMAccountBalance getNativeBalance() {
+ return nativeBalance;
+ }
+
+ public void setNativeBalance(AVMAccountBalance nativeBalance) {
+ this.nativeBalance = nativeBalance;
+ }
+
+ public String getChain() {
+ return chain;
+ }
+
+ public void setChain(String chain) {
+ this.chain = chain;
+ }
+
+ public String getAccount_address() {
+ return account_address;
+ }
+
+ public void setAccount_address(String account_address) {
+ this.account_address = account_address;
+ }
+
+ public String getTxCount() {
+ return txCount;
+ }
+
+ public void setTxCount(String txCount) {
+ this.txCount = txCount;
+ }
+
+ public HashMap getAsatokens() {
+ return asatokens;
+ }
+
+ public void setAsatokens(HashMap asatokens) {
+ this.asatokens = asatokens;
+ }
+
+ public HashMap getArctokens() {
+ return arctokens;
+ }
+
+ public void setArctokens(HashMap arctokens) {
+ this.arctokens = arctokens;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/objects/avm/AVMCreateAssetResult.java b/src/main/java/crypto/forestfish/objects/avm/AVMCreateAssetResult.java
new file mode 100644
index 0000000..56b5dd5
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/avm/AVMCreateAssetResult.java
@@ -0,0 +1,36 @@
+package crypto.forestfish.objects.avm;
+
+public class AVMCreateAssetResult {
+
+ private String txhash;
+ private Long assetID;
+ private boolean confirmed = false;
+
+ public AVMCreateAssetResult(String txhash, Long assetID, boolean confirmed) {
+ super();
+ this.txhash = txhash;
+ this.assetID = assetID;
+ this.confirmed = confirmed;
+ }
+
+ public String getTxhash() {
+ return txhash;
+ }
+
+ public void setTxhash(String txhash) {
+ this.txhash = txhash;
+ }
+
+ public Long getAssetID() {
+ return assetID;
+ }
+
+ public void setAssetID(Long assetID) {
+ this.assetID = assetID;
+ }
+
+ @Override
+ public String toString() {
+ return "txhash=" + this.txhash + " assetid=" + this.assetID + " confirmed=" + this.confirmed;
+ }
+}
diff --git a/src/main/java/crypto/forestfish/objects/avm/AVMIndexerException.java b/src/main/java/crypto/forestfish/objects/avm/AVMIndexerException.java
new file mode 100644
index 0000000..4495915
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/avm/AVMIndexerException.java
@@ -0,0 +1,76 @@
+package crypto.forestfish.objects.avm;
+
+import crypto.forestfish.enums.ExceptionType;
+
+public class AVMIndexerException {
+
+ private boolean switchNode = false;
+ private boolean nodeInteraction = false;
+ private boolean sleepBeforeRetry = false;
+ private int sleepTimeInSecondsRecommended = 5;
+ private ExceptionType exceptionType = ExceptionType.UNKNOWN;
+ private boolean timeout = false;
+
+ public AVMIndexerException() {
+ super();
+ }
+
+ public AVMIndexerException(ExceptionType _exceptionType, boolean _nodeInteraction, boolean _sleepBeforeRetry, int _sleepTimeInSecondsRecommended, boolean _switchNode, boolean _timeout) {
+ super();
+ this.exceptionType = _exceptionType;
+ this.nodeInteraction = _nodeInteraction;
+ this.sleepBeforeRetry = _sleepBeforeRetry;
+ this.sleepTimeInSecondsRecommended = _sleepTimeInSecondsRecommended;
+ this.switchNode = _switchNode;
+ this.timeout = _timeout;
+ }
+
+ public boolean isNodeInteraction() {
+ return nodeInteraction;
+ }
+
+ public void setNodeInteraction(boolean nodeInteraction) {
+ this.nodeInteraction = nodeInteraction;
+ }
+
+ public boolean isSleepBeforeRetry() {
+ return sleepBeforeRetry;
+ }
+
+ public void setSleepBeforeRetry(boolean sleepBeforeRetry) {
+ this.sleepBeforeRetry = sleepBeforeRetry;
+ }
+
+ public int getSleepTimeInSecondsRecommended() {
+ return sleepTimeInSecondsRecommended;
+ }
+
+ public void setSleepTimeInSecondsRecommended(int sleepTimeInSecondsRecommended) {
+ this.sleepTimeInSecondsRecommended = sleepTimeInSecondsRecommended;
+ }
+
+ public ExceptionType getExceptionType() {
+ return exceptionType;
+ }
+
+ public void setExceptionType(ExceptionType exceptionType) {
+ this.exceptionType = exceptionType;
+ }
+
+ public boolean isSwitchNode() {
+ return switchNode;
+ }
+
+ public void setSwitchNode(boolean switchNode) {
+ this.switchNode = switchNode;
+ }
+
+ public boolean isTimeout() {
+ return timeout;
+ }
+
+ public void setTimeout(boolean timeout) {
+ this.timeout = timeout;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/objects/avm/AVMIndexerExceptionActionState.java b/src/main/java/crypto/forestfish/objects/avm/AVMIndexerExceptionActionState.java
new file mode 100644
index 0000000..33d9f25
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/avm/AVMIndexerExceptionActionState.java
@@ -0,0 +1,36 @@
+package crypto.forestfish.objects.avm;
+
+import crypto.forestfish.objects.avm.connector.AVMBlockChainConnector;
+
+public class AVMIndexerExceptionActionState {
+
+ private boolean newAVMBlockChainConnector = false;
+ private AVMBlockChainConnector connector = null;
+
+ public AVMIndexerExceptionActionState() {
+ super();
+ }
+
+ public AVMIndexerExceptionActionState(boolean newAVMBlockChainConnector, AVMBlockChainConnector connector) {
+ super();
+ this.newAVMBlockChainConnector = newAVMBlockChainConnector;
+ this.connector = connector;
+ }
+
+ public boolean isNewAVMBlockChainConnector() {
+ return newAVMBlockChainConnector;
+ }
+
+ public void setNewEVMBlockChainConnector(boolean newAVMBlockChainConnector) {
+ this.newAVMBlockChainConnector = newAVMBlockChainConnector;
+ }
+
+ public AVMBlockChainConnector getConnector() {
+ return connector;
+ }
+
+ public void setConnector(AVMBlockChainConnector connector) {
+ this.connector = connector;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/objects/avm/AVMKnownAccountAddress.java b/src/main/java/crypto/forestfish/objects/avm/AVMKnownAccountAddress.java
new file mode 100644
index 0000000..15a7d87
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/avm/AVMKnownAccountAddress.java
@@ -0,0 +1,58 @@
+package crypto.forestfish.objects.avm;
+
+import java.util.ArrayList;
+
+import crypto.forestfish.enums.AddressCategory;
+
+public class AVMKnownAccountAddress {
+
+ private String name;
+ private String address;
+ private AddressCategory category;
+ private ArrayList origins = new ArrayList();
+
+ public AVMKnownAccountAddress(String name, String address, AddressCategory category, ArrayList origins) {
+ super();
+ this.name = name;
+ this.address = address;
+ this.category = category;
+ this.origins = origins;
+ }
+
+ public AVMKnownAccountAddress() {
+ super();
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getAddress() {
+ return address;
+ }
+
+ public void setAddress(String address) {
+ this.address = address;
+ }
+
+ public ArrayList getOrigins() {
+ return origins;
+ }
+
+ public void setOrigins(ArrayList origins) {
+ this.origins = origins;
+ }
+
+ public AddressCategory getCategory() {
+ return category;
+ }
+
+ public void setCategory(AddressCategory category) {
+ this.category = category;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/objects/avm/AVMKnownCustomContractAddress.java b/src/main/java/crypto/forestfish/objects/avm/AVMKnownCustomContractAddress.java
new file mode 100644
index 0000000..cb3255d
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/avm/AVMKnownCustomContractAddress.java
@@ -0,0 +1,69 @@
+package crypto.forestfish.objects.avm;
+
+import java.util.ArrayList;
+
+import crypto.forestfish.enums.CustomContractCategory;
+import crypto.forestfish.enums.avm.AVMChain;
+
+public class AVMKnownCustomContractAddress {
+
+ private String name;
+ private String address;
+ private AVMChain chain;
+ private CustomContractCategory category;
+ private ArrayList origins = new ArrayList();
+
+ public AVMKnownCustomContractAddress(String name, String address, AVMChain chain, CustomContractCategory category, ArrayList origins) {
+ super();
+ this.name = name;
+ this.address = address;
+ this.chain = chain;
+ this.category = category;
+ this.origins = origins;
+ }
+
+ public AVMKnownCustomContractAddress() {
+ super();
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getAddress() {
+ return address;
+ }
+
+ public void setAddress(String address) {
+ this.address = address;
+ }
+
+ public ArrayList getOrigins() {
+ return origins;
+ }
+
+ public void setOrigins(ArrayList origins) {
+ this.origins = origins;
+ }
+
+ public CustomContractCategory getCategory() {
+ return category;
+ }
+
+ public void setCategory(CustomContractCategory category) {
+ this.category = category;
+ }
+
+ public AVMChain getChain() {
+ return chain;
+ }
+
+ public void setChain(AVMChain chain) {
+ this.chain = chain;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/objects/avm/AVMNativeValue.java b/src/main/java/crypto/forestfish/objects/avm/AVMNativeValue.java
new file mode 100644
index 0000000..ee3dd7a
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/avm/AVMNativeValue.java
@@ -0,0 +1,34 @@
+package crypto.forestfish.objects.avm;
+
+import java.math.BigDecimal;
+
+import crypto.forestfish.enums.avm.Unit;
+
+public class AVMNativeValue {
+
+ private BigDecimal val;
+ private Unit unit;
+
+ public AVMNativeValue(BigDecimal val, Unit unit) {
+ super();
+ this.val = val;
+ this.unit = unit;
+ }
+
+ public BigDecimal getVal() {
+ return val;
+ }
+
+ public void setVal(BigDecimal val) {
+ this.val = val;
+ }
+
+ public Unit getUnit() {
+ return unit;
+ }
+
+ public void setUnit(Unit unit) {
+ this.unit = unit;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/objects/avm/AVMNftAccountBalance.java b/src/main/java/crypto/forestfish/objects/avm/AVMNftAccountBalance.java
new file mode 100644
index 0000000..0f6e93a
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/avm/AVMNftAccountBalance.java
@@ -0,0 +1,54 @@
+package crypto.forestfish.objects.avm;
+
+public class AVMNftAccountBalance {
+
+ private boolean isEmpty = true;
+ private String balance;
+ private String name = null;
+ private String symbol = null;
+
+ public AVMNftAccountBalance() {
+ super();
+ }
+
+ public AVMNftAccountBalance(String _balance, boolean _isEmpty, String _name, String _symbol) {
+ super();
+ this.balance = _balance;
+ this.isEmpty = _isEmpty;
+ this.name = _name;
+ this.symbol = _symbol;
+ }
+
+ public boolean isEmpty() {
+ return isEmpty;
+ }
+
+ public void setEmpty(boolean isEmpty) {
+ this.isEmpty = isEmpty;
+ }
+
+ public String getBalance() {
+ return balance;
+ }
+
+ public void setBalance(String balance) {
+ this.balance = balance;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getSymbol() {
+ return symbol;
+ }
+
+ public void setSymbol(String symbol) {
+ this.symbol = symbol;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/objects/avm/AVMPortfolio.java b/src/main/java/crypto/forestfish/objects/avm/AVMPortfolio.java
new file mode 100644
index 0000000..fe28268
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/avm/AVMPortfolio.java
@@ -0,0 +1,59 @@
+package crypto.forestfish.objects.avm;
+
+import java.util.HashMap;
+
+import org.web3j.crypto.Credentials;
+
+import crypto.forestfish.enums.avm.AVMChain;
+
+public class AVMPortfolio {
+
+ private String account_address;
+ private HashMap chainportfolio = new HashMap<>();
+ private Credentials cred;
+ private Long timestamp_in_seconds;
+
+ public AVMPortfolio() {
+ super();
+ }
+
+ public AVMPortfolio(String _account_address, HashMap _chainportfolio, Long _timestamp_in_seconds) {
+ super();
+ this.account_address = _account_address;
+ this.chainportfolio = _chainportfolio;
+ this.timestamp_in_seconds = _timestamp_in_seconds;
+ }
+
+ public HashMap getChainportfolio() {
+ return chainportfolio;
+ }
+
+ public void setChainportfolio(HashMap _chainportfolio) {
+ this.chainportfolio = _chainportfolio;
+ }
+
+ public String getAccount_address() {
+ return account_address;
+ }
+
+ public void setAccount_address(String _account_address) {
+ this.account_address = _account_address;
+ }
+
+ public Credentials getCred() {
+ return cred;
+ }
+
+ public void setCred(Credentials cred) {
+ this.cred = cred;
+ }
+
+ public Long getTimestamp_in_seconds() {
+ return timestamp_in_seconds;
+ }
+
+ public void setTimestamp_in_seconds(Long timestamp_in_seconds) {
+ this.timestamp_in_seconds = timestamp_in_seconds;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/objects/avm/AVMPortfolioDiff.java b/src/main/java/crypto/forestfish/objects/avm/AVMPortfolioDiff.java
new file mode 100644
index 0000000..9ca7f5d
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/avm/AVMPortfolioDiff.java
@@ -0,0 +1,39 @@
+package crypto.forestfish.objects.avm;
+
+import java.util.HashMap;
+
+import crypto.forestfish.enums.avm.AVMChain;
+
+public class AVMPortfolioDiff {
+
+ private String account_address;
+ private HashMap chainportfolio_diff = new HashMap<>();
+
+ public AVMPortfolioDiff() {
+ super();
+ }
+
+ public AVMPortfolioDiff(String _account_address, HashMap _chainportfolio_diff) {
+ super();
+ this.account_address = _account_address;
+ this.chainportfolio_diff = _chainportfolio_diff;
+ }
+
+
+ public String getAccount_address() {
+ return account_address;
+ }
+
+ public void setAccount_address(String _account_address) {
+ this.account_address = _account_address;
+ }
+
+ public HashMap getChainportfolio_diff() {
+ return chainportfolio_diff;
+ }
+
+ public void setChainportfolio_diff(HashMap chainportfolio_diff) {
+ this.chainportfolio_diff = chainportfolio_diff;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/objects/avm/AVMPortfolioDiffResult.java b/src/main/java/crypto/forestfish/objects/avm/AVMPortfolioDiffResult.java
new file mode 100644
index 0000000..e0616fb
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/avm/AVMPortfolioDiffResult.java
@@ -0,0 +1,34 @@
+package crypto.forestfish.objects.avm;
+
+public class AVMPortfolioDiffResult {
+
+ private String portfolio_full_str;
+ private AVMPortfolioDiff portfolio_diff;
+
+ public AVMPortfolioDiffResult() {
+ super();
+ }
+
+ public AVMPortfolioDiffResult(String _portfolio_full_str, AVMPortfolioDiff _portfolio_diff) {
+ super();
+ this.portfolio_full_str = _portfolio_full_str;
+ this.portfolio_diff = _portfolio_diff;
+ }
+
+ public String getPortfolio_full_str() {
+ return portfolio_full_str;
+ }
+
+ public void setPortfolio_full_str(String portfolio_full_str) {
+ this.portfolio_full_str = portfolio_full_str;
+ }
+
+ public AVMPortfolioDiff getPortfolio_diff() {
+ return portfolio_diff;
+ }
+
+ public void setPortfolio_diff(AVMPortfolioDiff portfolio_diff) {
+ this.portfolio_diff = portfolio_diff;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/objects/avm/AVMPortfolioSimple.java b/src/main/java/crypto/forestfish/objects/avm/AVMPortfolioSimple.java
new file mode 100644
index 0000000..2c7007e
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/avm/AVMPortfolioSimple.java
@@ -0,0 +1,38 @@
+package crypto.forestfish.objects.avm;
+
+import java.util.HashMap;
+
+import crypto.forestfish.enums.avm.AVMChain;
+
+public class AVMPortfolioSimple {
+
+ private String account_address;
+ private HashMap chainportfolio = new HashMap<>();
+
+ public AVMPortfolioSimple() {
+ super();
+ }
+
+ public AVMPortfolioSimple(String _account_address, HashMap _chainportfolio) {
+ super();
+ this.account_address = _account_address;
+ this.chainportfolio = _chainportfolio;
+ }
+
+ public HashMap getChainportfolio() {
+ return chainportfolio;
+ }
+
+ public void setChainportfolio(HashMap _chainportfolio) {
+ this.chainportfolio = _chainportfolio;
+ }
+
+ public String getAccount_address() {
+ return account_address;
+ }
+
+ public void setAccount_address(String _account_address) {
+ this.account_address = _account_address;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/objects/avm/AVMProviderException.java b/src/main/java/crypto/forestfish/objects/avm/AVMProviderException.java
new file mode 100644
index 0000000..d5fe592
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/avm/AVMProviderException.java
@@ -0,0 +1,76 @@
+package crypto.forestfish.objects.avm;
+
+import crypto.forestfish.enums.ExceptionType;
+
+public class AVMProviderException {
+
+ private boolean switchNode = false;
+ private boolean nodeInteraction = false;
+ private boolean sleepBeforeRetry = false;
+ private int sleepTimeInSecondsRecommended = 5;
+ private ExceptionType exceptionType = ExceptionType.UNKNOWN;
+ private boolean timeout = false;
+
+ public AVMProviderException() {
+ super();
+ }
+
+ public AVMProviderException(ExceptionType _exceptionType, boolean _nodeInteraction, boolean _sleepBeforeRetry, int _sleepTimeInSecondsRecommended, boolean _switchNode, boolean _timeout) {
+ super();
+ this.exceptionType = _exceptionType;
+ this.nodeInteraction = _nodeInteraction;
+ this.sleepBeforeRetry = _sleepBeforeRetry;
+ this.sleepTimeInSecondsRecommended = _sleepTimeInSecondsRecommended;
+ this.switchNode = _switchNode;
+ this.timeout = _timeout;
+ }
+
+ public boolean isNodeInteraction() {
+ return nodeInteraction;
+ }
+
+ public void setNodeInteraction(boolean nodeInteraction) {
+ this.nodeInteraction = nodeInteraction;
+ }
+
+ public boolean isSleepBeforeRetry() {
+ return sleepBeforeRetry;
+ }
+
+ public void setSleepBeforeRetry(boolean sleepBeforeRetry) {
+ this.sleepBeforeRetry = sleepBeforeRetry;
+ }
+
+ public int getSleepTimeInSecondsRecommended() {
+ return sleepTimeInSecondsRecommended;
+ }
+
+ public void setSleepTimeInSecondsRecommended(int sleepTimeInSecondsRecommended) {
+ this.sleepTimeInSecondsRecommended = sleepTimeInSecondsRecommended;
+ }
+
+ public ExceptionType getExceptionType() {
+ return exceptionType;
+ }
+
+ public void setExceptionType(ExceptionType exceptionType) {
+ this.exceptionType = exceptionType;
+ }
+
+ public boolean isSwitchNode() {
+ return switchNode;
+ }
+
+ public void setSwitchNode(boolean switchNode) {
+ this.switchNode = switchNode;
+ }
+
+ public boolean isTimeout() {
+ return timeout;
+ }
+
+ public void setTimeout(boolean timeout) {
+ this.timeout = timeout;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/objects/avm/AVMProviderExceptionActionState.java b/src/main/java/crypto/forestfish/objects/avm/AVMProviderExceptionActionState.java
new file mode 100644
index 0000000..a6ffd86
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/avm/AVMProviderExceptionActionState.java
@@ -0,0 +1,36 @@
+package crypto.forestfish.objects.avm;
+
+import crypto.forestfish.objects.avm.connector.AVMBlockChainConnector;
+
+public class AVMProviderExceptionActionState {
+
+ private boolean newAVMBlockChainConnector = false;
+ private AVMBlockChainConnector connector = null;
+
+ public AVMProviderExceptionActionState() {
+ super();
+ }
+
+ public AVMProviderExceptionActionState(boolean newAVMBlockChainConnector, AVMBlockChainConnector connector) {
+ super();
+ this.newAVMBlockChainConnector = newAVMBlockChainConnector;
+ this.connector = connector;
+ }
+
+ public boolean isNewAVMBlockChainConnector() {
+ return newAVMBlockChainConnector;
+ }
+
+ public void setNewEVMBlockChainConnector(boolean newAVMBlockChainConnector) {
+ this.newAVMBlockChainConnector = newAVMBlockChainConnector;
+ }
+
+ public AVMBlockChainConnector getConnector() {
+ return connector;
+ }
+
+ public void setConnector(AVMBlockChainConnector connector) {
+ this.connector = connector;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/objects/avm/AlgoIndexerNode.java b/src/main/java/crypto/forestfish/objects/avm/AlgoIndexerNode.java
new file mode 100644
index 0000000..49b81b8
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/avm/AlgoIndexerNode.java
@@ -0,0 +1,59 @@
+package crypto.forestfish.objects.avm;
+
+public class AlgoIndexerNode {
+
+ private String url;
+ private Integer port;
+ private String authtoken;
+ private String authtoken_key;
+
+ public AlgoIndexerNode() {
+ super();
+ }
+
+ public AlgoIndexerNode(String _url, Integer _port, String _authtoken, String _authtoken_key) {
+ super();
+ this.url = _url;
+ this.port = _port;
+ this.authtoken = _authtoken;
+ this.authtoken_key = _authtoken_key;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public Integer getPort() {
+ return port;
+ }
+
+ public void setPort(Integer port) {
+ this.port = port;
+ }
+
+ public String getAuthtoken() {
+ return authtoken;
+ }
+
+ public void setAuthtoken(String authtoken) {
+ this.authtoken = authtoken;
+ }
+
+ public String getAuthtoken_key() {
+ return authtoken_key;
+ }
+
+ public void setAuthtoken_key(String authtoken_key) {
+ this.authtoken_key = authtoken_key;
+ }
+
+ @Override
+ public String toString() {
+ return this.getUrl() + " token=" + this.getAuthtoken() + " token_key=" + this.getAuthtoken_key();
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/objects/avm/AlgoLocalWallet.java b/src/main/java/crypto/forestfish/objects/avm/AlgoLocalWallet.java
new file mode 100644
index 0000000..1bce604
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/avm/AlgoLocalWallet.java
@@ -0,0 +1,186 @@
+package crypto.forestfish.objects.avm;
+
+import java.io.File;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.algorand.algosdk.account.Account;
+
+import crypto.forestfish.enums.AccountOrigin;
+import crypto.forestfish.utils.FilesUtils;
+import crypto.forestfish.utils.JSONUtils;
+import crypto.forestfish.utils.SystemUtils;
+
+public class AlgoLocalWallet {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(AlgoLocalWallet.class);
+
+ private String walletName;
+ private String mnemonic;
+ private String address;
+
+ public AlgoLocalWallet() {
+ super();
+ }
+
+ public AlgoLocalWallet(String _walletName, AccountOrigin _walletOrigin, String _mnemonic, String _address) {
+ initiateWallet(_walletName, _walletOrigin, _mnemonic, _address);
+ }
+
+ public AlgoLocalWallet(String _walletName, AccountOrigin _walletOrigin, String _address) {
+ initiateWallet(_walletName, _walletOrigin, "xxx", _address);
+ }
+
+ private void initiateWallet(String _walletName, AccountOrigin walletOrigin, String _mnemonic, String _address) {
+ this.walletName = _walletName;
+ this.mnemonic = _mnemonic;
+ this.address = _address;
+
+ File walletDirectory = new File(".avm/wallets/" + walletName);
+ if (!walletDirectory.exists()) walletDirectory.mkdirs();
+
+ if (walletDirectory.listFiles().length == 0) {
+
+ // No existing wallet so assume mnemonic creation in scope
+ if (walletOrigin == AccountOrigin.RECOVERY_MNEMONIC) {
+
+ if (_mnemonic.contains("xxx")) {
+ LOGGER.error("No mnemonic provided, will not attempt to create wallet" );
+ SystemUtils.halt();
+ }
+
+ // Sanity check
+ Account generatedAccount = null;
+ try {
+ generatedAccount = new Account(_mnemonic);
+ if (!generatedAccount.getAddress().toString().equals(_address)) {
+ LOGGER.error("Mnemonic " + _mnemonic + " does not generate an account with specified address " + _address);
+ LOGGER.error("The mnemonic specified instead generates an account with address: " + generatedAccount.getAddress());
+ SystemUtils.halt();
+ }
+
+ // All good, flush JSON to file
+ String json = JSONUtils.createJSONFromPOJO(this);
+ String outfilePath = ".avm/wallets/" + _walletName + "/algowallet.json";
+ FilesUtils.writeToFileUNIX(json, outfilePath);
+
+ } catch (Exception e) {
+ LOGGER.error("e: " + e.getMessage());
+ SystemUtils.halt();
+ }
+ } else if (walletOrigin == AccountOrigin.EXISTING_LOCALWALLETFILE) {
+ LOGGER.error("You specified using a local AVM wallet file but did not find it under .avm/wallets/" + _walletName);
+ SystemUtils.halt();
+ } else {
+ System.out.println("TODO: handle walletOrigin " + walletOrigin);
+ SystemUtils.halt();
+ }
+ } else {
+
+ if (walletDirectory.listFiles().length != 1) {
+ LOGGER.warn("More than one wallet file? Cannot handle this atm.");
+ SystemUtils.halt();
+ }
+
+ LOGGER.debug("Found an existing wallet!");
+
+ try {
+ File f = walletDirectory.listFiles()[0];
+ String json = FilesUtils.readAllFromFileWithPath(f.getAbsolutePath());
+ AlgoLocalWallet wallet = JSONUtils.createPOJOFromJSON(json, AlgoLocalWallet.class);
+
+ this.address = wallet.getAddress();
+ this.walletName = wallet.getWalletName();
+ this.mnemonic = wallet.getMnemonic();
+
+ if (_mnemonic.contains("xxx")) {
+ LOGGER.debug("No mnemonic provided, will not attempt to verify credentials for wallet with name " + _walletName);
+ } else {
+
+ // Sanity check
+ Account generatedAccount = null;
+ try {
+ generatedAccount = new Account(_mnemonic);
+ if (!generatedAccount.getAddress().toString().equals(_address)) {
+ LOGGER.error("Mnemonic " + _mnemonic + " does not generate an account with specified address " + _address);
+ LOGGER.error("The mnemonic specified instead generates an account with address: " + generatedAccount.getAddress());
+ SystemUtils.halt();
+ }
+
+ // check that the specified address matches the mnemonic
+ if (generatedAccount.getAddress().toString().equals(this.address.toString())) {
+ // all checks out ..
+ } else {
+ LOGGER.error("Mnemonic " + _mnemonic + " does not generate an account with specified address " + _address);
+ LOGGER.error("The mnemonic specified instead generates an account with address: " + generatedAccount.getAddress());
+ SystemUtils.halt();
+ }
+
+ // check that the specified address matches the wallet file
+ if (this.address.toString().equals(this.address.toString())) {
+ // all checks out ..
+ } else {
+ LOGGER.error("The wallet file with name " + _walletName + " does not include an account with specified address " + _address);
+ LOGGER.error("The wallet file specifies an account with address: " + this.address);
+ SystemUtils.halt();
+ }
+
+ } catch (Exception e) {
+ LOGGER.error("e: " + e.getMessage());
+ SystemUtils.halt();
+ }
+ }
+
+ LOGGER.debug("Just restored ALGO wallet with name " + this.walletName + " from " + f.getAbsolutePath());
+ } catch (Exception e) {
+ LOGGER.warn("e: " + e.getMessage());
+ SystemUtils.halt();
+ }
+
+ }
+
+ }
+
+ public String getMnemonic() {
+ return mnemonic;
+ }
+
+ public void setMnemonic(String mnemonic) {
+ this.mnemonic = mnemonic;
+ }
+
+ public String getAddress() {
+ return address;
+ }
+
+ public void setAddress(String address) {
+ this.address = address;
+ }
+
+ public String getWalletName() {
+ return walletName;
+ }
+
+ public void setWalletName(String walletName) {
+ this.walletName = walletName;
+ }
+
+ public Account fetchAccount() {
+ Account generatedAccount = null;
+ try {
+ generatedAccount = new Account(this.mnemonic);
+ } catch (Exception e) {
+ LOGGER.error("e: " + e.getMessage());
+ SystemUtils.halt();
+ }
+ if (generatedAccount == null) {
+ LOGGER.error("Unable to generate Algorand account from this wallet");
+ LOGGER.error("address: " + this.address);
+ LOGGER.error("mnemonic: " + this.mnemonic);
+ SystemUtils.halt();
+ }
+ return generatedAccount;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/objects/avm/AlgoRelayNode.java b/src/main/java/crypto/forestfish/objects/avm/AlgoRelayNode.java
new file mode 100644
index 0000000..a60987f
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/avm/AlgoRelayNode.java
@@ -0,0 +1,59 @@
+package crypto.forestfish.objects.avm;
+
+public class AlgoRelayNode {
+
+ private String url;
+ private Integer port;
+ private String authtoken;
+ private String authtoken_key;
+
+ public AlgoRelayNode() {
+ super();
+ }
+
+ public AlgoRelayNode(String _url, Integer _port, String _authtoken, String _authtoken_key) {
+ super();
+ this.url = _url;
+ this.port = _port;
+ this.authtoken = _authtoken;
+ this.authtoken_key = _authtoken_key;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public Integer getPort() {
+ return port;
+ }
+
+ public void setPort(Integer port) {
+ this.port = port;
+ }
+
+ public String getAuthtoken() {
+ return authtoken;
+ }
+
+ public void setAuthtoken(String authtoken) {
+ this.authtoken = authtoken;
+ }
+
+ public String getAuthtoken_key() {
+ return authtoken_key;
+ }
+
+ public void setAuthtoken_key(String authtoken_key) {
+ this.authtoken_key = authtoken_key;
+ }
+
+ @Override
+ public String toString() {
+ return this.getUrl() + " token=" + this.getAuthtoken() + " token_key=" + this.getAuthtoken_key();
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/objects/avm/connector/AVMBlockChainConnector.java b/src/main/java/crypto/forestfish/objects/avm/connector/AVMBlockChainConnector.java
new file mode 100644
index 0000000..da54476
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/avm/connector/AVMBlockChainConnector.java
@@ -0,0 +1,541 @@
+package crypto.forestfish.objects.avm.connector;
+
+import java.io.File;
+import java.util.HashMap;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.algorand.algosdk.v2.client.common.AlgodClient;
+import com.algorand.algosdk.v2.client.common.IndexerClient;
+
+import crypto.forestfish.enums.avm.AVMChain;
+import crypto.forestfish.objects.avm.AlgoIndexerNode;
+import crypto.forestfish.objects.avm.AlgoRelayNode;
+import crypto.forestfish.objects.avm.model.chain.AVMChainInfo;
+import crypto.forestfish.utils.*;
+
+public class AVMBlockChainConnector {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(AVMBlockChainConnector.class);
+
+ private AVMChain chain;
+ private AVMChainInfo chaininfo;
+ private AlgoRelayNode relayNode;
+ private AlgodClient provider_instance;
+ private AlgoIndexerNode indexerNode;
+ private IndexerClient indexer_instance;
+
+ private HashMap deadnodes = new HashMap<>();
+
+ public AVMBlockChainConnector(AVMChain _chain, boolean _nodeOptimized) {
+ super();
+ LOGGER.debug("Creating a new AVMBlockChainConnector");
+
+ // Basic info
+ this.chain = _chain;
+ this.chaininfo = AVMUtils.getAVMChainInfo(_chain);
+
+ // Check if we have preferred custom network settings first
+ String prefPath = ".avm/networks/" + _chain.toString();
+ LOGGER.debug("Checking for preferred chainInfo details at " + prefPath);
+ File f = new File(prefPath);
+ if (f.exists()) {
+ LOGGER.info("Found custom network config at " + prefPath);
+ String json = FilesUtils.readStringFromFile(prefPath);
+ AVMChainInfo chainInfo = JSONUtils.createPOJOFromJSON(json, AVMChainInfo.class);
+ this.chaininfo = chainInfo;
+
+ for (AlgoRelayNode node: chaininfo.getNodes()) {
+ this.relayNode = node;
+ }
+
+ for (AlgoIndexerNode node: chaininfo.getIdxnodes()) {
+ this.indexerNode = node;
+ }
+
+ } else {
+
+ LOGGER.debug("Getting relay node");
+ if (_nodeOptimized) {
+ LOGGER.info("Finding optimal relay node for public AVM blockchain " + chain);
+ this.relayNode = selectSpeedyRelayNode();
+ } else {
+ LOGGER.info("Finding random relay node for public AVM blockchain " + chain);
+ this.relayNode = selectRandomRelayNode();
+ }
+
+ LOGGER.debug("Getting indexer node");
+ if (_nodeOptimized) {
+ LOGGER.info("Finding optimal indexer node for public AVM blockchain " + chain);
+ this.indexerNode = selectSpeedyIndexerNode();
+ } else {
+ LOGGER.info("Finding random indexer node for public AVM blockchain " + chain);
+ this.indexerNode = selectRandomIndexerNode();
+ }
+
+ }
+
+ LOGGER.info("------------------------------------------------");
+
+ if (null == this.relayNode) {
+ LOGGER.error("Unable to find valid algorand relay node for chain " + _chain);
+ SystemUtils.halt();
+ } else {
+ LOGGER.info("Using relaynode " + this.relayNode.getUrl());
+ }
+ this.provider_instance = new AlgodClient(this.getRelayNode().getUrl(), this.getRelayNode().getPort(), this.getRelayNode().getAuthtoken(), this.getRelayNode().getAuthtoken_key());
+
+ if (null == this.indexerNode) {
+ LOGGER.warn("Unable to find valid algorand indexer node for chain " + _chain);
+ } else {
+ LOGGER.info("Using indexer " + this.indexerNode.getUrl());
+ this.indexer_instance = new IndexerClient(this.getIndexerNode().getUrl(), this.getIndexerNode().getPort(), this.getIndexerNode().getAuthtoken(), this.getIndexerNode().getAuthtoken_key());
+ }
+
+ System.out.println("");
+
+ }
+
+ public AVMBlockChainConnector(AVMChain _chain, AlgoRelayNode _relaynode) {
+ super();
+ this.chain = _chain;
+ this.chaininfo = AVMUtils.getAVMChainInfo(_chain);
+
+ this.relayNode = _relaynode;
+ this.provider_instance = new AlgodClient(this.getRelayNode().getUrl(), this.getRelayNode().getPort(), this.getRelayNode().getAuthtoken(), this.getRelayNode().getAuthtoken_key());
+ }
+
+ public AVMBlockChainConnector(AVMChain _chain, AlgoIndexerNode _idxnode) {
+ super();
+ this.chain = _chain;
+ this.chaininfo = AVMUtils.getAVMChainInfo(_chain);
+
+ this.indexerNode = _idxnode;
+ this.indexer_instance = new IndexerClient(this.getIndexerNode().getUrl(), this.getIndexerNode().getPort(), this.getIndexerNode().getAuthtoken(), this.getIndexerNode().getAuthtoken_key());
+ }
+
+ public AVMBlockChainConnector(AVMChainInfo _chainInfo) {
+ super();
+ this.chain = AVMChain.valueOf(_chainInfo.getShortName());
+ this.chaininfo = AVMUtils.getAVMChainInfo(this.chain);
+
+ if (_chainInfo.getNodes().isEmpty()) {
+ LOGGER.error("No nodes part of the chainInfo provided");
+ SystemUtils.halt();
+ }
+ this.relayNode = _chainInfo.getNodes().get(0);
+ this.provider_instance = new AlgodClient(this.getRelayNode().getUrl(), this.getRelayNode().getPort(), this.getRelayNode().getAuthtoken(), this.getRelayNode().getAuthtoken_key());
+
+ if (_chainInfo.getIdxnodes().isEmpty()) {
+ LOGGER.warn("Unable to find valid algorand indexer node for chain " + this.chain);
+ } else {
+ this.indexerNode = _chainInfo.getIdxnodes().get(0);
+ this.indexer_instance = new IndexerClient(this.getIndexerNode().getUrl(), this.getIndexerNode().getPort(), this.getIndexerNode().getAuthtoken(), this.getIndexerNode().getAuthtoken_key());
+ }
+ }
+
+ public void reinitializeConnector() {
+ LOGGER.info("connector re-init with relay node " + this.getRelayNode().getUrl());
+ LOGGER.info("connector re-init with indexer node " + this.getIndexerNode().getUrl());
+ this.indexer_instance = new IndexerClient(this.getIndexerNode().getUrl(), this.getIndexerNode().getPort(), this.getIndexerNode().getAuthtoken(), this.getIndexerNode().getAuthtoken_key());
+ this.provider_instance = new AlgodClient(this.getRelayNode().getUrl(), this.getRelayNode().getPort(), this.getRelayNode().getAuthtoken(), this.getRelayNode().getAuthtoken_key());
+ }
+
+ public AlgoRelayNode selectSpeedyRelayNode() {
+ // verify and select node
+ AlgoRelayNode winner = null;
+ if (this.chaininfo.getNodes().size() == 1) {
+ winner = this.chaininfo.getNodes().get(0);
+ LOGGER.info("We only have one relay node candidate so lets move forward with " + winner.getUrl());
+ return winner;
+ } else {
+
+ LOGGER.info("We need to get 1 of these relay candidates working, gonna optimize:");
+ int candindex = 1;
+ for (AlgoRelayNode node: this.chaininfo.getNodes()) {
+ LOGGER.info(" #" + candindex + ": " + node.getUrl());
+ candindex++;
+ }
+
+ boolean nondead_winner_found = false;
+ while (!nondead_winner_found) {
+
+ HashMap candidate_blockstate = new HashMap<>();
+
+ long maxRoundNR = Long.MIN_VALUE;
+ long minDiff = Long.MAX_VALUE;
+ for (AlgoRelayNode candidate: this.getChaininfo().getNodes()) {
+ // make sure to disregard dead nodes
+ if (null == deadnodes.get(candidate.getUrl())) {
+
+ AVMBlockChainConnector connector = new AVMBlockChainConnector(chain, candidate);
+ long init = System.currentTimeMillis();
+ Long lastRound = AVMUtils.getLastRound(connector);
+ //System.out.println("lastRound: " + lastRound);
+ long resp = System.currentTimeMillis() - init;
+
+ if ( (null != lastRound) && (lastRound>0L)) {
+ winner = candidate;
+ if (resp candidate_blockstate.keySet().size()) {
+ LOGGER.warn("Found dead/lagging node, rounddiff=" + diff + ": " + cand_url);
+ deadnodes.put(cand_url, true);
+ }
+ }
+
+ if (null == deadnodes.get(winner.getUrl())) {
+ LOGGER.info("relay node URL " + winner.getUrl() + " seems best option for " + this.chain + ", response_time=" + minDiff + " ms");
+ nondead_winner_found = true;
+ } else {
+ LOGGER.info("We need to re-run, found dead nodes (" + deadnodes.size() + ") in our list ..");
+ LOGGER.info("deadnodes: " + deadnodes.keySet());
+ if (this.getChaininfo().getNodes().size() == deadnodes.size()) {
+ LOGGER.error("All node candidates are dead?");
+ SystemUtils.halt();
+ }
+ }
+
+ }
+
+ }
+
+ }
+ return winner;
+ }
+
+
+ public AlgoIndexerNode selectSpeedyIndexerNode() {
+ // verify and select node
+ AlgoIndexerNode winner = null;
+ if (this.chaininfo.getIdxnodes().size() == 1) {
+ winner = this.chaininfo.getIdxnodes().get(0);
+ LOGGER.info("We only have one indexer node candidate so lets move forward with " + winner.getUrl());
+ return winner;
+ } else {
+
+ LOGGER.info("We need to get 1 of these indexer candidates working, gonna optimize:");
+ int candindex = 1;
+ for (AlgoIndexerNode node: this.chaininfo.getIdxnodes()) {
+ LOGGER.info(" #" + candindex + ": " + node.getUrl());
+ candindex++;
+ }
+
+ boolean nondead_winner_found = false;
+ while (!nondead_winner_found) {
+
+ HashMap candidate_blockstate = new HashMap<>();
+
+ long maxRoundNR = Long.MIN_VALUE;
+ long minDiff = Long.MAX_VALUE;
+ for (AlgoIndexerNode candidate: this.getChaininfo().getIdxnodes()) {
+ // make sure to disregard dead nodes
+ if (null == deadnodes.get(candidate.getUrl())) {
+
+ AVMBlockChainConnector connector = new AVMBlockChainConnector(chain, candidate);
+ long init = System.currentTimeMillis();
+ Long lastRound = AVMUtils.getIndexerHealthCheck(connector);
+ //System.out.println("lastRound: " + lastRound);
+ long resp = System.currentTimeMillis() - init;
+
+ if ( (null != lastRound) && (lastRound>0L)) {
+ winner = candidate;
+ if (resp candidate_blockstate.keySet().size()) {
+ LOGGER.warn("Found dead/lagging node, rounddiff=" + diff + ": " + cand_url);
+ deadnodes.put(cand_url, true);
+ }
+ }
+
+ if (null == deadnodes.get(winner.getUrl())) {
+ LOGGER.info("indexer node URL " + winner.getUrl() + " seems best option for " + this.chain + ", response_time=" + minDiff + " ms");
+ nondead_winner_found = true;
+ } else {
+ LOGGER.info("We need to re-run, found dead nodes (" + deadnodes.size() + ") in our list ..");
+ LOGGER.info("deadnodes: " + deadnodes.keySet());
+ if (this.getChaininfo().getNodes().size() == deadnodes.size()) {
+ LOGGER.error("All node candidates are dead?");
+ SystemUtils.halt();
+ }
+ }
+
+ }
+
+ }
+
+ }
+ return winner;
+ }
+
+
+ public AlgoRelayNode selectRandomRelayNode() {
+ AlgoRelayNode selected = null;
+ if (this.chaininfo.getNodes().size() == 1) {
+ selected = this.chaininfo.getNodes().get(0);
+ LOGGER.info("We only have one relay node candidate so lets move forward with " + selected.getUrl());
+ return selected;
+ }
+ LOGGER.info("We need to get 1 of these relay candidates working, gonna go random:");
+ int candindex = 1;
+ for (AlgoRelayNode node: this.chaininfo.getNodes()) {
+ LOGGER.info(" #" + candindex + ": " + node.getUrl());
+ candindex++;
+ }
+ boolean selection_complete = false;
+ int randomAttemptCounter = 0;
+ while (!selection_complete && (randomAttemptCounter<=10)) {
+ AlgoRelayNode candidate = getRandom_relaynode_candidate();
+
+ AVMBlockChainConnector connector = new AVMBlockChainConnector(chain, candidate);
+ long init = System.currentTimeMillis();
+ Long lastRound = AVMUtils.getLastRound(connector);
+ //System.out.println("lastRound: " + lastRound);
+ long resp = System.currentTimeMillis() - init;
+
+ if ( (null != lastRound) && (lastRound>0L)) {
+ LOGGER.info("node " + candidate.getUrl() + " looks fine for " + this.chain + ", will use it");
+ LOGGER.info("lastRound='" + lastRound + "', response_time=" + resp + " ms");
+ selected = candidate;
+ selection_complete = true;
+ } else {
+ LOGGER.info("Failed attempt using node " + candidate.getUrl() + ", randomAttemptCounter=" + randomAttemptCounter);
+ }
+ randomAttemptCounter++;
+ }
+
+ return selected;
+ }
+
+ public AlgoIndexerNode selectRandomIndexerNode() {
+ AlgoIndexerNode selected = null;
+ if (this.chaininfo.getIdxnodes().size() == 1) {
+ selected = this.chaininfo.getIdxnodes().get(0);
+ LOGGER.info("We only have one indexer node candidate so lets move forward with " + selected.getUrl());
+ return selected;
+ }
+ LOGGER.info("We need to get 1 of these indexer candidates working, gonna go random:");
+ int candindex = 1;
+ for (AlgoIndexerNode node: this.chaininfo.getIdxnodes()) {
+ LOGGER.info(" #" + candindex + ": " + node.getUrl());
+ candindex++;
+ }
+ boolean selection_complete = false;
+ int randomAttemptCounter = 0;
+ while (!selection_complete && (randomAttemptCounter<=10)) {
+ AlgoIndexerNode candidate = getRandom_idxnode_candidate();
+ AVMBlockChainConnector connector = new AVMBlockChainConnector(chain, candidate);
+ long init = System.currentTimeMillis();
+ Long lastRound = AVMUtils.getIndexerHealthCheck(connector);
+ //System.out.println("lastRound: " + lastRound);
+ long resp = System.currentTimeMillis() - init;
+
+ if ( (null != lastRound) && (lastRound>0L)) {
+ LOGGER.info("node URL " + candidate.getUrl() + " looks fine for " + this.chain + ", will use it");
+ LOGGER.info("lastRound='" + lastRound + "', response_time=" + resp + " ms");
+ selected = candidate;
+ selection_complete = true;
+ } else {
+ LOGGER.info("Failed attempt using node " + candidate.getUrl() + ", randomAttemptCounter=" + randomAttemptCounter);
+ }
+ randomAttemptCounter++;
+ }
+ return selected;
+ }
+
+ public AlgoIndexerNode selectRandomIndexerNode(String _skipthisNode) {
+ LOGGER.info("We need to get 1 of these candidates working, gonna go random without " + _skipthisNode);
+ AlgoIndexerNode selected = null;
+ if (this.chaininfo.getIdxnodes().size() == 1) {
+ selected = this.chaininfo.getIdxnodes().get(0);
+ LOGGER.info("We only have one indexer node candidate so lets move forward with " + selected.getUrl());
+ return selected;
+ }
+ LOGGER.info("We need to get 1 of these indexer candidates working, gonna go random:");
+ int candindex = 1;
+ for (AlgoIndexerNode node: this.chaininfo.getIdxnodes()) {
+ if (!_skipthisNode.equals(node.getUrl())) {
+ LOGGER.info(" #" + candindex + ": " + node.getUrl());
+ candindex++;
+ }
+ }
+ boolean morethan1Candidate = true;
+ if (this.chaininfo.getIdxnodes().size() == 1) morethan1Candidate = false;
+ boolean selection_complete = false;
+ int randomAttemptCounter = 0;
+ while (!selection_complete && (randomAttemptCounter<=10)) {
+ AlgoIndexerNode candidate = getRandom_idxnode_candidate();
+
+ if (morethan1Candidate && _skipthisNode.equals(candidate.getUrl())) {
+ // lets pick a different node
+ } else if (!morethan1Candidate && _skipthisNode.equals(candidate.getUrl())) {
+ // early exit
+ if (!morethan1Candidate) randomAttemptCounter = 100;
+ } else {
+ AVMBlockChainConnector connector = new AVMBlockChainConnector(chain, candidate);
+ long init = System.currentTimeMillis();
+ Long lastRound = AVMUtils.getIndexerHealthCheck(connector);
+ //System.out.println("lastRound: " + lastRound);
+ long resp = System.currentTimeMillis() - init;
+
+ if ( (null != lastRound) && (lastRound>0L)) {
+ LOGGER.info("node URL " + candidate.getUrl() + " looks fine for " + this.chain + ", will use it");
+ LOGGER.info("lastRound='" + lastRound + "', response_time=" + resp + " ms");
+ selected = candidate;
+ selection_complete = true;
+ } else {
+ LOGGER.info("Failed attempt using node " + candidate.getUrl() + ", randomAttemptCounter=" + randomAttemptCounter);
+ }
+ randomAttemptCounter++;
+ }
+ }
+ return selected;
+ }
+
+
+ private AlgoRelayNode getRandom_relaynode_candidate() {
+ int size = this.chaininfo.getNodes().size();
+ if (size == 0) {
+ LOGGER.error("We have no node candidates available. We should not be instantiated at at this point ..");
+ SystemUtils.halt();
+ } else if (size == 1) {
+ return this.chaininfo.getNodes().get(0);
+ } else {
+ int selection = NumUtils.randomNumWithinRangeAsInt(1, size);
+ int index = 1;
+ for (AlgoRelayNode node: this.chaininfo.getNodes()) {
+ if (selection == index) return node;
+ index++;
+ }
+ return this.chaininfo.getNodes().get(0);
+ }
+ LOGGER.error("We have no node candidates available. We should not be instantiated at at this point ..");
+ SystemUtils.halt();
+ return null;
+ }
+
+ private AlgoIndexerNode getRandom_idxnode_candidate() {
+ int size = this.chaininfo.getNodes().size();
+ if (size == 0) {
+ LOGGER.error("We have no node candidates available. We should not be instantiated at at this point ..");
+ SystemUtils.halt();
+ } else if (size == 1) {
+ return this.chaininfo.getIdxnodes().get(0);
+ } else {
+ int selection = NumUtils.randomNumWithinRangeAsInt(1, size);
+ int index = 1;
+ for (AlgoIndexerNode node: this.chaininfo.getIdxnodes()) {
+ if (selection == index) return node;
+ index++;
+ }
+ return this.chaininfo.getIdxnodes().get(0);
+ }
+ LOGGER.error("We have no node candidates available. We should not be instantiated at at this point ..");
+ SystemUtils.halt();
+ return null;
+ }
+
+ public AVMChain getChain() {
+ return chain;
+ }
+
+ public void setChain(AVMChain chain) {
+ this.chain = chain;
+ }
+
+ public AVMChainInfo getChaininfo() {
+ return chaininfo;
+ }
+
+ public void setChaininfo(AVMChainInfo chaininfo) {
+ this.chaininfo = chaininfo;
+ }
+
+ public AlgodClient getProvider_instance() {
+ return provider_instance;
+ }
+
+ public void setProvider_instance(AlgodClient provider_instance) {
+ this.provider_instance = provider_instance;
+ }
+
+ public HashMap getDeadnodes() {
+ return deadnodes;
+ }
+
+ public void setDeadnodes(HashMap deadnodes) {
+ this.deadnodes = deadnodes;
+ }
+
+ public AlgoRelayNode getRelayNode() {
+ return relayNode;
+ }
+
+ public void setRelayNode(AlgoRelayNode relayNode) {
+ this.relayNode = relayNode;
+ }
+
+ public AlgoIndexerNode getIndexerNode() {
+ return indexerNode;
+ }
+
+ public void setIndexerNode(AlgoIndexerNode indexerNode) {
+ this.indexerNode = indexerNode;
+ }
+
+ public IndexerClient getIndexer_instance() {
+ return indexer_instance;
+ }
+
+ public void setIndexer_instance(IndexerClient indexer_instance) {
+ this.indexer_instance = indexer_instance;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/objects/avm/connector/AVMBlockChainUltraConnector.java b/src/main/java/crypto/forestfish/objects/avm/connector/AVMBlockChainUltraConnector.java
new file mode 100644
index 0000000..4080801
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/avm/connector/AVMBlockChainUltraConnector.java
@@ -0,0 +1,80 @@
+package crypto.forestfish.objects.avm.connector;
+
+import java.util.HashMap;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import crypto.forestfish.enums.BlockchainType;
+import crypto.forestfish.enums.avm.AVMChain;
+import crypto.forestfish.objects.avm.model.chain.AVMChainInfo;
+import crypto.forestfish.utils.AVMUtils;
+import crypto.forestfish.utils.SystemUtils;
+
+public class AVMBlockChainUltraConnector {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(AVMBlockChainUltraConnector.class);
+
+ private HashMap connectors = new HashMap<>();
+ private BlockchainType chainType;
+
+ public AVMBlockChainUltraConnector(BlockchainType _chainType) {
+ super();
+
+ this.chainType = _chainType;
+
+ //Initiate an rpc connection to every public blockchain we known of
+ for (AVMChain chain: AVMChain.values()) {
+ AVMChainInfo chainInfo = AVMUtils.getAVMChainInfo(chain);
+ if (chainInfo == null) {
+ LOGGER.error("No chainInfo for chain " + chain + "?");
+ SystemUtils.halt();
+ }
+ if (BlockchainType.valueOf(chainInfo.getType()) == chainType) {
+ AVMBlockChainConnector connector = new AVMBlockChainConnector(chain, true);
+ connectors.put(chain, connector);
+ }
+ }
+
+ }
+
+ public AVMBlockChainUltraConnector(BlockchainType _chainType, HashMap _chainlimit) {
+ super();
+
+ this.chainType = _chainType;
+
+ if (_chainlimit.keySet().isEmpty()) {
+ LOGGER.error("Empty chain limitation passed as argument");
+ SystemUtils.halt();
+ }
+
+ //Initiate an rpc connection to every public blockchain we known of
+ for (AVMChain chain: AVMChain.values()) {
+ if (null != _chainlimit.get(chain.toString())) {
+ AVMChainInfo chainInfo = AVMUtils.getAVMChainInfo(chain);
+ if (BlockchainType.valueOf(chainInfo.getType()) == chainType) {
+ AVMBlockChainConnector connector = new AVMBlockChainConnector(chain, true);
+ connectors.put(chain, connector);
+ }
+ }
+ }
+
+ }
+
+ public HashMap getConnectors() {
+ return connectors;
+ }
+
+ public void setConnectors(HashMap connectors) {
+ this.connectors = connectors;
+ }
+
+ public BlockchainType getChainType() {
+ return chainType;
+ }
+
+ public void setChainType(BlockchainType chainType) {
+ this.chainType = chainType;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/objects/avm/model/asa/ASAContentOnchainReply.java b/src/main/java/crypto/forestfish/objects/avm/model/asa/ASAContentOnchainReply.java
new file mode 100644
index 0000000..26e308b
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/avm/model/asa/ASAContentOnchainReply.java
@@ -0,0 +1,43 @@
+package crypto.forestfish.objects.avm.model.asa;
+
+public class ASAContentOnchainReply {
+
+ private Long index;
+ private ASAParamsOnchain params;
+
+ public ASAContentOnchainReply() {
+ super();
+ }
+
+ public Long getIndex() {
+ return index;
+ }
+
+ public void setIndex(Long index) {
+ this.index = index;
+ }
+
+ public ASAParamsOnchain getParams() {
+ return params;
+ }
+
+ public void setParams(ASAParamsOnchain params) {
+ this.params = params;
+ }
+
+ @Override
+ public String toString() {
+ StringBuffer sb = new StringBuffer();
+ sb.append("index=" + this.getIndex());
+ if (null != this.getParams().getUnit_name()) sb.append(" unit-name=" + this.getParams().getUnit_name());
+ if (null != this.getParams().getName()) sb.append(" name=" + this.getParams().getName());
+ sb.append(" total=" + this.getParams().getTotal());
+ sb.append(" decimals=" + this.getParams().getDecimals());
+ sb.append(" default_frozen=" + this.getParams().getDefault_frozen());
+ sb.append(" creator=" + this.getParams().getCreator());
+ if (null != this.getParams().getUrl()) sb.append(" url=" + this.getParams().getUrl());
+ if (null != this.getParams().getMetadata_hash()) sb.append(" metadata_hash=" + this.getParams().getMetadata_hash());
+ return sb.toString();
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/objects/avm/model/asa/ASAIndex.java b/src/main/java/crypto/forestfish/objects/avm/model/asa/ASAIndex.java
new file mode 100644
index 0000000..c0e154d
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/avm/model/asa/ASAIndex.java
@@ -0,0 +1,26 @@
+package crypto.forestfish.objects.avm.model.asa;
+
+import java.util.HashMap;
+
+public class ASAIndex {
+
+ private HashMap tokens = new HashMap<>();
+
+ public ASAIndex() {
+ super();
+ }
+
+ public ASAIndex(HashMap tokens) {
+ super();
+ this.tokens = tokens;
+ }
+
+ public HashMap getTokens() {
+ return tokens;
+ }
+
+ public void setTokens(HashMap tokens) {
+ this.tokens = tokens;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/objects/avm/model/asa/ASAParamsOnchain.java b/src/main/java/crypto/forestfish/objects/avm/model/asa/ASAParamsOnchain.java
new file mode 100644
index 0000000..502a431
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/avm/model/asa/ASAParamsOnchain.java
@@ -0,0 +1,165 @@
+package crypto.forestfish.objects.avm.model.asa;
+
+import java.math.BigInteger;
+
+import com.fasterxml.jackson.annotation.JsonAlias;
+
+public class ASAParamsOnchain {
+
+ private String clawback;
+ private String creator;
+ private Integer decimals;
+
+ @JsonAlias("default-frozen")
+ private Boolean default_frozen;
+
+ private String freeze;
+ private String manager;
+
+ @JsonAlias("metadata-hash")
+ private String metadata_hash;
+
+ private String name;
+
+ @JsonAlias("name-b64")
+ private String name_b64;
+
+ private String reserve;
+ private BigInteger total;
+
+ @JsonAlias("unit-name")
+ private String unit_name;
+
+ @JsonAlias("unit-name-b64")
+ private String unit_name_b64;
+
+ private String url;
+
+ @JsonAlias("url-b64")
+ private String url_b64;
+
+ public ASAParamsOnchain() {
+ super();
+ }
+
+ public String getClawback() {
+ return clawback;
+ }
+
+ public void setClawback(String clawback) {
+ this.clawback = clawback;
+ }
+
+ public String getCreator() {
+ return creator;
+ }
+
+ public void setCreator(String creator) {
+ this.creator = creator;
+ }
+
+ public Integer getDecimals() {
+ return decimals;
+ }
+
+ public void setDecimals(Integer decimals) {
+ this.decimals = decimals;
+ }
+
+ public Boolean getDefault_frozen() {
+ return default_frozen;
+ }
+
+ public void setDefault_frozen(Boolean default_frozen) {
+ this.default_frozen = default_frozen;
+ }
+
+ public String getFreeze() {
+ return freeze;
+ }
+
+ public void setFreeze(String freeze) {
+ this.freeze = freeze;
+ }
+
+ public String getManager() {
+ return manager;
+ }
+
+ public void setManager(String manager) {
+ this.manager = manager;
+ }
+
+ public String getMetadata_hash() {
+ return metadata_hash;
+ }
+
+ public void setMetadata_hash(String metadata_hash) {
+ this.metadata_hash = metadata_hash;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getName_b64() {
+ return name_b64;
+ }
+
+ public void setName_b64(String name_b64) {
+ this.name_b64 = name_b64;
+ }
+
+ public String getReserve() {
+ return reserve;
+ }
+
+ public void setReserve(String reserve) {
+ this.reserve = reserve;
+ }
+
+ public String getUnit_name() {
+ return unit_name;
+ }
+
+ public void setUnit_name(String unit_name) {
+ this.unit_name = unit_name;
+ }
+
+ public String getUnit_name_b64() {
+ return unit_name_b64;
+ }
+
+ public void setUnit_name_b64(String unit_name_b64) {
+ this.unit_name_b64 = unit_name_b64;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public String getUrl_b64() {
+ return url_b64;
+ }
+
+ public void setUrl_b64(String url_b64) {
+ this.url_b64 = url_b64;
+ }
+
+ public BigInteger getTotal() {
+ return total;
+ }
+
+ public void setTotal(BigInteger total) {
+ this.total = total;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/objects/avm/model/asa/AVMASAInfo.java b/src/main/java/crypto/forestfish/objects/avm/model/asa/AVMASAInfo.java
new file mode 100644
index 0000000..b4fec4f
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/avm/model/asa/AVMASAInfo.java
@@ -0,0 +1,86 @@
+package crypto.forestfish.objects.avm.model.asa;
+
+import java.util.ArrayList;
+
+public class AVMASAInfo {
+
+ private String symbol;
+ private Long id;
+ private String name;
+ private Integer decimals;
+ private String chain;
+ private ArrayList origins = new ArrayList();
+ private String category;
+
+ public AVMASAInfo() {
+ super();
+ }
+
+ public AVMASAInfo(String _symbol, Long _id, String _name, Integer _decimals, String _category, String _chain, ArrayList _origins) {
+ super();
+ this.symbol = _symbol;
+ this.id = _id;
+ this.name = _name;
+ this.decimals = _decimals;
+ this.category = _category;
+ this.chain = _chain;
+ this.origins = _origins;
+ }
+
+ public String getSymbol() {
+ return symbol;
+ }
+
+ public void setSymbol(String symbol) {
+ this.symbol = symbol;
+ }
+
+ public ArrayList getOrigins() {
+ return origins;
+ }
+
+ public void setOrigins(ArrayList origins) {
+ this.origins = origins;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public Integer getDecimals() {
+ return decimals;
+ }
+
+ public void setDecimals(Integer decimals) {
+ this.decimals = decimals;
+ }
+
+ public String getChain() {
+ return chain;
+ }
+
+ public void setChain(String chain) {
+ this.chain = chain;
+ }
+
+ public String getCategory() {
+ return category;
+ }
+
+ public void setCategory(String category) {
+ this.category = category;
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/objects/avm/model/chain/AVMChainIndex.java b/src/main/java/crypto/forestfish/objects/avm/model/chain/AVMChainIndex.java
new file mode 100644
index 0000000..7f8c61d
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/avm/model/chain/AVMChainIndex.java
@@ -0,0 +1,28 @@
+package crypto.forestfish.objects.avm.model.chain;
+
+import java.util.HashMap;
+
+import crypto.forestfish.enums.avm.AVMChain;
+
+public class AVMChainIndex {
+
+ private HashMap networks = new HashMap<>();
+
+ public AVMChainIndex() {
+ super();
+ }
+
+ public AVMChainIndex(HashMap networks) {
+ super();
+ this.networks = networks;
+ }
+
+ public HashMap getNetworks() {
+ return networks;
+ }
+
+ public void setNetworks(HashMap networks) {
+ this.networks = networks;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/objects/avm/model/chain/AVMChainInfo.java b/src/main/java/crypto/forestfish/objects/avm/model/chain/AVMChainInfo.java
new file mode 100644
index 0000000..f88c829
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/avm/model/chain/AVMChainInfo.java
@@ -0,0 +1,151 @@
+package crypto.forestfish.objects.avm.model.chain;
+
+import java.util.ArrayList;
+
+import crypto.forestfish.objects.avm.AlgoIndexerNode;
+import crypto.forestfish.objects.avm.AlgoRelayNode;
+import crypto.forestfish.objects.avm.model.asa.ASAIndex;
+import crypto.forestfish.objects.avm.model.nft.AVMNFTIndex;
+
+public class AVMChainInfo {
+
+ private String shortName;
+ private String chainName;
+ private String type;
+ private String genesisID;
+ private String genesisHash;
+ private AVMCurrency nativeCurrency = null;
+ private ArrayList nodes = new ArrayList();
+ private ArrayList idxnodes = new ArrayList();
+ private ArrayList blockexplorerURLs = new ArrayList();
+ private ArrayList faucets = new ArrayList();
+ private ArrayList origins = new ArrayList();
+ private ASAIndex tokenIndex;
+ private AVMNFTIndex nftindex;
+
+ public AVMChainInfo() {
+ super();
+ }
+
+ public AVMChainInfo(String _shortName, String _chainName, String _type, String _genesisID, String _genesisHash, AVMCurrency _nativeCurrency, ArrayList _nodes, ArrayList _idxnodes, ArrayList _blockexplorerURLs, ArrayList _faucets, ArrayList _origins, ASAIndex _tokenIndex, AVMNFTIndex _nftindex) {
+ super();
+ this.shortName = _shortName;
+ this.chainName = _chainName;
+ this.type = _type;
+ this.genesisID = _genesisID;
+ this.genesisHash = _genesisHash;
+ this.nativeCurrency = _nativeCurrency;
+ this.nodes = _nodes;
+ this.idxnodes = _idxnodes;
+ this.blockexplorerURLs = _blockexplorerURLs;
+ this.faucets = _faucets;
+ this.origins = _origins;
+ this.tokenIndex = _tokenIndex;
+ this.nftindex = _nftindex;
+ }
+
+ public String getShortName() {
+ return shortName;
+ }
+
+ public void setShortName(String shortName) {
+ this.shortName = shortName;
+ }
+
+ public String getChainName() {
+ return chainName;
+ }
+
+ public void setChainName(String chainName) {
+ this.chainName = chainName;
+ }
+
+ public AVMCurrency getNativeCurrency() {
+ return nativeCurrency;
+ }
+
+ public void setNativeCurrency(AVMCurrency nativeCurrency) {
+ this.nativeCurrency = nativeCurrency;
+ }
+
+ public ArrayList getBlockexplorerURLs() {
+ return blockexplorerURLs;
+ }
+
+ public void setBlockexplorerURLs(ArrayList blockexplorerURLs) {
+ this.blockexplorerURLs = blockexplorerURLs;
+ }
+
+ public ArrayList getOrigins() {
+ return origins;
+ }
+
+ public void setOrigins(ArrayList origins) {
+ this.origins = origins;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public AVMNFTIndex getNftindex() {
+ return nftindex;
+ }
+
+ public void setNftindex(AVMNFTIndex nftindex) {
+ this.nftindex = nftindex;
+ }
+
+ public ArrayList getFaucets() {
+ return faucets;
+ }
+
+ public void setFaucets(ArrayList faucets) {
+ this.faucets = faucets;
+ }
+
+ public ASAIndex getTokenIndex() {
+ return tokenIndex;
+ }
+
+ public void setTokenIndex(ASAIndex tokenIndex) {
+ this.tokenIndex = tokenIndex;
+ }
+
+ public String getGenesisHash() {
+ return genesisHash;
+ }
+
+ public void setGenesisHash(String genesisHash) {
+ this.genesisHash = genesisHash;
+ }
+
+ public String getGenesisID() {
+ return genesisID;
+ }
+
+ public void setGenesisID(String genesisID) {
+ this.genesisID = genesisID;
+ }
+
+ public ArrayList getNodes() {
+ return nodes;
+ }
+
+ public void setNodes(ArrayList nodes) {
+ this.nodes = nodes;
+ }
+
+ public ArrayList getIdxnodes() {
+ return idxnodes;
+ }
+
+ public void setIdxnodes(ArrayList idxnodes) {
+ this.idxnodes = idxnodes;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/objects/avm/model/chain/AVMCurrency.java b/src/main/java/crypto/forestfish/objects/avm/model/chain/AVMCurrency.java
new file mode 100644
index 0000000..59aa7ed
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/avm/model/chain/AVMCurrency.java
@@ -0,0 +1,43 @@
+package crypto.forestfish.objects.avm.model.chain;
+
+public class AVMCurrency {
+ private String name = null;
+ private String symbol = null;
+ private Integer decimal = 18;
+
+ public AVMCurrency() {
+ super();
+ }
+
+ public AVMCurrency(String _name, String _symbol, Integer _decimal) {
+ super();
+ this.name = _name;
+ this.symbol = _symbol;
+ this.decimal = _decimal;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getSymbol() {
+ return symbol;
+ }
+
+ public void setSymbol(String symbol) {
+ this.symbol = symbol;
+ }
+
+ public Integer getDecimal() {
+ return decimal;
+ }
+
+ public void setDecimal(Integer decimal) {
+ this.decimal = decimal;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/objects/avm/model/nft/ARC19Asset.java b/src/main/java/crypto/forestfish/objects/avm/model/nft/ARC19Asset.java
new file mode 100644
index 0000000..353e10e
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/avm/model/nft/ARC19Asset.java
@@ -0,0 +1,213 @@
+package crypto.forestfish.objects.avm.model.nft;
+
+import java.math.BigInteger;
+
+import com.algorand.algosdk.crypto.Address;
+
+import crypto.forestfish.enums.avm.AVMNFTType;
+
+public class ARC19Asset {
+
+ private Long assetID; // only set when minted
+
+ // https://github.com/algorandfoundation/ARCs/blob/main/ARCs/arc-0019.md
+ // https://developer.algorand.org/docs/get-details/transactions/transactions/#asset-parameters
+ private String unitName; // Unit name (un)
+ private String assetName; // Asset Name (an)
+ private String assetURL; // Asset URL RFC-3986 (au)
+ private String assetMetadataHash; // Asset Metadata Hash (am)
+
+ private BigInteger totalNrUnits; // Total Number of Units (t)
+ private Integer decimals; // Number of Digits after the Decimal Points (dc)
+
+ private boolean defaultFrozen = false;
+
+ private Address manager = null; // (m)
+ private Address reserve = null; // (r)
+ private Address freeze = null; // (f)
+ private Address clawback = null; // (c)
+
+ // Calculated
+ private AVMNFTType type; // Calculated based on t+dc
+
+ public ARC19Asset() {
+ super();
+ }
+
+ public ARC19Asset(Long _assetID, String _unitName, String _assetName, String _assetURL, BigInteger _totalNrUnits, Integer _decimals) {
+ super();
+ this.assetID = _assetID;
+ this.unitName = _unitName;
+ this.assetName = _assetName;
+ this.assetURL = _assetURL;
+ this.totalNrUnits = _totalNrUnits;
+ this.decimals = _decimals;
+
+ this.update();
+ }
+
+ public ARC19Asset(String _unitName, String _assetName, String _assetURL, BigInteger _totalNrUnits, Integer _decimals) {
+ super();
+ this.unitName = _unitName;
+ this.assetName = _assetName;
+ this.assetURL = _assetURL;
+ this.totalNrUnits = _totalNrUnits;
+ this.decimals = _decimals;
+
+ this.update();
+ }
+
+ public ARC19Asset(Long _assetID, String _unitName, String _assetName, String _assetURL, BigInteger _totalNrUnits, Integer _decimals, boolean _defaultFrozen, Address _manager, Address _reserve, Address _freeze, Address _clawback) {
+ super();
+ this.assetID = _assetID;
+ this.unitName = _unitName;
+ this.assetName = _assetName;
+ this.assetURL = _assetURL;
+ this.totalNrUnits = _totalNrUnits;
+ this.decimals = _decimals;
+ this.defaultFrozen = _defaultFrozen;
+ this.manager = _manager;
+ this.reserve = _reserve;
+ this.freeze = _freeze;
+ this.clawback = _clawback;
+
+ this.update();
+ }
+
+ public ARC19Asset(String _unitName, String _assetName, String _assetURL, BigInteger _totalNrUnits, Integer _decimals, boolean _defaultFrozen, Address _manager, Address _reserve, Address _freeze, Address _clawback) {
+ super();
+ this.unitName = _unitName;
+ this.assetName = _assetName;
+ this.assetURL = _assetURL;
+ this.totalNrUnits = _totalNrUnits;
+ this.decimals = _decimals;
+ this.defaultFrozen = _defaultFrozen;
+ this.manager = _manager;
+ this.reserve = _reserve;
+ this.freeze = _freeze;
+ this.clawback = _clawback;
+
+ this.update();
+ }
+
+ public void update() {
+
+ // type
+ if ((this.totalNrUnits.compareTo(BigInteger.ONE) == 0) && (this.decimals.equals(0))) this.type = AVMNFTType.PURE;
+
+ }
+
+ public boolean sanityCheck() {
+ return true;
+ }
+
+ public String getUnitName() {
+ return unitName;
+ }
+
+ public void setUnitName(String unitName) {
+ this.unitName = unitName;
+ }
+
+ public String getAssetName() {
+ return assetName;
+ }
+
+ public void setAssetName(String assetName) {
+ this.assetName = assetName;
+ }
+
+ public String getAssetURL() {
+ return assetURL;
+ }
+
+ public void setAssetURL(String assetURL) {
+ this.assetURL = assetURL;
+ }
+
+ public String getAssetMetadataHash() {
+ return assetMetadataHash;
+ }
+
+ public void setAssetMetadataHash(String assetMetadataHash) {
+ this.assetMetadataHash = assetMetadataHash;
+ }
+
+ public BigInteger getTotalNrUnits() {
+ return totalNrUnits;
+ }
+
+ public void setTotalNrUnits(BigInteger totalNrUnits) {
+ this.totalNrUnits = totalNrUnits;
+ }
+
+ public Integer getDecimals() {
+ return decimals;
+ }
+
+ public void setDecimals(Integer decimals) {
+ this.decimals = decimals;
+ }
+
+ public boolean isDefaultFrozen() {
+ return defaultFrozen;
+ }
+
+ public void setDefaultFrozen(boolean defaultFrozen) {
+ this.defaultFrozen = defaultFrozen;
+ }
+
+ public Address getManager() {
+ return manager;
+ }
+
+ public void setManager(Address manager) {
+ this.manager = manager;
+ }
+
+ public Address getReserve() {
+ return reserve;
+ }
+
+ public void setReserve(Address reserve) {
+ this.reserve = reserve;
+ }
+
+ public Address getFreeze() {
+ return freeze;
+ }
+
+ public void setFreeze(Address freeze) {
+ this.freeze = freeze;
+ }
+
+ public Address getClawback() {
+ return clawback;
+ }
+
+ public void setClawback(Address clawback) {
+ this.clawback = clawback;
+ }
+
+ public AVMNFTType getType() {
+ return type;
+ }
+
+ public void setType(AVMNFTType type) {
+ this.type = type;
+ }
+
+ public Long getAssetID() {
+ return assetID;
+ }
+
+ public void setAssetID(Long assetID) {
+ this.assetID = assetID;
+ }
+
+ @Override
+ public String toString() {
+ return "standard=ARC19 assetID=" + this.assetID + " unitName=" + this.unitName + " assetName=\"" + this.assetName + "\" assetURL=" + this.assetURL + " reserve=" + this.reserve.toString();
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/objects/avm/model/nft/ARC19Info.java b/src/main/java/crypto/forestfish/objects/avm/model/nft/ARC19Info.java
new file mode 100644
index 0000000..0af9d8a
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/avm/model/nft/ARC19Info.java
@@ -0,0 +1,133 @@
+package crypto.forestfish.objects.avm.model.nft;
+
+import java.util.ArrayList;
+
+import crypto.forestfish.enums.avm.AVMNFTStandard;
+import crypto.forestfish.enums.avm.AVMNFTState;
+import crypto.forestfish.enums.avm.AVMNFTType;
+
+public class ARC19Info {
+
+ private String unitName;
+ private String creatorAddress;
+ private AVMNFTStandard standard;
+ private AVMNFTType type;
+ private AVMNFTState state;
+ private String description;
+ private String chain;
+ private ArrayList origins = new ArrayList();
+ private String category;
+ private ArrayList linked_asa = new ArrayList();
+
+ public ARC19Info() {
+ super();
+ }
+
+ public ARC19Info(String _unitName, String _creatorAddress, AVMNFTStandard _standard, AVMNFTType _type, AVMNFTState _state, String _description, String _category, String _chain, ArrayList _origins) {
+ super();
+ this.unitName = _unitName;
+ this.creatorAddress = _creatorAddress;
+ this.standard = _standard;
+ this.type = _type;
+ this.state = _state;
+ this.description = _description;
+ this.category = _category;
+ this.chain = _chain;
+ this.origins = _origins;
+ }
+
+ public ARC19Info(String _unitName, String _creatorAddress, AVMNFTStandard _standard, AVMNFTType _type, AVMNFTState _state, String _description, String _category, String _chain, ArrayList _origins, ArrayList _linked_asa) {
+ super();
+ this.unitName = _unitName;
+ this.creatorAddress = _creatorAddress;
+ this.standard = _standard;
+ this.type = _type;
+ this.state = _state;
+ this.description = _description;
+ this.category = _category;
+ this.chain = _chain;
+ this.origins = _origins;
+ this.linked_asa = _linked_asa;
+ }
+
+ public ArrayList getOrigins() {
+ return origins;
+ }
+
+ public void setOrigins(ArrayList origins) {
+ this.origins = origins;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public String getChain() {
+ return chain;
+ }
+
+ public void setChain(String chain) {
+ this.chain = chain;
+ }
+
+ public String getCategory() {
+ return category;
+ }
+
+ public void setCategory(String category) {
+ this.category = category;
+ }
+
+ public ArrayList getLinked_asa() {
+ return linked_asa;
+ }
+
+ public void setLinked_asa(ArrayList linked_asa) {
+ this.linked_asa = linked_asa;
+ }
+
+ public String getUnitName() {
+ return unitName;
+ }
+
+ public void setUnitName(String unitName) {
+ this.unitName = unitName;
+ }
+
+ public String getCreatorAddress() {
+ return creatorAddress;
+ }
+
+ public void setCreatorAddress(String creatorAddress) {
+ this.creatorAddress = creatorAddress;
+ }
+
+ public AVMNFTStandard getStandard() {
+ return standard;
+ }
+
+ public void setStandard(AVMNFTStandard standard) {
+ this.standard = standard;
+ }
+
+ public AVMNFTType getType() {
+ return type;
+ }
+
+ public void setType(AVMNFTType type) {
+ this.type = type;
+ }
+
+ public AVMNFTState getState() {
+ return state;
+ }
+
+ public void setState(AVMNFTState state) {
+ this.state = state;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/objects/avm/model/nft/ARC3Asset.java b/src/main/java/crypto/forestfish/objects/avm/model/nft/ARC3Asset.java
new file mode 100644
index 0000000..76bde25
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/avm/model/nft/ARC3Asset.java
@@ -0,0 +1,255 @@
+package crypto.forestfish.objects.avm.model.nft;
+
+import java.math.BigInteger;
+
+import com.algorand.algosdk.crypto.Address;
+
+import crypto.forestfish.enums.avm.AVMNFTType;
+import crypto.forestfish.utils.StringsUtils;
+
+public class ARC3Asset {
+
+ private Long assetID; // only set when minted
+
+ // https://github.com/algorandfoundation/ARCs/blob/main/ARCs/arc-0003.md
+ // https://developer.algorand.org/docs/get-details/transactions/transactions/#asset-parameters
+ private String unitName; // Unit name (un)
+ private String assetName; // Asset Name (an)
+ private String assetURL; // Asset URL RFC-3986 (au)
+ private byte[] assetMetadataHash; // Asset Metadata Hash (am)
+ private String assetMetadataHashSTR; // Asset Metadata Hash (am)
+
+ private BigInteger totalNrUnits; // Total Number of Units (t)
+ private Integer decimals; // Number of Digits after the Decimal Points (dc)
+
+ private boolean defaultFrozen = false; // (df)
+
+ private Address manager = null; // (m)
+ private Address reserve = null; // (r)
+ private Address freeze = null; // (f)
+ private Address clawback = null; // (c)
+
+ // Calculated
+ private AVMNFTType type = AVMNFTType.FRACTIONAL; // Calculated based on t+dc
+ private String assetNameBase64 = null;
+ private String unitNameBase64 = null;
+ private String urlBase64 = null;
+
+ public ARC3Asset() {
+ super();
+ }
+
+ public ARC3Asset(Long _assetID, String _unitName, String _assetName, String _assetURL, BigInteger _totalNrUnits, Integer _decimals) {
+ super();
+ this.assetID = _assetID;
+ this.unitName = _unitName;
+ this.assetName = _assetName;
+ this.assetURL = _assetURL;
+ this.totalNrUnits = _totalNrUnits;
+ this.decimals = _decimals;
+
+ this.update();
+ }
+
+ public ARC3Asset(String _unitName, String _assetName, String _assetURL, BigInteger _totalNrUnits, Integer _decimals) {
+ super();
+ this.unitName = _unitName;
+ this.assetName = _assetName;
+ this.assetURL = _assetURL;
+ this.totalNrUnits = _totalNrUnits;
+ this.decimals = _decimals;
+
+ this.update();
+ }
+
+ public ARC3Asset(Long _assetID, String _unitName, String _assetName, String _assetURL, BigInteger _totalNrUnits, Integer _decimals, boolean _defaultFrozen, String _assetMetadataHashSTR, Address _manager, Address _reserve, Address _freeze, Address _clawback) {
+ super();
+ this.assetID = _assetID;
+ this.unitName = _unitName;
+ this.assetName = _assetName;
+ this.assetURL = _assetURL;
+ this.totalNrUnits = _totalNrUnits;
+ this.decimals = _decimals;
+ this.defaultFrozen = _defaultFrozen;
+ this.assetMetadataHashSTR = _assetMetadataHashSTR;
+ this.manager = _manager;
+ this.reserve = _reserve;
+ this.freeze = _freeze;
+ this.clawback = _clawback;
+
+ this.update();
+ }
+
+ public ARC3Asset(String _unitName, String _assetName, String _assetURL, BigInteger _totalNrUnits, Integer _decimals, boolean _defaultFrozen, Address _manager, Address _reserve, Address _freeze, Address _clawback) {
+ super();
+ this.unitName = _unitName;
+ this.assetName = _assetName;
+ this.assetURL = _assetURL;
+ this.totalNrUnits = _totalNrUnits;
+ this.decimals = _decimals;
+ this.defaultFrozen = _defaultFrozen;
+ this.manager = _manager;
+ this.reserve = _reserve;
+ this.freeze = _freeze;
+ this.clawback = _clawback;
+
+ this.update();
+ }
+
+ public void update() {
+
+ // base64
+ this.assetNameBase64 = StringsUtils.encodeStringToBase64(this.assetName);
+ this.unitNameBase64 = StringsUtils.encodeStringToBase64(this.unitName);
+ this.urlBase64 = StringsUtils.encodeStringToBase64(this.assetURL);
+
+ // type
+ if ((this.totalNrUnits.compareTo(BigInteger.ONE) == 0) && (this.decimals.equals(0))) this.type = AVMNFTType.PURE;
+
+ }
+
+ public boolean sanityCheck() {
+ return true;
+ }
+
+ public String getUnitName() {
+ return unitName;
+ }
+
+ public void setUnitName(String unitName) {
+ this.unitName = unitName;
+ }
+
+ public String getAssetName() {
+ return assetName;
+ }
+
+ public void setAssetName(String assetName) {
+ this.assetName = assetName;
+ }
+
+ public String getAssetURL() {
+ return assetURL;
+ }
+
+ public void setAssetURL(String assetURL) {
+ this.assetURL = assetURL;
+ }
+
+ public BigInteger getTotalNrUnits() {
+ return totalNrUnits;
+ }
+
+ public void setTotalNrUnits(BigInteger totalNrUnits) {
+ this.totalNrUnits = totalNrUnits;
+ }
+
+ public Integer getDecimals() {
+ return decimals;
+ }
+
+ public void setDecimals(Integer decimals) {
+ this.decimals = decimals;
+ }
+
+ public boolean isDefaultFrozen() {
+ return defaultFrozen;
+ }
+
+ public void setDefaultFrozen(boolean defaultFrozen) {
+ this.defaultFrozen = defaultFrozen;
+ }
+
+ public Address getManager() {
+ return manager;
+ }
+
+ public void setManager(Address manager) {
+ this.manager = manager;
+ }
+
+ public Address getReserve() {
+ return reserve;
+ }
+
+ public void setReserve(Address reserve) {
+ this.reserve = reserve;
+ }
+
+ public Address getFreeze() {
+ return freeze;
+ }
+
+ public void setFreeze(Address freeze) {
+ this.freeze = freeze;
+ }
+
+ public Address getClawback() {
+ return clawback;
+ }
+
+ public void setClawback(Address clawback) {
+ this.clawback = clawback;
+ }
+
+ public AVMNFTType getType() {
+ return type;
+ }
+
+ public void setType(AVMNFTType type) {
+ this.type = type;
+ }
+
+ public String getAssetNameBase64() {
+ return assetNameBase64;
+ }
+
+ public void setAssetNameBase64(String assetNameBase64) {
+ this.assetNameBase64 = assetNameBase64;
+ }
+
+ public String getUnitNameBase64() {
+ return unitNameBase64;
+ }
+
+ public void setUnitNameBase64(String unitNameBase64) {
+ this.unitNameBase64 = unitNameBase64;
+ }
+
+ public String getUrlBase64() {
+ return urlBase64;
+ }
+
+ public void setUrlBase64(String urlBase64) {
+ this.urlBase64 = urlBase64;
+ }
+
+ public Long getAssetID() {
+ return assetID;
+ }
+
+ public void setAssetID(Long assetID) {
+ this.assetID = assetID;
+ }
+
+ public byte[] getAssetMetadataHash() {
+ return assetMetadataHash;
+ }
+
+ public void setAssetMetadataHash(byte[] assetMetadataHash) {
+ this.assetMetadataHash = assetMetadataHash;
+ }
+
+ public String getAssetMetadataHashSTR() {
+ return assetMetadataHashSTR;
+ }
+
+ public void setAssetMetadataHashSTR(String assetMetadataHashSTR) {
+ this.assetMetadataHashSTR = assetMetadataHashSTR;
+ }
+
+ @Override
+ public String toString() {
+ return "standard=ARC3 assetID=" + this.assetID + " unitName=" + this.unitName + " assetName=\"" + this.assetName + "\" assetURL=" + this.assetURL;
+ }
+}
diff --git a/src/main/java/crypto/forestfish/objects/avm/model/nft/ARC3Info.java b/src/main/java/crypto/forestfish/objects/avm/model/nft/ARC3Info.java
new file mode 100644
index 0000000..39471cc
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/avm/model/nft/ARC3Info.java
@@ -0,0 +1,133 @@
+package crypto.forestfish.objects.avm.model.nft;
+
+import java.util.ArrayList;
+
+import crypto.forestfish.enums.avm.AVMNFTStandard;
+import crypto.forestfish.enums.avm.AVMNFTState;
+import crypto.forestfish.enums.avm.AVMNFTType;
+
+public class ARC3Info {
+
+ private String unitName;
+ private String creatorAddress;
+ private AVMNFTStandard standard;
+ private AVMNFTType type;
+ private AVMNFTState state;
+ private String description;
+ private String chain;
+ private ArrayList origins = new ArrayList();
+ private String category;
+ private ArrayList linked_tokens = new ArrayList();
+
+ public ARC3Info() {
+ super();
+ }
+
+ public ARC3Info(String _unitName, String _creatorAddress, AVMNFTStandard _standard, AVMNFTType _type, AVMNFTState _state, String _description, String _category, String _chain, ArrayList _origins) {
+ super();
+ this.unitName = _unitName;
+ this.creatorAddress = _creatorAddress;
+ this.standard = _standard;
+ this.type = _type;
+ this.state = _state;
+ this.description = _description;
+ this.category = _category;
+ this.chain = _chain;
+ this.origins = _origins;
+ }
+
+ public ARC3Info(String _unitName, String _creatorAddress, AVMNFTStandard _standard, AVMNFTType _type, AVMNFTState _state, String _description, String _category, String _chain, ArrayList _origins, ArrayList _linked_tokens) {
+ super();
+ this.unitName = _unitName;
+ this.creatorAddress = _creatorAddress;
+ this.standard = _standard;
+ this.type = _type;
+ this.state = _state;
+ this.description = _description;
+ this.category = _category;
+ this.chain = _chain;
+ this.origins = _origins;
+ this.linked_tokens = _linked_tokens;
+ }
+
+ public ArrayList getOrigins() {
+ return origins;
+ }
+
+ public void setOrigins(ArrayList origins) {
+ this.origins = origins;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public String getChain() {
+ return chain;
+ }
+
+ public void setChain(String chain) {
+ this.chain = chain;
+ }
+
+ public String getCategory() {
+ return category;
+ }
+
+ public void setCategory(String category) {
+ this.category = category;
+ }
+
+ public ArrayList getLinked_tokens() {
+ return linked_tokens;
+ }
+
+ public void setLinked_tokens(ArrayList linked_tokens) {
+ this.linked_tokens = linked_tokens;
+ }
+
+ public String getUnitName() {
+ return unitName;
+ }
+
+ public void setUnitName(String unitName) {
+ this.unitName = unitName;
+ }
+
+ public String getCreatorAddress() {
+ return creatorAddress;
+ }
+
+ public void setCreatorAddress(String creatorAddress) {
+ this.creatorAddress = creatorAddress;
+ }
+
+ public AVMNFTStandard getStandard() {
+ return standard;
+ }
+
+ public void setStandard(AVMNFTStandard standard) {
+ this.standard = standard;
+ }
+
+ public AVMNFTType getType() {
+ return type;
+ }
+
+ public void setType(AVMNFTType type) {
+ this.type = type;
+ }
+
+ public AVMNFTState getState() {
+ return state;
+ }
+
+ public void setState(AVMNFTState state) {
+ this.state = state;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/objects/avm/model/nft/ARC69Asset.java b/src/main/java/crypto/forestfish/objects/avm/model/nft/ARC69Asset.java
new file mode 100644
index 0000000..5e6d926
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/avm/model/nft/ARC69Asset.java
@@ -0,0 +1,213 @@
+package crypto.forestfish.objects.avm.model.nft;
+
+import java.math.BigInteger;
+
+import com.algorand.algosdk.crypto.Address;
+
+import crypto.forestfish.enums.avm.AVMNFTType;
+
+public class ARC69Asset {
+
+ private Long assetID; // only set when minted
+
+ // https://github.com/algorandfoundation/ARCs/blob/main/ARCs/arc-0003.md
+ // https://developer.algorand.org/docs/get-details/transactions/transactions/#asset-parameters
+ private String unitName; // Unit name (un)
+ private String assetName; // Asset Name (an)
+ private String assetURL; // Asset URL RFC-3986 (au)
+ private String assetMetadataHash; // Asset Metadata Hash (am)
+
+ private BigInteger totalNrUnits; // Total Number of Units (t)
+ private Integer decimals; // Number of Digits after the Decimal Points (dc)
+
+ private boolean defaultFrozen = false;
+
+ private Address manager = null; // (m)
+ private Address reserve = null; // (r)
+ private Address freeze = null; // (f)
+ private Address clawback = null; // (c)
+
+ // Calculated
+ private AVMNFTType type; // Calculated based on t+dc
+
+ public ARC69Asset() {
+ super();
+ }
+
+ public ARC69Asset(Long _assetID, String _unitName, String _assetName, String _assetURL, BigInteger _totalNrUnits, Integer _decimals) {
+ super();
+ this.assetID = _assetID;
+ this.unitName = _unitName;
+ this.assetName = _assetName;
+ this.assetURL = _assetURL;
+ this.totalNrUnits = _totalNrUnits;
+ this.decimals = _decimals;
+
+ this.update();
+ }
+
+ public ARC69Asset(String _unitName, String _assetName, String _assetURL, BigInteger _totalNrUnits, Integer _decimals) {
+ super();
+ this.unitName = _unitName;
+ this.assetName = _assetName;
+ this.assetURL = _assetURL;
+ this.totalNrUnits = _totalNrUnits;
+ this.decimals = _decimals;
+
+ this.update();
+ }
+
+ public ARC69Asset(Long _assetID, String _unitName, String _assetName, String _assetURL, BigInteger _totalNrUnits, Integer _decimals, boolean _defaultFrozen, Address _manager, Address _reserve, Address _freeze, Address _clawback) {
+ super();
+ this.assetID = _assetID;
+ this.unitName = _unitName;
+ this.assetName = _assetName;
+ this.assetURL = _assetURL;
+ this.totalNrUnits = _totalNrUnits;
+ this.decimals = _decimals;
+ this.defaultFrozen = _defaultFrozen;
+ this.manager = _manager;
+ this.reserve = _reserve;
+ this.freeze = _freeze;
+ this.clawback = _clawback;
+
+ this.update();
+ }
+
+ public ARC69Asset(String _unitName, String _assetName, String _assetURL, BigInteger _totalNrUnits, Integer _decimals, boolean _defaultFrozen, Address _manager, Address _reserve, Address _freeze, Address _clawback) {
+ super();
+ this.unitName = _unitName;
+ this.assetName = _assetName;
+ this.assetURL = _assetURL;
+ this.totalNrUnits = _totalNrUnits;
+ this.decimals = _decimals;
+ this.defaultFrozen = _defaultFrozen;
+ this.manager = _manager;
+ this.reserve = _reserve;
+ this.freeze = _freeze;
+ this.clawback = _clawback;
+
+ this.update();
+ }
+
+ public void update() {
+
+ // type
+ if ((this.totalNrUnits.compareTo(BigInteger.ONE) == 0) && (this.decimals.equals(0))) this.type = AVMNFTType.PURE;
+
+ }
+
+ public boolean sanityCheck() {
+ return true;
+ }
+
+ public String getUnitName() {
+ return unitName;
+ }
+
+ public void setUnitName(String unitName) {
+ this.unitName = unitName;
+ }
+
+ public String getAssetName() {
+ return assetName;
+ }
+
+ public void setAssetName(String assetName) {
+ this.assetName = assetName;
+ }
+
+ public String getAssetURL() {
+ return assetURL;
+ }
+
+ public void setAssetURL(String assetURL) {
+ this.assetURL = assetURL;
+ }
+
+ public String getAssetMetadataHash() {
+ return assetMetadataHash;
+ }
+
+ public void setAssetMetadataHash(String assetMetadataHash) {
+ this.assetMetadataHash = assetMetadataHash;
+ }
+
+ public BigInteger getTotalNrUnits() {
+ return totalNrUnits;
+ }
+
+ public void setTotalNrUnits(BigInteger totalNrUnits) {
+ this.totalNrUnits = totalNrUnits;
+ }
+
+ public Integer getDecimals() {
+ return decimals;
+ }
+
+ public void setDecimals(Integer decimals) {
+ this.decimals = decimals;
+ }
+
+ public boolean isDefaultFrozen() {
+ return defaultFrozen;
+ }
+
+ public void setDefaultFrozen(boolean defaultFrozen) {
+ this.defaultFrozen = defaultFrozen;
+ }
+
+ public Address getManager() {
+ return manager;
+ }
+
+ public void setManager(Address manager) {
+ this.manager = manager;
+ }
+
+ public Address getReserve() {
+ return reserve;
+ }
+
+ public void setReserve(Address reserve) {
+ this.reserve = reserve;
+ }
+
+ public Address getFreeze() {
+ return freeze;
+ }
+
+ public void setFreeze(Address freeze) {
+ this.freeze = freeze;
+ }
+
+ public Address getClawback() {
+ return clawback;
+ }
+
+ public void setClawback(Address clawback) {
+ this.clawback = clawback;
+ }
+
+ public AVMNFTType getType() {
+ return type;
+ }
+
+ public void setType(AVMNFTType type) {
+ this.type = type;
+ }
+
+ public Long getAssetID() {
+ return assetID;
+ }
+
+ public void setAssetID(Long assetID) {
+ this.assetID = assetID;
+ }
+
+ @Override
+ public String toString() {
+ return "standard=ARC69 assetID=" + this.assetID + " unitName=" + this.unitName + " assetName=\"" + this.assetName + "\" assetURL=" + this.assetURL;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/objects/avm/model/nft/ARC69Info.java b/src/main/java/crypto/forestfish/objects/avm/model/nft/ARC69Info.java
new file mode 100644
index 0000000..9db8d1f
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/avm/model/nft/ARC69Info.java
@@ -0,0 +1,133 @@
+package crypto.forestfish.objects.avm.model.nft;
+
+import java.util.ArrayList;
+
+import crypto.forestfish.enums.avm.AVMNFTStandard;
+import crypto.forestfish.enums.avm.AVMNFTState;
+import crypto.forestfish.enums.avm.AVMNFTType;
+
+public class ARC69Info {
+
+ private String unitName;
+ private String creatorAddress;
+ private AVMNFTStandard standard;
+ private AVMNFTType type;
+ private AVMNFTState state;
+ private String description;
+ private String chain;
+ private ArrayList origins = new ArrayList();
+ private String category;
+ private ArrayList linked_asa = new ArrayList();
+
+ public ARC69Info() {
+ super();
+ }
+
+ public ARC69Info(String _unitName, String _creatorAddress, AVMNFTStandard _standard, AVMNFTType _type, AVMNFTState _state, String _description, String _category, String _chain, ArrayList _origins) {
+ super();
+ this.unitName = _unitName;
+ this.creatorAddress = _creatorAddress;
+ this.standard = _standard;
+ this.type = _type;
+ this.state = _state;
+ this.description = _description;
+ this.category = _category;
+ this.chain = _chain;
+ this.origins = _origins;
+ }
+
+ public ARC69Info(String _unitName, String _creatorAddress, AVMNFTStandard _standard, AVMNFTType _type, AVMNFTState _state, String _description, String _category, String _chain, ArrayList _origins, ArrayList _linked_asa) {
+ super();
+ this.unitName = _unitName;
+ this.creatorAddress = _creatorAddress;
+ this.standard = _standard;
+ this.type = _type;
+ this.state = _state;
+ this.description = _description;
+ this.category = _category;
+ this.chain = _chain;
+ this.origins = _origins;
+ this.linked_asa = _linked_asa;
+ }
+
+ public ArrayList getOrigins() {
+ return origins;
+ }
+
+ public void setOrigins(ArrayList origins) {
+ this.origins = origins;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public String getChain() {
+ return chain;
+ }
+
+ public void setChain(String chain) {
+ this.chain = chain;
+ }
+
+ public String getCategory() {
+ return category;
+ }
+
+ public void setCategory(String category) {
+ this.category = category;
+ }
+
+ public ArrayList getLinked_asa() {
+ return linked_asa;
+ }
+
+ public void setLinked_asa(ArrayList linked_asa) {
+ this.linked_asa = linked_asa;
+ }
+
+ public String getUnitName() {
+ return unitName;
+ }
+
+ public void setUnitName(String unitName) {
+ this.unitName = unitName;
+ }
+
+ public String getCreatorAddress() {
+ return creatorAddress;
+ }
+
+ public void setCreatorAddress(String creatorAddress) {
+ this.creatorAddress = creatorAddress;
+ }
+
+ public AVMNFTStandard getStandard() {
+ return standard;
+ }
+
+ public void setStandard(AVMNFTStandard standard) {
+ this.standard = standard;
+ }
+
+ public AVMNFTType getType() {
+ return type;
+ }
+
+ public void setType(AVMNFTType type) {
+ this.type = type;
+ }
+
+ public AVMNFTState getState() {
+ return state;
+ }
+
+ public void setState(AVMNFTState state) {
+ this.state = state;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/objects/avm/model/nft/ASAVerificationStatus.java b/src/main/java/crypto/forestfish/objects/avm/model/nft/ASAVerificationStatus.java
new file mode 100644
index 0000000..f82fcfc
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/avm/model/nft/ASAVerificationStatus.java
@@ -0,0 +1,97 @@
+package crypto.forestfish.objects.avm.model.nft;
+
+import java.util.ArrayList;
+
+public class ASAVerificationStatus {
+
+ private boolean verified;
+ private ArrayList verified_properties = new ArrayList();
+ private ArrayList major_issues = new ArrayList();
+ private ArrayList warnings = new ArrayList();
+ private int score_out_of_10 = 10;
+
+ public ASAVerificationStatus(boolean _verified, ArrayList _verified_properties, ArrayList _major_issues, ArrayList _warnings, int _score_out_of_10) {
+ super();
+ this.verified = _verified;
+ this.verified_properties = _verified_properties;
+ this.major_issues = _major_issues;
+ this.warnings = _warnings;
+ this.score_out_of_10 = _score_out_of_10;
+ }
+
+ public boolean isVerified() {
+ return verified;
+ }
+
+ public void setVerified(boolean verified) {
+ this.verified = verified;
+ }
+
+ public ArrayList getVerified_properties() {
+ return verified_properties;
+ }
+
+ public void setVerified_properties(ArrayList verified_properties) {
+ this.verified_properties = verified_properties;
+ }
+
+ public ArrayList getMajor_issues() {
+ return major_issues;
+ }
+
+ public void setMajor_issues(ArrayList major_issues) {
+ this.major_issues = major_issues;
+ }
+
+ public ArrayList getWarnings() {
+ return warnings;
+ }
+
+ public void setWarnings(ArrayList warnings) {
+ this.warnings = warnings;
+ }
+
+ public int getScore_out_of_10() {
+ return score_out_of_10;
+ }
+
+ public void setScore_out_of_10(int score_out_of_10) {
+ this.score_out_of_10 = score_out_of_10;
+ }
+
+ @Override
+ public String toString() {
+ StringBuffer sb = new StringBuffer();
+
+ sb.append("Verified : " + this.isVerified() + "\n");
+ sb.append("Score [0-10] : " + this.getScore_out_of_10() + "\n");
+ sb.append("-----------------------------------\n");
+
+ int i = 1;
+ if (!major_issues.isEmpty()) {
+ sb.append("Major issues: \n");
+ for (String issue: major_issues) {
+ sb.append(" [#" + i + "] " + issue + "\n");
+ i++;
+ }
+ }
+
+ int x = 1;
+ if (!warnings.isEmpty()) {
+ sb.append("Warnings: \n");
+ for (String warning: warnings) {
+ sb.append(" [#" + x + "] " + warning + "\n");
+ x++;
+ }
+ }
+
+ if (!verified_properties.isEmpty()) {
+ sb.append("Verified parameters: \n");
+ for (String v: verified_properties) {
+ sb.append(" [+] " + v + "\n");
+ }
+ }
+
+ return sb.toString();
+ }
+}
diff --git a/src/main/java/crypto/forestfish/objects/avm/model/nft/AVMNFTIndex.java b/src/main/java/crypto/forestfish/objects/avm/model/nft/AVMNFTIndex.java
new file mode 100644
index 0000000..6b7790e
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/avm/model/nft/AVMNFTIndex.java
@@ -0,0 +1,36 @@
+package crypto.forestfish.objects.avm.model.nft;
+
+import java.util.HashMap;
+
+public class AVMNFTIndex {
+
+ private HashMap arc3s = new HashMap<>();
+ private HashMap arc69s = new HashMap<>();
+
+ public AVMNFTIndex() {
+ super();
+ }
+
+ public AVMNFTIndex(HashMap _arc3s, HashMap _arc69s) {
+ super();
+ this.arc3s = _arc3s;
+ this.arc69s = _arc69s;
+ }
+
+ public HashMap getArc3s() {
+ return arc3s;
+ }
+
+ public void setArc3s(HashMap arc3s) {
+ this.arc3s = arc3s;
+ }
+
+ public HashMap getArc69s() {
+ return arc69s;
+ }
+
+ public void setArc69s(HashMap arc69s) {
+ this.arc69s = arc69s;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/objects/avm/model/nft/metadata/ARC3MetaData.java b/src/main/java/crypto/forestfish/objects/avm/model/nft/metadata/ARC3MetaData.java
new file mode 100644
index 0000000..2b5d809
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/avm/model/nft/metadata/ARC3MetaData.java
@@ -0,0 +1,264 @@
+package crypto.forestfish.objects.avm.model.nft.metadata;
+
+import java.util.HashMap;
+
+public class ARC3MetaData {
+
+ /**
+ * https://github.com/algorandfoundation/ARCs/blob/main/ARCs/arc-0003.md
+ */
+ private String name;
+ private String description;
+ private Integer decimals;
+ private String background_color;
+
+ private String image; // Supports {id}
+ private String image_integrity;
+ private String image_mimetype;
+
+ private String external_url; // Supports {id}
+ private String external_url_integrity;
+ private String external_url_mimetype;
+
+ private String animation_url;
+ private String animation_url_integrity;
+ private String animation_url_mimetype;
+
+ private String extra_metadata;
+
+ private HashMap properties;
+ // Common properties keys:
+ // - String file_url [file_url_integrity, file_url_mimetype]
+
+ private HashMap localization;
+ // Required localization keys:
+ // - String uri (supports {locale})
+ // - String default
+ // - ArrayList locales
+ // - HashMap integrity
+
+ /**
+ * https://docs.opensea.io/docs/metadata-standards + _integrity/_mimetype for uri properties
+ */
+ //private String name;
+ //private String description;
+ //private String background_color;
+
+ //private String image; // Supports {id}
+ //private String image_integrity;
+ //private String image_mimetype;
+
+ private String image_data;
+ private String image_data_integrity;
+ private String image_data_mimetype;
+
+ //private String external_url; // Supports {id}
+ //private String external_url_integrity;
+ //private String external_url_mimetype;
+
+ //private String animation_url;
+ //private String animation_url_integrity;
+ //private String animation_url_mimetype;
+
+ public ARC3MetaData() {
+ super();
+ }
+
+ // Pure constructor
+ public ARC3MetaData(String _name, String _description, Integer _decimals, String _background_color,
+ String _image, String _external_url, String _animation_url,
+ HashMap _properties) {
+ super();
+ this.name = _name;
+ this.description = _description;
+ this.decimals = _decimals;
+ this.background_color = _background_color;
+ this.image = _image;
+ this.external_url = _external_url;
+ this.animation_url = _animation_url;
+ this.properties = _properties;
+ }
+
+ // Full constructor
+ public ARC3MetaData(String _name, String _description, Integer _decimals, String _background_color,
+ String _image, String _image_mimetype, String _image_integrity,
+ String _image_data, String _image_data_mimetype, String _image_data_integrity,
+ String _external_url, String _external_url_mimetype, String _external_url_integrity,
+ String _animation_url, String _animation_url_mimetype, String _animation_url_integrity,
+ HashMap _properties, HashMap _localization) {
+ super();
+ this.decimals = _decimals;
+ this.properties = _properties;
+ this.name = _name;
+ this.description = _description;
+ this.background_color = _background_color;
+ this.image = _image;
+ this.image_mimetype = _image_mimetype;
+ this.image_integrity = _image_integrity;
+ this.image_data = _image_data;
+ this.image_data_mimetype = _image_data_mimetype;
+ this.image_data_integrity = _image_data_integrity;
+ this.external_url = _external_url;
+ this.external_url_mimetype = _external_url_mimetype;
+ this.external_url_integrity = _external_url_integrity;
+ this.animation_url = _animation_url;
+ this.animation_url_mimetype = _animation_url_mimetype;
+ this.animation_url_integrity = _animation_url_integrity;
+ this.localization = _localization;
+ }
+
+
+
+ public String getExtra_metadata() {
+ return extra_metadata;
+ }
+
+ public void setExtra_metadata(String extra_metadata) {
+ this.extra_metadata = extra_metadata;
+ }
+
+ public Integer getDecimals() {
+ return decimals;
+ }
+
+ public void setDecimals(Integer decimals) {
+ this.decimals = decimals;
+ }
+
+ public HashMap getLocalization() {
+ return localization;
+ }
+
+ public void setLocalization(HashMap localization) {
+ this.localization = localization;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public String getBackground_color() {
+ return background_color;
+ }
+
+ public void setBackground_color(String background_color) {
+ this.background_color = background_color;
+ }
+
+ public String getImage() {
+ return image;
+ }
+
+ public void setImage(String image) {
+ this.image = image;
+ }
+
+ public String getImage_integrity() {
+ return image_integrity;
+ }
+
+ public void setImage_integrity(String image_integrity) {
+ this.image_integrity = image_integrity;
+ }
+
+ public String getImage_mimetype() {
+ return image_mimetype;
+ }
+
+ public void setImage_mimetype(String image_mimetype) {
+ this.image_mimetype = image_mimetype;
+ }
+
+ public String getImage_data() {
+ return image_data;
+ }
+
+ public void setImage_data(String image_data) {
+ this.image_data = image_data;
+ }
+
+ public String getImage_data_integrity() {
+ return image_data_integrity;
+ }
+
+ public void setImage_data_integrity(String image_data_integrity) {
+ this.image_data_integrity = image_data_integrity;
+ }
+
+ public String getImage_data_mimetype() {
+ return image_data_mimetype;
+ }
+
+ public void setImage_data_mimetype(String image_data_mimetype) {
+ this.image_data_mimetype = image_data_mimetype;
+ }
+
+ public String getExternal_url() {
+ return external_url;
+ }
+
+ public void setExternal_url(String external_url) {
+ this.external_url = external_url;
+ }
+
+ public String getExternal_url_integrity() {
+ return external_url_integrity;
+ }
+
+ public void setExternal_url_integrity(String external_url_integrity) {
+ this.external_url_integrity = external_url_integrity;
+ }
+
+ public String getExternal_url_mimetype() {
+ return external_url_mimetype;
+ }
+
+ public void setExternal_url_mimetype(String external_url_mimetype) {
+ this.external_url_mimetype = external_url_mimetype;
+ }
+
+ public String getAnimation_url() {
+ return animation_url;
+ }
+
+ public void setAnimation_url(String animation_url) {
+ this.animation_url = animation_url;
+ }
+
+ public String getAnimation_url_integrity() {
+ return animation_url_integrity;
+ }
+
+ public void setAnimation_url_integrity(String animation_url_integrity) {
+ this.animation_url_integrity = animation_url_integrity;
+ }
+
+ public String getAnimation_url_mimetype() {
+ return animation_url_mimetype;
+ }
+
+ public void setAnimation_url_mimetype(String animation_url_mimetype) {
+ this.animation_url_mimetype = animation_url_mimetype;
+ }
+
+ public HashMap getProperties() {
+ return properties;
+ }
+
+ public void setProperties(HashMap properties) {
+ this.properties = properties;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/objects/avm/model/nft/metadata/ARC69ARC19MetaData.java b/src/main/java/crypto/forestfish/objects/avm/model/nft/metadata/ARC69ARC19MetaData.java
new file mode 100644
index 0000000..eccf58e
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/avm/model/nft/metadata/ARC69ARC19MetaData.java
@@ -0,0 +1,166 @@
+package crypto.forestfish.objects.avm.model.nft.metadata;
+
+import java.util.HashMap;
+
+public class ARC69ARC19MetaData {
+
+ /**
+ * https://github.com/algorandfoundation/ARCs/blob/main/ARCs/arc-0069.md
+ */
+ private String standard = "arc69";
+ private String description;
+
+ private String external_url; // Supports {id}
+ private String media_url; // Supports {id}
+ private String mime_type; // (au)
+ private Integer decimals;
+
+ private HashMap properties;
+ // Common properties keys:
+ // - String file_url
+
+ /**
+ * https://docs.opensea.io/docs/metadata-standards
+ */
+ private String name;
+ //private String description;
+ private String background_color;
+
+ private String image; // Supports {id}
+ private String image_data;
+ //private String external_url; // Supports {id}
+ private String animation_url; // Supports {id}
+
+ // deprecated but can be supported, ARC69 is limited to 1024 so skip by default
+ //private ArrayList attributes;
+
+ public ARC69ARC19MetaData() {
+ super();
+ }
+
+ // Pure constructor
+ public ARC69ARC19MetaData(String _description, String _external_url, String _media_url, String _mime_type, Integer _decimals, HashMap _properties) {
+ super();
+ this.description = _description;
+ this.external_url = _external_url;
+ this.media_url = _media_url;
+ this.mime_type = _mime_type;
+ this.decimals = _decimals;
+ this.properties = _properties;
+ }
+
+ // Full constructor
+ public ARC69ARC19MetaData(String _name, String _description, Integer _decimals, String _background_color,
+ String _image, String _image_data, String _external_url, String _animation_url, String _media_url, String _mime_type,
+ HashMap _properties) {
+ super();
+ this.name = _name;
+ this.description = _description;
+ this.decimals = _decimals;
+ this.background_color = _background_color;
+ this.image = _image;
+ this.image_data = _image_data;
+ this.external_url = _external_url;
+ this.animation_url = _animation_url;
+ this.media_url = _media_url;
+ this.mime_type = _mime_type;
+ this.properties = _properties;
+ }
+
+ public String getStandard() {
+ return standard;
+ }
+
+ public void setStandard(String standard) {
+ this.standard = standard;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public String getExternal_url() {
+ return external_url;
+ }
+
+ public void setExternal_url(String external_url) {
+ this.external_url = external_url;
+ }
+
+ public String getMedia_url() {
+ return media_url;
+ }
+
+ public void setMedia_url(String media_url) {
+ this.media_url = media_url;
+ }
+
+ public String getMime_type() {
+ return mime_type;
+ }
+
+ public void setMime_type(String mime_type) {
+ this.mime_type = mime_type;
+ }
+
+ public Integer getDecimals() {
+ return decimals;
+ }
+
+ public void setDecimals(Integer decimals) {
+ this.decimals = decimals;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getBackground_color() {
+ return background_color;
+ }
+
+ public void setBackground_color(String background_color) {
+ this.background_color = background_color;
+ }
+
+ public String getImage() {
+ return image;
+ }
+
+ public void setImage(String image) {
+ this.image = image;
+ }
+
+ public String getImage_data() {
+ return image_data;
+ }
+
+ public void setImage_data(String image_data) {
+ this.image_data = image_data;
+ }
+
+ public String getAnimation_url() {
+ return animation_url;
+ }
+
+ public void setAnimation_url(String animation_url) {
+ this.animation_url = animation_url;
+ }
+
+ public HashMap getProperties() {
+ return properties;
+ }
+
+ public void setProperties(HashMap properties) {
+ this.properties = properties;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/objects/avm/model/nft/metadata/MetaDataEntry.java b/src/main/java/crypto/forestfish/objects/avm/model/nft/metadata/MetaDataEntry.java
new file mode 100644
index 0000000..9b0adeb
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/avm/model/nft/metadata/MetaDataEntry.java
@@ -0,0 +1,51 @@
+package crypto.forestfish.objects.avm.model.nft.metadata;
+
+public class MetaDataEntry {
+
+ private String metajson;
+ private Long tx_roundTime;
+ private Long tx_confirmedRound;
+ private String tx_id;
+
+ public MetaDataEntry() {
+ super();
+ }
+
+ public MetaDataEntry(String metajson) {
+ super();
+ this.metajson = metajson;
+ }
+
+ public String getMetajson() {
+ return metajson;
+ }
+
+ public void setMetajson(String metajson) {
+ this.metajson = metajson;
+ }
+
+ public Long getTx_roundTime() {
+ return tx_roundTime;
+ }
+
+ public void setTx_roundTime(Long tx_roundTime) {
+ this.tx_roundTime = tx_roundTime;
+ }
+
+ public Long getTx_confirmedRound() {
+ return tx_confirmedRound;
+ }
+
+ public void setTx_confirmedRound(Long tx_confirmedRound) {
+ this.tx_confirmedRound = tx_confirmedRound;
+ }
+
+ public String getTx_id() {
+ return tx_id;
+ }
+
+ public void setTx_id(String tx_id) {
+ this.tx_id = tx_id;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/objects/burst/BurstBlockChain.java b/src/main/java/crypto/forestfish/objects/burst/BurstBlockChain.java
new file mode 100644
index 0000000..6ffab8a
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/burst/BurstBlockChain.java
@@ -0,0 +1,50 @@
+package crypto.forestfish.objects.burst;
+
+public class BurstBlockChain {
+
+ private String name = null;
+ private String tokenName = null;
+ private String nodeURL = null;
+ private String blockexplorerURL = null;
+
+ public BurstBlockChain(String name, String tokenName, String nodeURL, String blockexplorerURL) {
+ super();
+ this.name = name;
+ this.tokenName = tokenName;
+ this.nodeURL = nodeURL;
+ this.blockexplorerURL = blockexplorerURL;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getTokenName() {
+ return tokenName;
+ }
+
+ public void setTokenName(String tokenName) {
+ this.tokenName = tokenName;
+ }
+
+ public String getNodeURL() {
+ return nodeURL;
+ }
+
+ public void setNodeURL(String nodeURL) {
+ this.nodeURL = nodeURL;
+ }
+
+ public String getBlockexplorerURL() {
+ return blockexplorerURL;
+ }
+
+ public void setBlockexplorerURL(String blockexplorerURL) {
+ this.blockexplorerURL = blockexplorerURL;
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/objects/embedded/BlockchainDetailsGeneric.java b/src/main/java/crypto/forestfish/objects/embedded/BlockchainDetailsGeneric.java
new file mode 100644
index 0000000..70be11d
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/embedded/BlockchainDetailsGeneric.java
@@ -0,0 +1,2221 @@
+package crypto.forestfish.objects.embedded;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+public class BlockchainDetailsGeneric {
+
+ @SuppressWarnings("serial")
+ public static HashMap bip39Words = new HashMap() {{
+ this.put("abandon", true);
+ this.put("ability", true);
+ this.put("able", true);
+ this.put("about", true);
+ this.put("above", true);
+ this.put("absent", true);
+ this.put("absorb", true);
+ this.put("abstract", true);
+ this.put("absurd", true);
+ this.put("abuse", true);
+ this.put("access", true);
+ this.put("accident", true);
+ this.put("account", true);
+ this.put("accuse", true);
+ this.put("achieve", true);
+ this.put("acid", true);
+ this.put("acoustic", true);
+ this.put("acquire", true);
+ this.put("across", true);
+ this.put("act", true);
+ this.put("action", true);
+ this.put("actor", true);
+ this.put("actress", true);
+ this.put("actual", true);
+ this.put("adapt", true);
+ this.put("add", true);
+ this.put("addict", true);
+ this.put("address", true);
+ this.put("adjust", true);
+ this.put("admit", true);
+ this.put("adult", true);
+ this.put("advance", true);
+ this.put("advice", true);
+ this.put("aerobic", true);
+ this.put("affair", true);
+ this.put("afford", true);
+ this.put("afraid", true);
+ this.put("again", true);
+ this.put("age", true);
+ this.put("agent", true);
+ this.put("agree", true);
+ this.put("ahead", true);
+ this.put("aim", true);
+ this.put("air", true);
+ this.put("airport", true);
+ this.put("aisle", true);
+ this.put("alarm", true);
+ this.put("album", true);
+ this.put("alcohol", true);
+ this.put("alert", true);
+ this.put("alien", true);
+ this.put("all", true);
+ this.put("alley", true);
+ this.put("allow", true);
+ this.put("almost", true);
+ this.put("alone", true);
+ this.put("alpha", true);
+ this.put("already", true);
+ this.put("also", true);
+ this.put("alter", true);
+ this.put("always", true);
+ this.put("amateur", true);
+ this.put("amazing", true);
+ this.put("among", true);
+ this.put("amount", true);
+ this.put("amused", true);
+ this.put("analyst", true);
+ this.put("anchor", true);
+ this.put("ancient", true);
+ this.put("anger", true);
+ this.put("angle", true);
+ this.put("angry", true);
+ this.put("animal", true);
+ this.put("ankle", true);
+ this.put("announce", true);
+ this.put("annual", true);
+ this.put("another", true);
+ this.put("answer", true);
+ this.put("antenna", true);
+ this.put("antique", true);
+ this.put("anxiety", true);
+ this.put("any", true);
+ this.put("apart", true);
+ this.put("apology", true);
+ this.put("appear", true);
+ this.put("apple", true);
+ this.put("approve", true);
+ this.put("april", true);
+ this.put("arch", true);
+ this.put("arctic", true);
+ this.put("area", true);
+ this.put("arena", true);
+ this.put("argue", true);
+ this.put("arm", true);
+ this.put("armed", true);
+ this.put("armor", true);
+ this.put("army", true);
+ this.put("around", true);
+ this.put("arrange", true);
+ this.put("arrest", true);
+ this.put("arrive", true);
+ this.put("arrow", true);
+ this.put("art", true);
+ this.put("artefact", true);
+ this.put("artist", true);
+ this.put("artwork", true);
+ this.put("ask", true);
+ this.put("aspect", true);
+ this.put("assault", true);
+ this.put("asset", true);
+ this.put("assist", true);
+ this.put("assume", true);
+ this.put("asthma", true);
+ this.put("athlete", true);
+ this.put("atom", true);
+ this.put("attack", true);
+ this.put("attend", true);
+ this.put("attitude", true);
+ this.put("attract", true);
+ this.put("auction", true);
+ this.put("audit", true);
+ this.put("august", true);
+ this.put("aunt", true);
+ this.put("author", true);
+ this.put("auto", true);
+ this.put("autumn", true);
+ this.put("average", true);
+ this.put("avocado", true);
+ this.put("avoid", true);
+ this.put("awake", true);
+ this.put("aware", true);
+ this.put("away", true);
+ this.put("awesome", true);
+ this.put("awful", true);
+ this.put("awkward", true);
+ this.put("axis", true);
+ this.put("baby", true);
+ this.put("bachelor", true);
+ this.put("bacon", true);
+ this.put("badge", true);
+ this.put("bag", true);
+ this.put("balance", true);
+ this.put("balcony", true);
+ this.put("ball", true);
+ this.put("bamboo", true);
+ this.put("banana", true);
+ this.put("banner", true);
+ this.put("bar", true);
+ this.put("barely", true);
+ this.put("bargain", true);
+ this.put("barrel", true);
+ this.put("base", true);
+ this.put("basic", true);
+ this.put("basket", true);
+ this.put("battle", true);
+ this.put("beach", true);
+ this.put("bean", true);
+ this.put("beauty", true);
+ this.put("because", true);
+ this.put("become", true);
+ this.put("beef", true);
+ this.put("before", true);
+ this.put("begin", true);
+ this.put("behave", true);
+ this.put("behind", true);
+ this.put("believe", true);
+ this.put("below", true);
+ this.put("belt", true);
+ this.put("bench", true);
+ this.put("benefit", true);
+ this.put("best", true);
+ this.put("betray", true);
+ this.put("better", true);
+ this.put("between", true);
+ this.put("beyond", true);
+ this.put("bicycle", true);
+ this.put("bid", true);
+ this.put("bike", true);
+ this.put("bind", true);
+ this.put("biology", true);
+ this.put("bird", true);
+ this.put("birth", true);
+ this.put("bitter", true);
+ this.put("black", true);
+ this.put("blade", true);
+ this.put("blame", true);
+ this.put("blanket", true);
+ this.put("blast", true);
+ this.put("bleak", true);
+ this.put("bless", true);
+ this.put("blind", true);
+ this.put("blood", true);
+ this.put("blossom", true);
+ this.put("blouse", true);
+ this.put("blue", true);
+ this.put("blur", true);
+ this.put("blush", true);
+ this.put("board", true);
+ this.put("boat", true);
+ this.put("body", true);
+ this.put("boil", true);
+ this.put("bomb", true);
+ this.put("bone", true);
+ this.put("bonus", true);
+ this.put("book", true);
+ this.put("boost", true);
+ this.put("border", true);
+ this.put("boring", true);
+ this.put("borrow", true);
+ this.put("boss", true);
+ this.put("bottom", true);
+ this.put("bounce", true);
+ this.put("box", true);
+ this.put("boy", true);
+ this.put("bracket", true);
+ this.put("brain", true);
+ this.put("brand", true);
+ this.put("brass", true);
+ this.put("brave", true);
+ this.put("bread", true);
+ this.put("breeze", true);
+ this.put("brick", true);
+ this.put("bridge", true);
+ this.put("brief", true);
+ this.put("bright", true);
+ this.put("bring", true);
+ this.put("brisk", true);
+ this.put("broccoli", true);
+ this.put("broken", true);
+ this.put("bronze", true);
+ this.put("broom", true);
+ this.put("brother", true);
+ this.put("brown", true);
+ this.put("brush", true);
+ this.put("bubble", true);
+ this.put("buddy", true);
+ this.put("budget", true);
+ this.put("buffalo", true);
+ this.put("build", true);
+ this.put("bulb", true);
+ this.put("bulk", true);
+ this.put("bullet", true);
+ this.put("bundle", true);
+ this.put("bunker", true);
+ this.put("burden", true);
+ this.put("burger", true);
+ this.put("burst", true);
+ this.put("bus", true);
+ this.put("business", true);
+ this.put("busy", true);
+ this.put("butter", true);
+ this.put("buyer", true);
+ this.put("buzz", true);
+ this.put("cabbage", true);
+ this.put("cabin", true);
+ this.put("cable", true);
+ this.put("cactus", true);
+ this.put("cage", true);
+ this.put("cake", true);
+ this.put("call", true);
+ this.put("calm", true);
+ this.put("camera", true);
+ this.put("camp", true);
+ this.put("can", true);
+ this.put("canal", true);
+ this.put("cancel", true);
+ this.put("candy", true);
+ this.put("cannon", true);
+ this.put("canoe", true);
+ this.put("canvas", true);
+ this.put("canyon", true);
+ this.put("capable", true);
+ this.put("capital", true);
+ this.put("captain", true);
+ this.put("car", true);
+ this.put("carbon", true);
+ this.put("card", true);
+ this.put("cargo", true);
+ this.put("carpet", true);
+ this.put("carry", true);
+ this.put("cart", true);
+ this.put("case", true);
+ this.put("cash", true);
+ this.put("casino", true);
+ this.put("castle", true);
+ this.put("casual", true);
+ this.put("cat", true);
+ this.put("catalog", true);
+ this.put("catch", true);
+ this.put("category", true);
+ this.put("cattle", true);
+ this.put("caught", true);
+ this.put("cause", true);
+ this.put("caution", true);
+ this.put("cave", true);
+ this.put("ceiling", true);
+ this.put("celery", true);
+ this.put("cement", true);
+ this.put("census", true);
+ this.put("century", true);
+ this.put("cereal", true);
+ this.put("certain", true);
+ this.put("chair", true);
+ this.put("chalk", true);
+ this.put("champion", true);
+ this.put("change", true);
+ this.put("chaos", true);
+ this.put("chapter", true);
+ this.put("charge", true);
+ this.put("chase", true);
+ this.put("chat", true);
+ this.put("cheap", true);
+ this.put("check", true);
+ this.put("cheese", true);
+ this.put("chef", true);
+ this.put("cherry", true);
+ this.put("chest", true);
+ this.put("chicken", true);
+ this.put("chief", true);
+ this.put("child", true);
+ this.put("chimney", true);
+ this.put("choice", true);
+ this.put("choose", true);
+ this.put("chronic", true);
+ this.put("chuckle", true);
+ this.put("chunk", true);
+ this.put("churn", true);
+ this.put("cigar", true);
+ this.put("cinnamon", true);
+ this.put("circle", true);
+ this.put("citizen", true);
+ this.put("city", true);
+ this.put("civil", true);
+ this.put("claim", true);
+ this.put("clap", true);
+ this.put("clarify", true);
+ this.put("claw", true);
+ this.put("clay", true);
+ this.put("clean", true);
+ this.put("clerk", true);
+ this.put("clever", true);
+ this.put("click", true);
+ this.put("client", true);
+ this.put("cliff", true);
+ this.put("climb", true);
+ this.put("clinic", true);
+ this.put("clip", true);
+ this.put("clock", true);
+ this.put("clog", true);
+ this.put("close", true);
+ this.put("cloth", true);
+ this.put("cloud", true);
+ this.put("clown", true);
+ this.put("club", true);
+ this.put("clump", true);
+ this.put("cluster", true);
+ this.put("clutch", true);
+ this.put("coach", true);
+ this.put("coast", true);
+ this.put("coconut", true);
+ this.put("code", true);
+ this.put("coffee", true);
+ this.put("coil", true);
+ this.put("coin", true);
+ this.put("collect", true);
+ this.put("color", true);
+ this.put("column", true);
+ this.put("combine", true);
+ this.put("come", true);
+ this.put("comfort", true);
+ this.put("comic", true);
+ this.put("common", true);
+ this.put("company", true);
+ this.put("concert", true);
+ this.put("conduct", true);
+ this.put("confirm", true);
+ this.put("congress", true);
+ this.put("connect", true);
+ this.put("consider", true);
+ this.put("control", true);
+ this.put("convince", true);
+ this.put("cook", true);
+ this.put("cool", true);
+ this.put("copper", true);
+ this.put("copy", true);
+ this.put("coral", true);
+ this.put("core", true);
+ this.put("corn", true);
+ this.put("correct", true);
+ this.put("cost", true);
+ this.put("cotton", true);
+ this.put("couch", true);
+ this.put("country", true);
+ this.put("couple", true);
+ this.put("course", true);
+ this.put("cousin", true);
+ this.put("cover", true);
+ this.put("coyote", true);
+ this.put("crack", true);
+ this.put("cradle", true);
+ this.put("craft", true);
+ this.put("cram", true);
+ this.put("crane", true);
+ this.put("crash", true);
+ this.put("crater", true);
+ this.put("crawl", true);
+ this.put("crazy", true);
+ this.put("cream", true);
+ this.put("credit", true);
+ this.put("creek", true);
+ this.put("crew", true);
+ this.put("cricket", true);
+ this.put("crime", true);
+ this.put("crisp", true);
+ this.put("critic", true);
+ this.put("crop", true);
+ this.put("cross", true);
+ this.put("crouch", true);
+ this.put("crowd", true);
+ this.put("crucial", true);
+ this.put("cruel", true);
+ this.put("cruise", true);
+ this.put("crumble", true);
+ this.put("crunch", true);
+ this.put("crush", true);
+ this.put("cry", true);
+ this.put("crystal", true);
+ this.put("cube", true);
+ this.put("culture", true);
+ this.put("cup", true);
+ this.put("cupboard", true);
+ this.put("curious", true);
+ this.put("current", true);
+ this.put("curtain", true);
+ this.put("curve", true);
+ this.put("cushion", true);
+ this.put("custom", true);
+ this.put("cute", true);
+ this.put("cycle", true);
+ this.put("dad", true);
+ this.put("damage", true);
+ this.put("damp", true);
+ this.put("dance", true);
+ this.put("danger", true);
+ this.put("daring", true);
+ this.put("dash", true);
+ this.put("daughter", true);
+ this.put("dawn", true);
+ this.put("day", true);
+ this.put("deal", true);
+ this.put("debate", true);
+ this.put("debris", true);
+ this.put("decade", true);
+ this.put("december", true);
+ this.put("decide", true);
+ this.put("decline", true);
+ this.put("decorate", true);
+ this.put("decrease", true);
+ this.put("deer", true);
+ this.put("defense", true);
+ this.put("define", true);
+ this.put("defy", true);
+ this.put("degree", true);
+ this.put("delay", true);
+ this.put("deliver", true);
+ this.put("demand", true);
+ this.put("demise", true);
+ this.put("denial", true);
+ this.put("dentist", true);
+ this.put("deny", true);
+ this.put("depart", true);
+ this.put("depend", true);
+ this.put("deposit", true);
+ this.put("depth", true);
+ this.put("deputy", true);
+ this.put("derive", true);
+ this.put("describe", true);
+ this.put("desert", true);
+ this.put("design", true);
+ this.put("desk", true);
+ this.put("despair", true);
+ this.put("destroy", true);
+ this.put("detail", true);
+ this.put("detect", true);
+ this.put("develop", true);
+ this.put("device", true);
+ this.put("devote", true);
+ this.put("diagram", true);
+ this.put("dial", true);
+ this.put("diamond", true);
+ this.put("diary", true);
+ this.put("dice", true);
+ this.put("diesel", true);
+ this.put("diet", true);
+ this.put("differ", true);
+ this.put("digital", true);
+ this.put("dignity", true);
+ this.put("dilemma", true);
+ this.put("dinner", true);
+ this.put("dinosaur", true);
+ this.put("direct", true);
+ this.put("dirt", true);
+ this.put("disagree", true);
+ this.put("discover", true);
+ this.put("disease", true);
+ this.put("dish", true);
+ this.put("dismiss", true);
+ this.put("disorder", true);
+ this.put("display", true);
+ this.put("distance", true);
+ this.put("divert", true);
+ this.put("divide", true);
+ this.put("divorce", true);
+ this.put("dizzy", true);
+ this.put("doctor", true);
+ this.put("document", true);
+ this.put("dog", true);
+ this.put("doll", true);
+ this.put("dolphin", true);
+ this.put("domain", true);
+ this.put("donate", true);
+ this.put("donkey", true);
+ this.put("donor", true);
+ this.put("door", true);
+ this.put("dose", true);
+ this.put("double", true);
+ this.put("dove", true);
+ this.put("draft", true);
+ this.put("dragon", true);
+ this.put("drama", true);
+ this.put("drastic", true);
+ this.put("draw", true);
+ this.put("dream", true);
+ this.put("dress", true);
+ this.put("drift", true);
+ this.put("drill", true);
+ this.put("drink", true);
+ this.put("drip", true);
+ this.put("drive", true);
+ this.put("drop", true);
+ this.put("drum", true);
+ this.put("dry", true);
+ this.put("duck", true);
+ this.put("dumb", true);
+ this.put("dune", true);
+ this.put("during", true);
+ this.put("dust", true);
+ this.put("dutch", true);
+ this.put("duty", true);
+ this.put("dwarf", true);
+ this.put("dynamic", true);
+ this.put("eager", true);
+ this.put("eagle", true);
+ this.put("early", true);
+ this.put("earn", true);
+ this.put("earth", true);
+ this.put("easily", true);
+ this.put("east", true);
+ this.put("easy", true);
+ this.put("echo", true);
+ this.put("ecology", true);
+ this.put("economy", true);
+ this.put("edge", true);
+ this.put("edit", true);
+ this.put("educate", true);
+ this.put("effort", true);
+ this.put("egg", true);
+ this.put("eight", true);
+ this.put("either", true);
+ this.put("elbow", true);
+ this.put("elder", true);
+ this.put("electric", true);
+ this.put("elegant", true);
+ this.put("element", true);
+ this.put("elephant", true);
+ this.put("elevator", true);
+ this.put("elite", true);
+ this.put("else", true);
+ this.put("embark", true);
+ this.put("embody", true);
+ this.put("embrace", true);
+ this.put("emerge", true);
+ this.put("emotion", true);
+ this.put("employ", true);
+ this.put("empower", true);
+ this.put("empty", true);
+ this.put("enable", true);
+ this.put("enact", true);
+ this.put("end", true);
+ this.put("endless", true);
+ this.put("endorse", true);
+ this.put("enemy", true);
+ this.put("energy", true);
+ this.put("enforce", true);
+ this.put("engage", true);
+ this.put("engine", true);
+ this.put("enhance", true);
+ this.put("enjoy", true);
+ this.put("enlist", true);
+ this.put("enough", true);
+ this.put("enrich", true);
+ this.put("enroll", true);
+ this.put("ensure", true);
+ this.put("enter", true);
+ this.put("entire", true);
+ this.put("entry", true);
+ this.put("envelope", true);
+ this.put("episode", true);
+ this.put("equal", true);
+ this.put("equip", true);
+ this.put("era", true);
+ this.put("erase", true);
+ this.put("erode", true);
+ this.put("erosion", true);
+ this.put("error", true);
+ this.put("erupt", true);
+ this.put("escape", true);
+ this.put("essay", true);
+ this.put("essence", true);
+ this.put("estate", true);
+ this.put("eternal", true);
+ this.put("ethics", true);
+ this.put("evidence", true);
+ this.put("evil", true);
+ this.put("evoke", true);
+ this.put("evolve", true);
+ this.put("exact", true);
+ this.put("example", true);
+ this.put("excess", true);
+ this.put("exchange", true);
+ this.put("excite", true);
+ this.put("exclude", true);
+ this.put("excuse", true);
+ this.put("execute", true);
+ this.put("exercise", true);
+ this.put("exhaust", true);
+ this.put("exhibit", true);
+ this.put("exile", true);
+ this.put("exist", true);
+ this.put("exit", true);
+ this.put("exotic", true);
+ this.put("expand", true);
+ this.put("expect", true);
+ this.put("expire", true);
+ this.put("explain", true);
+ this.put("expose", true);
+ this.put("express", true);
+ this.put("extend", true);
+ this.put("extra", true);
+ this.put("eye", true);
+ this.put("eyebrow", true);
+ this.put("fabric", true);
+ this.put("face", true);
+ this.put("faculty", true);
+ this.put("fade", true);
+ this.put("faint", true);
+ this.put("faith", true);
+ this.put("fall", true);
+ this.put("false", true);
+ this.put("fame", true);
+ this.put("family", true);
+ this.put("famous", true);
+ this.put("fan", true);
+ this.put("fancy", true);
+ this.put("fantasy", true);
+ this.put("farm", true);
+ this.put("fashion", true);
+ this.put("fat", true);
+ this.put("fatal", true);
+ this.put("father", true);
+ this.put("fatigue", true);
+ this.put("fault", true);
+ this.put("favorite", true);
+ this.put("feature", true);
+ this.put("february", true);
+ this.put("federal", true);
+ this.put("fee", true);
+ this.put("feed", true);
+ this.put("feel", true);
+ this.put("female", true);
+ this.put("fence", true);
+ this.put("festival", true);
+ this.put("fetch", true);
+ this.put("fever", true);
+ this.put("few", true);
+ this.put("fiber", true);
+ this.put("fiction", true);
+ this.put("field", true);
+ this.put("figure", true);
+ this.put("file", true);
+ this.put("film", true);
+ this.put("filter", true);
+ this.put("final", true);
+ this.put("find", true);
+ this.put("fine", true);
+ this.put("finger", true);
+ this.put("finish", true);
+ this.put("fire", true);
+ this.put("firm", true);
+ this.put("first", true);
+ this.put("fiscal", true);
+ this.put("fish", true);
+ this.put("fit", true);
+ this.put("fitness", true);
+ this.put("fix", true);
+ this.put("flag", true);
+ this.put("flame", true);
+ this.put("flash", true);
+ this.put("flat", true);
+ this.put("flavor", true);
+ this.put("flee", true);
+ this.put("flight", true);
+ this.put("flip", true);
+ this.put("float", true);
+ this.put("flock", true);
+ this.put("floor", true);
+ this.put("flower", true);
+ this.put("fluid", true);
+ this.put("flush", true);
+ this.put("fly", true);
+ this.put("foam", true);
+ this.put("focus", true);
+ this.put("fog", true);
+ this.put("foil", true);
+ this.put("fold", true);
+ this.put("follow", true);
+ this.put("food", true);
+ this.put("foot", true);
+ this.put("force", true);
+ this.put("forest", true);
+ this.put("forget", true);
+ this.put("fork", true);
+ this.put("fortune", true);
+ this.put("forum", true);
+ this.put("forward", true);
+ this.put("fossil", true);
+ this.put("foster", true);
+ this.put("found", true);
+ this.put("fox", true);
+ this.put("fragile", true);
+ this.put("frame", true);
+ this.put("frequent", true);
+ this.put("fresh", true);
+ this.put("friend", true);
+ this.put("fringe", true);
+ this.put("frog", true);
+ this.put("front", true);
+ this.put("frost", true);
+ this.put("frown", true);
+ this.put("frozen", true);
+ this.put("fruit", true);
+ this.put("fuel", true);
+ this.put("fun", true);
+ this.put("funny", true);
+ this.put("furnace", true);
+ this.put("fury", true);
+ this.put("future", true);
+ this.put("gadget", true);
+ this.put("gain", true);
+ this.put("galaxy", true);
+ this.put("gallery", true);
+ this.put("game", true);
+ this.put("gap", true);
+ this.put("garage", true);
+ this.put("garbage", true);
+ this.put("garden", true);
+ this.put("garlic", true);
+ this.put("garment", true);
+ this.put("gas", true);
+ this.put("gasp", true);
+ this.put("gate", true);
+ this.put("gather", true);
+ this.put("gauge", true);
+ this.put("gaze", true);
+ this.put("general", true);
+ this.put("genius", true);
+ this.put("genre", true);
+ this.put("gentle", true);
+ this.put("genuine", true);
+ this.put("gesture", true);
+ this.put("ghost", true);
+ this.put("giant", true);
+ this.put("gift", true);
+ this.put("giggle", true);
+ this.put("ginger", true);
+ this.put("giraffe", true);
+ this.put("girl", true);
+ this.put("give", true);
+ this.put("glad", true);
+ this.put("glance", true);
+ this.put("glare", true);
+ this.put("glass", true);
+ this.put("glide", true);
+ this.put("glimpse", true);
+ this.put("globe", true);
+ this.put("gloom", true);
+ this.put("glory", true);
+ this.put("glove", true);
+ this.put("glow", true);
+ this.put("glue", true);
+ this.put("goat", true);
+ this.put("goddess", true);
+ this.put("gold", true);
+ this.put("good", true);
+ this.put("goose", true);
+ this.put("gorilla", true);
+ this.put("gospel", true);
+ this.put("gossip", true);
+ this.put("govern", true);
+ this.put("gown", true);
+ this.put("grab", true);
+ this.put("grace", true);
+ this.put("grain", true);
+ this.put("grant", true);
+ this.put("grape", true);
+ this.put("grass", true);
+ this.put("gravity", true);
+ this.put("great", true);
+ this.put("green", true);
+ this.put("grid", true);
+ this.put("grief", true);
+ this.put("grit", true);
+ this.put("grocery", true);
+ this.put("group", true);
+ this.put("grow", true);
+ this.put("grunt", true);
+ this.put("guard", true);
+ this.put("guess", true);
+ this.put("guide", true);
+ this.put("guilt", true);
+ this.put("guitar", true);
+ this.put("gun", true);
+ this.put("gym", true);
+ this.put("habit", true);
+ this.put("hair", true);
+ this.put("half", true);
+ this.put("hammer", true);
+ this.put("hamster", true);
+ this.put("hand", true);
+ this.put("happy", true);
+ this.put("harbor", true);
+ this.put("hard", true);
+ this.put("harsh", true);
+ this.put("harvest", true);
+ this.put("hat", true);
+ this.put("have", true);
+ this.put("hawk", true);
+ this.put("hazard", true);
+ this.put("head", true);
+ this.put("health", true);
+ this.put("heart", true);
+ this.put("heavy", true);
+ this.put("hedgehog", true);
+ this.put("height", true);
+ this.put("hello", true);
+ this.put("helmet", true);
+ this.put("help", true);
+ this.put("hen", true);
+ this.put("hero", true);
+ this.put("hidden", true);
+ this.put("high", true);
+ this.put("hill", true);
+ this.put("hint", true);
+ this.put("hip", true);
+ this.put("hire", true);
+ this.put("history", true);
+ this.put("hobby", true);
+ this.put("hockey", true);
+ this.put("hold", true);
+ this.put("hole", true);
+ this.put("holiday", true);
+ this.put("hollow", true);
+ this.put("home", true);
+ this.put("honey", true);
+ this.put("hood", true);
+ this.put("hope", true);
+ this.put("horn", true);
+ this.put("horror", true);
+ this.put("horse", true);
+ this.put("hospital", true);
+ this.put("host", true);
+ this.put("hotel", true);
+ this.put("hour", true);
+ this.put("hover", true);
+ this.put("hub", true);
+ this.put("huge", true);
+ this.put("human", true);
+ this.put("humble", true);
+ this.put("humor", true);
+ this.put("hundred", true);
+ this.put("hungry", true);
+ this.put("hunt", true);
+ this.put("hurdle", true);
+ this.put("hurry", true);
+ this.put("hurt", true);
+ this.put("husband", true);
+ this.put("hybrid", true);
+ this.put("ice", true);
+ this.put("icon", true);
+ this.put("idea", true);
+ this.put("identify", true);
+ this.put("idle", true);
+ this.put("ignore", true);
+ this.put("ill", true);
+ this.put("illegal", true);
+ this.put("illness", true);
+ this.put("image", true);
+ this.put("imitate", true);
+ this.put("immense", true);
+ this.put("immune", true);
+ this.put("impact", true);
+ this.put("impose", true);
+ this.put("improve", true);
+ this.put("impulse", true);
+ this.put("inch", true);
+ this.put("include", true);
+ this.put("income", true);
+ this.put("increase", true);
+ this.put("index", true);
+ this.put("indicate", true);
+ this.put("indoor", true);
+ this.put("industry", true);
+ this.put("infant", true);
+ this.put("inflict", true);
+ this.put("inform", true);
+ this.put("inhale", true);
+ this.put("inherit", true);
+ this.put("initial", true);
+ this.put("inject", true);
+ this.put("injury", true);
+ this.put("inmate", true);
+ this.put("inner", true);
+ this.put("innocent", true);
+ this.put("input", true);
+ this.put("inquiry", true);
+ this.put("insane", true);
+ this.put("insect", true);
+ this.put("inside", true);
+ this.put("inspire", true);
+ this.put("install", true);
+ this.put("intact", true);
+ this.put("interest", true);
+ this.put("into", true);
+ this.put("invest", true);
+ this.put("invite", true);
+ this.put("involve", true);
+ this.put("iron", true);
+ this.put("island", true);
+ this.put("isolate", true);
+ this.put("issue", true);
+ this.put("item", true);
+ this.put("ivory", true);
+ this.put("jacket", true);
+ this.put("jaguar", true);
+ this.put("jar", true);
+ this.put("jazz", true);
+ this.put("jealous", true);
+ this.put("jeans", true);
+ this.put("jelly", true);
+ this.put("jewel", true);
+ this.put("job", true);
+ this.put("join", true);
+ this.put("joke", true);
+ this.put("journey", true);
+ this.put("joy", true);
+ this.put("judge", true);
+ this.put("juice", true);
+ this.put("jump", true);
+ this.put("jungle", true);
+ this.put("junior", true);
+ this.put("junk", true);
+ this.put("just", true);
+ this.put("kangaroo", true);
+ this.put("keen", true);
+ this.put("keep", true);
+ this.put("ketchup", true);
+ this.put("key", true);
+ this.put("kick", true);
+ this.put("kid", true);
+ this.put("kidney", true);
+ this.put("kind", true);
+ this.put("kingdom", true);
+ this.put("kiss", true);
+ this.put("kit", true);
+ this.put("kitchen", true);
+ this.put("kite", true);
+ this.put("kitten", true);
+ this.put("kiwi", true);
+ this.put("knee", true);
+ this.put("knife", true);
+ this.put("knock", true);
+ this.put("know", true);
+ this.put("lab", true);
+ this.put("label", true);
+ this.put("labor", true);
+ this.put("ladder", true);
+ this.put("lady", true);
+ this.put("lake", true);
+ this.put("lamp", true);
+ this.put("language", true);
+ this.put("laptop", true);
+ this.put("large", true);
+ this.put("later", true);
+ this.put("latin", true);
+ this.put("laugh", true);
+ this.put("laundry", true);
+ this.put("lava", true);
+ this.put("law", true);
+ this.put("lawn", true);
+ this.put("lawsuit", true);
+ this.put("layer", true);
+ this.put("lazy", true);
+ this.put("leader", true);
+ this.put("leaf", true);
+ this.put("learn", true);
+ this.put("leave", true);
+ this.put("lecture", true);
+ this.put("left", true);
+ this.put("leg", true);
+ this.put("legal", true);
+ this.put("legend", true);
+ this.put("leisure", true);
+ this.put("lemon", true);
+ this.put("lend", true);
+ this.put("length", true);
+ this.put("lens", true);
+ this.put("leopard", true);
+ this.put("lesson", true);
+ this.put("letter", true);
+ this.put("level", true);
+ this.put("liar", true);
+ this.put("liberty", true);
+ this.put("library", true);
+ this.put("license", true);
+ this.put("life", true);
+ this.put("lift", true);
+ this.put("light", true);
+ this.put("like", true);
+ this.put("limb", true);
+ this.put("limit", true);
+ this.put("link", true);
+ this.put("lion", true);
+ this.put("liquid", true);
+ this.put("list", true);
+ this.put("little", true);
+ this.put("live", true);
+ this.put("lizard", true);
+ this.put("load", true);
+ this.put("loan", true);
+ this.put("lobster", true);
+ this.put("local", true);
+ this.put("lock", true);
+ this.put("logic", true);
+ this.put("lonely", true);
+ this.put("long", true);
+ this.put("loop", true);
+ this.put("lottery", true);
+ this.put("loud", true);
+ this.put("lounge", true);
+ this.put("love", true);
+ this.put("loyal", true);
+ this.put("lucky", true);
+ this.put("luggage", true);
+ this.put("lumber", true);
+ this.put("lunar", true);
+ this.put("lunch", true);
+ this.put("luxury", true);
+ this.put("lyrics", true);
+ this.put("machine", true);
+ this.put("mad", true);
+ this.put("magic", true);
+ this.put("magnet", true);
+ this.put("maid", true);
+ this.put("mail", true);
+ this.put("main", true);
+ this.put("major", true);
+ this.put("make", true);
+ this.put("mammal", true);
+ this.put("man", true);
+ this.put("manage", true);
+ this.put("mandate", true);
+ this.put("mango", true);
+ this.put("mansion", true);
+ this.put("manual", true);
+ this.put("maple", true);
+ this.put("marble", true);
+ this.put("march", true);
+ this.put("margin", true);
+ this.put("marine", true);
+ this.put("market", true);
+ this.put("marriage", true);
+ this.put("mask", true);
+ this.put("mass", true);
+ this.put("master", true);
+ this.put("match", true);
+ this.put("material", true);
+ this.put("math", true);
+ this.put("matrix", true);
+ this.put("matter", true);
+ this.put("maximum", true);
+ this.put("maze", true);
+ this.put("meadow", true);
+ this.put("mean", true);
+ this.put("measure", true);
+ this.put("meat", true);
+ this.put("mechanic", true);
+ this.put("medal", true);
+ this.put("media", true);
+ this.put("melody", true);
+ this.put("melt", true);
+ this.put("member", true);
+ this.put("memory", true);
+ this.put("mention", true);
+ this.put("menu", true);
+ this.put("mercy", true);
+ this.put("merge", true);
+ this.put("merit", true);
+ this.put("merry", true);
+ this.put("mesh", true);
+ this.put("message", true);
+ this.put("metal", true);
+ this.put("method", true);
+ this.put("middle", true);
+ this.put("midnight", true);
+ this.put("milk", true);
+ this.put("million", true);
+ this.put("mimic", true);
+ this.put("mind", true);
+ this.put("minimum", true);
+ this.put("minor", true);
+ this.put("minute", true);
+ this.put("miracle", true);
+ this.put("mirror", true);
+ this.put("misery", true);
+ this.put("miss", true);
+ this.put("mistake", true);
+ this.put("mix", true);
+ this.put("mixed", true);
+ this.put("mixture", true);
+ this.put("mobile", true);
+ this.put("model", true);
+ this.put("modify", true);
+ this.put("mom", true);
+ this.put("moment", true);
+ this.put("monitor", true);
+ this.put("monkey", true);
+ this.put("monster", true);
+ this.put("month", true);
+ this.put("moon", true);
+ this.put("moral", true);
+ this.put("more", true);
+ this.put("morning", true);
+ this.put("mosquito", true);
+ this.put("mother", true);
+ this.put("motion", true);
+ this.put("motor", true);
+ this.put("mountain", true);
+ this.put("mouse", true);
+ this.put("move", true);
+ this.put("movie", true);
+ this.put("much", true);
+ this.put("muffin", true);
+ this.put("mule", true);
+ this.put("multiply", true);
+ this.put("muscle", true);
+ this.put("museum", true);
+ this.put("mushroom", true);
+ this.put("music", true);
+ this.put("must", true);
+ this.put("mutual", true);
+ this.put("myself", true);
+ this.put("mystery", true);
+ this.put("myth", true);
+ this.put("naive", true);
+ this.put("name", true);
+ this.put("napkin", true);
+ this.put("narrow", true);
+ this.put("nasty", true);
+ this.put("nation", true);
+ this.put("nature", true);
+ this.put("near", true);
+ this.put("neck", true);
+ this.put("need", true);
+ this.put("negative", true);
+ this.put("neglect", true);
+ this.put("neither", true);
+ this.put("nephew", true);
+ this.put("nerve", true);
+ this.put("nest", true);
+ this.put("net", true);
+ this.put("network", true);
+ this.put("neutral", true);
+ this.put("never", true);
+ this.put("news", true);
+ this.put("next", true);
+ this.put("nice", true);
+ this.put("night", true);
+ this.put("noble", true);
+ this.put("noise", true);
+ this.put("nominee", true);
+ this.put("noodle", true);
+ this.put("normal", true);
+ this.put("north", true);
+ this.put("nose", true);
+ this.put("notable", true);
+ this.put("note", true);
+ this.put("nothing", true);
+ this.put("notice", true);
+ this.put("novel", true);
+ this.put("now", true);
+ this.put("nuclear", true);
+ this.put("number", true);
+ this.put("nurse", true);
+ this.put("nut", true);
+ this.put("oak", true);
+ this.put("obey", true);
+ this.put("object", true);
+ this.put("oblige", true);
+ this.put("obscure", true);
+ this.put("observe", true);
+ this.put("obtain", true);
+ this.put("obvious", true);
+ this.put("occur", true);
+ this.put("ocean", true);
+ this.put("october", true);
+ this.put("odor", true);
+ this.put("off", true);
+ this.put("offer", true);
+ this.put("office", true);
+ this.put("often", true);
+ this.put("oil", true);
+ this.put("okay", true);
+ this.put("old", true);
+ this.put("olive", true);
+ this.put("olympic", true);
+ this.put("omit", true);
+ this.put("once", true);
+ this.put("one", true);
+ this.put("onion", true);
+ this.put("online", true);
+ this.put("only", true);
+ this.put("open", true);
+ this.put("opera", true);
+ this.put("opinion", true);
+ this.put("oppose", true);
+ this.put("option", true);
+ this.put("orange", true);
+ this.put("orbit", true);
+ this.put("orchard", true);
+ this.put("order", true);
+ this.put("ordinary", true);
+ this.put("organ", true);
+ this.put("orient", true);
+ this.put("original", true);
+ this.put("orphan", true);
+ this.put("ostrich", true);
+ this.put("other", true);
+ this.put("outdoor", true);
+ this.put("outer", true);
+ this.put("output", true);
+ this.put("outside", true);
+ this.put("oval", true);
+ this.put("oven", true);
+ this.put("over", true);
+ this.put("own", true);
+ this.put("owner", true);
+ this.put("oxygen", true);
+ this.put("oyster", true);
+ this.put("ozone", true);
+ this.put("pact", true);
+ this.put("paddle", true);
+ this.put("page", true);
+ this.put("pair", true);
+ this.put("palace", true);
+ this.put("palm", true);
+ this.put("panda", true);
+ this.put("panel", true);
+ this.put("panic", true);
+ this.put("panther", true);
+ this.put("paper", true);
+ this.put("parade", true);
+ this.put("parent", true);
+ this.put("park", true);
+ this.put("parrot", true);
+ this.put("party", true);
+ this.put("pass", true);
+ this.put("patch", true);
+ this.put("path", true);
+ this.put("patient", true);
+ this.put("patrol", true);
+ this.put("pattern", true);
+ this.put("pause", true);
+ this.put("pave", true);
+ this.put("payment", true);
+ this.put("peace", true);
+ this.put("peanut", true);
+ this.put("pear", true);
+ this.put("peasant", true);
+ this.put("pelican", true);
+ this.put("pen", true);
+ this.put("penalty", true);
+ this.put("pencil", true);
+ this.put("people", true);
+ this.put("pepper", true);
+ this.put("perfect", true);
+ this.put("permit", true);
+ this.put("person", true);
+ this.put("pet", true);
+ this.put("phone", true);
+ this.put("photo", true);
+ this.put("phrase", true);
+ this.put("physical", true);
+ this.put("piano", true);
+ this.put("picnic", true);
+ this.put("picture", true);
+ this.put("piece", true);
+ this.put("pig", true);
+ this.put("pigeon", true);
+ this.put("pill", true);
+ this.put("pilot", true);
+ this.put("pink", true);
+ this.put("pioneer", true);
+ this.put("pipe", true);
+ this.put("pistol", true);
+ this.put("pitch", true);
+ this.put("pizza", true);
+ this.put("place", true);
+ this.put("planet", true);
+ this.put("plastic", true);
+ this.put("plate", true);
+ this.put("play", true);
+ this.put("please", true);
+ this.put("pledge", true);
+ this.put("pluck", true);
+ this.put("plug", true);
+ this.put("plunge", true);
+ this.put("poem", true);
+ this.put("poet", true);
+ this.put("point", true);
+ this.put("polar", true);
+ this.put("pole", true);
+ this.put("police", true);
+ this.put("pond", true);
+ this.put("pony", true);
+ this.put("pool", true);
+ this.put("popular", true);
+ this.put("portion", true);
+ this.put("position", true);
+ this.put("possible", true);
+ this.put("post", true);
+ this.put("potato", true);
+ this.put("pottery", true);
+ this.put("poverty", true);
+ this.put("powder", true);
+ this.put("power", true);
+ this.put("practice", true);
+ this.put("praise", true);
+ this.put("predict", true);
+ this.put("prefer", true);
+ this.put("prepare", true);
+ this.put("present", true);
+ this.put("pretty", true);
+ this.put("prevent", true);
+ this.put("price", true);
+ this.put("pride", true);
+ this.put("primary", true);
+ this.put("print", true);
+ this.put("priority", true);
+ this.put("prison", true);
+ this.put("private", true);
+ this.put("prize", true);
+ this.put("problem", true);
+ this.put("process", true);
+ this.put("produce", true);
+ this.put("profit", true);
+ this.put("program", true);
+ this.put("project", true);
+ this.put("promote", true);
+ this.put("proof", true);
+ this.put("property", true);
+ this.put("prosper", true);
+ this.put("protect", true);
+ this.put("proud", true);
+ this.put("provide", true);
+ this.put("public", true);
+ this.put("pudding", true);
+ this.put("pull", true);
+ this.put("pulp", true);
+ this.put("pulse", true);
+ this.put("pumpkin", true);
+ this.put("punch", true);
+ this.put("pupil", true);
+ this.put("puppy", true);
+ this.put("purchase", true);
+ this.put("purity", true);
+ this.put("purpose", true);
+ this.put("purse", true);
+ this.put("push", true);
+ this.put("put", true);
+ this.put("puzzle", true);
+ this.put("pyramid", true);
+ this.put("quality", true);
+ this.put("quantum", true);
+ this.put("quarter", true);
+ this.put("question", true);
+ this.put("quick", true);
+ this.put("quit", true);
+ this.put("quiz", true);
+ this.put("quote", true);
+ this.put("rabbit", true);
+ this.put("raccoon", true);
+ this.put("race", true);
+ this.put("rack", true);
+ this.put("radar", true);
+ this.put("radio", true);
+ this.put("rail", true);
+ this.put("rain", true);
+ this.put("raise", true);
+ this.put("rally", true);
+ this.put("ramp", true);
+ this.put("ranch", true);
+ this.put("random", true);
+ this.put("range", true);
+ this.put("rapid", true);
+ this.put("rare", true);
+ this.put("rate", true);
+ this.put("rather", true);
+ this.put("raven", true);
+ this.put("raw", true);
+ this.put("razor", true);
+ this.put("ready", true);
+ this.put("real", true);
+ this.put("reason", true);
+ this.put("rebel", true);
+ this.put("rebuild", true);
+ this.put("recall", true);
+ this.put("receive", true);
+ this.put("recipe", true);
+ this.put("record", true);
+ this.put("recycle", true);
+ this.put("reduce", true);
+ this.put("reflect", true);
+ this.put("reform", true);
+ this.put("refuse", true);
+ this.put("region", true);
+ this.put("regret", true);
+ this.put("regular", true);
+ this.put("reject", true);
+ this.put("relax", true);
+ this.put("release", true);
+ this.put("relief", true);
+ this.put("rely", true);
+ this.put("remain", true);
+ this.put("remember", true);
+ this.put("remind", true);
+ this.put("remove", true);
+ this.put("render", true);
+ this.put("renew", true);
+ this.put("rent", true);
+ this.put("reopen", true);
+ this.put("repair", true);
+ this.put("repeat", true);
+ this.put("replace", true);
+ this.put("report", true);
+ this.put("require", true);
+ this.put("rescue", true);
+ this.put("resemble", true);
+ this.put("resist", true);
+ this.put("resource", true);
+ this.put("response", true);
+ this.put("result", true);
+ this.put("retire", true);
+ this.put("retreat", true);
+ this.put("return", true);
+ this.put("reunion", true);
+ this.put("reveal", true);
+ this.put("review", true);
+ this.put("reward", true);
+ this.put("rhythm", true);
+ this.put("rib", true);
+ this.put("ribbon", true);
+ this.put("rice", true);
+ this.put("rich", true);
+ this.put("ride", true);
+ this.put("ridge", true);
+ this.put("rifle", true);
+ this.put("right", true);
+ this.put("rigid", true);
+ this.put("ring", true);
+ this.put("riot", true);
+ this.put("ripple", true);
+ this.put("risk", true);
+ this.put("ritual", true);
+ this.put("rival", true);
+ this.put("river", true);
+ this.put("road", true);
+ this.put("roast", true);
+ this.put("robot", true);
+ this.put("robust", true);
+ this.put("rocket", true);
+ this.put("romance", true);
+ this.put("roof", true);
+ this.put("rookie", true);
+ this.put("room", true);
+ this.put("rose", true);
+ this.put("rotate", true);
+ this.put("rough", true);
+ this.put("round", true);
+ this.put("route", true);
+ this.put("royal", true);
+ this.put("rubber", true);
+ this.put("rude", true);
+ this.put("rug", true);
+ this.put("rule", true);
+ this.put("run", true);
+ this.put("runway", true);
+ this.put("rural", true);
+ this.put("sad", true);
+ this.put("saddle", true);
+ this.put("sadness", true);
+ this.put("safe", true);
+ this.put("sail", true);
+ this.put("salad", true);
+ this.put("salmon", true);
+ this.put("salon", true);
+ this.put("salt", true);
+ this.put("salute", true);
+ this.put("same", true);
+ this.put("sample", true);
+ this.put("sand", true);
+ this.put("satisfy", true);
+ this.put("satoshi", true);
+ this.put("sauce", true);
+ this.put("sausage", true);
+ this.put("save", true);
+ this.put("say", true);
+ this.put("scale", true);
+ this.put("scan", true);
+ this.put("scare", true);
+ this.put("scatter", true);
+ this.put("scene", true);
+ this.put("scheme", true);
+ this.put("school", true);
+ this.put("science", true);
+ this.put("scissors", true);
+ this.put("scorpion", true);
+ this.put("scout", true);
+ this.put("scrap", true);
+ this.put("screen", true);
+ this.put("script", true);
+ this.put("scrub", true);
+ this.put("sea", true);
+ this.put("search", true);
+ this.put("season", true);
+ this.put("seat", true);
+ this.put("second", true);
+ this.put("secret", true);
+ this.put("section", true);
+ this.put("security", true);
+ this.put("seed", true);
+ this.put("seek", true);
+ this.put("segment", true);
+ this.put("select", true);
+ this.put("sell", true);
+ this.put("seminar", true);
+ this.put("senior", true);
+ this.put("sense", true);
+ this.put("sentence", true);
+ this.put("series", true);
+ this.put("service", true);
+ this.put("session", true);
+ this.put("settle", true);
+ this.put("setup", true);
+ this.put("seven", true);
+ this.put("shadow", true);
+ this.put("shaft", true);
+ this.put("shallow", true);
+ this.put("share", true);
+ this.put("shed", true);
+ this.put("shell", true);
+ this.put("sheriff", true);
+ this.put("shield", true);
+ this.put("shift", true);
+ this.put("shine", true);
+ this.put("ship", true);
+ this.put("shiver", true);
+ this.put("shock", true);
+ this.put("shoe", true);
+ this.put("shoot", true);
+ this.put("shop", true);
+ this.put("short", true);
+ this.put("shoulder", true);
+ this.put("shove", true);
+ this.put("shrimp", true);
+ this.put("shrug", true);
+ this.put("shuffle", true);
+ this.put("shy", true);
+ this.put("sibling", true);
+ this.put("sick", true);
+ this.put("side", true);
+ this.put("siege", true);
+ this.put("sight", true);
+ this.put("sign", true);
+ this.put("silent", true);
+ this.put("silk", true);
+ this.put("silly", true);
+ this.put("silver", true);
+ this.put("similar", true);
+ this.put("simple", true);
+ this.put("since", true);
+ this.put("sing", true);
+ this.put("siren", true);
+ this.put("sister", true);
+ this.put("situate", true);
+ this.put("six", true);
+ this.put("size", true);
+ this.put("skate", true);
+ this.put("sketch", true);
+ this.put("ski", true);
+ this.put("skill", true);
+ this.put("skin", true);
+ this.put("skirt", true);
+ this.put("skull", true);
+ this.put("slab", true);
+ this.put("slam", true);
+ this.put("sleep", true);
+ this.put("slender", true);
+ this.put("slice", true);
+ this.put("slide", true);
+ this.put("slight", true);
+ this.put("slim", true);
+ this.put("slogan", true);
+ this.put("slot", true);
+ this.put("slow", true);
+ this.put("slush", true);
+ this.put("small", true);
+ this.put("smart", true);
+ this.put("smile", true);
+ this.put("smoke", true);
+ this.put("smooth", true);
+ this.put("snack", true);
+ this.put("snake", true);
+ this.put("snap", true);
+ this.put("sniff", true);
+ this.put("snow", true);
+ this.put("soap", true);
+ this.put("soccer", true);
+ this.put("social", true);
+ this.put("sock", true);
+ this.put("soda", true);
+ this.put("soft", true);
+ this.put("solar", true);
+ this.put("soldier", true);
+ this.put("solid", true);
+ this.put("solution", true);
+ this.put("solve", true);
+ this.put("someone", true);
+ this.put("song", true);
+ this.put("soon", true);
+ this.put("sorry", true);
+ this.put("sort", true);
+ this.put("soul", true);
+ this.put("sound", true);
+ this.put("soup", true);
+ this.put("source", true);
+ this.put("south", true);
+ this.put("space", true);
+ this.put("spare", true);
+ this.put("spatial", true);
+ this.put("spawn", true);
+ this.put("speak", true);
+ this.put("special", true);
+ this.put("speed", true);
+ this.put("spell", true);
+ this.put("spend", true);
+ this.put("sphere", true);
+ this.put("spice", true);
+ this.put("spider", true);
+ this.put("spike", true);
+ this.put("spin", true);
+ this.put("spirit", true);
+ this.put("split", true);
+ this.put("spoil", true);
+ this.put("sponsor", true);
+ this.put("spoon", true);
+ this.put("sport", true);
+ this.put("spot", true);
+ this.put("spray", true);
+ this.put("spread", true);
+ this.put("spring", true);
+ this.put("spy", true);
+ this.put("square", true);
+ this.put("squeeze", true);
+ this.put("squirrel", true);
+ this.put("stable", true);
+ this.put("stadium", true);
+ this.put("staff", true);
+ this.put("stage", true);
+ this.put("stairs", true);
+ this.put("stamp", true);
+ this.put("stand", true);
+ this.put("start", true);
+ this.put("state", true);
+ this.put("stay", true);
+ this.put("steak", true);
+ this.put("steel", true);
+ this.put("stem", true);
+ this.put("step", true);
+ this.put("stereo", true);
+ this.put("stick", true);
+ this.put("still", true);
+ this.put("sting", true);
+ this.put("stock", true);
+ this.put("stomach", true);
+ this.put("stone", true);
+ this.put("stool", true);
+ this.put("story", true);
+ this.put("stove", true);
+ this.put("strategy", true);
+ this.put("street", true);
+ this.put("strike", true);
+ this.put("strong", true);
+ this.put("struggle", true);
+ this.put("student", true);
+ this.put("stuff", true);
+ this.put("stumble", true);
+ this.put("style", true);
+ this.put("subject", true);
+ this.put("submit", true);
+ this.put("subway", true);
+ this.put("success", true);
+ this.put("such", true);
+ this.put("sudden", true);
+ this.put("suffer", true);
+ this.put("sugar", true);
+ this.put("suggest", true);
+ this.put("suit", true);
+ this.put("summer", true);
+ this.put("sun", true);
+ this.put("sunny", true);
+ this.put("sunset", true);
+ this.put("super", true);
+ this.put("supply", true);
+ this.put("supreme", true);
+ this.put("sure", true);
+ this.put("surface", true);
+ this.put("surge", true);
+ this.put("surprise", true);
+ this.put("surround", true);
+ this.put("survey", true);
+ this.put("suspect", true);
+ this.put("sustain", true);
+ this.put("swallow", true);
+ this.put("swamp", true);
+ this.put("swap", true);
+ this.put("swarm", true);
+ this.put("swear", true);
+ this.put("sweet", true);
+ this.put("swift", true);
+ this.put("swim", true);
+ this.put("swing", true);
+ this.put("switch", true);
+ this.put("sword", true);
+ this.put("symbol", true);
+ this.put("symptom", true);
+ this.put("syrup", true);
+ this.put("system", true);
+ this.put("table", true);
+ this.put("tackle", true);
+ this.put("tag", true);
+ this.put("tail", true);
+ this.put("talent", true);
+ this.put("talk", true);
+ this.put("tank", true);
+ this.put("tape", true);
+ this.put("target", true);
+ this.put("task", true);
+ this.put("taste", true);
+ this.put("tattoo", true);
+ this.put("taxi", true);
+ this.put("teach", true);
+ this.put("team", true);
+ this.put("tell", true);
+ this.put("ten", true);
+ this.put("tenant", true);
+ this.put("tennis", true);
+ this.put("tent", true);
+ this.put("term", true);
+ this.put("test", true);
+ this.put("text", true);
+ this.put("thank", true);
+ this.put("that", true);
+ this.put("theme", true);
+ this.put("then", true);
+ this.put("theory", true);
+ this.put("there", true);
+ this.put("they", true);
+ this.put("thing", true);
+ this.put("this", true);
+ this.put("thought", true);
+ this.put("three", true);
+ this.put("thrive", true);
+ this.put("throw", true);
+ this.put("thumb", true);
+ this.put("thunder", true);
+ this.put("ticket", true);
+ this.put("tide", true);
+ this.put("tiger", true);
+ this.put("tilt", true);
+ this.put("timber", true);
+ this.put("time", true);
+ this.put("tiny", true);
+ this.put("tip", true);
+ this.put("tired", true);
+ this.put("tissue", true);
+ this.put("title", true);
+ this.put("toast", true);
+ this.put("tobacco", true);
+ this.put("today", true);
+ this.put("toddler", true);
+ this.put("toe", true);
+ this.put("together", true);
+ this.put("toilet", true);
+ this.put("token", true);
+ this.put("tomato", true);
+ this.put("tomorrow", true);
+ this.put("tone", true);
+ this.put("tongue", true);
+ this.put("tonight", true);
+ this.put("tool", true);
+ this.put("tooth", true);
+ this.put("top", true);
+ this.put("topic", true);
+ this.put("topple", true);
+ this.put("torch", true);
+ this.put("tornado", true);
+ this.put("tortoise", true);
+ this.put("toss", true);
+ this.put("total", true);
+ this.put("tourist", true);
+ this.put("toward", true);
+ this.put("tower", true);
+ this.put("town", true);
+ this.put("toy", true);
+ this.put("track", true);
+ this.put("trade", true);
+ this.put("traffic", true);
+ this.put("tragic", true);
+ this.put("train", true);
+ this.put("transfer", true);
+ this.put("trap", true);
+ this.put("trash", true);
+ this.put("travel", true);
+ this.put("tray", true);
+ this.put("treat", true);
+ this.put("tree", true);
+ this.put("trend", true);
+ this.put("trial", true);
+ this.put("tribe", true);
+ this.put("trick", true);
+ this.put("trigger", true);
+ this.put("trim", true);
+ this.put("trip", true);
+ this.put("trophy", true);
+ this.put("trouble", true);
+ this.put("truck", true);
+ this.put("true", true);
+ this.put("truly", true);
+ this.put("trumpet", true);
+ this.put("trust", true);
+ this.put("truth", true);
+ this.put("try", true);
+ this.put("tube", true);
+ this.put("tuition", true);
+ this.put("tumble", true);
+ this.put("tuna", true);
+ this.put("tunnel", true);
+ this.put("turkey", true);
+ this.put("turn", true);
+ this.put("turtle", true);
+ this.put("twelve", true);
+ this.put("twenty", true);
+ this.put("twice", true);
+ this.put("twin", true);
+ this.put("twist", true);
+ this.put("two", true);
+ this.put("type", true);
+ this.put("typical", true);
+ this.put("ugly", true);
+ this.put("umbrella", true);
+ this.put("unable", true);
+ this.put("unaware", true);
+ this.put("uncle", true);
+ this.put("uncover", true);
+ this.put("under", true);
+ this.put("undo", true);
+ this.put("unfair", true);
+ this.put("unfold", true);
+ this.put("unhappy", true);
+ this.put("uniform", true);
+ this.put("unique", true);
+ this.put("unit", true);
+ this.put("universe", true);
+ this.put("unknown", true);
+ this.put("unlock", true);
+ this.put("until", true);
+ this.put("unusual", true);
+ this.put("unveil", true);
+ this.put("update", true);
+ this.put("upgrade", true);
+ this.put("uphold", true);
+ this.put("upon", true);
+ this.put("upper", true);
+ this.put("upset", true);
+ this.put("urban", true);
+ this.put("urge", true);
+ this.put("usage", true);
+ this.put("use", true);
+ this.put("used", true);
+ this.put("useful", true);
+ this.put("useless", true);
+ this.put("usual", true);
+ this.put("utility", true);
+ this.put("vacant", true);
+ this.put("vacuum", true);
+ this.put("vague", true);
+ this.put("valid", true);
+ this.put("valley", true);
+ this.put("valve", true);
+ this.put("van", true);
+ this.put("vanish", true);
+ this.put("vapor", true);
+ this.put("various", true);
+ this.put("vast", true);
+ this.put("vault", true);
+ this.put("vehicle", true);
+ this.put("velvet", true);
+ this.put("vendor", true);
+ this.put("venture", true);
+ this.put("venue", true);
+ this.put("verb", true);
+ this.put("verify", true);
+ this.put("version", true);
+ this.put("very", true);
+ this.put("vessel", true);
+ this.put("veteran", true);
+ this.put("viable", true);
+ this.put("vibrant", true);
+ this.put("vicious", true);
+ this.put("victory", true);
+ this.put("video", true);
+ this.put("view", true);
+ this.put("village", true);
+ this.put("vintage", true);
+ this.put("violin", true);
+ this.put("virtual", true);
+ this.put("virus", true);
+ this.put("visa", true);
+ this.put("visit", true);
+ this.put("visual", true);
+ this.put("vital", true);
+ this.put("vivid", true);
+ this.put("vocal", true);
+ this.put("voice", true);
+ this.put("void", true);
+ this.put("volcano", true);
+ this.put("volume", true);
+ this.put("vote", true);
+ this.put("voyage", true);
+ this.put("wage", true);
+ this.put("wagon", true);
+ this.put("wait", true);
+ this.put("walk", true);
+ this.put("wall", true);
+ this.put("walnut", true);
+ this.put("want", true);
+ this.put("warfare", true);
+ this.put("warm", true);
+ this.put("warrior", true);
+ this.put("wash", true);
+ this.put("wasp", true);
+ this.put("waste", true);
+ this.put("water", true);
+ this.put("wave", true);
+ this.put("way", true);
+ this.put("wealth", true);
+ this.put("weapon", true);
+ this.put("wear", true);
+ this.put("weasel", true);
+ this.put("weather", true);
+ this.put("web", true);
+ this.put("wedding", true);
+ this.put("weekend", true);
+ this.put("weird", true);
+ this.put("welcome", true);
+ this.put("west", true);
+ this.put("wet", true);
+ this.put("whale", true);
+ this.put("what", true);
+ this.put("wheat", true);
+ this.put("wheel", true);
+ this.put("when", true);
+ this.put("where", true);
+ this.put("whip", true);
+ this.put("whisper", true);
+ this.put("wide", true);
+ this.put("width", true);
+ this.put("wife", true);
+ this.put("wild", true);
+ this.put("will", true);
+ this.put("win", true);
+ this.put("window", true);
+ this.put("wine", true);
+ this.put("wing", true);
+ this.put("wink", true);
+ this.put("winner", true);
+ this.put("winter", true);
+ this.put("wire", true);
+ this.put("wisdom", true);
+ this.put("wise", true);
+ this.put("wish", true);
+ this.put("witness", true);
+ this.put("wolf", true);
+ this.put("woman", true);
+ this.put("wonder", true);
+ this.put("wood", true);
+ this.put("wool", true);
+ this.put("word", true);
+ this.put("work", true);
+ this.put("world", true);
+ this.put("worry", true);
+ this.put("worth", true);
+ this.put("wrap", true);
+ this.put("wreck", true);
+ this.put("wrestle", true);
+ this.put("wrist", true);
+ this.put("write", true);
+ this.put("wrong", true);
+ this.put("yard", true);
+ this.put("year", true);
+ this.put("yellow", true);
+ this.put("you", true);
+ this.put("young", true);
+ this.put("youth", true);
+ this.put("zebra", true);
+ this.put("zero", true);
+ this.put("zone", true);
+ this.put("zoo", true);
+ }};
+
+ public static int HARDENED_BIT = 0x80000000;
+ public static String derivationPathBCD0 = "m/44'/999'/0'/0/0"; // Bitcoin Diamond
+ public static String derivationPathBCD1 = "m/44'/999'/1'/0/0";
+ public static String derivationPathBCD2 = "m/44'/999'/2'/0/0";
+ public static String derivationPathBCH0 = "m/44'/145'/0'/0/0"; // Bitcoin Cash
+ public static String derivationPathBCH1 = "m/44'/145'/1'/0/0";
+ public static String derivationPathBCH2 = "m/44'/145'/2'/0/0";
+ public static String derivationPathBSV0 = "m/44'/145'/0'/0/0"; // Bitcoin SV
+ public static String derivationPathBSV1 = "m/44'/145'/1'/0/0";
+ public static String derivationPathBSV2 = "m/44'/145'/2'/0/0";
+ public static final int[] derivationPathBTC0 = {44 | HARDENED_BIT, 0 | HARDENED_BIT, 0 | HARDENED_BIT, 0, 0};
+ /**
+ * BIP-44 m/purpose/coin_type/account/change/address_index
+ */
+ public static String derivationPathBTC0_str = "m/44'/0'/0'/0/0"; // Bitcoin
+ public static final int[] derivationPathBTC1 = {44 | HARDENED_BIT, 0 | HARDENED_BIT, 1 | HARDENED_BIT, 0, 0};
+ public static String derivationPathBTC1_str = "m/44'/0'/1'/0/0";
+ public static final int[] derivationPathBTC2 = {44 | HARDENED_BIT, 0 | HARDENED_BIT, 2 | HARDENED_BIT, 0, 0};
+ public static String derivationPathBTC2_str = "m/44'/0'/2'/0/0";
+ public static final int[] derivationPathBTC3 = {44 | HARDENED_BIT, 0 | HARDENED_BIT, 3 | HARDENED_BIT, 0, 0};
+ public static String derivationPathBTC3_str = "m/44'/0'/3'/0/0";
+ public static final int[] derivationPathBTC4 = {44 | HARDENED_BIT, 0 | HARDENED_BIT, 4 | HARDENED_BIT, 0, 0};
+ public static String derivationPathBTC4_str = "m/44'/0'/4'/0/0";
+ public static final int[] derivationPathBTC5 = {44 | HARDENED_BIT, 0 | HARDENED_BIT, 5 | HARDENED_BIT, 0, 0};
+ public static String derivationPathBTC5_str = "m/44'/0'/5'/0/0";
+ public static final int[] derivationPathBTC6 = {44 | HARDENED_BIT, 0 | HARDENED_BIT, 6 | HARDENED_BIT, 0, 0};
+ public static String derivationPathBTC6_str = "m/44'/0'/6'/0/0";
+ public static final int[] derivationPathBTC7 = {44 | HARDENED_BIT, 0 | HARDENED_BIT, 7 | HARDENED_BIT, 0, 0};
+ public static String derivationPathBTC7_str = "m/44'/0'/7'/0/0";
+ public static final int[] derivationPathBTC8 = {44 | HARDENED_BIT, 0 | HARDENED_BIT, 8 | HARDENED_BIT, 0, 0};
+ public static String derivationPathBTC8_str = "m/44'/0'/8'/0/0";
+ public static final int[] derivationPathBTC9 = {44 | HARDENED_BIT, 0 | HARDENED_BIT, 9 | HARDENED_BIT, 0, 0};
+ public static String derivationPathBTC9_str = "m/44'/0'/9'/0/0";
+ public static String derivationPathBTG0 = "m/44'/0'/0'/0/0"; // Bitcoin Gold
+ public static String derivationPathBTG1 = "m/44'/0'/1'/0/0";
+ public static String derivationPathBTG2 = "m/44'/0'/2'/0/0";
+ public static String derivationPathCARDANO0 = "m/44'/1815'/0'/0/0"; // Cardano
+ public static String derivationPathCARDANO1 = "m/44'/1815'/1'/0/0";
+ public static String derivationPathCARDANO2 = "m/44'/1815'/2'/0/0";
+ public static String derivationPathCOSMOS0 = "m/44'/1815'/0'/0/0"; // Cosmos
+ public static String derivationPathCOSMOS1 = "m/44'/1815'/1'/0/0";
+ public static String derivationPathCOSMOS2 = "m/44'/1815'/2'/0/0";
+ public static String derivationPathDASG0 = "m/44'/5'/0'"; // Dash
+ public static String derivationPathDASH1 = "m/44'/5'/1'";
+ public static String derivationPathDASH2 = "m/44'/5'/2'";
+ public static String derivationPathDCR0 = "m/44'/999'/0'/0/0"; // Decred
+ public static String derivationPathDCR1 = "m/44'/999'/1'/0/0";
+ public static String derivationPathDCR2 = "m/44'/999'/2'/0/0";
+ public static String derivationPathDGB0 = "m/44'/20'/0'/0/0"; // DigiByte
+ public static String derivationPathDGB1 = "m/44'/20'/1'/0/0";
+ public static String derivationPathDGB2 = "m/44'/20'/2'/0/0";
+ public static String derivationPathDOGE0 = "m/44'/3'/0'/0/0"; // DOGE
+ public static String derivationPathDOGE1 = "m/44'/3'/1'/0/0";
+ public static String derivationPathDOGE2 = "m/44'/3'/2'/0/0";
+ public static String derivationPathDOT0 = "m/44'/354'/0'/0/0"; // DOT
+ public static String derivationPathDOT1 = "m/44'/354'/1'/0/0";
+ public static String derivationPathDOT2 = "m/44'/354'/2'/0/0";
+ public static final int[] derivationPathETH0 = {44 | HARDENED_BIT, 60 | HARDENED_BIT, 0 | HARDENED_BIT, 0, 0};
+ public static String derivationPathETH0_str = "m/44'/60'/0'/0/0"; // ETH
+ public static final int[] derivationPathETH1 = {44 | HARDENED_BIT, 60 | HARDENED_BIT, 1 | HARDENED_BIT, 0, 0};
+ public static String derivationPathETH1_str = "m/44'/60'/1'/0/0";
+ public static final int[] derivationPathETH2 = {44 | HARDENED_BIT, 60 | HARDENED_BIT, 2 | HARDENED_BIT, 0, 0};
+ public static String derivationPathETH2_str = "m/44'/60'/2'/0/0";
+ public static final int[] derivationPathETH3 = {44 | HARDENED_BIT, 60 | HARDENED_BIT, 3 | HARDENED_BIT, 0, 0};
+ public static String derivationPathETH3_str = "m/44'/60'/3'/0/0";
+ public static final int[] derivationPathETH4 = {44 | HARDENED_BIT, 60 | HARDENED_BIT, 4 | HARDENED_BIT, 0, 0};
+ public static String derivationPathETH4_str = "m/44'/60'/4'/0/0";
+ public static final int[] derivationPathETH5 = {44 | HARDENED_BIT, 60 | HARDENED_BIT, 5 | HARDENED_BIT, 0, 0};
+ public static String derivationPathETH5_str = "m/44'/60'/5'/0/0";
+ public static final int[] derivationPathETH6 = {44 | HARDENED_BIT, 60 | HARDENED_BIT, 6 | HARDENED_BIT, 0, 0};
+ public static String derivationPathETH6_str = "m/44'/60'/6'/0/0";
+ public static final int[] derivationPathETH7 = {44 | HARDENED_BIT, 60 | HARDENED_BIT, 7 | HARDENED_BIT, 0, 0};
+ public static String derivationPathETH7_str = "m/44'/60'/7'/0/0";
+ public static final int[] derivationPathETH8 = {44 | HARDENED_BIT, 60 | HARDENED_BIT, 8 | HARDENED_BIT, 0, 0};
+ public static String derivationPathETH8_str = "m/44'/60'/8'/0/0";
+ public static final int[] derivationPathETH9 = {44 | HARDENED_BIT, 60 | HARDENED_BIT, 9 | HARDENED_BIT, 0, 0};
+ public static String derivationPathETH9_str = "m/44'/60'/9'/0/0";
+ public static String derivationPathGAS0 = "m/44'/888'/0'/0"; // GAS
+ public static String derivationPathGAS1 = "m/44'/888'/1'/0";
+ public static String derivationPathGAS2 = "m/44'/888'/2'/0";
+ public static String derivationPathGRS0 = "m/44'/0'/0'/0/0"; // Groestlcoin
+ public static String derivationPathGRS1 = "m/44'/0'/1'/0/0";
+ public static String derivationPathGRS2 = "m/44'/0'/2'/0/0";
+ public static String derivationPathKIN0 = "m/44'/148'/0'"; // Kin
+ public static String derivationPathKIN1 = "m/44'/148'/1'";
+ public static String derivationPathKIN2 = "m/44'/148'/2'";
+ public static String derivationPathLSK0 = "m/44'/148'/0'"; // Lisk
+ public static String derivationPathLSK1 = "m/44'/148'/1'";
+ public static String derivationPathLSK2 = "m/44'/148'/2'";
+ public static String derivationPathLTC0 = "m/44'/60'/0'/0/0"; // Litecoin
+ public static String derivationPathLTC1 = "m/44'/60'/1'/0/0";
+ public static String derivationPathLTC2 = "m/44'/60'/2'/0/0";
+ public static String derivationPathNEO0 = "m/44'/888'/0'/0"; // NEO
+ public static String derivationPathNEO1 = "m/44'/888'/1'/0";
+ public static String derivationPathNEO2 = "m/44'/888'/2'/0";
+ public static String derivationPathONG0 = "m/44'/1024'/0'/0/0"; // ONG
+ public static String derivationPathONG1 = "m/44'/1024'/1'/0/0";
+ public static String derivationPathONG2 = "m/44'/1024'/2'/0/0";
+ public static String derivationPathQTUM0 = "m/44'/2301'/0'/0/0"; // QTUM
+ public static String derivationPathQTUM1 = "m/44'/2301'/1'/0/0";
+ public static String derivationPathQTUM2 = "m/44'/2301'/2'/0/0";
+ @SuppressWarnings("serial")
+ public static final ArrayList derivationPathsBTC = new ArrayList() {{
+ this.add(derivationPathBTC0);
+ this.add(derivationPathBTC1);
+ this.add(derivationPathBTC2);
+ this.add(derivationPathBTC3);
+ this.add(derivationPathBTC4);
+ this.add(derivationPathBTC5);
+ this.add(derivationPathBTC6);
+ this.add(derivationPathBTC7);
+ this.add(derivationPathBTC8);
+ this.add(derivationPathBTC9);
+ }};
+ @SuppressWarnings("serial")
+ public static final ArrayList derivationPathsETH = new ArrayList() {{
+ this.add(derivationPathETH0);
+ this.add(derivationPathETH1);
+ this.add(derivationPathETH2);
+ this.add(derivationPathETH3);
+ this.add(derivationPathETH4);
+ this.add(derivationPathETH5);
+ this.add(derivationPathETH6);
+ this.add(derivationPathETH7);
+ this.add(derivationPathETH8);
+ this.add(derivationPathETH9);
+ }};
+ public static String derivationPathSMART0 = "m/44'/224'/0'/0/0"; // SmartCash
+ public static String derivationPathSMART1 = "m/44'/224'/1'/0/0";
+ public static String derivationPathSMART2 = "m/44'/224'/2'/0/0";
+ public static String derivationPathSOL0 = "m/44'/501'/0'"; // Solana
+ public static String derivationPathSOL1 = "m/44'/501'/1'";
+ public static String derivationPathSOL2 = "m/44'/501'/2'";
+ public static String derivationPathTPAY0 = "m/44'/265'/0'"; // TokenPay
+ public static String derivationPathTPAY1 = "m/44'/265'/1'";
+ public static String derivationPathTPAY2 = "m/44'/265'/2'";
+ public static String derivationPathTRON0 = "m/44'/195'/0'"; // Tron
+ public static String derivationPathTRON1 = "m/44'/195'/1'";
+ public static String derivationPathTRON2 = "m/44'/195'/2'";
+ public static String derivationPathVET0 = "m/44'/818'/0'/0"; // Vechain
+ public static String derivationPathVET1 = "m/44'/818'/1'/0";
+ public static String derivationPathVET2 = "m/44'/818'/2'/0";
+ public static String derivationPathWAVES0 = "m/44'/5741564'/0'/0"; // Waves
+ public static String derivationPathWAVES1 = "m/44'/5741564'/1'/0";
+ public static String derivationPathWAVES2 = "m/44'/5741564'/2'/0";
+ public static String derivationPathXEM0 = "m/44'/43'/0'/0"; // Nem
+ public static String derivationPathXEM1 = "m/44'/43'/1'/0";
+ public static String derivationPathXEM2 = "m/44'/43'/2'/0";
+ public static String derivationPathXLM0 = "m/44'/148'/0'"; // Stellar
+ public static String derivationPathXLM1 = "m/44'/148'/1'";
+ public static String derivationPathXLM2 = "m/44'/148'/2'";
+ public static String derivationPathXRP0 = "m/44'/144'/0/0/0'"; // Ripple
+ public static String derivationPathXRP1 = "m/44'/144'/1/0/0'";
+ public static String derivationPathXRP2 = "m/44'/144'/2/0/0'";
+ public static String derivationPathXTZ0 = "m/44'/1729'/0/0/0'"; // Tezos
+ public static String derivationPathXTZ1 = "m/44'/1729'/1/0/0'";
+ public static String derivationPathXTZ2 = "m/44'/1729'/2/0/0'";
+ public static String derivationPathZEC0 = "m/44'/133'/0/0/0'"; // ZCash
+ public static String derivationPathZEC01 = "m/44'/133'/1/0/0'";
+ public static String derivationPathZEC02 = "m/44'/133'/2/0/0'";
+
+}
diff --git a/src/main/java/crypto/forestfish/objects/embedded/avm/AccountDetailsAVM.java b/src/main/java/crypto/forestfish/objects/embedded/avm/AccountDetailsAVM.java
new file mode 100644
index 0000000..1de0763
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/embedded/avm/AccountDetailsAVM.java
@@ -0,0 +1,60 @@
+package crypto.forestfish.objects.embedded.avm;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+import crypto.forestfish.enums.AddressCategory;
+import crypto.forestfish.enums.CustomContractCategory;
+import crypto.forestfish.enums.avm.AVMChain;
+import crypto.forestfish.objects.avm.AVMKnownAccountAddress;
+import crypto.forestfish.objects.avm.AVMKnownCustomContractAddress;
+
+public class AccountDetailsAVM {
+
+ @SuppressWarnings("serial")
+ public static HashMap getKnownAVMWalletAddresses() {
+ HashMap addresses = new HashMap<>();
+
+ // zero address
+ AVMKnownAccountAddress zero = new AVMKnownAccountAddress(
+ "Algorand encoded address of 32 zero bytes",
+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY5HFKQ ",
+ AddressCategory.CORE,
+ new ArrayList() {{
+ this.add("https://developer.algorand.org/docs/get-details/accounts/");
+ this.add("https://algoexplorer.io/address/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY5HFKQ");
+ }});
+ addresses.put(zero.getAddress(), zero);
+
+ // testnetdispenser1
+ AVMKnownAccountAddress testnetdispenser1 = new AVMKnownAccountAddress(
+ "Algorand Testnet Dispenser",
+ "HZ57J3K46JIJXILONBBZOHX6BKPXEM2VVXNRFSUED6DKFD5ZD24PMJ3MVA ",
+ AddressCategory.CORE,
+ new ArrayList() {{
+ this.add("https://testnet.algoexplorer.io/address/HZ57J3K46JIJXILONBBZOHX6BKPXEM2VVXNRFSUED6DKFD5ZD24PMJ3MVA");
+ this.add("https://dispenser.testnet.aws.algodev.network");
+ }});
+ addresses.put(testnetdispenser1.getAddress(), testnetdispenser1);
+
+ return addresses;
+ }
+
+ @SuppressWarnings("serial")
+ public static HashMap getKnownAVMCustomContractAddressesBSC() {
+ HashMap addresses = new HashMap<>();
+
+ // test
+ AVMKnownCustomContractAddress stargate_busd_staking = new AVMKnownCustomContractAddress(
+ "Stargate",
+ "0xe2fc31f816a9b94326492132018c3aecc4a93ae1",
+ AVMChain.MAINNET,
+ CustomContractCategory.STAKING,
+ new ArrayList() {{
+ this.add("https://bscscan.com/address/0x3052a0f6ab15b4ae1df39962d5ddefaca86dab47");
+ }});
+ addresses.put(stargate_busd_staking.getAddress(), stargate_busd_staking);
+
+ return addresses;
+ }
+}
diff --git a/src/main/java/crypto/forestfish/objects/embedded/avm/BlockchainDetailsAVM.java b/src/main/java/crypto/forestfish/objects/embedded/avm/BlockchainDetailsAVM.java
new file mode 100644
index 0000000..514f938
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/embedded/avm/BlockchainDetailsAVM.java
@@ -0,0 +1,323 @@
+package crypto.forestfish.objects.embedded.avm;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+import crypto.forestfish.enums.BlockchainType;
+import crypto.forestfish.enums.TokenCategory;
+import crypto.forestfish.enums.avm.AVMChain;
+import crypto.forestfish.enums.avm.AVMNFTStandard;
+import crypto.forestfish.enums.avm.AVMNFTState;
+import crypto.forestfish.enums.avm.AVMNFTType;
+import crypto.forestfish.enums.avm.MainnetARC69;
+import crypto.forestfish.enums.avm.MainnetASA;
+import crypto.forestfish.enums.avm.TestnetASA;
+import crypto.forestfish.objects.avm.AlgoRelayNode;
+import crypto.forestfish.objects.avm.AlgoIndexerNode;
+import crypto.forestfish.objects.avm.model.asa.ASAIndex;
+import crypto.forestfish.objects.avm.model.asa.AVMASAInfo;
+import crypto.forestfish.objects.avm.model.chain.AVMChainIndex;
+import crypto.forestfish.objects.avm.model.chain.AVMChainInfo;
+import crypto.forestfish.objects.avm.model.chain.AVMCurrency;
+import crypto.forestfish.objects.avm.model.nft.ARC3Info;
+import crypto.forestfish.objects.avm.model.nft.ARC69Info;
+import crypto.forestfish.objects.avm.model.nft.AVMNFTIndex;
+import crypto.forestfish.utils.JSONUtils;
+
+public class BlockchainDetailsAVM {
+
+ public static AVMNFTIndex generateDummyNFTIndex() {
+ HashMap arc3s = new HashMap<>();
+ HashMap arc69s = new HashMap<>();
+ return new AVMNFTIndex(arc3s, arc69s);
+ }
+
+ public static ASAIndex generateDummyASAIndex() {
+ HashMap tokens = new HashMap<>();
+ return new ASAIndex(tokens);
+ }
+
+ @SuppressWarnings("serial")
+ public static AVMChainIndex generateAVMChainIndex() {
+
+ HashMap networks = new HashMap<>();
+
+ // mainnet
+ AVMChainInfo mainnet = new AVMChainInfo(
+ AVMChain.MAINNET.toString(),
+ "Algorand Mainnet",
+ BlockchainType.PUBLIC.toString(),
+ "mainnet-v1.0",
+ "wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8=",
+ new AVMCurrency("ALGO", "ALGO", 6),
+ new ArrayList() {{
+ this.add(new AlgoRelayNode("https://mainnet-api.algonode.network", 443, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "X-API-Key"));
+ this.add(new AlgoRelayNode("https://mainnet-api.algonode.cloud", 443, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "X-API-Key"));
+ this.add(new AlgoRelayNode("https://xna-mainnet-api.algonode.cloud", 443, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "X-API-Key"));
+ this.add(new AlgoRelayNode("https://node.algoexplorerapi.io", 443, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "X-API-Key"));
+
+ //this.add(new AlgoRelayNode("https://mainnet-algorand.api.purestake.io/ps2", 443, "", "X-API-Key")); // custom
+ //https://algo.getblock.io/05259d72-ef42-41e1-9c3c-5b.../mainnet/ // custom
+ //https://quicknode.com // custom
+ }},
+ new ArrayList() {{
+ this.add(new AlgoIndexerNode("https://mainnet-idx.algonode.network", 443, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "X-API-Key"));
+ this.add(new AlgoIndexerNode("https://mainnet-idx.algonode.cloud", 443, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "X-API-Key"));
+
+ //this.add(new AlgoIndexerNode("https://indexer.algoexplorerapi.io", 443, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "X-API-Key")); // does not allow custom limit settings, {"message":"invalid value on parameter 'limit'"}
+ //this.add(new AlgoIndexerNode("https://mainnet-algorand.api.purestake.io/idx2", 443, "", "X-API-Key")); // custom
+ }},
+ new ArrayList() {{
+ this.add("https://algoexplorer.io");
+ this.add("https://goalseeker.purestake.io/algorand/mainnet");
+ }},
+ new ArrayList() {{
+ this.add("no faucet available");
+ }},
+ new ArrayList() {{
+ this.add("https://www.algorand.com");
+ }},
+ generateMainnetASAIndex(),
+ generateMainnetNFTIndex());
+ networks.put(AVMChain.MAINNET, mainnet);
+
+ // testnet
+ AVMChainInfo testnet = new AVMChainInfo(
+ AVMChain.TESTNET.toString(),
+ "Algorand Testnet",
+ BlockchainType.PUBLIC.toString(),
+ "testnet-v1.0",
+ "SGO1GKSzyE7IEPItTxCByw9x8FmnrCDexi9/cOUJOiI=",
+ new AVMCurrency("ALGO", "ALGO", 6),
+ new ArrayList() {{
+ this.add(new AlgoRelayNode("https://testnet-api.algonode.cloud", 443, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "X-API-Key"));
+ this.add(new AlgoRelayNode("https://node.testnet.algoexplorerapi.io", 443, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "X-API-Key"));
+ // , https://replit.com/@Algorand/Getting-Started-with-JavaScript#index.js // custom
+ //this.add(new AlgoRelayNode("https://academy-algod.dev.aws.algodev.network", 443, "2f3203f21e738a1de6110eba6984f9d03e5a95d7a577b34616854064cf2c0e7b", "X-Algo-API-Token")); // custom
+ //this.add(new AlgoRelayNode("https://testnet-algorand.api.purestake.io/ps2", 443, "", "X-API-Key")); // custom
+ }},
+ new ArrayList() {{
+ this.add(new AlgoIndexerNode("https://testnet-idx.algonode.cloud", 443, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "X-API-Key"));
+ //this.add(new AlgoIndexerNode("https://indexer.testnet.algoexplorerapi.io", 443, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "X-API-Key")); // does not allow custom limit settings, {"message":"invalid value on parameter 'limit'"}
+ //this.add(new AlgoIndexerNode("https://testnet-algorand.api.purestake.io/idx2", 443, "", "X-API-Key")); // custom
+ }},
+ new ArrayList() {{
+ this.add("https://testnet.algoexplorer.io");
+ this.add("https://goalseeker.purestake.io/algorand/testnet");
+ }},
+ new ArrayList() {{
+ this.add("https://dispenser.testnet.aws.algodev.network");
+ this.add("https://testnet.algoexplorer.io/dispenser");
+ }},
+ new ArrayList() {{
+ this.add("https://www.algorand.com");
+ }},
+ generateTestnetASAIndex(),
+ generateDummyNFTIndex());
+ networks.put(AVMChain.TESTNET, testnet);
+
+ // betanet
+ AVMChainInfo betanet = new AVMChainInfo(
+ AVMChain.BETANET.toString(),
+ "Algorand Betanet",
+ BlockchainType.PUBLIC.toString(),
+ "betanet-v1.0",
+ "mFgazF+2uRS1tMiL9dsj01hJGySEmPN28B/TjjvpVW0=",
+ new AVMCurrency("ALGO", "ALGO", 6),
+ new ArrayList() {{
+ this.add(new AlgoRelayNode("https://betanet-api.algonode.cloud", 443, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "X-API-Key"));
+ //this.add(new AlgoRelayNode("https://betanet-algorand.api.purestake.io/ps2", 443, "", "X-API-Key"));
+ }},
+ new ArrayList() {{
+ this.add(new AlgoIndexerNode("https://betanet-idx.algonode.cloud", 443, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "X-API-Key"));
+ //this.add(new AlgoIndexerNode("https://betanet-algorand.api.purestake.io/idx2", 443, "", "X-API-Key"));
+ }},
+ new ArrayList() {{
+ this.add("https://betanet.algoexplorer.io");
+ this.add("https://goalseeker.purestake.io/algorand/betanet");
+ }},
+ new ArrayList() {{
+ this.add("https://betanet.algoexplorer.io/dispenser");
+ this.add("https://bank.betanet.algodev.network/");
+ }},
+ new ArrayList() {{
+ this.add("https://www.algorand.com");
+ }},
+ generateDummyASAIndex(),
+ generateDummyNFTIndex());
+ networks.put(AVMChain.BETANET, betanet);
+
+ // localtestnet
+ AVMChainInfo localtestnet = new AVMChainInfo(
+ AVMChain.TESTNET_SANDBOX4001.toString(),
+ "Algorand Testnet",
+ BlockchainType.LOCAL.toString(),
+ "testnet-v1.0",
+ "SGO1GKSzyE7IEPItTxCByw9x8FmnrCDexi9/cOUJOiI=",
+ new AVMCurrency("ALGO", "ALGO", 6),
+ new ArrayList() {{
+ this.add(new AlgoRelayNode("http://localhost", 4001, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "X-Algo-API-Token"));
+ }},
+ new ArrayList() {{
+ //this.add(new AlgoIndexerNode("http://..", 4.., "", "X-Algo-API-Token"));
+ }},
+ new ArrayList() {{
+ this.add("https://testnet.algoexplorer.io");
+ this.add("https://goalseeker.purestake.io/algorand/testnet");
+ }},
+ new ArrayList() {{
+ this.add("https://dispenser.testnet.aws.algodev.network");
+ this.add("https://testnet.algoexplorer.io/dispenser");
+ this.add("https://bank.testnet.algorand.network");
+ }},
+ new ArrayList() {{
+ this.add("https://www.algorand.com");
+ }},
+ generateTestnetASAIndex(),
+ generateDummyNFTIndex());
+ networks.put(AVMChain.TESTNET_SANDBOX4001, localtestnet);
+
+ // voi_testnet
+ AVMChainInfo voi_testnet = new AVMChainInfo(
+ AVMChain.VOI_TESTNET.toString(),
+ "Voi Testnet",
+ BlockchainType.PUBLIC.toString(),
+ "voitest-v1",
+ "IXnoWtviVVJW5LGivNFc0Dq14V3kqaXuK2u5OQrdVZo=",
+ new AVMCurrency("VOI", "VOI", 6),
+ new ArrayList() {{
+ this.add(new AlgoRelayNode("https://testnet-api.voi.nodly.io", 443, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "X-Algo-API-Token"));
+
+ //this.add(new AlgoRelayNode("https://voitest-api.k1-fi.a-wallet.net", 443, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "X-Algo-API-Token")); // random "Invalid API Token" responses
+ //this.add(new AlgoRelayNode("http://10.0.0.8", 8080, "f0ef3d2b9fa936ffe78adb75c460a308c11de212ad05a137c2955e47b673ccf6", "X-Algo-API-Token")); // custom
+ }},
+ new ArrayList() {{
+ this.add(new AlgoIndexerNode("https://testnet-idx.voi.nodly.io", 443, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "X-Algo-API-Token"));
+ }},
+ new ArrayList() {{
+ this.add("https://voitest-explorer.k1-fi.a-wallet.net/dashboard/home");
+ this.add("https://app.dappflow.org/explorer/home");
+ }},
+ new ArrayList() {{
+ this.add("Google form https://forms.gle/Trhib6toVZb6uf2HA");
+ }},
+ new ArrayList() {{
+ this.add("https://voi.network");
+ }},
+ generateDummyASAIndex(),
+ generateDummyNFTIndex());
+ networks.put(AVMChain.VOI_TESTNET, voi_testnet);
+
+ return new AVMChainIndex(networks);
+
+ }
+
+ public static String generateAVMChainIndexJSON() {
+ AVMChainIndex idx = generateAVMChainIndex();
+ return JSONUtils.createJSONFromPOJO(idx);
+ }
+
+ @SuppressWarnings("serial")
+ public static ASAIndex generateMainnetASAIndex() {
+ HashMap tokens = new HashMap<>();
+
+ // usdc
+ AVMASAInfo usdc = new AVMASAInfo(
+ MainnetASA.USDC.toString(),
+ 31566704L,
+ "USDC stablecoin token",
+ 6,
+ TokenCategory.STABLECOIN.toString(),
+ AVMChain.MAINNET.toString(),
+ new ArrayList() {{
+ this.add("https://algoexplorer.io/asset/31566704");
+ this.add("https://www.coingecko.com/en/coins/usd-coin");
+ }});
+ tokens.put("31566704", usdc);
+
+ // coop
+ AVMASAInfo coop = new AVMASAInfo(
+ MainnetASA.COOP.toString(),
+ 796425061L,
+ "COOP coin",
+ 6,
+ TokenCategory.MEME.toString(),
+ AVMChain.MAINNET.toString(),
+ new ArrayList() {{
+ this.add("https://algoexplorer.io/asset/796425061");
+ }});
+ tokens.put("796425061", coop);
+
+ // opul
+ AVMASAInfo opul = new AVMASAInfo(
+ MainnetASA.OPUL.toString(),
+ 287867876L,
+ "Opulous token",
+ 10,
+ TokenCategory.MFT.toString(),
+ AVMChain.MAINNET.toString(),
+ new ArrayList() {{
+ this.add("https://algoexplorer.io/asset/287867876");
+ this.add("https://opulous.org/");
+ }});
+ tokens.put("287867876", opul);
+
+ return new ASAIndex(tokens);
+ }
+
+ public static String generateNFTIndexJSON(AVMNFTIndex idx) {
+ return JSONUtils.createJSONFromPOJO(idx);
+ }
+
+ @SuppressWarnings("serial")
+ public static ASAIndex generateTestnetASAIndex() {
+ HashMap tokens = new HashMap<>();
+
+ // usdc
+ AVMASAInfo usdc = new AVMASAInfo(
+ TestnetASA.USDC.toString(),
+ 10458941L,
+ "USDC stablecoin token",
+ 6,
+ TokenCategory.STABLECOIN.toString(),
+ AVMChain.TESTNET_SANDBOX4001.toString(),
+ new ArrayList() {{
+ this.add("https://testnet.algoexplorer.io/asset/10458941");
+ this.add("https://www.coingecko.com/en/coins/usd-coin");
+ this.add("https://dispenser.testnet.aws.algodev.network");
+ }});
+ tokens.put("10458941", usdc);
+
+ return new ASAIndex(tokens);
+ }
+
+ @SuppressWarnings("serial")
+ public static AVMNFTIndex generateMainnetNFTIndex() {
+ HashMap arc3s = new HashMap<>();
+ HashMap arc69s = new HashMap<>();
+
+ // IMMUTABLE = nofreeze, noclawback
+
+ // Alchemon ZIP
+ ARC69Info alchemon_zip = new ARC69Info(
+ MainnetARC69.ALCH0046.toString(),
+ "OJGTHEJ2O5NXN7FVXDZZEEJTUEQHHCIYIE5MWY6BEFVVLZ2KANJODBOKGA",
+ AVMNFTStandard.ARC69,
+ AVMNFTType.FRACTIONAL,
+ AVMNFTState.MUTABLE,
+ "Alchemon NFT Zip (ALCH0046)",
+ TokenCategory.GAMING.toString(),
+ AVMChain.MAINNET.toString(),
+ new ArrayList() {{
+ this.add("https://algoexplorer.io/address/OJGTHEJ2O5NXN7FVXDZZEEJTUEQHHCIYIE5MWY6BEFVVLZ2KANJODBOKGA");
+ }});
+ arc69s.put(MainnetARC69.ALCH0046.toString(), alchemon_zip);
+
+ return new AVMNFTIndex(arc3s, arc69s);
+ }
+
+ public static String generateASAIndexJSON(ASAIndex idx) {
+ return JSONUtils.createJSONFromPOJO(idx);
+ }
+
+}
diff --git a/src/main/java/crypto/forestfish/objects/embedded/evm/ABI.java b/src/main/java/crypto/forestfish/objects/embedded/evm/ABI.java
new file mode 100644
index 0000000..dbf86a3
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/embedded/evm/ABI.java
@@ -0,0 +1,25 @@
+package crypto.forestfish.objects.embedded.evm;
+
+public class ABI {
+
+ /**
+ * Selected embedded ABI files (dont expand this list)
+ */
+
+ // https://docs.aavegotchi.com/abi/diamondabi
+ public static String abiAavegotchiDiamond = new StringBuilder("[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"aavegotchiClaimTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"claimTime_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"allAavegotchisOfOwner\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"randomNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"status\",\"type\":\"uint256\"},{\"internalType\":\"int16[6]\",\"name\":\"numericTraits\",\"type\":\"int16[6]\"},{\"internalType\":\"int16[6]\",\"name\":\"modifiedNumericTraits\",\"type\":\"int16[6]\"},{\"internalType\":\"uint16[16]\",\"name\":\"equippedWearables\",\"type\":\"uint16[16]\"},{\"internalType\":\"address\",\"name\":\"collateral\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"escrow\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"stakedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minimumStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"kinship\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastInteracted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"experience\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toNextLevel\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"usedSkillPoints\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"level\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"hauntId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseRarityScore\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"modifiedRarityScore\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"locked\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"itemId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"author\",\"type\":\"string\"},{\"internalType\":\"int8[6]\",\"name\":\"traitModifiers\",\"type\":\"int8[6]\"},{\"internalType\":\"bool[16]\",\"name\":\"slotPositions\",\"type\":\"bool[16]\"},{\"internalType\":\"uint8[]\",\"name\":\"allowedCollaterals\",\"type\":\"uint8[]\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"x\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"y\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"width\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"height\",\"type\":\"uint8\"}],\"internalType\":\"struct Dimensions\",\"name\":\"dimensions\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"ghstPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxQuantity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalQuantity\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"svgId\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"rarityScoreModifier\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"canPurchaseWithGhst\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"minLevel\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"canBeTransferred\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"category\",\"type\":\"uint8\"},{\"internalType\":\"int16\",\"name\":\"kinshipBonus\",\"type\":\"int16\"},{\"internalType\":\"uint32\",\"name\":\"experienceBonus\",\"type\":\"uint32\"}],\"internalType\":\"struct ItemType\",\"name\":\"itemType\",\"type\":\"tuple\"}],\"internalType\":\"struct ItemTypeIO[]\",\"name\":\"items\",\"type\":\"tuple[]\"}],\"internalType\":\"struct AavegotchiInfo[]\",\"name\":\"aavegotchiInfos_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_approved\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"getAavegotchi\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"randomNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"status\",\"type\":\"uint256\"},{\"internalType\":\"int16[6]\",\"name\":\"numericTraits\",\"type\":\"int16[6]\"},{\"internalType\":\"int16[6]\",\"name\":\"modifiedNumericTraits\",\"type\":\"int16[6]\"},{\"internalType\":\"uint16[16]\",\"name\":\"equippedWearables\",\"type\":\"uint16[16]\"},{\"internalType\":\"address\",\"name\":\"collateral\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"escrow\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"stakedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minimumStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"kinship\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastInteracted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"experience\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toNextLevel\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"usedSkillPoints\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"level\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"hauntId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseRarityScore\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"modifiedRarityScore\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"locked\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"itemId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"author\",\"type\":\"string\"},{\"internalType\":\"int8[6]\",\"name\":\"traitModifiers\",\"type\":\"int8[6]\"},{\"internalType\":\"bool[16]\",\"name\":\"slotPositions\",\"type\":\"bool[16]\"},{\"internalType\":\"uint8[]\",\"name\":\"allowedCollaterals\",\"type\":\"uint8[]\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"x\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"y\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"width\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"height\",\"type\":\"uint8\"}],\"internalType\":\"struct Dimensions\",\"name\":\"dimensions\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"ghstPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxQuantity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalQuantity\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"svgId\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"rarityScoreModifier\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"canPurchaseWithGhst\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"minLevel\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"canBeTransferred\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"category\",\"type\":\"uint8\"},{\"internalType\":\"int16\",\"name\":\"kinshipBonus\",\"type\":\"int16\"},{\"internalType\":\"uint32\",\"name\":\"experienceBonus\",\"type\":\"uint32\"}],\"internalType\":\"struct ItemType\",\"name\":\"itemType\",\"type\":\"tuple\"}],\"internalType\":\"struct ItemTypeIO[]\",\"name\":\"items\",\"type\":\"tuple[]\"}],\"internalType\":\"struct AavegotchiInfo\",\"name\":\"aavegotchiInfo_\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"approved_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"approved_\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"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\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"tokenByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"tokenIdsOfOwner\",\"outputs\":[{\"internalType\":\"uint32[]\",\"name\":\"tokenIds_\",\"type\":\"uint32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"tokenOfOwnerByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"ClaimAavegotchi\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_time\",\"type\":\"uint256\"}],\"name\":\"LockAavegotchi\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_oldName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_newName\",\"type\":\"string\"}],\"name\":\"SetAavegotchiName\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_batchId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"}],\"name\":\"SetBatchId\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"int16[4]\",\"name\":\"_values\",\"type\":\"int16[4]\"}],\"name\":\"SpendSkillpoints\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_time\",\"type\":\"uint256\"}],\"name\":\"UnLockAavegotchi\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_experience\",\"type\":\"uint256\"}],\"name\":\"aavegotchiLevel\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"level_\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"}],\"name\":\"aavegotchiNameAvailable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"available_\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"availableSkillPoints\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int16[6]\",\"name\":\"_numericTraits\",\"type\":\"int16[6]\"}],\"name\":\"baseRarityScore\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rarityScore_\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_option\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_stakeAmount\",\"type\":\"uint256\"}],\"name\":\"claimAavegotchi\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentHaunt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"hauntId_\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"hauntMaxSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"portalPrice\",\"type\":\"uint256\"},{\"internalType\":\"bytes3\",\"name\":\"bodyColor\",\"type\":\"bytes3\"},{\"internalType\":\"uint24\",\"name\":\"totalCount\",\"type\":\"uint24\"}],\"internalType\":\"struct Haunt\",\"name\":\"haunt_\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"getNumericTraits\",\"outputs\":[{\"internalType\":\"int16[6]\",\"name\":\"numericTraits_\",\"type\":\"int16[6]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ghstAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"contract_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"_tokenIds\",\"type\":\"uint256[]\"}],\"name\":\"interact\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"kinship\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"score_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"modifiedTraitsAndRarityScore\",\"outputs\":[{\"internalType\":\"int16[6]\",\"name\":\"numericTraits_\",\"type\":\"int16[6]\"},{\"internalType\":\"uint256\",\"name\":\"rarityScore_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"portalAavegotchiTraits\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"randomNumber\",\"type\":\"uint256\"},{\"internalType\":\"int16[6]\",\"name\":\"numericTraits\",\"type\":\"int16[6]\"},{\"internalType\":\"address\",\"name\":\"collateralType\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minimumStake\",\"type\":\"uint256\"}],\"internalType\":\"struct PortalAavegotchiTraitsIO[10]\",\"name\":\"portalAavegotchiTraits_\",\"type\":\"tuple[10]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int16[6]\",\"name\":\"_numericTraits\",\"type\":\"int16[6]\"}],\"name\":\"rarityMultiplier\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"multiplier_\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"revenueShares\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"burnAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"daoAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rarityFarming\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pixelCraft\",\"type\":\"address\"}],\"internalType\":\"struct AavegotchiGameFacet.RevenueSharesIO\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"}],\"name\":\"setAavegotchiName\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"int16[4]\",\"name\":\"_values\",\"type\":\"int16[4]\"}],\"name\":\"spendSkillPoints\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_experience\",\"type\":\"uint256\"}],\"name\":\"xpUntilNextLevel\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"requiredXp_\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"}],\"name\":\"AddedAavegotchiBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"AddedItemsBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"}],\"name\":\"WithdrawnBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"WithdrawnItems\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"childChainManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_depositData\",\"type\":\"bytes\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newChildChainManager\",\"type\":\"address\"}],\"name\":\"setChildChainManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"_tokenIds\",\"type\":\"uint256[]\"}],\"name\":\"withdrawAavegotchiBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"_ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_values\",\"type\":\"uint256[]\"}],\"name\":\"withdrawItemsBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_reduceAmount\",\"type\":\"uint256\"}],\"name\":\"DecreaseStake\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_fromTokenId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_toTokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"experience\",\"type\":\"uint256\"}],\"name\":\"ExperienceTransfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_stakeAmount\",\"type\":\"uint256\"}],\"name\":\"IncreaseStake\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"collateralBalance\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"collateralType_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"escrow_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_collateralId\",\"type\":\"uint256\"}],\"name\":\"collateralInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"collateralType\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"int16[6]\",\"name\":\"modifiers\",\"type\":\"int16[6]\"},{\"internalType\":\"bytes3\",\"name\":\"primaryColor\",\"type\":\"bytes3\"},{\"internalType\":\"bytes3\",\"name\":\"secondaryColor\",\"type\":\"bytes3\"},{\"internalType\":\"bytes3\",\"name\":\"cheekColor\",\"type\":\"bytes3\"},{\"internalType\":\"uint8\",\"name\":\"svgId\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"eyeShapeSvgId\",\"type\":\"uint8\"},{\"internalType\":\"uint16\",\"name\":\"conversionRate\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"delisted\",\"type\":\"bool\"}],\"internalType\":\"struct AavegotchiCollateralTypeInfo\",\"name\":\"collateralTypeInfo\",\"type\":\"tuple\"}],\"internalType\":\"struct AavegotchiCollateralTypeIO\",\"name\":\"collateralInfo_\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"collaterals\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"collateralTypes_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_toId\",\"type\":\"uint256\"}],\"name\":\"decreaseAndDestroy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_reduceAmount\",\"type\":\"uint256\"}],\"name\":\"decreaseStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCollateralInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"collateralType\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"int16[6]\",\"name\":\"modifiers\",\"type\":\"int16[6]\"},{\"internalType\":\"bytes3\",\"name\":\"primaryColor\",\"type\":\"bytes3\"},{\"internalType\":\"bytes3\",\"name\":\"secondaryColor\",\"type\":\"bytes3\"},{\"internalType\":\"bytes3\",\"name\":\"cheekColor\",\"type\":\"bytes3\"},{\"internalType\":\"uint8\",\"name\":\"svgId\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"eyeShapeSvgId\",\"type\":\"uint8\"},{\"internalType\":\"uint16\",\"name\":\"conversionRate\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"delisted\",\"type\":\"bool\"}],\"internalType\":\"struct AavegotchiCollateralTypeInfo\",\"name\":\"collateralTypeInfo\",\"type\":\"tuple\"}],\"internalType\":\"struct AavegotchiCollateralTypeIO[]\",\"name\":\"collateralInfo_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_stakeAmount\",\"type\":\"uint256\"}],\"name\":\"increaseStake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_collateralToken\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"_svgId\",\"type\":\"uint8\"}],\"name\":\"setCollateralEyeShapeSvgId\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"collateralType\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"int16[6]\",\"name\":\"modifiers\",\"type\":\"int16[6]\"},")
+ .append("{\"internalType\":\"bytes3\",\"name\":\"primaryColor\",\"type\":\"bytes3\"},{\"internalType\":\"bytes3\",\"name\":\"secondaryColor\",\"type\":\"bytes3\"},{\"internalType\":\"bytes3\",\"name\":\"cheekColor\",\"type\":\"bytes3\"},{\"internalType\":\"uint8\",\"name\":\"svgId\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"eyeShapeSvgId\",\"type\":\"uint8\"},{\"internalType\":\"uint16\",\"name\":\"conversionRate\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"delisted\",\"type\":\"bool\"}],\"internalType\":\"struct AavegotchiCollateralTypeInfo\",\"name\":\"collateralTypeInfo\",\"type\":\"tuple\"}],\"indexed\":false,\"internalType\":\"struct AavegotchiCollateralTypeIO\",\"name\":\"_collateralType\",\"type\":\"tuple\"}],\"name\":\"AddCollateralType\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"author\",\"type\":\"string\"},{\"internalType\":\"int8[6]\",\"name\":\"traitModifiers\",\"type\":\"int8[6]\"},{\"internalType\":\"bool[16]\",\"name\":\"slotPositions\",\"type\":\"bool[16]\"},{\"internalType\":\"uint8[]\",\"name\":\"allowedCollaterals\",\"type\":\"uint8[]\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"x\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"y\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"width\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"height\",\"type\":\"uint8\"}],\"internalType\":\"struct Dimensions\",\"name\":\"dimensions\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"ghstPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxQuantity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalQuantity\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"svgId\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"rarityScoreModifier\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"canPurchaseWithGhst\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"minLevel\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"canBeTransferred\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"category\",\"type\":\"uint8\"},{\"internalType\":\"int16\",\"name\":\"kinshipBonus\",\"type\":\"int16\"},{\"internalType\":\"uint32\",\"name\":\"experienceBonus\",\"type\":\"uint32\"}],\"indexed\":false,\"internalType\":\"struct ItemType\",\"name\":\"_itemType\",\"type\":\"tuple\"}],\"name\":\"AddItemType\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint8[]\",\"name\":\"allowedCollaterals\",\"type\":\"uint8[]\"},{\"internalType\":\"uint16[]\",\"name\":\"wearableIds\",\"type\":\"uint16[]\"},{\"internalType\":\"int8[5]\",\"name\":\"traitsBonuses\",\"type\":\"int8[5]\"}],\"indexed\":false,\"internalType\":\"struct WearableSet\",\"name\":\"_wearableSet\",\"type\":\"tuple\"}],\"name\":\"AddWearableSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_hauntId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_hauntMaxSize\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_portalPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_bodyColor\",\"type\":\"bytes32\"}],\"name\":\"CreateHaunt\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousDao\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newDao\",\"type\":\"address\"}],\"name\":\"DaoTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousDaoTreasury\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newDaoTreasury\",\"type\":\"address\"}],\"name\":\"DaoTreasuryTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousGameManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newGameManager\",\"type\":\"address\"}],\"name\":\"GameManagerTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_tokenIds\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_xpValues\",\"type\":\"uint256[]\"}],\"name\":\"GrantExperience\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_itemIds\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_maxQuanities\",\"type\":\"uint256[]\"}],\"name\":\"ItemTypeMaxQuantity\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int16[6]\",\"name\":\"_oldModifiers\",\"type\":\"int16[6]\"},{\"indexed\":false,\"internalType\":\"int16[6]\",\"name\":\"_newModifiers\",\"type\":\"int16[6]\"}],\"name\":\"UpdateCollateralModifiers\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_setId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint8[]\",\"name\":\"allowedCollaterals\",\"type\":\"uint8[]\"},{\"internalType\":\"uint16[]\",\"name\":\"wearableIds\",\"type\":\"uint16[]\"},{\"internalType\":\"int8[5]\",\"name\":\"traitsBonuses\",\"type\":\"int8[5]\"}],\"indexed\":false,\"internalType\":\"struct WearableSet\",\"name\":\"_wearableSet\",\"type\":\"tuple\"}],\"name\":\"UpdateWearableSet\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"collateralType\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"int16[6]\",\"name\":\"modifiers\",\"type\":\"int16[6]\"},{\"internalType\":\"bytes3\",\"name\":\"primaryColor\",\"type\":\"bytes3\"},{\"internalType\":\"bytes3\",\"name\":\"secondaryColor\",\"type\":\"bytes3\"},{\"internalType\":\"bytes3\",\"name\":\"cheekColor\",\"type\":\"bytes3\"},{\"internalType\":\"uint8\",\"name\":\"svgId\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"eyeShapeSvgId\",\"type\":\"uint8\"},{\"internalType\":\"uint16\",\"name\":\"conversionRate\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"delisted\",\"type\":\"bool\"}],\"internalType\":\"struct AavegotchiCollateralTypeInfo\",\"name\":\"collateralTypeInfo\",\"type\":\"tuple\"}],\"internalType\":\"struct AavegotchiCollateralTypeIO[]\",\"name\":\"_collateralTypes\",\"type\":\"tuple[]\"}],\"name\":\"addCollateralTypes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"author\",\"type\":\"string\"},{\"internalType\":\"int8[6]\",\"name\":\"traitModifiers\",\"type\":\"int8[6]\"},{\"internalType\":\"bool[16]\",\"name\":\"slotPositions\",\"type\":\"bool[16]\"},{\"internalType\":\"uint8[]\",\"name\":\"allowedCollaterals\",\"type\":\"uint8[]\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"x\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"y\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"width\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"height\",\"type\":\"uint8\"}],\"internalType\":\"struct Dimensions\",\"name\":\"dimensions\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"ghstPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxQuantity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalQuantity\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"svgId\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"rarityScoreModifier\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"canPurchaseWithGhst\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"minLevel\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"canBeTransferred\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"category\",\"type\":\"uint8\"},{\"internalType\":\"int16\",\"name\":\"kinshipBonus\",\"type\":\"int16\"},{\"internalType\":\"uint32\",\"name\":\"experienceBonus\",\"type\":\"uint32\"}],\"internalType\":\"struct ItemType[]\",\"name\":\"_itemTypes\",\"type\":\"tuple[]\"}],\"name\":\"addItemTypes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"author\",\"type\":\"string\"},{\"internalType\":\"int8[6]\",\"name\":\"traitModifiers\",\"type\":\"int8[6]\"},{\"internalType\":\"bool[16]\",\"name\":\"slotPositions\",\"type\":\"bool[16]\"},{\"internalType\":\"uint8[]\",\"name\":\"allowedCollaterals\",\"type\":\"uint8[]\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"x\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"y\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"width\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"height\",\"type\":\"uint8\"}],\"internalType\":\"struct Dimensions\",\"name\":\"dimensions\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"ghstPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxQuantity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalQuantity\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"svgId\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"rarityScoreModifier\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"canPurchaseWithGhst\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"minLevel\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"canBeTransferred\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"category\",\"type\":\"uint8\"},{\"internalType\":\"int16\",\"name\":\"kinshipBonus\",\"type\":\"int16\"},{\"internalType\":\"uint32\",\"name\":\"experienceBonus\",\"type\":\"uint32\"}],\"internalType\":\"struct ItemType[]\",\"name\":\"_itemTypes\",\"type\":\"tuple[]\"},{\"internalType\":\"string\",\"name\":\"_svg\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"svgType\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"sizes\",\"type\":\"uint256[]\"}],\"internalType\":\"struct LibSvg.SvgTypeAndSizes[]\",\"name\":\"_typesAndSizes\",\"type\":\"tuple[]\"}],\"name\":\"addItemTypesAndSvgs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint8[]\",\"name\":\"allowedCollaterals\",\"type\":\"uint8[]\"},{\"internalType\":\"uint16[]\",\"name\":\"wearableIds\",\"type\":\"uint16[]\"},{\"internalType\":\"int8[5]\",\"name\":\"traitsBonuses\",\"type\":\"int8[5]\"}],\"internalType\":\"struct WearableSet[]\",\"name\":\"_wearableSets\",\"type\":\"tuple[]\"}],\"name\":\"addWearableSets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint24\",\"name\":\"_hauntMaxSize\",\"type\":\"uint24\"},{\"internalType\":\"uint96\",\"name\":\"_portalPrice\",\"type\":\"uint96\"},{\"internalType\":\"bytes3\",\"name\":\"_bodyColor\",\"type\":\"bytes3\"}],\"name\":\"createHaunt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"hauntId_\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gameManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"_tokenIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_xpValues\",\"type\":\"uint256[]\"}],\"name\":\"grantExperience\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"_itemIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_quantities\",\"type\":\"uint256[]\"}],\"name\":\"mintItems\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newDao\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newDaoTreasury\",\"type\":\"address\"}],\"name\":\"setDao\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_gameManager\",\"type\":\"address\"}],\"name\":\"setGameManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_collateralType\",\"type\":\"address\"},{\"internalType\":\"int16[6]\",\"name\":\"_modifiers\",\"type\":\"int16[6]\"}],\"name\":\"updateCollateralModifiers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"_itemIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_maxQuantities\",\"type\":\"uint256[]\"}],\"name\":\"updateItemTypeMaxQuantity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"_setIds\",\"type\":\"uint256[]\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint8[]\",\"name\":\"allowedCollaterals\",\"type\":\"uint8[]\"},{\"internalType\":\"uint16[]\",\"name\":\"wearableIds\",\"type\":\"uint16[]\"},{\"internalType\":\"int8[5]\",\"name\":\"traitsBonuses\",\"type\":\"int8[5]\"}],\"internalType\":\"struct WearableSet[]\",\"name\":\"_wearableSets\",\"type\":\"tuple[]\"}],\"name\":\"updateWearableSets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"listingFeeInWei\",\"type\":\"uint256\"}],\"name\":\"ChangedListingFee\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"listingId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"seller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"buyer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"erc1155TokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"erc1155TypeId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"category\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_quantity\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"priceInWei\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"time\",\"type\":\"uint256\"}],\"name\":\"ERC1155ExecutedListing\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"listingId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"seller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"erc1155TokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"erc1155TypeId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"category\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"priceInWei\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"time\",\"type\":\"uint256\"}],\"name\":\"ERC1155ListingAdd\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"listingId\",\"type\":\"uint256\"}],\"name\":\"ERC1155ListingCancelled\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_listingId\",\"type\":\"uint256\"}],\"name\":\"cancelERC1155Listing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"_listingIds\",\"type\":\"uint256[]\"}],\"name\":\"cancelERC1155Listings\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_listingId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_quantity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_priceInWei\",\"type\":\"uint256\"}],\"name\":\"executeERC1155Listing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_erc1155TokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_erc1155TypeId\",\"type\":\"uint256\"}],\"name\":\"getERC1155Category\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"category_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_listingId\",\"type\":\"uint256\"}],\"name\":\"getERC1155Listing\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"listingId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"seller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"erc1155TokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"erc1155TypeId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"category\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"priceInWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeCreated\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeLastPurchased\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sourceListingId\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"sold\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"cancelled\",\"type\":\"bool\"}],\"internalType\":\"struct ERC1155Listing\",\"name\":\"listing_\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_erc1155TokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_erc1155TypeId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"getERC1155ListingFromToken\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"listingId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"seller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"erc1155TokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"erc1155TypeId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"category\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"priceInWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeCreated\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeLastPurchased\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sourceListingId\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"sold\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"cancelled\",\"type\":\"bool\"}],\"internalType\":\"struct ERC1155Listing\",\"name\":\"listing_\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_category\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_sort\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_length\",\"type\":\"uint256\"}],\"name\":\"getERC1155Listings\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"listingId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"seller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"erc1155TokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"erc1155TypeId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"category\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"priceInWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeCreated\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeLastPurchased\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sourceListingId\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"sold\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"cancelled\",\"type\":\"bool\"}],\"internalType\":\"struct ERC1155Listing[]\",\"name\":\"listings_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getListingFeeInWei\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_category\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_sort\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_length\",\"type\":\"uint256\"}],\"name\":\"getOwnerERC1155Listings\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"listingId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"seller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"erc1155TokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"erc1155TypeId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"category\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"priceInWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeCreated\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeLastPurchased\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sourceListingId\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"sold\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"cancelled\",\"type\":\"bool\"}],\"internalType\":\"struct ERC1155Listing[]\",\"name\":\"listings_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"erc1155TokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"erc1155TypeId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"category\",\"type\":\"uint256\"}],\"internalType\":\"struct ERC1155MarketplaceFacet.Category[]\",\"name\":\"_categories\",\"type\":\"tuple[]\"}],\"name\":\"setERC1155Categories\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_erc1155TokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_erc1155TypeId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_quantity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_priceInWei\",\"type\":\"uint256\"}],\"name\":\"setERC1155Listing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_listingFeeInWei\",\"type\":\"uint256\"}],\"name\":\"setListingFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_erc1155TokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"_erc1155TypeIds\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"updateBatchERC1155Listing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_erc1155TokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_erc1155TypeId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"updateERC1155Listing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"listingId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"seller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"buyer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"erc721TokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"erc721TokenId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"category\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"priceInWei\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"time\",\"type\":\"uint256\"}],\"name\":\"ERC721ExecutedListing\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"listingId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"seller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"erc721TokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"erc721TokenId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"category\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"time\",\"type\":\"uint256\"}],\"name\":\"ERC721ListingAdd\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_erc721TokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_erc721TokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_priceInWei\",\"type\":\"uint256\"}],\"name\":\"addERC721Listing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_listingId\",\"type\":\"uint256\"}],\"name\":\"cancelERC721Listing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_erc721TokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_erc721TokenId\",\"type\":\"uint256\"}],\"name\":\"cancelERC721ListingByToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"_listingIds\",\"type\":\"uint256[]\"}],\"name\":\"cancelERC721Listings\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_listingId\",\"type\":\"uint256\"}],\"name\":\"executeERC721Listing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_listingId\",\"type\":\"uint256\"}],\"name\":\"getAavegotchiListing\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"listingId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"seller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"erc721TokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"erc721TokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"category\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"priceInWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeCreated\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timePurchased\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"cancelled\",\"type\":\"bool\"}],\"internalType\":\"struct ERC721Listing\",\"name\":\"listing_\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"randomNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"status\",\"type\":\"uint256\"},{\"internalType\":\"int16[6]\",\"name\":\"numericTraits\",\"type\":\"int16[6]\"},{\"internalType\":\"int16[6]\",\"name\":\"modifiedNumericTraits\",\"type\":\"int16[6]\"},{\"internalType\":\"uint16[16]\",\"name\":\"equippedWearables\",\"type\":\"uint16[16]\"},{\"internalType\":\"address\",\"name\":\"collateral\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"escrow\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"stakedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minimumStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"kinship\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastInteracted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"experience\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toNextLevel\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"usedSkillPoints\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"level\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"hauntId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseRarityScore\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"modifiedRarityScore\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"locked\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"itemId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"author\",\"type\":\"string\"},{\"internalType\":\"int8[6]\",\"name\":\"traitModifiers\",\"type\":\"int8[6]\"},{\"internalType\":\"bool[16]\",\"name\":\"slotPositions\",\"type\":\"bool[16]\"},{\"internalType\":\"uint8[]\",\"name\":\"allowedCollaterals\",\"type\":\"uint8[]\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"x\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"y\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"width\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"height\",\"type\":\"uint8\"}],\"internalType\":\"struct Dimensions\",\"name\":\"dimensions\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"ghstPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxQuantity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalQuantity\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"svgId\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"rarityScoreModifier\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"canPurchaseWithGhst\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"minLevel\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"canBeTransferred\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"category\",\"type\":\"uint8\"},{\"internalType\":\"int16\",\"name\":\"kinshipBonus\",\"type\":\"int16\"},{\"internalType\":\"uint32\",\"name\":\"experienceBonus\",\"type\":\"uint32\"}],\"internalType\":\"struct ItemType\",\"name\":\"itemType\",\"type\":\"tuple\"}],\"internalType\":\"struct ItemTypeIO[]\",\"name\":\"items\",\"type\":\"tuple[]\"}],\"internalType\":\"struct AavegotchiInfo\",\"name\":\"aavegotchiInfo_\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_category\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_sort\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_length\",\"type\":\"uint256\"}],\"name\":\"getAavegotchiListings\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"listingId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"seller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"erc721TokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"erc721TokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"category\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"priceInWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeCreated\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timePurchased\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"cancelled\",\"type\":\"bool\"}],\"internalType\":\"struct ERC721Listing\",\"name\":\"listing_\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"randomNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"status\",\"type\":\"uint256\"},{\"internalType\":\"int16[6]\",\"name\":\"numericTraits\",\"type\":\"int16[6]\"},{\"internalType\":\"int16[6]\",\"name\":\"modifiedNumericTraits\",\"type\":\"int16[6]\"},{\"internalType\":\"uint16[16]\",\"name\":\"equippedWearables\",\"type\":\"uint16[16]\"},{\"internalType\":\"address\",\"name\":\"collateral\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"escrow\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"stakedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minimumStake\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"kinship\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastInteracted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"experience\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toNextLevel\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"usedSkillPoints\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"level\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"hauntId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseRarityScore\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"modifiedRarityScore\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"locked\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"itemId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"author\",\"type\":\"string\"},{\"internalType\":\"int8[6]\",\"name\":\"traitModifiers\",\"type\":\"int8[6]\"},{\"internalType\":\"bool[16]\",\"name\":\"slotPositions\",\"type\":\"bool[16]\"},{\"internalType\":\"uint8[]\",\"name\":\"allowedCollaterals\",\"type\":\"uint8[]\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"x\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"y\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"width\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"height\",\"type\":\"uint8\"}],\"internalType\":\"struct Dimensions\",\"name\":\"dimensions\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"ghstPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxQuantity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalQuantity\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"svgId\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"rarityScoreModifier\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"canPurchaseWithGhst\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"minLevel\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"canBeTransferred\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"category\",\"type\":\"uint8\"},{\"internalType\":\"int16\",\"name\":\"kinshipBonus\",\"type\":\"int16\"},{\"internalType\":\"uint32\",\"name\":\"experienceBonus\",\"type\":\"uint32\"}],\"internalType\":\"struct ItemType\",\"name\":\"itemType\",\"type\":\"tuple\"}],\"internalType\":\"struct ItemTypeIO[]\",\"name\":\"items\",\"type\":\"tuple[]\"}],\"internalType\":\"struct AavegotchiInfo\",\"name\":\"aavegotchiInfo_\",\"type\":\"tuple\"}],\"internalType\":\"struct ERC721MarketplaceFacet.AavegotchiListing[]\",\"name\":\"listings_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_erc721TokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_erc721TokenId\",\"type\":\"uint256\"}],\"name\":\"getERC721Category\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"category_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_listingId\",\"type\":\"uint256\"}],\"name\":\"getERC721Listing\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"listingId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"seller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"erc721TokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"erc721TokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"category\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"priceInWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeCreated\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timePurchased\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"cancelled\",\"type\":\"bool\"}],\"internalType\":\"struct ERC721Listing\",\"name\":\"listing_\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_erc721TokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_erc721TokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"getERC721ListingFromToken\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"listingId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"seller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"erc721TokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"erc721TokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"category\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"priceInWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeCreated\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timePurchased\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"cancelled\",\"type\":\"bool\"}],\"internalType\":\"struct ERC721Listing\",\"name\":\"listing_\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_category\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_sort\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_length\",\"type\":\"uint256\"}],\"name\":\"getERC721Listings\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"listingId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"seller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"erc721TokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"erc721TokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"category\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"priceInWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeCreated\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timePurchased\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"cancelled\",\"type\":\"bool\"}],\"internalType\":\"struct ERC721Listing[]\",\"name\":\"listings_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_category\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_sort\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_length\",\"type\":\"uint256\"}],\"name\":\"getOwnerAavegotchiListings\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"listingId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"seller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"erc721TokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"erc721TokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"category\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"priceInWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeCreated\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timePurchased\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"cancelled\",\"type\":\"bool\"}],\"internalType\":\"struct ERC721Listing\",\"name\":\"listing_\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"randomNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"status\",\"type\":\"uint256\"},{\"internalType\":\"int16[6]\",\"name\":\"numericTraits\",\"type\":\"int16[6]\"},{\"internalType\":\"int16[6]\",\"name\":\"modifiedNumericTraits\",\"type\":\"int16[6]\"},{\"internalType\":\"uint16[16]\",\"name\":\"equippedWearables\",\"type\":\"uint16[16]\"},{\"internalType\":\"address\",\"name\":\"collateral\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"escrow\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"stakedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minimumStake\",\"type\":\"uint256\"},")
+ .append("{\"internalType\":\"uint256\",\"name\":\"kinship\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastInteracted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"experience\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toNextLevel\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"usedSkillPoints\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"level\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"hauntId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseRarityScore\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"modifiedRarityScore\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"locked\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"itemId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"author\",\"type\":\"string\"},{\"internalType\":\"int8[6]\",\"name\":\"traitModifiers\",\"type\":\"int8[6]\"},{\"internalType\":\"bool[16]\",\"name\":\"slotPositions\",\"type\":\"bool[16]\"},{\"internalType\":\"uint8[]\",\"name\":\"allowedCollaterals\",\"type\":\"uint8[]\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"x\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"y\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"width\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"height\",\"type\":\"uint8\"}],\"internalType\":\"struct Dimensions\",\"name\":\"dimensions\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"ghstPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxQuantity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalQuantity\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"svgId\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"rarityScoreModifier\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"canPurchaseWithGhst\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"minLevel\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"canBeTransferred\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"category\",\"type\":\"uint8\"},{\"internalType\":\"int16\",\"name\":\"kinshipBonus\",\"type\":\"int16\"},{\"internalType\":\"uint32\",\"name\":\"experienceBonus\",\"type\":\"uint32\"}],\"internalType\":\"struct ItemType\",\"name\":\"itemType\",\"type\":\"tuple\"}],\"internalType\":\"struct ItemTypeIO[]\",\"name\":\"items\",\"type\":\"tuple[]\"}],\"internalType\":\"struct AavegotchiInfo\",\"name\":\"aavegotchiInfo_\",\"type\":\"tuple\"}],\"internalType\":\"struct ERC721MarketplaceFacet.AavegotchiListing[]\",\"name\":\"listings_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_category\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"_sort\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_length\",\"type\":\"uint256\"}],\"name\":\"getOwnerERC721Listings\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"listingId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"seller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"erc721TokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"erc721TokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"category\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"priceInWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timeCreated\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timePurchased\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"cancelled\",\"type\":\"bool\"}],\"internalType\":\"struct ERC721Listing[]\",\"name\":\"listings_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_erc721TokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_erc721TokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"updateERC721Listing\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint16[16]\",\"name\":\"_oldWearables\",\"type\":\"uint16[16]\"},{\"indexed\":false,\"internalType\":\"uint16[16]\",\"name\":\"_newWearables\",\"type\":\"uint16[16]\"}],\"name\":\"EquipWearables\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_toContract\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_toTokenId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_tokenTypeId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"TransferToParent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_itemIds\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_quantities\",\"type\":\"uint256[]\"}],\"name\":\"UseConsumables\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bal_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_owners\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_ids\",\"type\":\"uint256[]\"}],\"name\":\"balanceOfBatch\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"bals\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tokenContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"balanceOfToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint16[16]\",\"name\":\"_equippedWearables\",\"type\":\"uint16[16]\"}],\"name\":\"equipWearables\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"equippedWearables\",\"outputs\":[{\"internalType\":\"uint16[16]\",\"name\":\"wearableIds_\",\"type\":\"uint16[16]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"_wearableIds\",\"type\":\"uint256[]\"}],\"name\":\"findWearableSets\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"wearableSetIds_\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_itemId\",\"type\":\"uint256\"}],\"name\":\"getItemType\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"author\",\"type\":\"string\"},{\"internalType\":\"int8[6]\",\"name\":\"traitModifiers\",\"type\":\"int8[6]\"},{\"internalType\":\"bool[16]\",\"name\":\"slotPositions\",\"type\":\"bool[16]\"},{\"internalType\":\"uint8[]\",\"name\":\"allowedCollaterals\",\"type\":\"uint8[]\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"x\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"y\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"width\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"height\",\"type\":\"uint8\"}],\"internalType\":\"struct Dimensions\",\"name\":\"dimensions\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"ghstPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxQuantity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalQuantity\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"svgId\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"rarityScoreModifier\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"canPurchaseWithGhst\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"minLevel\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"canBeTransferred\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"category\",\"type\":\"uint8\"},{\"internalType\":\"int16\",\"name\":\"kinshipBonus\",\"type\":\"int16\"},{\"internalType\":\"uint32\",\"name\":\"experienceBonus\",\"type\":\"uint32\"}],\"internalType\":\"struct ItemType\",\"name\":\"itemType_\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"_itemIds\",\"type\":\"uint256[]\"}],\"name\":\"getItemTypes\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"author\",\"type\":\"string\"},{\"internalType\":\"int8[6]\",\"name\":\"traitModifiers\",\"type\":\"int8[6]\"},{\"internalType\":\"bool[16]\",\"name\":\"slotPositions\",\"type\":\"bool[16]\"},{\"internalType\":\"uint8[]\",\"name\":\"allowedCollaterals\",\"type\":\"uint8[]\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"x\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"y\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"width\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"height\",\"type\":\"uint8\"}],\"internalType\":\"struct Dimensions\",\"name\":\"dimensions\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"ghstPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxQuantity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalQuantity\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"svgId\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"rarityScoreModifier\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"canPurchaseWithGhst\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"minLevel\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"canBeTransferred\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"category\",\"type\":\"uint8\"},{\"internalType\":\"int16\",\"name\":\"kinshipBonus\",\"type\":\"int16\"},{\"internalType\":\"uint32\",\"name\":\"experienceBonus\",\"type\":\"uint32\"}],\"internalType\":\"struct ItemType[]\",\"name\":\"itemTypes_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"getWearableSet\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint8[]\",\"name\":\"allowedCollaterals\",\"type\":\"uint8[]\"},{\"internalType\":\"uint16[]\",\"name\":\"wearableIds\",\"type\":\"uint16[]\"},{\"internalType\":\"int8[5]\",\"name\":\"traitsBonuses\",\"type\":\"int8[5]\"}],\"internalType\":\"struct WearableSet\",\"name\":\"wearableSet_\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWearableSets\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint8[]\",\"name\":\"allowedCollaterals\",\"type\":\"uint8[]\"},{\"internalType\":\"uint16[]\",\"name\":\"wearableIds\",\"type\":\"uint16[]\"},{\"internalType\":\"int8[5]\",\"name\":\"traitsBonuses\",\"type\":\"int8[5]\"}],\"internalType\":\"struct WearableSet[]\",\"name\":\"wearableSets_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"itemBalances\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"itemId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"internalType\":\"struct ItemsFacet.ItemIdIO[]\",\"name\":\"bals_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tokenContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"itemBalancesOfToken\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"itemId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"internalType\":\"struct ItemsFacet.ItemIdIO[]\",\"name\":\"bals_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tokenContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"itemBalancesOfTokenWithTypes\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"itemId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"author\",\"type\":\"string\"},{\"internalType\":\"int8[6]\",\"name\":\"traitModifiers\",\"type\":\"int8[6]\"},{\"internalType\":\"bool[16]\",\"name\":\"slotPositions\",\"type\":\"bool[16]\"},{\"internalType\":\"uint8[]\",\"name\":\"allowedCollaterals\",\"type\":\"uint8[]\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"x\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"y\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"width\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"height\",\"type\":\"uint8\"}],\"internalType\":\"struct Dimensions\",\"name\":\"dimensions\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"ghstPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxQuantity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalQuantity\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"svgId\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"rarityScoreModifier\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"canPurchaseWithGhst\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"minLevel\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"canBeTransferred\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"category\",\"type\":\"uint8\"},{\"internalType\":\"int16\",\"name\":\"kinshipBonus\",\"type\":\"int16\"},{\"internalType\":\"uint32\",\"name\":\"experienceBonus\",\"type\":\"uint32\"}],\"internalType\":\"struct ItemType\",\"name\":\"itemType\",\"type\":\"tuple\"}],\"internalType\":\"struct ItemTypeIO[]\",\"name\":\"itemBalancesOfTokenWithTypes_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"itemBalancesWithTypes\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"itemId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"author\",\"type\":\"string\"},{\"internalType\":\"int8[6]\",\"name\":\"traitModifiers\",\"type\":\"int8[6]\"},{\"internalType\":\"bool[16]\",\"name\":\"slotPositions\",\"type\":\"bool[16]\"},{\"internalType\":\"uint8[]\",\"name\":\"allowedCollaterals\",\"type\":\"uint8[]\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"x\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"y\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"width\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"height\",\"type\":\"uint8\"}],\"internalType\":\"struct Dimensions\",\"name\":\"dimensions\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"ghstPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxQuantity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalQuantity\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"svgId\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"rarityScoreModifier\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"canPurchaseWithGhst\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"minLevel\",\"type\":\"uint16\"},{\"internalType\":\"bool\",\"name\":\"canBeTransferred\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"category\",\"type\":\"uint8\"},{\"internalType\":\"int16\",\"name\":\"kinshipBonus\",\"type\":\"int16\"},{\"internalType\":\"uint32\",\"name\":\"experienceBonus\",\"type\":\"uint32\"}],\"internalType\":\"struct ItemType\",\"name\":\"itemType\",\"type\":\"tuple\"}],\"internalType\":\"struct ItemTypeIO[]\",\"name\":\"output_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_value\",\"type\":\"string\"}],\"name\":\"setBaseURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_wearableId\",\"type\":\"uint256\"},{\"internalType\":\"bool[16]\",\"name\":\"_slotPositions\",\"type\":\"bool[16]\"}],\"name\":\"setWearableSlotPositions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalWearableSets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"uri\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_itemIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_quantities\",\"type\":\"uint256[]\"}],\"name\":\"useConsumables\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_fromContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_fromTokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_toContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_toTokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_values\",\"type\":\"uint256[]\"}],\"name\":\"batchTransferAsChild\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_fromContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_fromTokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"_ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_values\",\"type\":\"uint256[]\"}],\"name\":\"batchTransferFromParent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_toContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_toTokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"_ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_values\",\"type\":\"uint256[]\"}],\"name\":\"batchTransferToParent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155BatchReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"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\":\"_fromContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_fromTokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_toContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_toTokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transferAsChild\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_fromContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_fromTokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transferFromParent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_toContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_toTokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transferToParent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address payable\",\"name\":\"relayerAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"functionSignature\",\"type\":\"bytes\"}],\"name\":\"MetaTransactionExecuted\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"functionSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"sigR\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sigS\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"sigV\",\"type\":\"uint8\"}],\"name\":\"executeMetaTransaction\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonce_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_numAavegotchisToPurchase\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_totalPrice\",\"type\":\"uint256\"}],\"name\":\"BuyPortals\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_buyer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_itemIds\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_quantities\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_totalPrice\",\"type\":\"uint256\"}],\"name\":\"PurchaseItemsWithGhst\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_buyer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_itemIds\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_quantities\",\"type\":\"uint256[]\"}],\"name\":\"PurchaseItemsWithVouchers\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_buyer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_itemIds\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_quantities\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_totalPrice\",\"type\":\"uint256\"}],\"name\":\"PurchaseTransferItemsWithGhst\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_ghst\",\"type\":\"uint256\"}],\"name\":\"buyPortals\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"_itemIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_quantities\",\"type\":\"uint256[]\"}],\"name\":\"purchaseItemsWithGhst\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"_itemIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_quantities\",\"type\":\"uint256[]\"}],\"name\":\"purchaseTransferItemsWithGhst\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_svgType\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_numLayers\",\"type\":\"uint256\"}],\"name\":\"deleteLastSvgLayers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"getAavegotchiSvg\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"ag_\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_itemId\",\"type\":\"uint256\"}],\"name\":\"getItemSvg\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"ag_\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_svgType\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_itemId\",\"type\":\"uint256\"}],\"name\":\"getSvg\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"svg_\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_svgType\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"_itemIds\",\"type\":\"uint256[]\"}],\"name\":\"getSvgs\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"svgs_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"portalAavegotchisSvg\",\"outputs\":[{\"internalType\":\"string[10]\",\"name\":\"svg_\",\"type\":\"string[10]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"_itemIds\",\"type\":\"uint256[]\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"x\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"y\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"width\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"height\",\"type\":\"uint8\"}],\"internalType\":\"struct Dimensions[]\",\"name\":\"_dimensions\",\"type\":\"tuple[]\"}],\"name\":\"setItemsDimensions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"sleeveId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"wearableId\",\"type\":\"uint256\"}],\"internalType\":\"struct SvgFacet.Sleeve[]\",\"name\":\"_sleeves\",\"type\":\"tuple[]\"}],\"name\":\"setSleeves\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_svg\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"svgType\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"sizes\",\"type\":\"uint256[]\"}],\"internalType\":\"struct LibSvg.SvgTypeAndSizes[]\",\"name\":\"_typesAndSizes\",\"type\":\"tuple[]\"}],\"name\":\"storeSvg\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_svg\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"svgType\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"sizes\",\"type\":\"uint256[]\"}],\"internalType\":\"struct LibSvg.SvgTypeAndIdsAndSizes[]\",\"name\":\"_typesAndIdsAndSizes\",\"type\":\"tuple[]\"}],\"name\":\"updateSvg\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_tokenIds\",\"type\":\"uint256[]\"}],\"name\":\"OpenPortals\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"PortalOpened\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"randomNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_vrfTimeSet\",\"type\":\"uint256\"}],\"name\":\"VrfRandomNumber\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newFee\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_keyHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_vrfCoordinator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_link\",\"type\":\"address\"}],\"name\":\"changeVrf\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keyHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"link\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"linkBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"linkBalance_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"_tokenIds\",\"type\":\"uint256[]\"}],\"name\":\"openPortals\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_requestId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_randomNumber\",\"type\":\"uint256\"}],\"name\":\"rawFulfillRandomness\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"removeLinkTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vrfCoordinator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_values\",\"type\":\"uint256[]\"}],\"name\":\"MigrateVouchers\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"internalType\":\"struct VoucherMigrationFacet.VouchersOwner[]\",\"name\":\"_vouchersOwners\",\"type\":\"tuple[]\"}],\"name\":\"migrateVouchers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_buyer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_itemIds\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_quantities\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_totalPrice\",\"type\":\"uint256\"}],\"name\":\"PurchaseItemsWithGhst\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_buyer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_itemIds\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_quantities\",\"type\":\"uint256[]\"}],\"name\":\"PurchaseItemsWithVouchers\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_buyer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_itemIds\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"_quantities\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_totalPrice\",\"type\":\"uint256\"}],\"name\":\"PurchaseTransferItemsWithGhst\",\"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\":\"_tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_numAavegotchisToPurchase\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_totalPrice\",\"type\":\"uint256\"}],\"name\":\"Xingyun\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"_itemIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_quantities\",\"type\":\"uint256[]\"}],\"name\":\"purchaseItemsWithGhst\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"_itemIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_quantities\",\"type\":\"uint256[]\"}],\"name\":\"purchaseTransferItemsWithGhst\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_ghst\",\"type\":\"uint256\"}],\"name\":\"xingyun\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"kinship\",\"type\":\"uint256\"}],\"name\":\"AavegotchiInteract\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"listingId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"category\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"time\",\"type\":\"uint256\"}],\"name\":\"ERC1155ListingCancelled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"listingId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"category\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"time\",\"type\":\"uint256\"}],\"name\":\"ERC1155ListingRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"listingId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"quantity\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"priceInWei\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"time\",\"type\":\"uint256\"}],\"name\":\"UpdateERC1155Listing\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"listingId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"category\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"time\",\"type\":\"uint256\"}],\"name\":\"ERC721ListingCancelled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"listingId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"category\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"time\",\"type\":\"uint256\"}],\"name\":\"ERC721ListingRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"svgType\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"sizes\",\"type\":\"uint256[]\"}],\"indexed\":false,\"internalType\":\"struct LibSvg.SvgTypeAndSizes[]\",\"name\":\"_typesAndSizes\",\"type\":\"tuple[]\"}],\"name\":\"StoreSvg\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"svgType\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"sizes\",\"type\":\"uint256[]\"}],\"indexed\":false,\"internalType\":\"struct LibSvg.SvgTypeAndIdsAndSizes[]\",\"name\":\"_typesAndIdsAndSizes\",\"type\":\"tuple[]\"}],\"name\":\"UpdateSvg\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"indexed\":false,\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"DiamondCut\",\"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\":\"_owner\",\"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\":\"_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\":\"_fromContract\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_fromTokenId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_tokenTypeId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"TransferFromParent\",\"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\":true,\"internalType\":\"address\",\"name\":\"_toContract\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_toTokenId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_tokenTypeId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"TransferToParent\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"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\":\"_from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"}]")
+ .toString();
+
+ // https://github.com/thetiptoken/TheTipToken-WebPlatform/tree/master/build/contracts
+ public static String abiERC20 = "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"tokenOwner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"tokenOwner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"balance\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"tokenOwner\",\"type\":\"address\"},{\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"remaining\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"spender\",\"type\":\"address\"},{\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]";
+ public static String abiERC721Basic = "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_approved\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_operator\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"_balance\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"exists\",\"outputs\":[{\"name\":\"_exists\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"name\":\"_operator\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_operator\",\"type\":\"address\"},{\"name\":\"_approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]";
+ public static String abiERC721Enumerable = "[{\"constant\":true,\"inputs\":[{\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"name\":\"_operator\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"exists\",\"outputs\":[{\"name\":\"_exists\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"_balance\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_operator\",\"type\":\"address\"},{\"name\":\"_approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_approved\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_operator\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"tokenOfOwnerByIndex\",\"outputs\":[{\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"tokenByIndex\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}]";
+ public static String abiERC721Metadata = "[{\"constant\":true,\"inputs\":[{\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"name\":\"_operator\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"exists\",\"outputs\":[{\"name\":\"_exists\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"_balance\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_operator\",\"type\":\"address\"},{\"name\":\"_approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_approved\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_operator\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"_name\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"_symbol\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}]";
+ public static String abiERC721Receiver = "[{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]";
+ public static String abiERC721Token = "[{\"constant\":true,\"inputs\":[{\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"exists\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_name\",\"type\":\"string\"},{\"name\":\"_symbol\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_approved\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_operator\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"tokenOfOwnerByIndex\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"tokenByIndex\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}]";
+
+ // https://github.com/miracle1109/threejsgameapp-webaverse/blob/master/erc1155-abi.json
+ public static String abiERC1155 = "[{\"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\":\"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\":[{\"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\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"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\":\"amount\",\"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\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"uri\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]";
+}
diff --git a/src/main/java/crypto/forestfish/objects/embedded/evm/AccountDetailsEVM.java b/src/main/java/crypto/forestfish/objects/embedded/evm/AccountDetailsEVM.java
new file mode 100644
index 0000000..4706d19
--- /dev/null
+++ b/src/main/java/crypto/forestfish/objects/embedded/evm/AccountDetailsEVM.java
@@ -0,0 +1,62 @@
+package crypto.forestfish.objects.embedded.evm;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+import crypto.forestfish.enums.AddressCategory;
+import crypto.forestfish.enums.CustomContractCategory;
+import crypto.forestfish.enums.evm.EVMChain;
+import crypto.forestfish.objects.evm.EVMKnownAccountAddress;
+import crypto.forestfish.objects.evm.EVMKnownCustomContractAddress;
+
+public class AccountDetailsEVM {
+
+ @SuppressWarnings("serial")
+ public static HashMap