Step 5 - Verification

Review your Player and Item class enabling with Boots

Once you have completed all 4 steps to enable your collection to work with Boots, you can validate what your player and item classes look like by using the Raindrops CLI. First, go to the configuration file that you have been working with. An example of a finished configuration file is in the Examples, here. You will want to copy the Player Class configuration that was generated by Boot-Up

  1. Search for existingClassDef in the file and copy the object into a new configuration file. We will name this bootsPlayerConfig.json for the purposes of this example.

 {
    "data": {
      "settings": {
        "defaultCategory": {
          "category": "panda",
          "inherited": { "notInherited": true }
        },
        "childrenMustBeEditions": {
          "boolean": false,
          "inherited": { "notInherited": true }
        },
        "builderMustBeHolder": {
          "boolean": false,
          "inherited": { "notInherited": true }
        },
        "updatePermissiveness": [
          {
            "permissivenessType": { "tokenHolder": true },
            "inherited": { "notInherited": true }
          }
        ],
        "instanceUpdatePermissiveness": [
          {
            "permissivenessType": { "parentTokenHolder": true },
            "inherited": { "notInherited": true }
          }
        ],
        "buildPermissiveness": [
          {
            "permissivenessType": { "tokenHolder": true },
            "inherited": { "notInherited": true }
          }
        ],
        "equipItemPermissiveness": [
          {
            "permissivenessType": { "parentTokenHolder": true },
            "inherited": { "notInherited": true }
          }
        ],
        "addItemPermissiveness": [
          {
            "permissivenessType": { "parentTokenHolder": true },
            "inherited": { "notInherited": true }
          }
        ],
        "useItemPermissiveness": [
          {
            "permissivenessType": { "parentTokenHolder": true },
            "inherited": { "notInherited": true }
          }
        ],
        "unequipItemPermissiveness": null,
        "removeItemPermissiveness": null,
        "stakingWarmUpDuration": null,
        "stakingCooldownDuration": null,
        "stakingPermissiveness": null,
        "unstakingPermissiveness": null,
        "childUpdatePropagationPermissiveness": []
      },
      "config": {
        "startingStatsUri": null,
        "basicStats": [
          {
            "index": 0,
            "name": "mutationLevel",
            "inherited": { "notInherited": true },
            "statType": {
              "enum": {
                "starting": 0,
                "values": [
                  { "name": "NA", "value": 0 },
                  { "name": "Lvl1", "value": 1 },
                  { "name": "Lvl2", "value": 2 },
                  { "name": "Lvl3", "value": 3 },
                  { "name": "Lvl4", "value": 4 }
                ]
              }
            }
          },
          {
            "index": 1,
            "name": "BACKGROUND",
            "inherited": { "notInherited": true },
            "statType": { "string": { "starting": "unset" } }
          },
          {
            "index": 2,
            "name": "FUR",
            "inherited": { "notInherited": true },
            "statType": { "string": { "starting": "unset" } }
          }
        ],
        "bodyParts": [
          {
            "index": 0,
            "bodyPart": "GLASSES",
            "totalItemSpots": 1,
            "inherited": { "notInherited": true }
          },
          {
            "index": 1,
            "bodyPart": "DUMPSTER",
            "totalItemSpots": 1,
            "inherited": { "notInherited": true }
          },
          {
            "index": 2,
            "bodyPart": "BODY",
            "totalItemSpots": 1,
            "inherited": { "notInherited": true }
          },
          {
            "index": 3,
            "bodyPart": "HEAD",
            "totalItemSpots": 1,
            "inherited": { "notInherited": true }
          },
          {
            "index": 4,
            "bodyPart": "MOUTH",
            "totalItemSpots": 1,
            "inherited": { "notInherited": true }
          }
        ],
        "equipValidation": null,
        "addToPackValidation": null
      }
    },
    "metadataUpdateAuthority": null,
    "storeMint": true,
    "storeMetadataFields": true,
    "mint": "GmSRDXiXgvNo7UEx3rNvPCqD6aSreJaXT51tfq6ATXTK",
    "index": 0,
    "updatePermissivenessToUse": { "parentTokenHolder": true },
    "namespaceRequirement": 1,
    "totalSpaceBytes": 739
  }

