I'm a little confused about the following code(from EnglishAuction.hs):
auctionInstance :: Scripts.ScriptInstance Auctioning
auctionInstance = Scripts.validator @Auctioning
$$(PlutusTx.compile [|| mkAuctionValidator ||])
$$(PlutusTx.compile [|| wrap ||])
where
wrap = Scripts.wrapValidator @AuctionDatum @AuctionAction
What does "@" means? and what does Scripts.validator do? Why did it use two $$ instead of one?