Transaction #8815

Hash 17847eb49a412bfbd8e7f3961aeb9d87f276c2d4af5a1d944a1a42b729ac8829
Status Success
Timestamp 387 days ago - 3/7/2023, 7:23:05 PM UTC+0
Block 8815
Stamps Used 794
Burned Fee 0.04698225 TAU
From ff61544ea94eaaeb5df08ed863c4a938e9129aba6ceee5f31b6681bdede11b89 
Contract Name submission
Function Name submit_contract

Additional Info
Nonce 143
Processor 11185fe3c6e68d11f89929e2f531de3fb640771de1aee32c606c30c70b6600d2
Signature 5f5fa6306900a98f4ce5ad3d930f222f13b9c40afa940d4a8b05304eee440b84a965370acb69762da9f5f0e39e28bedf4f0b9e85d2121af2cb7d4bdfd5865a08
Stamps Supplied 845
Stamps per TAU 169

Kwargs

code I = importlib allowed_currency = Variable() operator = Variable() market = Hash(default_value=0) auctions = Hash(default_value=0) treasury = Variable() royalty_receivers = Hash(default_value=False) adaptable_fee = Variable() forced_collection_interface = [I.Func('transfer', args=('name', 'amount', 'to')), I.Func( 'approve', args=('amount', 'name', 'to')), I.Func('transfer_from', args=( 'name', 'amount', 'to', 'main_account'))] old_royalty_receivers = ForeignHash(foreign_contract='con_nft_marketplace_v4', foreign_name='royalty_receivers') @construct def seed(): allowed_currency.set("currency") adaptable_fee.set(2) operator.set("ff61544ea94eaaeb5df08ed863c4a938e9129aba6ceee5f31b6681bdede11b89") treasury.set("ff61544ea94eaaeb5df08ed863c4a938e9129aba6ceee5f31b6681bdede11b89") @export def sell_nft(name_of_nft: str, collection_contract: str, amount: int, currency_price: float, royalty_percentage: float): assert name_of_nft != "", "Name cannot be empty" assert collection_contract != "", "Collection contract cannot be empty" assert amount > 0, 'Cannot sell negative NFT amount' assert currency_price > 0, 'Cannot sell for negative balances!' collection = I.import_module(collection_contract) assert I.enforce_interface(collection, forced_collection_interface ), 'Invalid collection interface!' collection.transfer_from(name=name_of_nft, amount=amount, to=ctx.this, main_account=ctx.caller) listing_unique_id = block_num # block_num is a global enviroment variable that is the current block number for i in range(amount): market[ctx.caller, collection_contract, name_of_nft, listing_unique_id + i] = {"amount": 1, "price": currency_price} check_old_royalties(name_of_nft=name_of_nft,collection_contract=collection_contract) if royalty_receivers[collection_contract, name_of_nft] == False: if royalty_percentage is None: royalty_percentage = 0.0 assert royalty_percentage <= 50, "Over 50% royalty is not allowed" assert royalty_percentage >= 0, "Under 0% royalty is not allowed" royalty_receivers[collection_contract, name_of_nft] = {"receiver": ctx.caller, "royalty_percentage": royalty_percentage} return f"Successfully listed {amount} {name_of_nft} for {currency_price}" @export def refund_nft(name_of_nft: str, collection_contract: str, listing_id: str): assert name_of_nft != "", "Name cannot be empty" assert collection_contract != "", "Collection contract cannot be empty" assert listing_id != "", "Listing ID cannot be empty" market_entry = market[ctx.caller, collection_contract, name_of_nft, listing_id] collection = I.import_module(collection_contract) collection.transfer(name=name_of_nft, amount=market_entry["amount"], to=ctx.caller) market[ctx.caller, collection_contract, name_of_nft, listing_id] = {"amount":0, "price":market_entry["price"]} return f"Successfully refunded {name_of_nft}" @export def buy_nft(name: str, collection_contract: str, seller: str, listing_id:str): assert name != "", "Name cannot be empty" assert collection_contract != "", "Collection contract cannot be empty" assert seller != "", "Seller cannot be empty" assert listing_id != "", "Listing ID cannot be empty" collection = I.import_module(collection_contract) currency = I.import_module(allowed_currency.get()) assert I.enforce_interface(collection, forced_collection_interface ), 'Invalid collection interface!' fee = ((market[seller, collection_contract, name, listing_id]["price"])/100*adaptable_fee.get()) royalty = ((market[seller, collection_contract, name, listing_id]["price"])/100*royalty_receivers[collection_contract, name]["royalty_percentage"]) currency.transfer_from(amount=(market[seller, collection_contract, name, listing_id]["price"]) - fee - royalty, to=seller, main_account=ctx.caller) currency.transfer_from(amount=fee, to=treasury.get(), main_account=ctx.caller) if royalty > 0: currency.transfer_from(amount=royalty, to=royalty_receivers[collection_contract, name]["receiver"], main_account=ctx.caller) old_market_entry = market[seller, collection_contract, name, listing_id] market[seller, collection_contract, name, listing_id] = {"amount": 0, "price": old_market_entry["price"]} collection.transfer(name=name, amount=1, to=ctx.caller) return f"Successfully bought {name}" @export def setup_auction(name_of_nft: str, collection_contract: str, start_currency_price: float, future_royalty_percentage: float, auction_start: datetime.datetime, auction_end: datetime.datetime): assert name_of_nft != "", "Name cannot be empty" assert collection_contract != "", "Collection contract cannot be empty" assert start_currency_price > 0, 'Cannot auction for negative balances!' assert future_royalty_percentage <= 50, "Over 50% royalty is not allowed" assert future_royalty_percentage >= 0, "Under 0% royalty is not allowed" assert auction_start > now, 'Auction cannot start in the past!' assert auction_end > auction_start, 'Auction cannot end before it starts!' collection = I.import_module(collection_contract) assert I.enforce_interface(collection, forced_collection_interface ), 'Invalid collection interface!' collection.transfer_from(name=name_of_nft, amount=1, to=ctx.this, main_account=ctx.caller) listing_unique_id = block_num # block_num is a global enviroment variable that is the current block number auctions[ctx.caller, collection_contract, name_of_nft, listing_unique_id] = {"current_bid": start_currency_price, "current_highest_bidder": ctx.caller, "future_royalty_percentage": future_royalty_percentage, "auction_start": auction_start, "auction_end": auction_end} return f"Successfully listed {name_of_nft} for {start_currency_price} for auction" @export def bid_auction(seller: str, name_of_nft: str, collection_contract: str, auction_id: str, bid: float): assert name_of_nft != "", "Name cannot be empty" assert collection_contract != "", "Collection contract cannot be empty" assert seller != "", "Seller cannot be empty" assert auction_id != "", "Auction ID cannot be empty" assert bid > 0, "Bid must be higher than 0" auction = auctions[seller, collection_contract, name_of_nft, auction_id] assert now > auction["auction_start"], "Auction has not started yet" assert now < auction["auction_end"], "Auction has ended" highest_bid = auction["current_bid"] highest_bidder = auction["current_highest_bidder"] assert bid > highest_bid, "Bid must be higher than the current highest bid" assert highest_bidder != ctx.caller, "You are already the highest bidder" assert seller != ctx.caller, "You cannot bid on your own auction" currency = I.import_module(allowed_currency.get()) # refund the previous highest bidder if not the creator if highest_bidder != seller: currency.transfer(amount=highest_bid, to=highest_bidder) currency.transfer_from(amount=bid, to=ctx.this, main_account=ctx.caller) auction['current_bid'] = bid auction['current_highest_bidder'] = ctx.caller auctions[seller, collection_contract, name_of_nft, auction_id] = auction return f"Successfully bid {bid} on {name_of_nft}" @export def cancel_auction(seller: str, name_of_nft: str, collection_contract: str, auction_id: str): assert name_of_nft != "", "Name cannot be empty" assert collection_contract != "", "Collection contract cannot be empty" assert seller != "", "Seller cannot be empty" assert auction_id != "", "Auction ID cannot be empty" auction = auctions[seller, collection_contract, name_of_nft, auction_id] assert auction != 0, "Auction does not exist" assert now < auction["auction_start"], "Auction has already started" assert ctx.caller == seller, "Only the seller can cancel the auction" if(seller != auction["current_highest_bidder"]): currency = I.import_module(allowed_currency.get()) currency.transfer(amount=auction["current_bid"], to=auction["current_highest_bidder"]) collection = I.import_module(collection_contract) collection.transfer(name=name_of_nft, amount=1, to=ctx.caller) auctions[seller, collection_contract, name_of_nft, auction_id] = 0 return f"Successfully cancelled Auction for {name_of_nft}" @export def finalize_auction(seller: str, name_of_nft: str, collection_contract: str, auction_id: str): assert name_of_nft != "", "Name cannot be empty" assert collection_contract != "", "Collection contract cannot be empty" assert seller != "", "Seller cannot be empty" assert auction_id != "", "Auction ID cannot be empty" auction = auctions[seller, collection_contract, name_of_nft, auction_id] assert auction != 0, "Auction does not exist" assert now > auction["auction_end"], "Auction has not ended yet" currency = I.import_module(allowed_currency.get()) to_seller = auction["current_bid"] / 100 * 98 to_fee = auction["current_bid"] - to_seller currency.transfer(amount=to_seller, to=seller) currency.transfer(amount=to_fee, to=operator.get()) collection = I.import_module(collection_contract) collection.transfer(name=name_of_nft, amount=1, to=auction["current_highest_bidder"]) auctions[seller, collection_contract, name_of_nft, auction_id] = 0 check_old_royalties(name_of_nft=name_of_nft,collection_contract=collection_contract) if(royalty_receivers[collection_contract, name_of_nft] == False): royalty_receivers[collection_contract, name_of_nft] = {"receiver": seller, "royalty_percentage": auction["future_royalty_percentage"]} return f"Successfully finalized Auction for {name_of_nft}" @export def change_allowed_currency(contract: str): assert ctx.caller == operator.get(), "Only the operator can do this" allowed_currency.set(contract) @export def change_treasury(address: str): assert ctx.caller == operator.get(), "Only the operator can do this" treasury.set(address) @export def change_operator(address: str): assert ctx.caller == operator.get(), "Only the operator can do this" operator.set(address) @export def change_adaptable_fee(fee: float): assert ctx.caller == operator.get(), "Only the operator can do this" assert fee >= 0, "Fee cannot be negative" assert fee <= 100, "Fee cannot be over 100%" adaptable_fee.set(fee) def check_old_royalties(collection_contract: str, name_of_nft: str): old_royalty = old_royalty_receivers[collection_contract, name_of_nft] new_royalty = royalty_receivers[collection_contract, name_of_nft] if (new_royalty == False) and (old_royalty != None): if(collection_contract == "con_nameservice_v3"): royalty_receivers[collection_contract, name_of_nft] = {"receiver": operator.get(), "royalty_percentage": 2} else: royalty_receivers[collection_contract, name_of_nft] = old_royalty return True return False
name con_nft_marketplace_v9

