Setting the TokenURI

create set_tokenuri.py in scripts/advcollectible

from brownie import network
from brownie import AdvancedCollectible
from scripts.helpful_scripts import OpenSeaURL, get_account, get_breed

dog_metadata_dic = {
    "PUG": "https://ipfs.io/ipfs/Qmd9MCGtdVz2miNumBHDbvj8bigSgTwnr4SbyH6DNnpWdt?filename=0-PUG.json",
    "SHIBA_INU": "https://ipfs.io/ipfs/QmdryoExpgEQQQgJPoruwGJyZmz6SqV4FRTX1i73CT3iXn?filename=1-SHIBA_INU.json",
    "ST_BERNARD": "https://ipfs.io/ipfs/QmbBnUjyHHN7Ytq9xDsYF9sucZdDJLRkWz7vnZfrjMXMxs?filename=2-ST_BERNARD.json",
}

def main():
    print(f"Working on {network.show_active()}")
    advanced_collectible = AdvancedCollectible[-1]
    number_of_collectibles = advanced_collectible.tokenCounter() 
    print(f"You have {number_of_collectibles} tokenIds")

    for token_id in range(number_of_collectibles):
        breed = get_breed(advanced_collectible.tokenTobreed(token_id))
        # if it doesnt start with https, it has not been set
        if not advanced_collectible.tokenURI(token_id).startswith("https://"):
            print(f"Setting tokenURI of {token_id}")
            set_tokenURI(token_id,advanced_collectible, dog_metadata_dic[breed])


def set_tokenURI(token_id, nft_contract, tokenURI):
    account = get_account()
    tx = nft_contract.setTokenURI(token_id, tokenURI, {"from": account})
    tx.wait(1)

    print(f"Awesome! You can view your NFT at {OpenSeaURL.format(nft_contract.address, token_id)}")
    print("Wait up to 20 minutes, thne hit the refresh metadata buttons")
  • Put most recent deployment of Advanced Collectible

  • check number of minted NFTs

  • Loop through the minted range of NFTs

  • if tokenURI does not start with "http://" we know it has not been set,

    • and we proceed to set URI by calling set_tokenURI()

Last updated