2. Make sure you know the location of your keypair file. For our purposes, we will name this bootsUpdateAuth.json and put it in the same location as the config file from step 1.

3. You will also need the masterMint. You can find that in the "masterMint" key from the configuration file you created in step 1. For our purposes here we will be using the Mint Id BNpznqP6Rfy8LhPHEQ23qBYFiAueKiXx9jRaW6WnTo1z

4. Use the following command to show the Player class:

player-cli show_player_class --env devnet \ 
                             --rpc-url  https://api.devnet.solana.com \
                             --log-level debug \
                             --keypair './bootsUpdateAuth.json' \
                             --config-path './bootsPlayerConfig.json' \
                             --mint BNpznqP6Rfy8LhPHEQ23qBYFiAueKiXx9jRaW6WnTo1z \
                             --index 0

The result of this command is the following:

wallet public key: 2crTqcmVJVMW6b5z6NEs9HdsKmVc4zDDE2FucNg98kSN
USING CUSTOM RPC URL: https://api.devnet.solana.com
Player Class 9QQgCvCzuveTtdUb6is3BTsexsWYrGDoxdb51tzz62tH
Namespaces: [ undefined ]
Parent: None
Mint: BNpznqP6Rfy8LhPHEQ23qBYFiAueKiXx9jRaW6WnTo1z
Metadata: CgAzk9iFnciye3yoh1bufFbeQWgadtFjx9C4E73mEYP4
Edition: Dj4gasLLVoKLd8D8rQoHwFHbGwkMPbsHD8bR455aYwqR
Existing Children: 1
Player Class Data:
--> Player Class Settings:
----> Default Category (notInherited): panda
----> Children must be editions (notInherited): false
----> Builder must be holder (notInherited): false
----> Update Permissiveness:
------> (notInherited) tokenHolder
----> Instance Update Permissiveness:
------> (notInherited) parentTokenHolder
----> Build Permissiveness:
------> (notInherited) tokenHolder
----> Equip Item Permissiveness:
------> (notInherited) parentTokenHolder
----> Add Item Permissiveness:
------> (notInherited) parentTokenHolder
----> Use Item Permissiveness:
------> (notInherited) parentTokenHolder
----> Unequip Item Permissiveness:
----> Remove Item Permissiveness:
----> Staking warm up duration: Not Set
----> Staking cooldown duration: Not Set
----> Staking Permissiveness:
----> Unstaking Permissiveness:
----> Child Update Propagation Permissiveness:
--> Player Class Config:
----> Starting Stats Uri: Not Set
----> Basic Stat Templates:
------> Index: 0
------> Name: mutationLevel
------> Stat Type: Enum (Start: NA)
------> Values: NA => 0,Lvl1 => 1,Lvl2 => 2,Lvl3 => 3,Lvl4 => 4
------> Inherited: notInherited
-------
------> Index: 1
------> Name: BACKGROUND
------> Stat Type: String (Start: unset)
------> Inherited: notInherited
-------
------> Index: 2
------> Name: FUR
------> Stat Type: String (Start: unset)
------> Inherited: notInherited
-------
----> Body Parts:
------> Index: 0
------> Inherited: notInherited
------> Body Part: GLASSES
------> Total item spots: 1
------
------> Index: 1
------> Inherited: notInherited
------> Body Part: DUMPSTER
------> Total item spots: 1
------
------> Index: 2
------> Inherited: notInherited
------> Body Part: BODY
------> Total item spots: 1
------
------> Index: 3
------> Inherited: notInherited
------> Body Part: HEAD
------> Total item spots: 1
------
------> Index: 4
------> Inherited: notInherited
------> Body Part: MOUTH
------> Total item spots: 1
------
-------
------> Equipment Validation Callback: Not Set
------> Add to Pack Callback: Not Set

Items to have a look at in this output:

Existing Children:

should match the number of NFTs in your collection

Basic Stat Templates:

Should show the newBasicStats (i.e. mutationLevel) as well as the stringLayers (i.e. BACKGROUND, FUR) that you have specified in your configuration.

Body Parts:

Shows Items that can be equipped for the NFTs in your collection.

For more detail on this output, review "creating a Parent PlayerClass"

Last updated