State Changes

Contract con_nft_marketplace_v9
Variable allowed_currency
New Value currency
 
Contract con_nft_marketplace_v9
Variable adaptable_fee
New Value 2
 
Contract con_nft_marketplace_v9
Variable operator
New Value ff61544ea94eaaeb5df08ed863c4a938e9129aba6ceee5f31b6681bdede11b89
 
Contract con_nft_marketplace_v9
Variable treasury
New Value ff61544ea94eaaeb5df08ed863c4a938e9129aba6ceee5f31b6681bdede11b89
 
Contract con_nft_marketplace_v9
Variable __code__
New Value I = importlib __allowed_currency = Variable(contract='con_nft_marketplace_v9', name= 'allowed_currency') __operator = Variable(contract='con_nft_marketplace_v9', name='operator') __market = Hash(default_value=0, contract='con_nft_marketplace_v9', name= 'market') __auctions = Hash(default_value=0, contract='con_nft_marketplace_v9', name= 'auctions') __treasury = Variable(contract='con_nft_marketplace_v9', name='treasury') __royalty_receivers = Hash(default_value=False, contract= 'con_nft_marketplace_v9', name='royalty_receivers') __adaptable_fee = Variable(contract='con_nft_marketplace_v9', name= 'adaptable_fee') forced_collection_interface = [I.Func('transfer', args=('name', 'amount', 'to')), I.Func('approve', args=('amount', 'name', 'to')), I.Func( 'transfer_from', args=('name', 'amount', 'to', 'main_account'))] __old_royalty_receivers = ForeignHash(foreign_contract= 'con_nft_marketplace_v4', foreign_name='royalty_receivers', contract= 'con_nft_marketplace_v9', name='old_royalty_receivers') def ____(): __allowed_currency.set('currency') __adaptable_fee.set(2) __operator.set( 'ff61544ea94eaaeb5df08ed863c4a938e9129aba6ceee5f31b6681bdede11b89') __treasury.set( 'ff61544ea94eaaeb5df08ed863c4a938e9129aba6ceee5f31b6681bdede11b89') @__export('con_nft_marketplace_v9') def sell_nft(name_of_nft: str, collection_contract: str, amount: int, currency_price: float, royalty_percentage: float): assert name_of_nft != '', 'Name cannot be empty' assert collection_contract != '', 'Collection contract cannot be empty' assert amount > 0, 'Cannot sell negative NFT amount' assert currency_price > 0, 'Cannot sell for negative balances!' collection = I.import_module(collection_contract) assert I.enforce_interface(collection, forced_collection_interface ), 'Invalid collection interface!' collection.transfer_from(name=name_of_nft, amount=amount, to=ctx.this, main_account=ctx.caller) listing_unique_id = block_num for i in range(amount): __market[ctx.caller, collection_contract, name_of_nft, listing_unique_id + i] = {'amount': 1, 'price': currency_price} __check_old_royalties(name_of_nft=name_of_nft, collection_contract= collection_contract) if __royalty_receivers[collection_contract, name_of_nft] == False: if royalty_percentage is None: royalty_percentage = decimal('0.0') assert royalty_percentage <= 50, 'Over 50% royalty is not allowed' assert royalty_percentage >= 0, 'Under 0% royalty is not allowed' __royalty_receivers[collection_contract, name_of_nft] = {'receiver': ctx.caller, 'royalty_percentage': royalty_percentage} return f'Successfully listed {amount} {name_of_nft} for {currency_price}' @__export('con_nft_marketplace_v9') def refund_nft(name_of_nft: str, collection_contract: str, listing_id: str): assert name_of_nft != '', 'Name cannot be empty' assert collection_contract != '', 'Collection contract cannot be empty' assert listing_id != '', 'Listing ID cannot be empty' market_entry = __market[ctx.caller, collection_contract, name_of_nft, listing_id] collection = I.import_module(collection_contract) collection.transfer(name=name_of_nft, amount=market_entry['amount'], to =ctx.caller) __market[ctx.caller, collection_contract, name_of_nft, listing_id] = { 'amount': 0, 'price': market_entry['price']} return f'Successfully refunded {name_of_nft}' @__export('con_nft_marketplace_v9') def buy_nft(name: str, collection_contract: str, seller: str, listing_id: str): assert name != '', 'Name cannot be empty' assert collection_contract != '', 'Collection contract cannot be empty' assert seller != '', 'Seller cannot be empty' assert listing_id != '', 'Listing ID cannot be empty' collection = I.import_module(collection_contract) currency = I.import_module(__allowed_currency.get()) assert I.enforce_interface(collection, forced_collection_interface ), 'Invalid collection interface!' fee = __market[seller, collection_contract, name, listing_id]['price' ] / 100 * __adaptable_fee.get() royalty = __market[seller, collection_contract, name, listing_id]['price' ] / 100 * __royalty_receivers[collection_contract, name][ 'royalty_percentage'] currency.transfer_from(amount=__market[seller, collection_contract, name, listing_id]['price'] - fee - royalty, to=seller, main_account =ctx.caller) currency.transfer_from(amount=fee, to=__treasury.get(), main_account= ctx.caller) if royalty > 0: currency.transfer_from(amount=royalty, to=__royalty_receivers[ collection_contract, name]['receiver'], main_account=ctx.caller) old_market_entry = __market[seller, collection_contract, name, listing_id] __market[seller, collection_contract, name, listing_id] = {'amount': 0, 'price': old_market_entry['price']} collection.transfer(name=name, amount=1, to=ctx.caller) return f'Successfully bought {name}' @__export('con_nft_marketplace_v9') def setup_auction(name_of_nft: str, collection_contract: str, start_currency_price: float, future_royalty_percentage: float, auction_start: datetime.datetime, auction_end: datetime.datetime): assert name_of_nft != '', 'Name cannot be empty' assert collection_contract != '', 'Collection contract cannot be empty' assert start_currency_price > 0, 'Cannot auction for negative balances!' assert future_royalty_percentage <= 50, 'Over 50% royalty is not allowed' assert future_royalty_percentage >= 0, 'Under 0% royalty is not allowed' assert auction_start > now, 'Auction cannot start in the past!' assert auction_end > auction_start, 'Auction cannot end before it starts!' collection = I.import_module(collection_contract) assert I.enforce_interface(collection, forced_collection_interface ), 'Invalid collection interface!' collection.transfer_from(name=name_of_nft, amount=1, to=ctx.this, main_account=ctx.caller) listing_unique_id = block_num __auctions[ctx.caller, collection_contract, name_of_nft, listing_unique_id ] = {'current_bid': start_currency_price, 'current_highest_bidder': ctx.caller, 'future_royalty_percentage': future_royalty_percentage, 'auction_start': auction_start, 'auction_end': auction_end} return ( f'Successfully listed {name_of_nft} for {start_currency_price} for auction' ) @__export('con_nft_marketplace_v9') def bid_auction(seller: str, name_of_nft: str, collection_contract: str, auction_id: str, bid: float): assert name_of_nft != '', 'Name cannot be empty' assert collection_contract != '', 'Collection contract cannot be empty' assert seller != '', 'Seller cannot be empty' assert auction_id != '', 'Auction ID cannot be empty' assert bid > 0, 'Bid must be higher than 0' auction = __auctions[seller, collection_contract, name_of_nft, auction_id] assert now > auction['auction_start'], 'Auction has not started yet' assert now < auction['auction_end'], 'Auction has ended' highest_bid = auction['current_bid'] highest_bidder = auction['current_highest_bidder'] assert bid > highest_bid, 'Bid must be higher than the current highest bid' assert highest_bidder != ctx.caller, 'You are already the highest bidder' assert seller != ctx.caller, 'You cannot bid on your own auction' currency = I.import_module(__allowed_currency.get()) if highest_bidder != seller: currency.transfer(amount=highest_bid, to=highest_bidder) currency.transfer_from(amount=bid, to=ctx.this, main_account=ctx.caller) auction['current_bid'] = bid auction['current_highest_bidder'] = ctx.caller __auctions[seller, collection_contract, name_of_nft, auction_id] = auction return f'Successfully bid {bid} on {name_of_nft}' @__export('con_nft_marketplace_v9') def cancel_auction(seller: str, name_of_nft: str, collection_contract: str, auction_id: str): assert name_of_nft != '', 'Name cannot be empty' assert collection_contract != '', 'Collection contract cannot be empty' assert seller != '', 'Seller cannot be empty' assert auction_id != '', 'Auction ID cannot be empty' auction = __auctions[seller, collection_contract, name_of_nft, auction_id] assert auction != 0, 'Auction does not exist' assert now < auction['auction_start'], 'Auction has already started' assert ctx.caller == seller, 'Only the seller can cancel the auction' if seller != auction['current_highest_bidder']: currency = I.import_module(__allowed_currency.get()) currency.transfer(amount=auction['current_bid'], to=auction[ 'current_highest_bidder']) collection = I.import_module(collection_contract) collection.transfer(name=name_of_nft, amount=1, to=ctx.caller) __auctions[seller, collection_contract, name_of_nft, auction_id] = 0 return f'Successfully cancelled Auction for {name_of_nft}' @__export('con_nft_marketplace_v9') def finalize_auction(seller: str, name_of_nft: str, collection_contract: str, auction_id: str): assert name_of_nft != '', 'Name cannot be empty' assert collection_contract != '', 'Collection contract cannot be empty' assert seller != '', 'Seller cannot be empty' assert auction_id != '', 'Auction ID cannot be empty' auction = __auctions[seller, collection_contract, name_of_nft, auction_id] assert auction != 0, 'Auction does not exist' assert now > auction['auction_end'], 'Auction has not ended yet' currency = I.import_module(__allowed_currency.get()) to_seller = auction['current_bid'] / 100 * 98 to_fee = auction['current_bid'] - to_seller currency.transfer(amount=to_seller, to=seller) currency.transfer(amount=to_fee, to=__operator.get()) collection = I.import_module(collection_contract) collection.transfer(name=name_of_nft, amount=1, to=auction[ 'current_highest_bidder']) __auctions[seller, collection_contract, name_of_nft, auction_id] = 0 __check_old_royalties(name_of_nft=name_of_nft, collection_contract= collection_contract) if __royalty_receivers[collection_contract, name_of_nft] == False: __royalty_receivers[collection_contract, name_of_nft] = {'receiver': seller, 'royalty_percentage': auction['future_royalty_percentage']} return f'Successfully finalized Auction for {name_of_nft}' @__export('con_nft_marketplace_v9') def change_allowed_currency(contract: str): assert ctx.caller == __operator.get(), 'Only the operator can do this' __allowed_currency.set(contract) @__export('con_nft_marketplace_v9') def change_treasury(address: str): assert ctx.caller == __operator.get(), 'Only the operator can do this' __treasury.set(address) @__export('con_nft_marketplace_v9') def change_operator(address: str): assert ctx.caller == __operator.get(), 'Only the operator can do this' __operator.set(address) @__export('con_nft_marketplace_v9') def change_adaptable_fee(fee: float): assert ctx.caller == __operator.get(), 'Only the operator can do this' assert fee >= 0, 'Fee cannot be negative' assert fee <= 100, 'Fee cannot be over 100%' __adaptable_fee.set(fee) def __check_old_royalties(collection_contract: str, name_of_nft: str): old_royalty = __old_royalty_receivers[collection_contract, name_of_nft] new_royalty = __royalty_receivers[collection_contract, name_of_nft] if new_royalty == False and old_royalty != None: if collection_contract == 'con_nameservice_v3': __royalty_receivers[collection_contract, name_of_nft] = {'receiver' : __operator.get(), 'royalty_percentage': 2} else: __royalty_receivers[collection_contract, name_of_nft] = old_royalty return True return False
 
