Let me remind you the general idea of coupon bazaar. The idea is pretty simple. Users can search for discounts on goods and services that they can buy for a small price in the marketplace. Each coupon is a digital asset that represents a special discount provided by a supplier. Coupon bazaar is a marketplace of digital assets, tokenized coupons provided by suppliers. Suppliers are able to configure specific logic for those coupon tokens like quantity and exploration. We already have a coupon bazaar DApp smart contract and test functions. Now, it's time to add some functionality for a supplier. In this lesson, we will learn more about smart assets, assets with an attached script. First of all, let me remind you that we have three types of smart contracts in the waves block chain; smart accounts, DApps, and smart assets. We talked about smart accounts and DApps already. Smart asset is a script which allows or denies certain outgoing transactions with a given asset, depending on the particular conditions described within the smart asset script code. In the previous lesson, I showed you how to write the simplest smart asset code. Let's take a look at the great working example of a smart asset, Waves Reward Tokens or WRTs. The goal of WRT is that only waves ambassadors should be able to sell WRTs. So waves team will buy back those WRTs on decks. So it's a special case of a reward program, actually. So waves community members who have satisfied certain conditions will receive some amount of WRTs on a monthly or quarterly basis. They will subsequently be able to send WRT to waves ambassadors as a reward for their activities. By introducing WRT, waves team encourages the community to keep track of ambassadors' activities, express their opinions, and rewarding them if they deserve it, of course. So the smart asset will operate as follows. So WRT can only be sent to whitelisted addresses, those of ambassadors. The token cannot be burnt, it cannot be traded on decks, only whitelisted addresses can sell it. Here is an Explorer with the WRT. Here is a smart contract code that see the decompiled version of it. Here, we have an issuer address and here's a rule for transfer transactions, for exchange transactions, for mass transfer transactions, and burn transactions. Let's check it step by step. First, we have transfer transactions. It says that we can send these tokens. So we get the recipient value, only if the category of the recipient is an ambassador. So in this assets issuer account, we have a key value storage and in that key value storage, we have keys for all the ambassadors, and as a value, we should have a stream with ambassador texts. So only in that case, we have transfer this WRT token to user. So there are some exceptions. For example, mass transfer transactions. It says that the issuer of transactions or the waves team, actually, can send these tokens to anybody. So which means that, anybody can get these WRT tokens. So the user just have to satisfy some rules, and those rules are not described in the smart contracts. So waves team can decide who will get these tokens. Also, we have rule for burn transaction. It says that the sender, if it equals to issuer, so the issuer of this asset, then we can burn this token. Otherwise, we'll get an exception with text, "You cannot burn this asset." This is a very good example of smart asset. Actually, there are more in the online ID. Here is the library in the ID, and you can see here "smart assets". You can open and see different examples with some descriptions. For example, Hot Potato token, it's a bit complicated but with many comments, so I hope you will understand it. Or recipient signature, so you can read the description of this token. There are a couple of things I have to mention. The first important thing is that we do not have access to the proofs to the signatures of transactions inside the smart asset script. It means that we cannot checks proofs in the smart assets code. We should not, actually, because the really interested place when we have to check the proof is a smart account script. So we should be able to check the signature in the smart account script, and we do have that access in the smart asset script. We should not check signatures. So great. That's how smart assets work. You will have an assignment to implement a smart asset. You'll find the needed descriptions in the end of this module. We now have almost everything we need to build our own fully functional coupon bazaar, Web3 DApp. In the next module, we'll add some missing parts and put everything together.