I find that contract of Town Star ERC1155 token ABI does not have uri
function code
And I try to use OpenSea API to check a metadate for a random token I choose This one.
API call https://api.opensea.io/api/v1/assets?asset_contract_address=0xc36cf0cfcb5d905b8b513860db0cfe63f6cf9f5c&token_ids=122161369724616908383351484068004787912704
response as below:
{"assets":[{"id":29329471,"token_id":"122161369724616908383351484068004787912704","num_sales":56,"background_color":null,"image_url":"https://lh3.googleusercontent.com/sFXH5WPo8nACwhdrtbSBHqvondVjWUJ-pWxacKwOIPF36J_2ZIGgVSuMSi3yqJY15UpdRbPMjEYV93fYXfCNqiDyguUgf2SFQny8UCA","image_preview_url":"https://lh3.googleusercontent.com/sFXH5WPo8nACwhdrtbSBHqvondVjWUJ-pWxacKwOIPF36J_2ZIGgVSuMSi3yqJY15UpdRbPMjEYV93fYXfCNqiDyguUgf2SFQny8UCA=s250","image_thumbnail_url":"https://lh3.googleusercontent.com/sFXH5WPo8nACwhdrtbSBHqvondVjWUJ-pWxacKwOIPF36J_2ZIGgVSuMSi3yqJY15UpdRbPMjEYV93fYXfCNqiDyguUgf2SFQny8UCA=s128","image_original_url":"https://tokens.gala.games/images/sandbox-games/town-star/skins/mirandus-fabric-plant-skin.png","animation_url":null,"animation_original_url":null,"name":"Mirandus Fabric Plant Skin","description":"Changes the look of your Fabric Plant to be Mirandus themed!","external_link":null,"asset_contract":{"address":"0xc36cf0cfcb5d905b8b513860db0cfe63f6cf9f5c","asset_contract_type":"semi-fungible","created_date":"2020-06-15T19:18:12.470039","name":"Gala Games","nft_version":null,"opensea_version":null,"owner":7360995,"schema_name":"ERC1155","symbol":"","total_supply":null,"description":"From one of the founders of Zynga and some of the creative minds behind FarmVille and Words With Friends comes Town Star. Blockchain is the next evolution of gaming and has the $148B industry buzzing with excitement. It’s gaming re-imagined to benefit creators and players, alike.","external_link":"https://www.gala.games/","image_url":"https://lh3.googleusercontent.com/wp7V1K4Ezhi8yHU6LFpff-GMsjend65nRiwNz5pGAjCwk7ybznEpfUvXiIxQoOWBmeN00AGjVTRhLUqY4fee1fus=s120","default_to_fiat":false,"dev_buyer_fee_basis_points":0,"dev_seller_fee_basis_points":250,"only_proxied_transfers":false,"opensea_buyer_fee_basis_points":0,"opensea_seller_fee_basis_points":250,"buyer_fee_basis_points":0,"seller_fee_basis_points":500,"payout_address":"0xa92abb0d0dd1e8e73006fc3b6229b7bd9e0d5c61"},"permalink":"https://opensea.io/assets/0xc36cf0cfcb5d905b8b513860db0cfe63f6cf9f5c/122161369724616908383351484068004787912704","collection":{"banner_image_url":null,"chat_url":null,"created_date":"2020-07-07T04:21:17.383133","default_to_fiat":false,"description":"From one of the founders of Zynga and some of the creative minds behind FarmVille and Words With Friends comes Town Star. Blockchain is the next evolution of gaming and has the $148B industry buzzing with excitement. It’s gaming re-imagined to benefit creators and players, alike.","dev_buyer_fee_basis_points":"0","dev_seller_fee_basis_points":"250","discord_url":null,"display_data":{"card_display_style":"padded"},"external_url":"https://www.gala.games/","featured":false,"featured_image_url":null,"hidden":false,"safelist_request_status":"verified","image_url":"https://lh3.googleusercontent.com/wp7V1K4Ezhi8yHU6LFpff-GMsjend65nRiwNz5pGAjCwk7ybznEpfUvXiIxQoOWBmeN00AGjVTRhLUqY4fee1fus=s120","is_subject_to_whitelist":false,"large_image_url":"https://lh3.googleusercontent.com/wp7V1K4Ezhi8yHU6LFpff-GMsjend65nRiwNz5pGAjCwk7ybznEpfUvXiIxQoOWBmeN00AGjVTRhLUqY4fee1fus","medium_username":"GoGalaGames","name":"Town Star","only_proxied_transfers":false,"opensea_buyer_fee_basis_points":"0","opensea_seller_fee_basis_points":"250","payout_address":"0xa92abb0d0dd1e8e73006fc3b6229b7bd9e0d5c61","require_email":false,"short_description":null,"slug":"town-star","telegram_url":"https://t.me/GoGalaGames","twitter_username":"GoGalaGames","instagram_username":null,"wiki_url":null},"decimals":null,"token_metadata":"https://tokens.gala.games/sandbox-games/town-star/skins/mirandus-fabric-plant-skin.json","owner":{"user":{"username":"NullAddress"},"profile_img_url":"https://storage.googleapis.com/opensea-static/opensea-profile/1.png","address":"0x0000000000000000000000000000000000000000","config":""},"sell_orders":[{"created_date":"2022-01-11T05:48:40.269327","closing_date":"2022-07-11T05:48:15","closing_extendable":false,"expiration_time":1657518495,"listing_time":1641880003,"order_hash":"0xbf2c9369b948b835232088755d96bb66ef2edea01d13b42428dae3e242078c75","metadata":{"asset":{"id":"122161369724616908383351484068004787912704","address":"0xc36cf0cfcb5d905b8b513860db0cfe63f6cf9f5c","quantity":"1"},"schema":"ERC1155"},"exchange":"0x7be8076f4ea4a4ad08075c2508e481d6c946d12b","maker":{"user":11403466,"profile_img_url":"https://storage.googleapis.com/opensea-static/opensea-profile/26.png","address":"0x1c50bb18b4ec35103bccc10b76e9afdb289b975a","config":""},"taker":{"user":1766,"profile_img_url":"https://storage.googleapis.com/opensea-static/opensea-profile/1.png","address":"0x0000000000000000000000000000000000000000","config":""},"current_price":"3796000000.000000000000000000","current_bounty":"37960000","bounty_multiple":"0.01","maker_relayer_fee":"500","taker_relayer_fee":"0","maker_protocol_fee":"0","taker_protocol_fee":"0","maker_referrer_fee":"0","fee_recipient":{"user":3585,"profile_img_url":"https://storage.googleapis.com/opensea-static/opensea-profile/28.png","address":"0x5b3256965e7c3cf26e11fcaf296dfc8807c01073","config":"verified"},"fee_method":1,"side":1,"sale_kind":0,"target":"0xc36cf0cfcb5d905b8b513860db0cfe63f6cf9f5c","how_to_call":0,"calldata":"0xf242432a0000000000000000000000001c50bb18b4ec35103bccc10b76e9afdb289b975a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000","replacement_pattern":"0x000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","static_target":"0x0000000000000000000000000000000000000000","static_extradata":"0x","payment_token":"0x15d4c048f83bd7e37d49ea4c83a07267ec4203da","payment_token_contract":{"id":318,"symbol":"GALA","address":"0x15d4c048f83bd7e37d49ea4c83a07267ec4203da","image_url":"https://lh3.googleusercontent.com/1DcP21E8JYH0YEvBF9HD2R4LrK742KQGJyumV5kJkAxRp2wEdOcQrvsVJmUIaNJMVkFKyxSMLZRVA-sBGfCnoEDD=s120","name":"Gala","decimals":8,"eth_price":"0.000100560000000","usd_price":"0.327482000000000000"},"base_price":"3796000000","extra":"0","quantity":"1","salt":"13486021474025852519810271922175260653938170746936005350352089145218669257494","v":28,"r":"0x05539ff3074fc24fd81605aed846a6636aa4c841f7c75ac27a5b6900f2c396c2","s":"0x4dc37f0182ccf337bfca2a91d759f061dbe57353c69100f95f22f20dec821eb5","approved_on_chain":false,"cancelled":false,"finalized":false,"marked_invalid":false,"prefixed_hash":"0x0137d05a6d560944002aad2be4cfbaa91f71a38308894d032314e8e589da572d"}],"creator":{"user":null,"profile_img_url":"https://storage.googleapis.com/opensea-static/opensea-profile/17.png","address":"0x0d24de9dccd263b310b7809283786c58d1f6a667","config":""},"traits":[{"trait_type":"game","value":"Town Star","display_type":null,"max_value":null,"trait_count":239,"order":null},{"trait_type":"category","value":"Skins","display_type":null,"max_value":null,"trait_count":71,"order":null},{"trait_type":"tokenRun","value":"skins","display_type":null,"max_value":null,"trait_count":71,"order":null}],"last_sale":{"asset":{"token_id":"122161369724616908383351484068004787912704","decimals":null},"asset_bundle":null,"event_type":"successful","event_timestamp":"2022-01-13T20:21:09","auction_type":null,"total_price":"41400000000000000","payment_token":{"id":1,"symbol":"ETH","address":"0x0000000000000000000000000000000000000000","image_url":"https://storage.opensea.io/files/6f8e2979d428180222796ff4a33ab929.svg","name":"Ether","decimals":18,"eth_price":"1.000000000000000","usd_price":"3266.159999999999854000"},"transaction":{"block_hash":"0x527bc881a7162b949d7dfad15b37b852cf92cd99b613dde02afb8acdf1ab3a79","block_number":"13999276","from_account":{"user":{"username":null},"profile_img_url":"https://storage.googleapis.com/opensea-static/opensea-profile/9.png","address":"0x0ddb92119f32ae8b49b4143e404d023edbc4a5c8","config":""},"id":247299588,"timestamp":"2022-01-13T20:21:09","to_account":{"user":{"username":"OpenSea-Orders"},"profile_img_url":"https://storage.googleapis.com/opensea-static/opensea-profile/22.png","address":"0x7be8076f4ea4a4ad08075c2508e481d6c946d12b","config":"verified"},"transaction_hash":"0xb53a5518d0a0b8aabfe7f1945cfdc77f05d5f71e15a73cba683143e2cbaf1efc","transaction_index":"25"},"created_date":"2022-01-13T20:21:25.825679","quantity":"6"},"top_bid":null,"listing_date":null,"is_presale":false,"transfer_fee_payment_token":null,"transfer_fee":null}]}
And there has a key token_metadata
shows https://tokens.gala.games/sandbox-games/town-star/skins/mirandus-fabric-plant-skin.json
The metadata contain image uri for token (https://tokens.gala.games/images/sandbox-games/town-star/skins/mirandus-fabric-plant-skin.png)
But… since ABI does not have uri
function, how does OpenSea get that metadata uri (https://tokens.gala.games/sandbox-games/town-star/skins/mirandus-fabric-plant-skin.json)?
Best Answer
Interesting question!
Town Star token is an ERC1155 token. The
tokenURI
property is part of the ERC20 token specification. Hence, you won't find it in Town Star's contract. According to the docs, ERC1155's version oftokenURI
is calledIERC1155MetadataURI
and is totally optional.However, Town Star does contain the URI in a different place. If you look at the contract on etherscan, the
create
function looks like this.You can see that the create function takes in a URI in
_uri
parameter, but instead of storing it, it emits an event -URI
. The event URI has the following definition in the contract.The
topic_0
of this function is0x6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b
. If you search the logs in etherscan with thistopic_0
, you'll be able to see all the events emitted, thus all the token URI. I'm adding a screenshot for reference.Events can also be used as cheap storage in the EVM blockchains. It costs less gas than storage. The devs of Town Star have decided to use events to store the URI.
Hope this clarifies your question.