{
  "name": "Ombrello market + burn",
  "version": "1.2",
  "site": "https://ombrellonft.xyz/market",
  "chain": {
    "name": "BNB Smart Chain",
    "chainId": 56,
    "nativeCurrency": "BNB",
    "explorer": "https://bscscan.com",
    "publicRpcs": [
      "https://bsc-dataseed.bnbchain.org",
      "https://bsc-rpc.publicnode.com"
    ]
  },
  "status": "live",
  "contracts": {
    "market": {
      "address": "0x93dD9cA6D655F3696CA8464A58A22fe3dc6d9A83",
      "deployBlock": 131030297,
      "chainId": 56,
      "explorer": "https://bscscan.com/address/0x93dD9cA6D655F3696CA8464A58A22fe3dc6d9A83",
      "verification": "Source verified on BscScan and Sourcify. Not professionally audited: use at your own risk.",
      "note": "Never send funds to an address not published here or on https://ombrellonft.xyz/market."
    },
    "collections": [
      {
        "key": "ombrello",
        "name": "Ombrello",
        "standard": "ERC-721",
        "address": "0xdAf379E1f0A51Cb9FaaAefF243f26b33Ca8bdDeD",
        "maxSupply": 1111,
        "tokenIds": "1 to 1111: Ombrello #N is tokenId N",
        "royalty": "5% via EIP-2981",
        "metadata": "tokenURI(tokenId) = https://ombrellonft.xyz/nft/{tokenId-1}.json",
        "image": "https://ombrellonft.xyz/nft/{tokenId-1}.png"
      }
    ]
  },
  "rules": {
    "currency": "native BNB (no WBNB approvals)",
    "listings": "non-custodial: seller keeps the NFT and approves the market with setApprovalForAll(market,true); a listing stops working if the NFT moves or approval is revoked",
    "offers": "BNB escrowed in the market until accepted, cancelled or refunded after expiry",
    "royaltyCap": "10%",
    "marketFee": "read feeBps() (default 0, hard cap 250 = 2.5%)",
    "maxSweep": 30,
    "maxDurationDays": 365,
    "paused": "when paused(): no new listings, buys, offers or accepts; cancelListing, cancelOffer, refundExpiredOffers and withdraw always work",
    "safety": "Always show the user contract, function, arguments and BNB value before sending, and wait for approval. We never DM."
  },
  "functions": [
    {
      "action": "list",
      "contract": "market",
      "signature": "list(address collection,uint256 tokenId,uint256 price,uint64 expiry) returns (uint256 listingId)",
      "payable": false,
      "prerequisite": "NFT.isApprovedForAll(owner, market) == true, else NFT.setApprovalForAll(market, true)",
      "notes": "price in wei; expiry unix seconds, > now and <= now + 365 days. Relisting the same token replaces the old listing."
    },
    {
      "action": "updateListing",
      "contract": "market",
      "signature": "updateListing(uint256 listingId,uint256 newPrice,uint64 newExpiry)",
      "payable": false
    },
    {
      "action": "cancelListing",
      "contract": "market",
      "signature": "cancelListing(uint256 listingId)",
      "payable": false
    },
    {
      "action": "buy",
      "contract": "market",
      "signature": "buy(uint256 listingId)",
      "payable": true,
      "value": "listing price (excess refunded)",
      "read_first": [
        "listingIdOf(collection, tokenId)",
        "isListingValid(listingId)",
        "listings(listingId)"
      ]
    },
    {
      "action": "sweep",
      "contract": "market",
      "signature": "sweep(uint256[] listingIds,uint256[] maxPrices) returns (uint256 bought)",
      "payable": true,
      "value": "sum of prices",
      "notes": "up to 30 ids; unavailable or over-cap listings are skipped and unused BNB is refunded. maxPrices may be [] for no per-item cap."
    },
    {
      "action": "makeOffer",
      "contract": "market",
      "signature": "makeOffer(address collection,uint256 tokenId,uint64 expiry) returns (uint256 offerId)",
      "payable": true,
      "value": "offer amount (escrowed)"
    },
    {
      "action": "makeCollectionOffer",
      "contract": "market",
      "signature": "makeCollectionOffer(address collection,uint64 expiry) returns (uint256 offerId)",
      "payable": true,
      "value": "offer amount (escrowed)",
      "notes": "any holder can accept with any tokenId"
    },
    {
      "action": "cancelOffer",
      "contract": "market",
      "signature": "cancelOffer(uint256 offerId)",
      "payable": false,
      "notes": "full refund"
    },
    {
      "action": "acceptOffer",
      "contract": "market",
      "signature": "acceptOffer(uint256 offerId,uint256 tokenId)",
      "payable": false,
      "prerequisite": "caller owns tokenId and approved the market",
      "read_first": [
        "getOffers(collection, offset, limit)",
        "quote(collection, tokenId, price)"
      ]
    },
    {
      "action": "refundExpiredOffers",
      "contract": "market",
      "signature": "refundExpiredOffers(uint256[] offerIds)",
      "payable": false,
      "notes": "anyone can call; refunds are credited, buyer then calls withdraw()"
    },
    {
      "action": "withdraw",
      "contract": "market",
      "signature": "withdraw()",
      "payable": false,
      "notes": "pulls pendingWithdrawals(msg.sender)"
    },
    {
      "action": "burn",
      "contract": "collection",
      "address": "0xdAf379E1f0A51Cb9FaaAefF243f26b33Ca8bdDeD",
      "signature": "burn(uint256 tokenId)",
      "payable": false,
      "irreversible": true,
      "prerequisite": "burnEnabled() == true and caller owns or is approved for tokenId",
      "notes": "Destroys the NFT and lowers totalSupply(). One call per token (no batch burn). Do NOT send to 0x000000000000000000000000000000000000dEaD instead: that does not lower supply."
    }
  ],
  "views": [
    "getListings(address collection,uint256 offset,uint256 limit)",
    "getOffers(address collection,uint256 offset,uint256 limit)",
    "listingIdOf(address,uint256)",
    "listings(uint256)",
    "offers(uint256)",
    "isListingValid(uint256)",
    "quote(address,uint256,uint256)",
    "stats(address)",
    "activeListingCount(address)",
    "activeOfferCount(address)",
    "pendingWithdrawals(address)",
    "feeBps()",
    "paused()",
    "collections()",
    "isCollection(address)"
  ],
  "events": [
    "Listed",
    "ListingUpdated",
    "Cancelled",
    "Sold",
    "OfferMade",
    "OfferCancelled",
    "OfferAccepted",
    "SweepSkipped",
    "PaymentDeferred",
    "Withdrawn"
  ],
  "examples": [
    {
      "intent": "List Ombrello #42 for 0.05 BNB for 30 days",
      "calls": [
        {
          "to": "0xdAf379E1f0A51Cb9FaaAefF243f26b33Ca8bdDeD",
          "fn": "setApprovalForAll",
          "args": [
            "0x93dD9cA6D655F3696CA8464A58A22fe3dc6d9A83",
            true
          ],
          "when": "only if not approved"
        },
        {
          "to": "0x93dD9cA6D655F3696CA8464A58A22fe3dc6d9A83",
          "fn": "list",
          "args": [
            "0xdAf379E1f0A51Cb9FaaAefF243f26b33Ca8bdDeD",
            42,
            "50000000000000000",
            "<now+2592000>"
          ]
        }
      ]
    },
    {
      "intent": "Buy listing 17 priced 0.05 BNB",
      "calls": [
        {
          "to": "0x93dD9cA6D655F3696CA8464A58A22fe3dc6d9A83",
          "fn": "buy",
          "args": [
            17
          ],
          "value": "50000000000000000"
        }
      ]
    },
    {
      "intent": "Sweep 3 cheapest",
      "calls": [
        {
          "to": "0x93dD9cA6D655F3696CA8464A58A22fe3dc6d9A83",
          "fn": "sweep",
          "args": [
            [
              17,
              9,
              23
            ],
            [
              "50000000000000000",
              "51000000000000000",
              "52000000000000000"
            ]
          ],
          "value": "153000000000000000"
        }
      ]
    },
    {
      "intent": "Collection offer 0.04 BNB for 7 days",
      "calls": [
        {
          "to": "0x93dD9cA6D655F3696CA8464A58A22fe3dc6d9A83",
          "fn": "makeCollectionOffer",
          "args": [
            "0xdAf379E1f0A51Cb9FaaAefF243f26b33Ca8bdDeD",
            "<now+604800>"
          ],
          "value": "40000000000000000"
        }
      ]
    },
    {
      "intent": "Accept offer 5 with Ombrello #100",
      "calls": [
        {
          "to": "0x93dD9cA6D655F3696CA8464A58A22fe3dc6d9A83",
          "fn": "acceptOffer",
          "args": [
            5,
            100
          ]
        }
      ]
    },
    {
      "intent": "Burn Ombrello #7 (irreversible)",
      "calls": [
        {
          "to": "0xdAf379E1f0A51Cb9FaaAefF243f26b33Ca8bdDeD",
          "fn": "burn",
          "args": [
            7
          ]
        }
      ]
    }
  ],
  "abi": {
    "market": [
      {
        "type": "constructor",
        "inputs": [
          {
            "name": "initialOwner",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "firstCollection",
            "type": "address",
            "internalType": "address"
          }
        ],
        "stateMutability": "nonpayable"
      },
      {
        "type": "function",
        "name": "BPS",
        "inputs": [],
        "outputs": [
          {
            "name": "",
            "type": "uint256",
            "internalType": "uint256"
          }
        ],
        "stateMutability": "view"
      },
      {
        "type": "function",
        "name": "MAX_DURATION",
        "inputs": [],
        "outputs": [
          {
            "name": "",
            "type": "uint256",
            "internalType": "uint256"
          }
        ],
        "stateMutability": "view"
      },
      {
        "type": "function",
        "name": "MAX_FEE_BPS",
        "inputs": [],
        "outputs": [
          {
            "name": "",
            "type": "uint256",
            "internalType": "uint256"
          }
        ],
        "stateMutability": "view"
      },
      {
        "type": "function",
        "name": "MAX_ROYALTY_BPS",
        "inputs": [],
        "outputs": [
          {
            "name": "",
            "type": "uint256",
            "internalType": "uint256"
          }
        ],
        "stateMutability": "view"
      },
      {
        "type": "function",
        "name": "MAX_SWEEP",
        "inputs": [],
        "outputs": [
          {
            "name": "",
            "type": "uint256",
            "internalType": "uint256"
          }
        ],
        "stateMutability": "view"
      },
      {
        "type": "function",
        "name": "PAYOUT_GAS",
        "inputs": [],
        "outputs": [
          {
            "name": "",
            "type": "uint256",
            "internalType": "uint256"
          }
        ],
        "stateMutability": "view"
      },
      {
        "type": "function",
        "name": "acceptOffer",
        "inputs": [
          {
            "name": "offerId",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "tokenId",
            "type": "uint256",
            "internalType": "uint256"
          }
        ],
        "outputs": [],
        "stateMutability": "nonpayable"
      },
      {
        "type": "function",
        "name": "acceptOwnership",
        "inputs": [],
        "outputs": [],
        "stateMutability": "nonpayable"
      },
      {
        "type": "function",
        "name": "activeListingCount",
        "inputs": [
          {
            "name": "collection",
            "type": "address",
            "internalType": "address"
          }
        ],
        "outputs": [
          {
            "name": "",
            "type": "uint256",
            "internalType": "uint256"
          }
        ],
        "stateMutability": "view"
      },
      {
        "type": "function",
        "name": "activeOfferCount",
        "inputs": [
          {
            "name": "collection",
            "type": "address",
            "internalType": "address"
          }
        ],
        "outputs": [
          {
            "name": "",
            "type": "uint256",
            "internalType": "uint256"
          }
        ],
        "stateMutability": "view"
      },
      {
        "type": "function",
        "name": "addCollection",
        "inputs": [
          {
            "name": "collection",
            "type": "address",
            "internalType": "address"
          }
        ],
        "outputs": [],
        "stateMutability": "nonpayable"
      },
      {
        "type": "function",
        "name": "buy",
        "inputs": [
          {
            "name": "listingId",
            "type": "uint256",
            "internalType": "uint256"
          }
        ],
        "outputs": [],
        "stateMutability": "payable"
      },
      {
        "type": "function",
        "name": "cancelListing",
        "inputs": [
          {
            "name": "listingId",
            "type": "uint256",
            "internalType": "uint256"
          }
        ],
        "outputs": [],
        "stateMutability": "nonpayable"
      },
      {
        "type": "function",
        "name": "cancelOffer",
        "inputs": [
          {
            "name": "offerId",
            "type": "uint256",
            "internalType": "uint256"
          }
        ],
        "outputs": [],
        "stateMutability": "nonpayable"
      },
      {
        "type": "function",
        "name": "cleanListings",
        "inputs": [
          {
            "name": "listingIds",
            "type": "uint256[]",
            "internalType": "uint256[]"
          }
        ],
        "outputs": [],
        "stateMutability": "nonpayable"
      },
      {
        "type": "function",
        "name": "collections",
        "inputs": [],
        "outputs": [
          {
            "name": "",
            "type": "address[]",
            "internalType": "address[]"
          }
        ],
        "stateMutability": "view"
      },
      {
        "type": "function",
        "name": "feeBps",
        "inputs": [],
        "outputs": [
          {
            "name": "",
            "type": "uint16",
            "internalType": "uint16"
          }
        ],
        "stateMutability": "view"
      },
      {
        "type": "function",
        "name": "feeRecipient",
        "inputs": [],
        "outputs": [
          {
            "name": "",
            "type": "address",
            "internalType": "address"
          }
        ],
        "stateMutability": "view"
      },
      {
        "type": "function",
        "name": "getListings",
        "inputs": [
          {
            "name": "collection",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "offset",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "limit",
            "type": "uint256",
            "internalType": "uint256"
          }
        ],
        "outputs": [
          {
            "name": "out",
            "type": "tuple[]",
            "internalType": "struct OmbrelloMarket.ListingView[]",
            "components": [
              {
                "name": "id",
                "type": "uint256",
                "internalType": "uint256"
              },
              {
                "name": "listing",
                "type": "tuple",
                "internalType": "struct OmbrelloMarket.Listing",
                "components": [
                  {
                    "name": "seller",
                    "type": "address",
                    "internalType": "address"
                  },
                  {
                    "name": "expiry",
                    "type": "uint64",
                    "internalType": "uint64"
                  },
                  {
                    "name": "active",
                    "type": "bool",
                    "internalType": "bool"
                  },
                  {
                    "name": "collection",
                    "type": "address",
                    "internalType": "address"
                  },
                  {
                    "name": "price",
                    "type": "uint128",
                    "internalType": "uint128"
                  },
                  {
                    "name": "tokenId",
                    "type": "uint256",
                    "internalType": "uint256"
                  }
                ]
              },
              {
                "name": "valid",
                "type": "bool",
                "internalType": "bool"
              }
            ]
          }
        ],
        "stateMutability": "view"
      },
      {
        "type": "function",
        "name": "getOffers",
        "inputs": [
          {
            "name": "collection",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "offset",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "limit",
            "type": "uint256",
            "internalType": "uint256"
          }
        ],
        "outputs": [
          {
            "name": "out",
            "type": "tuple[]",
            "internalType": "struct OmbrelloMarket.OfferView[]",
            "components": [
              {
                "name": "id",
                "type": "uint256",
                "internalType": "uint256"
              },
              {
                "name": "offer",
                "type": "tuple",
                "internalType": "struct OmbrelloMarket.Offer",
                "components": [
                  {
                    "name": "buyer",
                    "type": "address",
                    "internalType": "address"
                  },
                  {
                    "name": "expiry",
                    "type": "uint64",
                    "internalType": "uint64"
                  },
                  {
                    "name": "active",
                    "type": "bool",
                    "internalType": "bool"
                  },
                  {
                    "name": "isCollectionOffer",
                    "type": "bool",
                    "internalType": "bool"
                  },
                  {
                    "name": "collection",
                    "type": "address",
                    "internalType": "address"
                  },
                  {
                    "name": "price",
                    "type": "uint128",
                    "internalType": "uint128"
                  },
                  {
                    "name": "tokenId",
                    "type": "uint256",
                    "internalType": "uint256"
                  }
                ]
              },
              {
                "name": "valid",
                "type": "bool",
                "internalType": "bool"
              }
            ]
          }
        ],
        "stateMutability": "view"
      },
      {
        "type": "function",
        "name": "isCollection",
        "inputs": [
          {
            "name": "collection",
            "type": "address",
            "internalType": "address"
          }
        ],
        "outputs": [
          {
            "name": "",
            "type": "bool",
            "internalType": "bool"
          }
        ],
        "stateMutability": "view"
      },
      {
        "type": "function",
        "name": "isListingValid",
        "inputs": [
          {
            "name": "listingId",
            "type": "uint256",
            "internalType": "uint256"
          }
        ],
        "outputs": [
          {
            "name": "",
            "type": "bool",
            "internalType": "bool"
          }
        ],
        "stateMutability": "view"
      },
      {
        "type": "function",
        "name": "list",
        "inputs": [
          {
            "name": "collection",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "tokenId",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "price",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "expiry",
            "type": "uint64",
            "internalType": "uint64"
          }
        ],
        "outputs": [
          {
            "name": "listingId",
            "type": "uint256",
            "internalType": "uint256"
          }
        ],
        "stateMutability": "nonpayable"
      },
      {
        "type": "function",
        "name": "listingIdOf",
        "inputs": [
          {
            "name": "",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "",
            "type": "uint256",
            "internalType": "uint256"
          }
        ],
        "outputs": [
          {
            "name": "",
            "type": "uint256",
            "internalType": "uint256"
          }
        ],
        "stateMutability": "view"
      },
      {
        "type": "function",
        "name": "listings",
        "inputs": [
          {
            "name": "",
            "type": "uint256",
            "internalType": "uint256"
          }
        ],
        "outputs": [
          {
            "name": "seller",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "expiry",
            "type": "uint64",
            "internalType": "uint64"
          },
          {
            "name": "active",
            "type": "bool",
            "internalType": "bool"
          },
          {
            "name": "collection",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "price",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "tokenId",
            "type": "uint256",
            "internalType": "uint256"
          }
        ],
        "stateMutability": "view"
      },
      {
        "type": "function",
        "name": "makeCollectionOffer",
        "inputs": [
          {
            "name": "collection",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "expiry",
            "type": "uint64",
            "internalType": "uint64"
          }
        ],
        "outputs": [
          {
            "name": "",
            "type": "uint256",
            "internalType": "uint256"
          }
        ],
        "stateMutability": "payable"
      },
      {
        "type": "function",
        "name": "makeOffer",
        "inputs": [
          {
            "name": "collection",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "tokenId",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "expiry",
            "type": "uint64",
            "internalType": "uint64"
          }
        ],
        "outputs": [
          {
            "name": "",
            "type": "uint256",
            "internalType": "uint256"
          }
        ],
        "stateMutability": "payable"
      },
      {
        "type": "function",
        "name": "nextListingId",
        "inputs": [],
        "outputs": [
          {
            "name": "",
            "type": "uint256",
            "internalType": "uint256"
          }
        ],
        "stateMutability": "view"
      },
      {
        "type": "function",
        "name": "nextOfferId",
        "inputs": [],
        "outputs": [
          {
            "name": "",
            "type": "uint256",
            "internalType": "uint256"
          }
        ],
        "stateMutability": "view"
      },
      {
        "type": "function",
        "name": "offers",
        "inputs": [
          {
            "name": "",
            "type": "uint256",
            "internalType": "uint256"
          }
        ],
        "outputs": [
          {
            "name": "buyer",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "expiry",
            "type": "uint64",
            "internalType": "uint64"
          },
          {
            "name": "active",
            "type": "bool",
            "internalType": "bool"
          },
          {
            "name": "isCollectionOffer",
            "type": "bool",
            "internalType": "bool"
          },
          {
            "name": "collection",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "price",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "tokenId",
            "type": "uint256",
            "internalType": "uint256"
          }
        ],
        "stateMutability": "view"
      },
      {
        "type": "function",
        "name": "owner",
        "inputs": [],
        "outputs": [
          {
            "name": "",
            "type": "address",
            "internalType": "address"
          }
        ],
        "stateMutability": "view"
      },
      {
        "type": "function",
        "name": "pause",
        "inputs": [],
        "outputs": [],
        "stateMutability": "nonpayable"
      },
      {
        "type": "function",
        "name": "paused",
        "inputs": [],
        "outputs": [
          {
            "name": "",
            "type": "bool",
            "internalType": "bool"
          }
        ],
        "stateMutability": "view"
      },
      {
        "type": "function",
        "name": "pendingOwner",
        "inputs": [],
        "outputs": [
          {
            "name": "",
            "type": "address",
            "internalType": "address"
          }
        ],
        "stateMutability": "view"
      },
      {
        "type": "function",
        "name": "pendingWithdrawals",
        "inputs": [
          {
            "name": "",
            "type": "address",
            "internalType": "address"
          }
        ],
        "outputs": [
          {
            "name": "",
            "type": "uint256",
            "internalType": "uint256"
          }
        ],
        "stateMutability": "view"
      },
      {
        "type": "function",
        "name": "quote",
        "inputs": [
          {
            "name": "collection",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "tokenId",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "price",
            "type": "uint256",
            "internalType": "uint256"
          }
        ],
        "outputs": [
          {
            "name": "receiver",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "royalty",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "fee",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "proceeds",
            "type": "uint256",
            "internalType": "uint256"
          }
        ],
        "stateMutability": "view"
      },
      {
        "type": "function",
        "name": "refundExpiredOffers",
        "inputs": [
          {
            "name": "offerIds",
            "type": "uint256[]",
            "internalType": "uint256[]"
          }
        ],
        "outputs": [],
        "stateMutability": "nonpayable"
      },
      {
        "type": "function",
        "name": "removeCollection",
        "inputs": [
          {
            "name": "collection",
            "type": "address",
            "internalType": "address"
          }
        ],
        "outputs": [],
        "stateMutability": "nonpayable"
      },
      {
        "type": "function",
        "name": "renounceOwnership",
        "inputs": [],
        "outputs": [],
        "stateMutability": "view"
      },
      {
        "type": "function",
        "name": "setFee",
        "inputs": [
          {
            "name": "newFeeBps",
            "type": "uint16",
            "internalType": "uint16"
          }
        ],
        "outputs": [],
        "stateMutability": "nonpayable"
      },
      {
        "type": "function",
        "name": "setFeeRecipient",
        "inputs": [
          {
            "name": "recipient",
            "type": "address",
            "internalType": "address"
          }
        ],
        "outputs": [],
        "stateMutability": "nonpayable"
      },
      {
        "type": "function",
        "name": "stats",
        "inputs": [
          {
            "name": "",
            "type": "address",
            "internalType": "address"
          }
        ],
        "outputs": [
          {
            "name": "volume",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "sales",
            "type": "uint64",
            "internalType": "uint64"
          }
        ],
        "stateMutability": "view"
      },
      {
        "type": "function",
        "name": "sweep",
        "inputs": [
          {
            "name": "listingIds",
            "type": "uint256[]",
            "internalType": "uint256[]"
          },
          {
            "name": "maxPrices",
            "type": "uint256[]",
            "internalType": "uint256[]"
          }
        ],
        "outputs": [
          {
            "name": "bought",
            "type": "uint256",
            "internalType": "uint256"
          }
        ],
        "stateMutability": "payable"
      },
      {
        "type": "function",
        "name": "totalOwed",
        "inputs": [],
        "outputs": [
          {
            "name": "",
            "type": "uint256",
            "internalType": "uint256"
          }
        ],
        "stateMutability": "view"
      },
      {
        "type": "function",
        "name": "transferOwnership",
        "inputs": [
          {
            "name": "newOwner",
            "type": "address",
            "internalType": "address"
          }
        ],
        "outputs": [],
        "stateMutability": "nonpayable"
      },
      {
        "type": "function",
        "name": "unpause",
        "inputs": [],
        "outputs": [],
        "stateMutability": "nonpayable"
      },
      {
        "type": "function",
        "name": "updateListing",
        "inputs": [
          {
            "name": "listingId",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "newPrice",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "newExpiry",
            "type": "uint64",
            "internalType": "uint64"
          }
        ],
        "outputs": [],
        "stateMutability": "nonpayable"
      },
      {
        "type": "function",
        "name": "withdraw",
        "inputs": [],
        "outputs": [],
        "stateMutability": "nonpayable"
      },
      {
        "type": "event",
        "name": "Cancelled",
        "inputs": [
          {
            "name": "listingId",
            "type": "uint256",
            "indexed": true,
            "internalType": "uint256"
          },
          {
            "name": "collection",
            "type": "address",
            "indexed": true,
            "internalType": "address"
          },
          {
            "name": "tokenId",
            "type": "uint256",
            "indexed": true,
            "internalType": "uint256"
          },
          {
            "name": "seller",
            "type": "address",
            "indexed": false,
            "internalType": "address"
          }
        ],
        "anonymous": false
      },
      {
        "type": "event",
        "name": "CollectionAdded",
        "inputs": [
          {
            "name": "collection",
            "type": "address",
            "indexed": true,
            "internalType": "address"
          }
        ],
        "anonymous": false
      },
      {
        "type": "event",
        "name": "CollectionRemoved",
        "inputs": [
          {
            "name": "collection",
            "type": "address",
            "indexed": true,
            "internalType": "address"
          }
        ],
        "anonymous": false
      },
      {
        "type": "event",
        "name": "FeeRecipientUpdated",
        "inputs": [
          {
            "name": "recipient",
            "type": "address",
            "indexed": true,
            "internalType": "address"
          }
        ],
        "anonymous": false
      },
      {
        "type": "event",
        "name": "FeeUpdated",
        "inputs": [
          {
            "name": "feeBps",
            "type": "uint256",
            "indexed": false,
            "internalType": "uint256"
          }
        ],
        "anonymous": false
      },
      {
        "type": "event",
        "name": "Listed",
        "inputs": [
          {
            "name": "listingId",
            "type": "uint256",
            "indexed": true,
            "internalType": "uint256"
          },
          {
            "name": "collection",
            "type": "address",
            "indexed": true,
            "internalType": "address"
          },
          {
            "name": "tokenId",
            "type": "uint256",
            "indexed": true,
            "internalType": "uint256"
          },
          {
            "name": "seller",
            "type": "address",
            "indexed": false,
            "internalType": "address"
          },
          {
            "name": "price",
            "type": "uint256",
            "indexed": false,
            "internalType": "uint256"
          },
          {
            "name": "expiry",
            "type": "uint64",
            "indexed": false,
            "internalType": "uint64"
          }
        ],
        "anonymous": false
      },
      {
        "type": "event",
        "name": "ListingUpdated",
        "inputs": [
          {
            "name": "listingId",
            "type": "uint256",
            "indexed": true,
            "internalType": "uint256"
          },
          {
            "name": "price",
            "type": "uint256",
            "indexed": false,
            "internalType": "uint256"
          },
          {
            "name": "expiry",
            "type": "uint64",
            "indexed": false,
            "internalType": "uint64"
          }
        ],
        "anonymous": false
      },
      {
        "type": "event",
        "name": "OfferAccepted",
        "inputs": [
          {
            "name": "offerId",
            "type": "uint256",
            "indexed": true,
            "internalType": "uint256"
          },
          {
            "name": "collection",
            "type": "address",
            "indexed": true,
            "internalType": "address"
          },
          {
            "name": "tokenId",
            "type": "uint256",
            "indexed": true,
            "internalType": "uint256"
          },
          {
            "name": "seller",
            "type": "address",
            "indexed": false,
            "internalType": "address"
          },
          {
            "name": "buyer",
            "type": "address",
            "indexed": false,
            "internalType": "address"
          },
          {
            "name": "price",
            "type": "uint256",
            "indexed": false,
            "internalType": "uint256"
          },
          {
            "name": "royalty",
            "type": "uint256",
            "indexed": false,
            "internalType": "uint256"
          },
          {
            "name": "fee",
            "type": "uint256",
            "indexed": false,
            "internalType": "uint256"
          }
        ],
        "anonymous": false
      },
      {
        "type": "event",
        "name": "OfferCancelled",
        "inputs": [
          {
            "name": "offerId",
            "type": "uint256",
            "indexed": true,
            "internalType": "uint256"
          },
          {
            "name": "collection",
            "type": "address",
            "indexed": true,
            "internalType": "address"
          },
          {
            "name": "buyer",
            "type": "address",
            "indexed": true,
            "internalType": "address"
          },
          {
            "name": "refund",
            "type": "uint256",
            "indexed": false,
            "internalType": "uint256"
          }
        ],
        "anonymous": false
      },
      {
        "type": "event",
        "name": "OfferMade",
        "inputs": [
          {
            "name": "offerId",
            "type": "uint256",
            "indexed": true,
            "internalType": "uint256"
          },
          {
            "name": "collection",
            "type": "address",
            "indexed": true,
            "internalType": "address"
          },
          {
            "name": "tokenId",
            "type": "uint256",
            "indexed": true,
            "internalType": "uint256"
          },
          {
            "name": "buyer",
            "type": "address",
            "indexed": false,
            "internalType": "address"
          },
          {
            "name": "price",
            "type": "uint256",
            "indexed": false,
            "internalType": "uint256"
          },
          {
            "name": "expiry",
            "type": "uint64",
            "indexed": false,
            "internalType": "uint64"
          },
          {
            "name": "isCollectionOffer",
            "type": "bool",
            "indexed": false,
            "internalType": "bool"
          }
        ],
        "anonymous": false
      },
      {
        "type": "event",
        "name": "OwnershipTransferStarted",
        "inputs": [
          {
            "name": "previousOwner",
            "type": "address",
            "indexed": true,
            "internalType": "address"
          },
          {
            "name": "newOwner",
            "type": "address",
            "indexed": true,
            "internalType": "address"
          }
        ],
        "anonymous": false
      },
      {
        "type": "event",
        "name": "OwnershipTransferred",
        "inputs": [
          {
            "name": "previousOwner",
            "type": "address",
            "indexed": true,
            "internalType": "address"
          },
          {
            "name": "newOwner",
            "type": "address",
            "indexed": true,
            "internalType": "address"
          }
        ],
        "anonymous": false
      },
      {
        "type": "event",
        "name": "Paused",
        "inputs": [
          {
            "name": "account",
            "type": "address",
            "indexed": false,
            "internalType": "address"
          }
        ],
        "anonymous": false
      },
      {
        "type": "event",
        "name": "PaymentDeferred",
        "inputs": [
          {
            "name": "to",
            "type": "address",
            "indexed": true,
            "internalType": "address"
          },
          {
            "name": "amount",
            "type": "uint256",
            "indexed": false,
            "internalType": "uint256"
          }
        ],
        "anonymous": false
      },
      {
        "type": "event",
        "name": "Sold",
        "inputs": [
          {
            "name": "listingId",
            "type": "uint256",
            "indexed": true,
            "internalType": "uint256"
          },
          {
            "name": "collection",
            "type": "address",
            "indexed": true,
            "internalType": "address"
          },
          {
            "name": "tokenId",
            "type": "uint256",
            "indexed": true,
            "internalType": "uint256"
          },
          {
            "name": "seller",
            "type": "address",
            "indexed": false,
            "internalType": "address"
          },
          {
            "name": "buyer",
            "type": "address",
            "indexed": false,
            "internalType": "address"
          },
          {
            "name": "price",
            "type": "uint256",
            "indexed": false,
            "internalType": "uint256"
          },
          {
            "name": "royalty",
            "type": "uint256",
            "indexed": false,
            "internalType": "uint256"
          },
          {
            "name": "fee",
            "type": "uint256",
            "indexed": false,
            "internalType": "uint256"
          }
        ],
        "anonymous": false
      },
      {
        "type": "event",
        "name": "SweepSkipped",
        "inputs": [
          {
            "name": "listingId",
            "type": "uint256",
            "indexed": true,
            "internalType": "uint256"
          }
        ],
        "anonymous": false
      },
      {
        "type": "event",
        "name": "Unpaused",
        "inputs": [
          {
            "name": "account",
            "type": "address",
            "indexed": false,
            "internalType": "address"
          }
        ],
        "anonymous": false
      },
      {
        "type": "event",
        "name": "Withdrawn",
        "inputs": [
          {
            "name": "to",
            "type": "address",
            "indexed": true,
            "internalType": "address"
          },
          {
            "name": "amount",
            "type": "uint256",
            "indexed": false,
            "internalType": "uint256"
          }
        ],
        "anonymous": false
      },
      {
        "type": "error",
        "name": "AlreadyAdded",
        "inputs": []
      },
      {
        "type": "error",
        "name": "BadExpiry",
        "inputs": []
      },
      {
        "type": "error",
        "name": "BadPrice",
        "inputs": []
      },
      {
        "type": "error",
        "name": "EnforcedPause",
        "inputs": []
      },
      {
        "type": "error",
        "name": "ExpectedPause",
        "inputs": []
      },
      {
        "type": "error",
        "name": "FeeTooHigh",
        "inputs": []
      },
      {
        "type": "error",
        "name": "LengthMismatch",
        "inputs": []
      },
      {
        "type": "error",
        "name": "ListingUnavailable",
        "inputs": []
      },
      {
        "type": "error",
        "name": "NotAllowedCollection",
        "inputs": []
      },
      {
        "type": "error",
        "name": "NotApproved",
        "inputs": []
      },
      {
        "type": "error",
        "name": "NotBuyer",
        "inputs": []
      },
      {
        "type": "error",
        "name": "NotListed",
        "inputs": []
      },
      {
        "type": "error",
        "name": "NotSeller",
        "inputs": []
      },
      {
        "type": "error",
        "name": "NotTokenOwner",
        "inputs": []
      },
      {
        "type": "error",
        "name": "NothingToWithdraw",
        "inputs": []
      },
      {
        "type": "error",
        "name": "OfferUnavailable",
        "inputs": []
      },
      {
        "type": "error",
        "name": "OwnableInvalidOwner",
        "inputs": [
          {
            "name": "owner",
            "type": "address",
            "internalType": "address"
          }
        ]
      },
      {
        "type": "error",
        "name": "OwnableUnauthorizedAccount",
        "inputs": [
          {
            "name": "account",
            "type": "address",
            "internalType": "address"
          }
        ]
      },
      {
        "type": "error",
        "name": "ReentrancyGuardReentrantCall",
        "inputs": []
      },
      {
        "type": "error",
        "name": "RenounceDisabled",
        "inputs": []
      },
      {
        "type": "error",
        "name": "SelfTrade",
        "inputs": []
      },
      {
        "type": "error",
        "name": "TooMany",
        "inputs": []
      },
      {
        "type": "error",
        "name": "TransferFailed",
        "inputs": []
      },
      {
        "type": "error",
        "name": "WrongToken",
        "inputs": []
      },
      {
        "type": "error",
        "name": "WrongValue",
        "inputs": []
      },
      {
        "type": "error",
        "name": "ZeroAddress",
        "inputs": []
      }
    ],
    "collection": [
      {
        "type": "function",
        "name": "balanceOf",
        "inputs": [
          {
            "name": "owner",
            "type": "address",
            "internalType": "address"
          }
        ],
        "outputs": [
          {
            "name": "balance",
            "type": "uint256",
            "internalType": "uint256"
          }
        ],
        "stateMutability": "view"
      },
      {
        "type": "function",
        "name": "isApprovedForAll",
        "inputs": [
          {
            "name": "owner",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "operator",
            "type": "address",
            "internalType": "address"
          }
        ],
        "outputs": [
          {
            "name": "",
            "type": "bool",
            "internalType": "bool"
          }
        ],
        "stateMutability": "view"
      },
      {
        "type": "function",
        "name": "ownerOf",
        "inputs": [
          {
            "name": "tokenId",
            "type": "uint256",
            "internalType": "uint256"
          }
        ],
        "outputs": [
          {
            "name": "owner",
            "type": "address",
            "internalType": "address"
          }
        ],
        "stateMutability": "view"
      },
      {
        "type": "function",
        "name": "setApprovalForAll",
        "inputs": [
          {
            "name": "operator",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "approved",
            "type": "bool",
            "internalType": "bool"
          }
        ],
        "outputs": [],
        "stateMutability": "nonpayable"
      },
      {
        "type": "event",
        "name": "Transfer",
        "inputs": [
          {
            "name": "from",
            "type": "address",
            "indexed": true,
            "internalType": "address"
          },
          {
            "name": "to",
            "type": "address",
            "indexed": true,
            "internalType": "address"
          },
          {
            "name": "tokenId",
            "type": "uint256",
            "indexed": true,
            "internalType": "uint256"
          }
        ],
        "anonymous": false
      },
      {
        "type": "function",
        "name": "burn",
        "stateMutability": "nonpayable",
        "inputs": [
          {
            "name": "tokenId",
            "type": "uint256"
          }
        ],
        "outputs": []
      },
      {
        "type": "function",
        "name": "burnEnabled",
        "stateMutability": "view",
        "inputs": [],
        "outputs": [
          {
            "name": "",
            "type": "bool"
          }
        ]
      },
      {
        "type": "function",
        "name": "totalSupply",
        "stateMutability": "view",
        "inputs": [],
        "outputs": [
          {
            "name": "",
            "type": "uint256"
          }
        ]
      },
      {
        "type": "function",
        "name": "totalBurned",
        "stateMutability": "view",
        "inputs": [],
        "outputs": [
          {
            "name": "",
            "type": "uint256"
          }
        ]
      },
      {
        "type": "function",
        "name": "royaltyInfo",
        "stateMutability": "view",
        "inputs": [
          {
            "name": "tokenId",
            "type": "uint256"
          },
          {
            "name": "salePrice",
            "type": "uint256"
          }
        ],
        "outputs": [
          {
            "name": "",
            "type": "address"
          },
          {
            "name": "",
            "type": "uint256"
          }
        ]
      }
    ]
  },
  "venues": {
    "primary": {
      "name": "Ombrello Market",
      "url": "https://ombrellonft.xyz/market"
    },
    "secondary": [
      {
        "name": "Element",
        "url": "https://element.market/collections/ombrello"
      },
      {
        "name": "OKX",
        "url": "https://web3.okx.com/nft/collection/bsc/0xdaf379e1f0a51cb9faaaeff243f26b33ca8bdded"
      }
    ]
  },
  "audit": "Verified source on BscScan/Sourcify; not professionally audited.",
  "prompts": {
    "source": "https://ombrellonft.xyz/assets/prompts.js",
    "placeholders": "<TOKEN_ID>, <PRICE_BNB> etc. are filled by the agent",
    "items": [
      {
        "key": "buy",
        "title": "Buy",
        "description": "Buy one umbrella at its listed price",
        "needsMarket": true,
        "prompt": "Buy Ombrello #<TOKEN_ID> on the Ombrello market.\nNetwork: BNB Smart Chain (chain ID 56). Currency: BNB.\nOmbrello NFT contract (ERC-721): 0xdAf379E1f0A51Cb9FaaAefF243f26b33Ca8bdDeD\nOmbrello market contract: 0x93dD9cA6D655F3696CA8464A58A22fe3dc6d9A83\nOmbrello #N is token ID N (1 to 1111).\n\nStep 1 (read only, no transaction): on the market 0x93dD9cA6D655F3696CA8464A58A22fe3dc6d9A83 call listingIdOf(address,uint256) with collection = 0xdAf379E1f0A51Cb9FaaAefF243f26b33Ca8bdDeD and tokenId = <TOKEN_ID>. If it returns 0 the umbrella is not listed: stop.\nStep 2 (read only, no transaction): call isListingValid(uint256) with that listing ID; it must return true. Then call listings(uint256) with the listing ID and read the price (in wei) and seller. If the seller is my own wallet, stop (you can't buy your own listing). If the price is above <MAX_PRICE_BNB> BNB, stop.\nStep 3 (send transaction): call buy(uint256) on contract 0x93dD9cA6D655F3696CA8464A58A22fe3dc6d9A83 with arguments:\n  - listingId (uint256): <LISTING_ID>\n  - BNB value to send: <PRICE_BNB> BNB (exactly the listing price)   [the listing price; anything above it is refunded]\n\nSafety check: only use the contract addresses above, as published at https://ombrellonft.xyz/market and https://ombrellonft.xyz/market/agents.json. Before each send, show me the contract, function, arguments and BNB value, and wait for my OK. Never send BNB or NFTs to any other address. Ombrello never DMs."
      },
      {
        "key": "sweep",
        "title": "Sweep",
        "description": "Buy the cheapest few in one transaction",
        "needsMarket": true,
        "prompt": "Sweep (buy several of) the cheapest Ombrellos on the Ombrello market.\nNetwork: BNB Smart Chain (chain ID 56). Currency: BNB.\nOmbrello NFT contract (ERC-721): 0xdAf379E1f0A51Cb9FaaAefF243f26b33Ca8bdDeD\nOmbrello market contract: 0x93dD9cA6D655F3696CA8464A58A22fe3dc6d9A83\nOmbrello #N is token ID N (1 to 1111).\n\nStep 1 (read only, no transaction): on the market 0x93dD9cA6D655F3696CA8464A58A22fe3dc6d9A83 call getListings(address,uint256,uint256) with collection = 0xdAf379E1f0A51Cb9FaaAefF243f26b33Ca8bdDeD, offset = 0, limit = 150 (repeat with offset 150, 300, ... while 150 come back). Keep entries where valid is true and listing.seller is not my wallet.\nStep 2 (read only, no transaction): sort them by listing.price from low to high and take the first <COUNT> (max 30). Their sum must be at most <BUDGET_BNB> BNB.\nStep 3 (send transaction): call sweep(uint256[],uint256[]) on contract 0x93dD9cA6D655F3696CA8464A58A22fe3dc6d9A83 with arguments:\n  - listingIds (uint256[]): [<LISTING_ID_1>,<LISTING_ID_2>,...]   [listing IDs, cheapest first]\n  - maxPrices (uint256[]): [<PRICE_WEI_1>,<PRICE_WEI_2>,...]   [each listing's price in wei, same order]\n  - BNB value to send: <TOTAL_BNB> BNB (the sum of the prices)   [listings sold, expired or priced above their cap in the meantime are skipped without failing, and unused BNB is refunded in the same transaction]\n\nSafety check: only use the contract addresses above, as published at https://ombrellonft.xyz/market and https://ombrellonft.xyz/market/agents.json. Before each send, show me the contract, function, arguments and BNB value, and wait for my OK. Never send BNB or NFTs to any other address. Ombrello never DMs."
      },
      {
        "key": "list",
        "title": "List for sale",
        "description": "Approve once, then list at your price",
        "needsMarket": true,
        "prompt": "List my Ombrello #<TOKEN_ID> for <PRICE_BNB> BNB on the Ombrello market.\nNetwork: BNB Smart Chain (chain ID 56). Currency: BNB.\nOmbrello NFT contract (ERC-721): 0xdAf379E1f0A51Cb9FaaAefF243f26b33Ca8bdDeD\nOmbrello market contract: 0x93dD9cA6D655F3696CA8464A58A22fe3dc6d9A83\nOmbrello #N is token ID N (1 to 1111).\n\nStep 1 (read only, no transaction): on the NFT contract 0xdAf379E1f0A51Cb9FaaAefF243f26b33Ca8bdDeD call isApprovedForAll(address,address) with owner = my wallet and operator = 0x93dD9cA6D655F3696CA8464A58A22fe3dc6d9A83. If it returns true, skip step 2.\nStep 2 (send transaction): call setApprovalForAll(address,bool) on contract 0xdAf379E1f0A51Cb9FaaAefF243f26b33Ca8bdDeD with arguments:\n  - operator (address): 0x93dD9cA6D655F3696CA8464A58A22fe3dc6d9A83\n  - approved (bool): true\n  - BNB value to send: 0 BNB   [one-time approval so the market can transfer it when it sells; the NFT stays in my wallet]\nStep 3 (send transaction): call list(address,uint256,uint256,uint64) on contract 0x93dD9cA6D655F3696CA8464A58A22fe3dc6d9A83 with arguments:\n  - collection (address): 0xdAf379E1f0A51Cb9FaaAefF243f26b33Ca8bdDeD\n  - tokenId (uint256): <TOKEN_ID>\n  - price (uint256): <PRICE_WEI>   [price in wei; 1 BNB = 1000000000000000000 wei]\n  - expiry (uint64): <EXPIRY_UNIX>   [Unix time in seconds when the listing ends, e.g. now + 30 days; max now + 365 days]\n  - BNB value to send: 0 BNB\n\nSafety check: only use the contract addresses above, as published at https://ombrellonft.xyz/market and https://ombrellonft.xyz/market/agents.json. Before each send, show me the contract, function, arguments and BNB value, and wait for my OK. Never send BNB or NFTs to any other address. Ombrello never DMs."
      },
      {
        "key": "update",
        "title": "Update price",
        "description": "Change the price of your listing",
        "needsMarket": true,
        "prompt": "Change the price of my Ombrello #<TOKEN_ID> listing to <NEW_PRICE_BNB> BNB.\nNetwork: BNB Smart Chain (chain ID 56). Currency: BNB.\nOmbrello NFT contract (ERC-721): 0xdAf379E1f0A51Cb9FaaAefF243f26b33Ca8bdDeD\nOmbrello market contract: 0x93dD9cA6D655F3696CA8464A58A22fe3dc6d9A83\nOmbrello #N is token ID N (1 to 1111).\n\nStep 1 (read only, no transaction): on the market 0x93dD9cA6D655F3696CA8464A58A22fe3dc6d9A83 call listingIdOf(address,uint256) with collection = 0xdAf379E1f0A51Cb9FaaAefF243f26b33Ca8bdDeD and tokenId = <TOKEN_ID>.\nStep 2 (send transaction): call updateListing(uint256,uint256,uint64) on contract 0x93dD9cA6D655F3696CA8464A58A22fe3dc6d9A83 with arguments:\n  - listingId (uint256): <LISTING_ID>\n  - newPrice (uint256): <NEW_PRICE_WEI>   [price in wei; 1 BNB = 1000000000000000000 wei]\n  - newExpiry (uint64): <EXPIRY_UNIX>   [Unix seconds, e.g. now + 30 days]\n  - BNB value to send: 0 BNB\n\nSafety check: only use the contract addresses above, as published at https://ombrellonft.xyz/market and https://ombrellonft.xyz/market/agents.json. Before each send, show me the contract, function, arguments and BNB value, and wait for my OK. Never send BNB or NFTs to any other address. Ombrello never DMs."
      },
      {
        "key": "sell",
        "title": "Sell / accept offer",
        "description": "Accept the best offer on your umbrella",
        "needsMarket": true,
        "prompt": "Sell my Ombrello #<TOKEN_ID> by accepting the best open offer on the Ombrello market.\nNetwork: BNB Smart Chain (chain ID 56). Currency: BNB.\nOmbrello NFT contract (ERC-721): 0xdAf379E1f0A51Cb9FaaAefF243f26b33Ca8bdDeD\nOmbrello market contract: 0x93dD9cA6D655F3696CA8464A58A22fe3dc6d9A83\nOmbrello #N is token ID N (1 to 1111).\n\nStep 1 (read only, no transaction): on the market 0x93dD9cA6D655F3696CA8464A58A22fe3dc6d9A83 call getOffers(address,uint256,uint256) with collection = 0xdAf379E1f0A51Cb9FaaAefF243f26b33Ca8bdDeD, offset = 0, limit = 150. Keep entries where valid is true, offer.buyer is not my wallet, and (offer.isCollectionOffer is true or offer.tokenId = <TOKEN_ID>). Pick the highest offer.price and note its id.\nStep 2 (read only, no transaction): on the NFT contract 0xdAf379E1f0A51Cb9FaaAefF243f26b33Ca8bdDeD call isApprovedForAll(address,address) with owner = my wallet and operator = 0x93dD9cA6D655F3696CA8464A58A22fe3dc6d9A83. If it returns true, skip the next step.\nStep 3 (send transaction): call setApprovalForAll(address,bool) on contract 0xdAf379E1f0A51Cb9FaaAefF243f26b33Ca8bdDeD with arguments:\n  - operator (address): 0x93dD9cA6D655F3696CA8464A58A22fe3dc6d9A83\n  - approved (bool): true\n  - BNB value to send: 0 BNB   [one-time approval]\nStep 4 (send transaction): call acceptOffer(uint256,uint256) on contract 0x93dD9cA6D655F3696CA8464A58A22fe3dc6d9A83 with arguments:\n  - offerId (uint256): <OFFER_ID>\n  - tokenId (uint256): <TOKEN_ID>\n  - BNB value to send: 0 BNB   [I receive the offer minus the 5% creator royalty (and any market fee)]\n\nSafety check: only use the contract addresses above, as published at https://ombrellonft.xyz/market and https://ombrellonft.xyz/market/agents.json. Before each send, show me the contract, function, arguments and BNB value, and wait for my OK. Never send BNB or NFTs to any other address. Ombrello never DMs."
      },
      {
        "key": "offer",
        "title": "Make offer",
        "description": "Offer BNB on a specific umbrella",
        "needsMarket": true,
        "prompt": "Make an offer of <OFFER_BNB> BNB on Ombrello #<TOKEN_ID>.\nNetwork: BNB Smart Chain (chain ID 56). Currency: BNB.\nOmbrello NFT contract (ERC-721): 0xdAf379E1f0A51Cb9FaaAefF243f26b33Ca8bdDeD\nOmbrello market contract: 0x93dD9cA6D655F3696CA8464A58A22fe3dc6d9A83\nOmbrello #N is token ID N (1 to 1111).\n\nStep 1 (send transaction): call makeOffer(address,uint256,uint64) on contract 0x93dD9cA6D655F3696CA8464A58A22fe3dc6d9A83 with arguments:\n  - collection (address): 0xdAf379E1f0A51Cb9FaaAefF243f26b33Ca8bdDeD\n  - tokenId (uint256): <TOKEN_ID>\n  - expiry (uint64): <EXPIRY_UNIX>   [Unix seconds when the offer ends, e.g. now + 7 days]\n  - BNB value to send: <OFFER_BNB> BNB   [held by the market until accepted, cancelled or expired; cancel anytime with cancelOffer(uint256) for a full refund]\n\nSafety check: only use the contract addresses above, as published at https://ombrellonft.xyz/market and https://ombrellonft.xyz/market/agents.json. Before each send, show me the contract, function, arguments and BNB value, and wait for my OK. Never send BNB or NFTs to any other address. Ombrello never DMs."
      },
      {
        "key": "colOffer",
        "title": "Collection offer",
        "description": "Offer BNB on any Ombrello",
        "needsMarket": true,
        "prompt": "Make a collection offer of <OFFER_BNB> BNB on any Ombrello (any holder can accept).\nNetwork: BNB Smart Chain (chain ID 56). Currency: BNB.\nOmbrello NFT contract (ERC-721): 0xdAf379E1f0A51Cb9FaaAefF243f26b33Ca8bdDeD\nOmbrello market contract: 0x93dD9cA6D655F3696CA8464A58A22fe3dc6d9A83\nOmbrello #N is token ID N (1 to 1111).\n\nStep 1 (send transaction): call makeCollectionOffer(address,uint64) on contract 0x93dD9cA6D655F3696CA8464A58A22fe3dc6d9A83 with arguments:\n  - collection (address): 0xdAf379E1f0A51Cb9FaaAefF243f26b33Ca8bdDeD\n  - expiry (uint64): <EXPIRY_UNIX>   [Unix seconds when the offer ends, e.g. now + 7 days]\n  - BNB value to send: <OFFER_BNB> BNB   [held by the market until accepted, cancelled or expired]\n\nSafety check: only use the contract addresses above, as published at https://ombrellonft.xyz/market and https://ombrellonft.xyz/market/agents.json. Before each send, show me the contract, function, arguments and BNB value, and wait for my OK. Never send BNB or NFTs to any other address. Ombrello never DMs."
      },
      {
        "key": "cancel",
        "title": "Cancel listing",
        "description": "Take your umbrella off the market",
        "needsMarket": true,
        "prompt": "Cancel my Ombrello #<TOKEN_ID> listing on the Ombrello market.\nNetwork: BNB Smart Chain (chain ID 56). Currency: BNB.\nOmbrello NFT contract (ERC-721): 0xdAf379E1f0A51Cb9FaaAefF243f26b33Ca8bdDeD\nOmbrello market contract: 0x93dD9cA6D655F3696CA8464A58A22fe3dc6d9A83\nOmbrello #N is token ID N (1 to 1111).\n\nStep 1 (read only, no transaction): on the market 0x93dD9cA6D655F3696CA8464A58A22fe3dc6d9A83 call listingIdOf(address,uint256) with collection = 0xdAf379E1f0A51Cb9FaaAefF243f26b33Ca8bdDeD and tokenId = <TOKEN_ID>. If it returns 0 there is nothing to cancel.\nStep 2 (send transaction): call cancelListing(uint256) on contract 0x93dD9cA6D655F3696CA8464A58A22fe3dc6d9A83 with arguments:\n  - listingId (uint256): <LISTING_ID>\n  - BNB value to send: 0 BNB\n\nSafety check: only use the contract addresses above, as published at https://ombrellonft.xyz/market and https://ombrellonft.xyz/market/agents.json. Before each send, show me the contract, function, arguments and BNB value, and wait for my OK. Never send BNB or NFTs to any other address. Ombrello never DMs."
      },
      {
        "key": "cancelOffer",
        "title": "Cancel offer",
        "description": "Get your offer BNB back",
        "needsMarket": true,
        "prompt": "Cancel my Ombrello offer and get my BNB back.\nNetwork: BNB Smart Chain (chain ID 56). Currency: BNB.\nOmbrello NFT contract (ERC-721): 0xdAf379E1f0A51Cb9FaaAefF243f26b33Ca8bdDeD\nOmbrello market contract: 0x93dD9cA6D655F3696CA8464A58A22fe3dc6d9A83\nOmbrello #N is token ID N (1 to 1111).\n\nStep 1 (read only, no transaction): on the market 0x93dD9cA6D655F3696CA8464A58A22fe3dc6d9A83 call getOffers(address,uint256,uint256) with collection = 0xdAf379E1f0A51Cb9FaaAefF243f26b33Ca8bdDeD, offset = 0, limit = 150 and find the entry where offer.buyer is my wallet; note its id.\nStep 2 (send transaction): call cancelOffer(uint256) on contract 0x93dD9cA6D655F3696CA8464A58A22fe3dc6d9A83 with arguments:\n  - offerId (uint256): <OFFER_ID>\n  - BNB value to send: 0 BNB   [the full offer amount is refunded to my wallet]\n\nSafety check: only use the contract addresses above, as published at https://ombrellonft.xyz/market and https://ombrellonft.xyz/market/agents.json. Before each send, show me the contract, function, arguments and BNB value, and wait for my OK. Never send BNB or NFTs to any other address. Ombrello never DMs."
      },
      {
        "key": "withdraw",
        "title": "Withdraw",
        "description": "Claim BNB the market holds for you",
        "needsMarket": true,
        "prompt": "Withdraw any BNB the Ombrello market is holding for me.\nNetwork: BNB Smart Chain (chain ID 56). Currency: BNB.\nOmbrello NFT contract (ERC-721): 0xdAf379E1f0A51Cb9FaaAefF243f26b33Ca8bdDeD\nOmbrello market contract: 0x93dD9cA6D655F3696CA8464A58A22fe3dc6d9A83\nOmbrello #N is token ID N (1 to 1111).\n\nStep 1 (read only, no transaction): on the market 0x93dD9cA6D655F3696CA8464A58A22fe3dc6d9A83 call pendingWithdrawals(address) with my wallet. If it returns 0, stop: nothing to withdraw.\nStep 2 (send transaction): call withdraw() on contract 0x93dD9cA6D655F3696CA8464A58A22fe3dc6d9A83 with arguments:\n  - (no arguments)\n  - BNB value to send: 0 BNB   [sends my full pending balance to my wallet]\n\nSafety check: only use the contract addresses above, as published at https://ombrellonft.xyz/market and https://ombrellonft.xyz/market/agents.json. Before each send, show me the contract, function, arguments and BNB value, and wait for my OK. Never send BNB or NFTs to any other address. Ombrello never DMs."
      },
      {
        "key": "burn",
        "title": "Burn",
        "description": "Burn umbrellas with burn(tokenId)",
        "needsMarket": false,
        "prompt": "Burn my Ombrello <TOKEN_IDS, e.g. 12, 345> on BNB Smart Chain. This is permanent and cannot be undone.\nNetwork: BNB Smart Chain (chain ID 56).\nOmbrello NFT contract (ERC-721): 0xdAf379E1f0A51Cb9FaaAefF243f26b33Ca8bdDeD\nOmbrello #N is token ID N (1 to 1111).\n\nStep 1 (read only, no transaction): on 0xdAf379E1f0A51Cb9FaaAefF243f26b33Ca8bdDeD call burnEnabled(); it must return true. For each token, call ownerOf(uint256); it must return my wallet.\nStep 2 (send transaction): call burn(uint256) on contract 0xdAf379E1f0A51Cb9FaaAefF243f26b33Ca8bdDeD with arguments:\n  - tokenId (uint256): <TOKEN_ID>   [one transaction per token; repeat for each token number]\n  - BNB value to send: 0 BNB\n\nDo NOT transfer it to 0x000000000000000000000000000000000000dEaD or any other address instead: that does not lower total supply. Only burn(uint256) on the contract above counts.\nSafety check: only use the contract above, as published at https://ombrellonft.xyz/burn. Before each send, show me the contract, function, token ID and value (0 BNB), and wait for my OK."
      }
    ]
  },
  "agenticWallet": {
    "cli": "Binance Agentic Wallet, baw CLI 1.12+ (@binance/agentic-wallet)",
    "requires": "Developer Mode on (baw wallet settings --json -> devMode.enabled true); enabled in the Binance app: Agentic Wallet > Settings > Developer Mode",
    "send": "baw contract-call preview --binanceChainId 56 --from <agent wallet> --to <contract> --value <wei> --inputData <calldata> --json, show the preview, then baw contract-call execute --requestId <id> --json",
    "reads": "baw has no read command: use eth_call on a public RPC (chain.publicRpcs)",
    "approvals": "only setApprovalForAll(market, true) on the Ombrello NFT; no ERC-20 approvals are ever needed",
    "selectors": {
      "buy(uint256)": "0xd96a094a",
      "sweep(uint256[],uint256[])": "0x20b9cc17",
      "list(address,uint256,uint256,uint64)": "0x2113715c",
      "updateListing(uint256,uint256,uint64)": "0x7a56a197",
      "cancelListing(uint256)": "0x305a67a8",
      "makeOffer(address,uint256,uint64)": "0x9dd806ec",
      "makeCollectionOffer(address,uint64)": "0x3391ad7e",
      "acceptOffer(uint256,uint256)": "0x81257bd5",
      "cancelOffer(uint256)": "0xef706adf",
      "withdraw()": "0x3ccfd60b",
      "setApprovalForAll(address,bool)": "0xa22cb465",
      "burn(uint256)": "0x42966c68"
    }
  }
}