Contract con_nft_marketplace_v9
Variable __compiled__
New Value e3000000000000000000000000080000004000000073d801000065005a0165026400640164028d025a0365026400640364028d025a04650564046400640564068d035a06650564046400640764068d035a0765026400640864028d025a08650564096400640a64068d035a0965026400640b64028d025a0a65016a0b640c643c64108d0265016a0b6411643d64108d0265016a0b6412643e64108d0267035a0c650d6414640a6400641564168d045a0e6417641884005a0f6510640083016511651165126513651364199c05641a641b840483015a14651064008301651165116511641c9c03641d641e840483015a156510640083016511651165116511641f9c0464206421840483015a16651064008301651165116513651365176a1765176a1764229c0664236424840483015a186510640083016511651165116511651364259c0564266427840483015a19651064008301651165116511651164289c046429642a840483015a1a651064008301651165116511651164289c04642b642c840483015a1b6510640083016511642d9c01642e642f840483015a1c651064008301651164309c0164316432840483015a1d651064008301651164309c0164336434840483015a1e651064008301651364359c0164366437840483015a1f6511651164389c026439643a84045a20643b5300293fda16636f6e5f6e66745f6d61726b6574706c6163655f7639da10616c6c6f7765645f63757272656e63792902da08636f6e7472616374da046e616d65da086f70657261746f72e900000000da066d61726b65742903da0d64656661756c745f76616c756572030000007204000000da0861756374696f6e73da08747265617375727946da11726f79616c74795f726563656976657273da0d616461707461626c655f666565da087472616e736665727204000000da06616d6f756e74da02746f2901da0461726773da07617070726f7665da0d7472616e736665725f66726f6dda0c6d61696e5f6163636f756e74da16636f6e5f6e66745f6d61726b6574706c6163655f7634da156f6c645f726f79616c74795f7265636569766572732904da10666f726569676e5f636f6e7472616374da0c666f726569676e5f6e616d6572030000007204000000630000000000000000000000000200000043000000732c00000074006a0164018301010074026a0164028301010074036a0164038301010074046a016403830101006400530029044eda0863757272656e6379e902000000da40666636313534346561393465616165623564663038656438363363346139333865393132396162613663656565356633316236363831626465646531316238392905da125f5f616c6c6f7765645f63757272656e6379da03736574da0f5f5f616461707461626c655f666565da0a5f5f6f70657261746f72da0a5f5f7472656173757279a90072200000007220000000da00da045f5f5f5f16000000730c00000000010a010a0104010601040172220000002905da0b6e616d655f6f665f6e6674da13636f6c6c656374696f6e5f636f6e7472616374720e000000da0e63757272656e63795f7072696365da12726f79616c74795f70657263656e74616765630500000000000000080000000800000043000000731e0100007c0064016b03731074006402830182017c0164016b03732074006403830182017c0264046b04733074006405830182017c0364046b047340740064068301820174016a027c0183017d0574016a037c0574048302735e74006407830182017c056a057c007c0274066a0774066a0864088d04010074097d06782c740a7c02830144005d207d0764097c03640a9c02740b74066a087c017c007c067c07170066043c0071825700740c7c007c01640b8d020100740d7c017c0066021900640c6b02900172087c0464006b0872d4740e640d83017d047c04640e6b0173e47400640f830182017c0464046b0573f4740064108301820174066a087c0464119c02740d7c017c0066023c0064127c029b0064137c009b0064147c039b009d06530029154e72210000007a144e616d652063616e6e6f7420626520656d7074797a23436f6c6c656374696f6e20636f6e74726163742063616e6e6f7420626520656d70747972060000007a1f43616e6e6f742073656c6c206e65676174697665204e465420616d6f756e747a2243616e6e6f742073656c6c20666f72206e656761746976652062616c616e636573217a1d496e76616c696420636f6c6c656374696f6e20696e746572666163652129047204000000720e000000720f0000007213000000e9010000002902720e000000da057072696365290272230000007224000000467a03302e30e9320000007a1f4f7665722035302520726f79616c7479206973206e6f7420616c6c6f7765647a1f556e64657220302520726f79616c7479206973206e6f7420616c6c6f7765642902da08726563656976657272260000007a145375636365737366756c6c79206c697374656420fa01207a0520666f7220290fda0e417373657274696f6e4572726f72da0149da0d696d706f72745f6d6f64756c65da11656e666f7263655f696e74657266616365da1b666f726365645f636f6c6c656374696f6e5f696e746572666163657212000000da03637478da0474686973da0663616c6c6572da09626c6f636b5f6e756dda0572616e6765da085f5f6d61726b6574da155f5f636865636b5f6f6c645f726f79616c74696573da135f5f726f79616c74795f726563656976657273da07646563696d616c290872230000007224000000720e00000072250000007226000000da0a636f6c6c656374696f6eda116c697374696e675f756e697175655f6964da0169722000000072200000007221000000da0873656c6c5f6e66741f000000732a000000000310011001100110010a010e0106010c010a0104010e02200104010801120108010801100110021401723d000000290372230000007224000000da0a6c697374696e675f696463030000000000000005000000060000004300000073880000007c0064016b03731074006402830182017c0164016b03732074006403830182017c0264016b0373307400640483018201740174026a037c017c007c02660419007d0374046a057c0183017d047c046a067c007c036405190074026a0364068d03010064077c036408190064099c02740174026a037c017c007c0266043c00640a7c009b009d025300290b4e72210000007a144e616d652063616e6e6f7420626520656d7074797a23436f6c6c656374696f6e20636f6e74726163742063616e6e6f7420626520656d7074797a1a4c697374696e672049442063616e6e6f7420626520656d707479720e00000029037204000000720e000000720f000000720600000072280000002902720e00000072280000007a165375636365737366756c6c7920726566756e646564202907722c000000723600000072310000007233000000722d000000722e000000720d000000290572230000007224000000723e000000da0c6d61726b65745f656e747279723a000000722000000072200000007221000000da0a726566756e645f6e66743b000000731400000000021001100110010a0108010a010c010a021c017240000000290472040000007224000000da0673656c6c6572723e00000063040000000000000009000000060000004300000073620100007c0064016b03731074006402830182017c0164016b03732074006403830182017c0264016b03733074006404830182017c0364016b037340740064058301820174016a027c0183017d0474016a0274036a04830083017d0574016a057c0474068302736c740064068301820174077c027c017c007c03660419006407190064081b0074086a04830014007d0674077c027c017c007c03660419006407190064081b0074097c017c00660219006409190014007d077c056a0a74077c027c017c007c0366041900640719007c0618007c0718007c02740b6a0c640a8d0301007c056a0a7c06740d6a048300740b6a0c640a8d0301007c07640b6b049001721c7c056a0a7c0774097c017c0066021900640c1900740b6a0c640a8d03010074077c027c017c007c03660419007d08640b7c0864071900640d9c0274077c027c017c007c0366043c007c046a0e7c00640e740b6a0c640f8d03010064107c009b009d02530029114e72210000007a144e616d652063616e6e6f7420626520656d7074797a23436f6c6c656374696f6e20636f6e74726163742063616e6e6f7420626520656d7074797a1653656c6c65722063616e6e6f7420626520656d7074797a1a4c697374696e672049442063616e6e6f7420626520656d7074797a1d496e76616c696420636f6c6c656374696f6e20696e74657266616365217228000000e96400000072260000002903720e000000720f00000072130000007206000000722a0000002902720e0000007228000000722700000029037204000000720e000000720f0000007a145375636365737366756c6c7920626f7567687420290f722c000000722d000000722e000000721b000000da03676574722f00000072300000007236000000721d0000007238000000721200000072310000007233000000721f000000720d0000002909720400000072240000007241000000723e000000723a0000007218000000da03666565da07726f79616c7479da106f6c645f6d61726b65745f656e747279722000000072200000007221000000da076275795f6e66744a0000007330000000000210011001100110010a010e010e01060220022001080104011c010a010c010a010a010801160110010201180112017247000000290672230000007224000000da1473746172745f63757272656e63795f7072696365da196675747572655f726f79616c74795f70657263656e74616765da0d61756374696f6e5f7374617274da0b61756374696f6e5f656e6463060000000000000008000000060000004300000073da0000007c0064016b03731074006402830182017c0164016b03732074006403830182017c0264046b04733074006405830182017c0364066b01734074006407830182017c0364046b05735074006408830182017c0474016b04736074006409830182017c057c046b0473707400640a8301820174026a037c0183017d0674026a047c0674058302738e7400640b830182017c066a067c00640c74076a0874076a09640d8d040100740a7d077c0274076a097c037c047c05640e9c05740b74076a097c017c007c0766043c00640f7c009b0064107c029b0064119d05530029124e72210000007a144e616d652063616e6e6f7420626520656d7074797a23436f6c6c656374696f6e20636f6e74726163742063616e6e6f7420626520656d70747972060000007a2543616e6e6f742061756374696f6e20666f72206e656761746976652062616c616e6365732172290000007a1f4f7665722035302520726f79616c7479206973206e6f7420616c6c6f7765647a1f556e64657220302520726f79616c7479206973206e6f7420616c6c6f7765647a2141756374696f6e2063616e6e6f7420737461727420696e207468652070617374217a2441756374696f6e2063616e6e6f7420656e64206265666f726520697420737461727473217a1d496e76616c696420636f6c6c656374696f6e20696e7465726661636521722700000029047204000000720e000000720f00000072130000002905da0b63757272656e745f626964da1663757272656e745f686967686573745f6269646465727249000000724a000000724b0000007a145375636365737366756c6c79206c6973746564207a0520666f72207a0c20666f722061756374696f6e290c722c000000da036e6f77722d000000722e000000722f000000723000000072120000007231000000723200000072330000007234000000da0a5f5f61756374696f6e7329087223000000722400000072480000007249000000724a000000724b000000723a000000723b000000722000000072200000007221000000da0d73657475705f61756374696f6e680000007322000000000410011001100110011001100110010a010e0106010c010a01040202010601180272500000002905724100000072230000007224000000da0a61756374696f6e5f6964da0362696463050000000000000009000000060000004300000073360100007c0164016b03731074006402830182017c0264016b03732074006403830182017c0064016b03733074006404830182017c0364016b03734074006405830182017c0464066b047350740064078301820174017c007c027c017c03660419007d0574027c05640819006b047374740064098301820174027c05640a19006b0073887400640b830182017c05640c19007d067c05640d19007d077c047c066b0473a87400640e830182017c0774036a046b0373ba7400640f830182017c0074036a046b0373cc740064108301820174056a0674076a08830083017d087c077c006b0372f07c086a097c067c0764118d0201007c086a0a7c0474036a0b74036a0464128d0301007c047c05640c3c0074036a047c05640d3c007c0574017c007c027c017c0366043c0064137c049b0064147c019b009d04530029154e72210000007a144e616d652063616e6e6f7420626520656d7074797a23436f6c6c656374696f6e20636f6e74726163742063616e6e6f7420626520656d7074797a1653656c6c65722063616e6e6f7420626520656d7074797a1a41756374696f6e2049442063616e6e6f7420626520656d70747972060000007a19426964206d75737420626520686967686572207468616e2030724a0000007a1b41756374696f6e20686173206e6f74207374617274656420796574724b0000007a1141756374696f6e2068617320656e646564724c000000724d0000007a2f426964206d75737420626520686967686572207468616e207468652063757272656e742068696768657374206269647a22596f752061726520616c7265616479207468652068696768657374206269646465727a22596f752063616e6e6f7420626964206f6e20796f7572206f776e2061756374696f6e2902720e000000720f0000002903720e000000720f00000072130000007a115375636365737366756c6c7920626964207a04206f6e20290c722c000000724f000000724e00000072310000007233000000722d000000722e000000721b0000007243000000720d00000072120000007232000000290972410000007223000000722400000072510000007252000000da0761756374696f6eda0b686967686573745f626964da0e686967686573745f6269646465727218000000722000000072200000007221000000da0b6269645f61756374696f6e82000000732a000000000310011001100110011001100114011401080108011001120112010e0108010e01140108010a01100172560000002904724100000072230000007224000000725100000063040000000000000007000000060000004300000073ec0000007c0164016b03731074006402830182017c0264016b03732074006403830182017c0064016b03733074006404830182017c0364016b037340740064058301820174017c007c027c017c03660419007d047c0464066b037360740064078301820174027c04640819006b007374740064098301820174036a047c006b0273867400640a830182017c007c04640b19006b0372b674056a0674076a08830083017d057c056a097c04640c19007c04640b1900640d8d02010074056a067c0283017d067c066a097c01640e74036a04640f8d030100640674017c007c027c017c0366043c0064107c019b009d02530029114e72210000007a144e616d652063616e6e6f7420626520656d7074797a23436f6c6c656374696f6e20636f6e74726163742063616e6e6f7420626520656d7074797a1653656c6c65722063616e6e6f7420626520656d7074797a1a41756374696f6e2049442063616e6e6f7420626520656d70747972060000007a1641756374696f6e20646f6573206e6f74206578697374724a0000007a1b41756374696f6e2068617320616c726561647920737461727465647a264f6e6c79207468652073656c6c65722063616e2063616e63656c207468652061756374696f6e724d000000724c0000002902720e000000720f000000722700000029037204000000720e000000720f0000007a235375636365737366756c6c792063616e63656c6c65642041756374696f6e20666f7220290a722c000000724f000000724e00000072310000007233000000722d000000722e000000721b0000007243000000720d0000002907724100000072230000007224000000725100000072530000007218000000723a000000722000000072200000007221000000da0e63616e63656c5f61756374696f6e9c00000073200000000003100110011001100110011001140112010c010e010c010a010a01120110017257000000630400000000000000090000000600000043000000732a0100007c0164016b03731074006402830182017c0264016b03732074006403830182017c0064016b03733074006404830182017c0364016b037340740064058301820174017c007c027c017c03660419007d047c0464066b037360740064078301820174027c04640819006b047374740064098301820174036a0474056a06830083017d057c04640a1900640b1b00640c14007d067c04640a19007c0618007d077c056a077c067c00640d8d0201007c056a077c0774086a068300640d8d02010074036a047c0283017d087c086a077c01640e7c04640f190064108d030100640674017c007c027c017c0366043c0074097c017c0264118d020100740a7c027c016602190064126b02900172207c007c046413190064149c02740a7c027c0166023c0064157c019b009d02530029164e72210000007a144e616d652063616e6e6f7420626520656d7074797a23436f6c6c656374696f6e20636f6e74726163742063616e6e6f7420626520656d7074797a1653656c6c65722063616e6e6f7420626520656d7074797a1a41756374696f6e2049442063616e6e6f7420626520656d70747972060000007a1641756374696f6e20646f6573206e6f74206578697374724b0000007a1941756374696f6e20686173206e6f7420656e64656420796574724c0000007242000000e9620000002902720e000000720f0000007227000000724d00000029037204000000720e000000720f0000002902722300000072240000004672490000002902722a00000072260000007a235375636365737366756c6c792066696e616c697a65642041756374696f6e20666f7220290b722c000000724f000000724e000000722d000000722e000000721b0000007243000000720d000000721e000000723700000072380000002909724100000072230000007224000000725100000072530000007218000000da09746f5f73656c6c6572da06746f5f666565723a000000722000000072200000007221000000da1066696e616c697a655f61756374696f6eb1000000732a000000000310011001100110011001100114010e0110010c010e0112010a010a010a0110010401080112021601725b00000029017203000000630100000000000000010000000200000043000000732400000074006a0174026a0383006b027316740464018301820174056a067c00830101006400530029024e7a1d4f6e6c7920746865206f70657261746f722063616e20646f2074686973290772310000007233000000721e0000007243000000722c000000721b000000721c00000029017203000000722000000072200000007221000000da176368616e67655f616c6c6f7765645f63757272656e6379cc000000730400000000021601725c0000002901da0761646472657373630100000000000000010000000200000043000000732400000074006a0174026a0383006b027316740464018301820174056a067c00830101006400530029024e7a1d4f6e6c7920746865206f70657261746f722063616e20646f2074686973290772310000007233000000721e0000007243000000722c000000721f000000721c0000002901725d000000722000000072200000007221000000da0f6368616e67655f7472656173757279d2000000730400000000021601725e000000630100000000000000010000000200000043000000732400000074006a0174026a0383006b027316740464018301820174026a057c00830101006400530029024e7a1d4f6e6c7920746865206f70657261746f722063616e20646f2074686973290672310000007233000000721e0000007243000000722c000000721c0000002901725d000000722000000072200000007221000000da0f6368616e67655f6f70657261746f72d8000000730400000000021601725f00000029017244000000630100000000000000010000000200000043000000734400000074006a0174026a0383006b02731674046401830182017c0064026b05732674046403830182017c0064046b017336740464058301820174056a067c00830101006400530029064e7a1d4f6e6c7920746865206f70657261746f722063616e20646f207468697372060000007a164665652063616e6e6f74206265206e6567617469766572420000007a174665652063616e6e6f74206265206f7665722031303025290772310000007233000000721e0000007243000000722c000000721d000000721c00000029017244000000722000000072200000007221000000da146368616e67655f616461707461626c655f666565de000000730800000000021601100110017260000000290272240000007223000000630200000000000000040000000400000043000000735c00000074007c007c01660219007d0274017c007c01660219007d037c0364016b0272587c0264006b0372587c0064026b02724874026a038300640364049c0274017c007c0166023c006e0c7c0274017c007c0166023c00640553006401530029064e46da12636f6e5f6e616d65736572766963655f763372190000002902722a0000007226000000542904da175f5f6f6c645f726f79616c74795f7265636569766572737238000000721e0000007243000000290472240000007223000000da0b6f6c645f726f79616c7479da0b6e65775f726f79616c74797220000000722000000072210000007237000000e6000000731000000000010c010c011001080218020c01040172370000004e29037204000000720e000000720f0000002903720e0000007204000000720f00000029047204000000720e000000720f00000072130000002921da09696d706f72746c6962722d000000da085661726961626c65721b000000721e000000da04486173687236000000724f000000721f0000007238000000721d000000da0446756e637230000000da0b466f726569676e4861736872620000007222000000da085f5f6578706f7274da03737472da03696e74da05666c6f6174723d00000072400000007247000000da086461746574696d65725000000072560000007257000000725b000000725c000000725e000000725f000000726000000072370000007220000000722000000072200000007221000000da083c6d6f64756c653e0100000073600000000401040108010c0106010801060108010c0104010a0104010801060116010c01020104010a03080906010601121a0601140e0601161d060104010401161706010601121806010601101306010401121906011005060110050601100506011007
 
Contract con_nft_marketplace_v9
Variable __owner__
New Value null
 
Contract con_nft_marketplace_v9
Variable __submitted__
New Value 2023,3,7,19,23,6,0
 
Contract con_nft_marketplace_v9
Variable __developer__
New Value ff61544ea94eaaeb5df08ed863c4a938e9129aba6ceee5f31b6681bdede11b89
 
Contract currency
Variable balances
Key ff61544ea94eaaeb5df08ed863c4a938e9129aba6ceee5f31b6681bdede11b89
New Value 363.727381076480192793184815023354