Currently I am trying to build a NFT marketplace and I am currently at a point where I need to make a design choice. In my current contract I have the data about the auction on chain. And every bid is recorded on chain as well.
As I realize that this will cost a lot of gas fees, I am thinking about moving the auction data off-chain (only the NFT and a flag that it is up for sale remains on chain). The rest of the auction data I would store in a separate backend. And for bidding I would just use the approve function from a ERC20 token for the bids and the same for the NFT. Looking at Opensea I think this is how they do it. Otherwise I could not imagine how they are able to do things like extending the auction by 15 minutes without big costs. By doing it like this the bidder would only need to pay once for the approval but can then bid as often as they like (considering their balance).
Is it a good idea to do it like this or are big marketplaces doing it differently?