ERC721 Explained: Understanding the Non-Fungible Token Standard

ERC721 is a non-fungible token standard on the Ethereum blockchain, defining how unique digital assets can be created, owned, and transferred. Unlike fungible tokens such as ERC20, ERC721 tokens are distinct and cannot be exchanged on a one-to-one basis. This standard is the backbone of NFTs, enabling the representation of unique items like digital art, collectibles, and virtual real estate. This article will explore what ERC721 is, its key functions, benefits, and real-world applications, guiding you through the essentials of this transformative technology.

Key Takeaways

  • ERC721 is a non-fungible token standard on the Ethereum blockchain that allows for the creation, ownership, and transfer of unique digital assets, including digital art, collectibles, virtual real estate, and in-game items.
  • Key functions of ERC721 include Transfer, SafeTransferFrom, OwnerOf, and BalanceOf, which facilitate the management and interaction of unique tokens, as well as sophisticated approval mechanisms like approve and setApprovalForAll to secure token management.
  • ERC721 tokens have been adopted across various industries, with notable real-world applications in gaming (e.g., Gods Unchained and Axie Infinity), digital art (e.g., OpenSea and Rarible), and virtual worlds (e.g., Decentraland and The Sandbox), thus revolutionizing how digital assets are owned and traded.

What is ERC721?

ERC721, which stands for Ethereum Request for Comment 721, is a non-fungible token standard on the Ethereum blockchain that represents unique digital assets. Unlike its predecessor ERC20, which deals with fungible tokens, erc 721 enables the creation, ownership, and transfer of distinct, one-of-a-kind tokens. This groundbreaking standard has revolutionized the concept of digital ownership by providing a framework for representing everything from:

  • digital art
  • collectibles
  • virtual real estate
  • in-game items

The uniqueness of ERC721 stems from its capability of attributing a distinct identifier to every token, thus guaranteeing that each token is exclusive. This uniqueness is the cornerstone of the NFT revolution, allowing for the creation of digital scarcity and verifiable ownership. The ERC721 standard incorporates a set of rules and functions that smart contracts must implement to manage these unique tokens, including methods for minting new tokens, transferring ownership, and querying token information.

The standardized interface provided by ERC721 has facilitated the growth of a flourishing ecosystem consisting of NFT marketplaces, wallets, and applications, which operate harmoniously within the Ethereum network.

Key Functions of ERC721

A set of core functions constituting the foundation of NFT management and interaction are defined by the ERC721 standard. These functions enable the creation, transfer, and tracking of unique tokens, providing a robust framework for developers to build upon. Let’s explore some of the key functions that make ERC721 tokens so powerful and versatile.

At the heart of ERC721 are the transfer functions, which come in both safe and unsafe varieties. These functions allow for the movement of tokens between addresses, with the safe transfer option providing an additional layer of security by checking if the recipient is capable of handling ERC721 tokens.

The key functions in ERC721 are:

  1. Transfer: Moves tokens between addresses.
  2. SafeTransferFrom: Similar to Transfer, but with an additional check to ensure the recipient can handle ERC721 tokens.
  3. OwnerOf: Identifies the current holder of a specific token, linking each NFT to its rightful owner.
  4. BalanceOf: Returns the number of NFTs owned by a particular address, offering a quick way to assess an account’s NFT holdings.

These functions form the core functionality of ERC721 and enable the seamless transfer and ownership tracking of non-fungible tokens.

ERC721 also incorporates sophisticated approval mechanisms to facilitate secure token management. The ‘approve’ function allows token owners to designate a specific address that can transfer a particular token on their behalf. For more comprehensive control, the ‘setApprovalForAll’ function enables owners to approve or revoke an operator’s permission to manage all of their tokens. These approval functions add a layer of flexibility and security to NFT transactions, allowing for complex interactions while maintaining owner control. The ‘getApproved’ function rounds out this system by providing a way to check which address is currently approved to transfer a specific token. Together, these functions create a robust ecosystem for managing and transferring unique digital assets securely and efficiently.

Events in ERC721

Events play a crucial role in the ERC721 standard, serving as a mechanism for tracking and logging important changes in token ownership and approvals. These events are emitted by the smart contract and can be easily monitored by external applications, providing real-time updates on the state of NFTs within the ecosystem. The three primary events in ERC721 are:

  1. Transfer: This event is emitted when a token is transferred from one address to another.
  2. Approval: This event is emitted when an address is approved to transfer a specific token.
  3. ApprovalForAll: This event is emitted when an address is approved to transfer all tokens owned by another address.

Each event serves a distinct purpose in maintaining transparency and facilitating efficient NFT management.

The Transfer event, also known as event transfer, is the most fundamental, triggered whenever ownership of an NFT changes hands. This event includes parameters for the ‘from’ address (the previous owner), the ‘to’ address (the new owner), and the unique token ID being transferred.

The Approval event is emitted when a token owner grants permission to another address to transfer a specific NFT on their behalf. It includes the owner’s address, the approved address, and the token ID in question.

Lastly, the ApprovalForAll event is fired when only the owner enables or disables an operator to manage all of their assets. This event includes the owner’s address, the operator’s address, and a boolean value indicating whether approval has been granted or revoked.

By leveraging these events, developers can create responsive applications that react to NFT ownership changes and approval updates in real-time, enhancing the overall user experience and functionality of NFT-based platforms.

Benefits of Using ERC721 for NFTs

The ERC721 standard has become the cornerstone of the NFT revolution, offering a myriad of benefits that have propelled its widespread adoption. One of the most significant advantages is the secure and transparent tracking of token provenance and ownership. Every transaction involving an ERC721 token is immutably recorded on the Ethereum blockchain, creating an unassailable chain of custody for each unique digital asset. This level of transparency not only reduces the risk of fraud but also enhances the value proposition of NFTs by providing verifiable authenticity and ownership history.

Another key benefit of ERC721 is its ability to create digital scarcity, a concept that was previously challenging to implement in the digital realm. By assigning a distinct identifier to each token, ERC721 ensures that every NFT is unique and individually trackable. This scarcity principle has profound implications for the valuation of digital assets, enabling creators to produce limited edition digital works that can appreciate in value over time. Moreover, ERC721 serves as a guardian of intellectual property rights, offering creators an immutable ledger to track the use and resale of their work. This feature has opened up new avenues for artists and content creators to monetize their digital creations while maintaining control over their distribution.

The interoperability of ERC721 tokens across various platforms, wallets, and marketplaces is yet another significant advantage. This compatibility enhances the liquidity and accessibility of NFTs, allowing them to be easily bought, sold, and traded across different ecosystems within the Ethereum network. The standardized nature of ERC721 also simplifies the process of integrating NFT functionality into new applications and services, fostering innovation and expanding the potential use cases for non-fungible tokens. As the NFT ecosystem continues to grow, the benefits of using ERC721 for creating and managing unique digital assets become increasingly apparent, solidifying its position as the go-to standard for NFT development.

Real-World Applications of ERC721

The versatility of ERC721 tokens has led to their adoption across a wide range of industries and use cases, demonstrating the standard’s potential to revolutionize various aspects of our digital lives. From gaming and digital art to virtual real estate and beyond, ERC721 tokens are reshaping how we interact with and value digital assets. These tokens are being used to represent digital identities, educational certificates, and even professional licenses, providing secure and verifiable proof of ownership or achievement.

In the realm of digital infrastructure, ERC721 tokens are being employed to represent domain names on the blockchain, offering a decentralized and censorship-resistant alternative to traditional domain ownership systems. As we delve deeper into the real-world applications of ERC721, we’ll explore three key areas where this technology is making significant waves: gaming, digital art, and virtual worlds.

Gaming

The gaming industry has embraced ERC721 tokens with open arms, recognizing their potential to revolutionize in-game economies and player experiences. These non-fungible tokens allow for the creation of unique, ownable in-game items, characters, and assets that players can truly possess and trade outside of the game environment. This paradigm shift has given rise to the play-to-earn model, where gamers can earn valuable digital assets through gameplay, potentially turning their hobby into a source of income.

One of the most prominent examples of ERC721 implementation in gaming is Gods Unchained, a blockchain-based trading card game. In this game, each card is represented as an ERC721 token, allowing players to truly own their cards and trade them freely on various marketplaces.

Another groundbreaking project is Axie Infinity, where players can collect, breed, and battle fantasy creatures called Axies, each represented by a unique ERC721 token. These games demonstrate how ERC721 tokens can create more engaging and economically rewarding gaming experiences, blurring the lines between virtual and real-world economies.

As game developers continue to explore the possibilities offered by ERC721, we can expect to see even more innovative implementations that redefine the concept of ownership in digital gaming environments.

Digital Art

The world of digital art has undergone a seismic shift with the advent of ERC721 tokens, ushering in a new era of ownership and value for digital creations. Artists can now tokenize their digital artworks as unique NFTs, providing indisputable proof of authenticity and ownership. This breakthrough has solved the long-standing issue of digital scarcity, allowing artists to create limited edition digital pieces that can appreciate in value over time, much like traditional physical artworks. As a result, artists and collectors alike can now manage unique digital assets more effectively than ever before, as they represent digital assets in a whole new light.

Platforms like OpenSea and Rarible have emerged as bustling marketplaces for ERC721-based digital art, enabling artists to showcase and sell their creations directly to collectors worldwide. These platforms have democratized the art market, allowing emerging artists to gain exposure and monetize their work without the need for traditional galleries or intermediaries. The transparency and immutability of blockchain technology ensure that the provenance of each artwork is clearly recorded, adding an extra layer of trust and value to digital art collections.

As the digital art scene continues to evolve, we’re witnessing the emergence of new art forms and experiences that are only possible through the unique properties of ERC721 tokens, pushing the boundaries of creativity in the digital realm.

Virtual Worlds

Virtual worlds have emerged as one of the most exciting frontiers for ERC721 token implementation, offering users the ability to own and trade virtual real estate and assets in immersive digital environments. These blockchain-powered metaverses leverage ERC721 tokens to represent ownership of land parcels, buildings, and other virtual assets, creating a new paradigm of digital property rights. This innovative use of NFTs has given rise to thriving virtual economies where users can buy, sell, and develop digital properties, mirroring real-world real estate markets but with the added benefits of blockchain transparency and global accessibility.

Decentraland stands out as a prime example of ERC721 implementation in virtual worlds. In this user-owned digital platform, each land parcel is represented by a unique ERC721 token, establishing indisputable proof of ownership on the Ethereum blockchain. The value of these virtual land tokens often correlates with their proximity to popular areas like roads and plazas, mirroring real-world property valuation principles.

Another notable project in this space is The Sandbox, which utilizes ERC721 tokens to represent ownership of virtual land and assets. This empowers users to create, own, and monetize their gaming experiences. As these virtual worlds continue to evolve and attract users, the role of ERC721 tokens in shaping digital economies and experiences is becoming increasingly significant, blurring the lines between physical and virtual asset ownership.

Creating Your Own ERC721 Token

Creating your own ERC721 token is an exciting venture that opens up a world of possibilities for developers and entrepreneurs alike. The process involves writing, testing, and deploying a smart contract that complies with the ERC721 interface, ensuring your token adheres to the standard and can interact seamlessly with existing NFT ecosystems. While the task may seem daunting at first, numerous tools and resources are available to simplify the process, making it accessible even to those new to blockchain development.

In the following subsections, we’ll break down the key steps involved in creating an ERC721 token, from setting up your development environment to deploying your smart contract on the Ethereum network.

Setting Up Development Environment

Establishing a robust development environment is a vital step to undertake before embarking on the creation of your ERC721 token. This process begins with installing essential tools such as Node.js and a Solidity compiler, which form the foundation of your development stack. Node.js will allow you to run JavaScript-based development tools and manage dependencies, while the Solidity compiler is necessary for translating your smart contract code into bytecode that can be executed on the Ethereum Virtual Machine.

Additionally, you’ll need to download and import dependencies from the OpenZeppelin library, a collection of secure and tested smart contracts that provide a solid foundation for your ERC721 implementation. By leveraging OpenZeppelin’s contracts, you can significantly reduce the risk of vulnerabilities in your code and ensure your token adheres to best practices in the industry.

With these tools in place, you’ll be well-equipped to begin the exciting journey of creating your own unique NFT standard.

Writing the Smart Contract

Writing the smart contract is the heart of creating your ERC721 token. This process involves extending the OpenZeppelin ERC721 contract, which provides a secure and standardized implementation of the ERC721 interface. By building upon this foundation, you can focus on customizing your token’s unique features and functionalities without worrying about reinventing the wheel or introducing security vulnerabilities.

One of the key aspects of writing your ERC721 contract is defining the token’s metadata and core functionalities. This includes:

  • Setting up the token’s name and symbol, which can be done in the constructor of your contract.
  • Implementing or overriding functions like _baseURI(), which determines the base URI for all token metadata.
  • Adding features like minting and burning capabilities to allow for the creation and destruction of tokens.

The OpenZeppelin Contracts Wizard is an invaluable tool in this process, allowing you to quickly set up a new ERC721 token by configuring options such as mintable, burnable, and pausable functionalities. By carefully considering these options and implementing them in your smart contract, you can create a unique and feature-rich ERC721 token tailored to your specific use case.

Deploying the Smart Contract

Once your ERC721 smart contract is written and thoroughly tested, the next crucial step is deployment. This process involves compiling your contract and deploying it to the Ethereum blockchain, where it will become a permanent part of the network. There are several tools available for this purpose, with Remix, Truffle, and Hardhat being among the most popular choices for developers.

Remix, in particular, offers a user-friendly interface that allows you to:

  • Compile and deploy your contract directly from your web browser
  • Access a built-in development environment for testing and debugging
  • Interact with your contract through a user-friendly interface

This makes Remix an excellent option for beginners or those looking for a quick deployment solution.

Before deploying to the Ethereum mainnet, it’s highly recommended to first deploy your contract to a test network such as Rinkeby or Goerli. This allows you to verify the contract’s functionality and interaction with other components of the Ethereum ecosystem without incurring real costs. To interact with these networks, you’ll need to connect a wallet like MetaMask to Remix and ensure you have some test ETH, which can be obtained from faucets. Once you’re confident in your contract’s performance on the test network, you can proceed with deploying to the mainnet. Remember that mainnet deployments involve real costs in the form of gas fees, so it’s essential to optimize your contract for efficiency. Additionally, consider using deployment services like OpenZeppelin, which can simplify the process of deploying secure ERC721 token contracts and provide additional features like upgradability.

Implementing Metadata in ERC721 Tokens

Metadata, which provides vital information about every unique asset symbolized by the NFT, is an integral component of ERC721 tokens. This data typically includes details such as:

  • The asset’s name
  • Description
  • Image URL
  • Other attributes that define its characteristics and value
  • Extra data parameter

The ERC721 standard includes a mechanism to implement a Uniform Resource Identifier (URI) for assigning unique metadata to each NFT, allowing for rich, descriptive information to be associated with every token.

When it comes to storing metadata for ERC721 tokens, developers have two primary options: on-chain and off-chain storage. On-chain storage involves storing the metadata directly within the smart contract, which ensures immutability but can be costly due to high gas fees. Off-chain storage, on the other hand, involves storing the metadata on external servers or decentralized storage solutions like IPFS (InterPlanetary File System). IPFS has become a popular choice for hosting NFT metadata due to its decentralized nature and efficiency in managing NFT-related tasks. By storing metadata off-chain and linking to it through the token’s URI, developers can create more detailed and media-rich NFTs without incurring prohibitive costs.

It’s worth noting that once set, the metadata of an ERC721 token is typically immutable. If updates are necessary, a new token with updated metadata usually needs to be created. This immutability adds to the authenticity and value proposition of NFTs, ensuring that the associated information remains consistent over time.

Security Best Practices for ERC721 Tokens

When it comes to developing and deploying ERC721 tokens, security is of utmost importance as any vulnerabilities can cause substantial financial setbacks and harm the project’s reputation. Implementing robust security measures is crucial to protect both the smart contract and the valuable assets it represents. Some key best practices include:

  • Implementing access control mechanisms to restrict sensitive functions to authorized addresses
  • Validating all inputs to prevent unexpected behavior
  • Designing the contract with security in mind from the ground up

Thorough testing is another critical aspect of ensuring the security of ERC721 token contracts. This includes both automated testing using tools like Truffle or Hardhat and manual code reviews to identify potential vulnerabilities. Developers should pay particular attention to common attack vectors such as:

  • Reentrancy, where an external contract call can interrupt the execution of a function and potentially drain funds.
  • Integer overflow and underflow, which can lead to unexpected behavior and vulnerabilities.
  • Access control issues, such as improper permission settings or missing checks.
  • Front-running, where an attacker can manipulate the order of transactions to their advantage.
  • Denial-of-Service attacks, which can disrupt the functioning of the contract.

Using the ‘require’ statement and ‘checkEffect’ function in the code can help mitigate these risks.

Additionally, staying updated with the latest developments in the Ethereum ecosystem and security best practices is crucial, as new vulnerabilities and attack vectors are constantly being discovered. Many projects also opt for professional smart contract audits to provide an extra layer of security assurance before deploying their ERC721 tokens to the mainnet.

Popular NFT Projects Using ERC721

What is the Future of NFTs?

A host of innovative and popular NFT projects have emerged courtesy of the ERC721 standard, each utilizing the distinctive properties of non-fungible tokens to forge captivating digital experiences. While CryptoPunks, Decentraland, and Bored Ape Yacht Club are some of the most well-known examples, the ecosystem continues to expand with new and exciting projects.

For instance, some notable NFT projects include:

  • Azuki: a collection of 10,000 unique anime-inspired NFTs
  • CloneX: created by RTFKT Studios, featuring 19,600 NFTs and significant trading volume
  • VeeFriends: created by entrepreneur Gary Vaynerchuk, featuring 10,255 unique tokens with utility beyond just collectibility
  • Doodles: known for its vibrant and colorful art style across 10,000 NFTs

The diversity of these projects demonstrates the versatility of the ERC721 standard and its ability to support a wide range of creative and commercial applications in the NFT space, including those with multiple optional extensions.

CryptoPunks

CryptoPunks stands as a pioneering project in the world of NFTs, representing one of the earliest and most influential implementations of the ERC721 standard. Launched in June 2017 by Larva Labs, CryptoPunks consists of 10,000 unique, algorithmically generated characters, each represented as a distinct ERC721 token on the Ethereum blockchain.

These pixelated, 24×24 resolution images have become iconic in the crypto art world, with each Punk possessing its own set of attributes that determine its rarity and value. Some of the attributes include:

  • Different hairstyles
  • Different accessories (e.g., hats, glasses)
  • Different facial expressions
  • Different skin tones

These attributes, combined with the limited supply of 10,000 Punks, contribute to the rarity and collectibility of each individual CryptoPunk.

The impact of CryptoPunks on the NFT ecosystem cannot be overstated. As one of the first projects to explore the concept of digital scarcity and ownership through blockchain technology, CryptoPunks has paved the way for the entire NFT movement. The project has gained significant attention not only within the crypto community but also in mainstream media and traditional art circles. CryptoPunks have been featured in prestigious auctions and international publications, solidifying their status as both valuable digital assets and cultural artifacts.

One of the unique aspects of CryptoPunks is its built-in marketplace, which is embedded directly in the Ethereum blockchain. This allows for seamless buying and selling of Punks without the need for external platforms, further emphasizing the decentralized nature of the project. As the NFT space continues to evolve, CryptoPunks remains a benchmark for new projects and a testament to the enduring value of pioneering digital art.

Decentraland

Decentraland represents a groundbreaking application of ERC721 tokens in the realm of virtual worlds, offering users the ability to:

  • Own, develop, and monetize virtual real estate within a fully decentralized 3D environment
  • Purchase land parcels, each represented by a unique ERC721 token, establishing indisputable proof of ownership in this digital metaverse
  • Participate in a thriving virtual economy where users can buy, sell, and trade land, much like in the real world, but with the added benefits of blockchain transparency and global accessibility.

The value proposition of Decentraland’s land tokens extends beyond mere ownership, as the platform encourages users to:

  • Develop their parcels with games, applications, or other interactive experiences
  • The value of these virtual properties often correlates with their location within the metaverse, mirroring real-world real estate principles
  • Parcels near popular areas like roads and plazas tend to command higher prices, creating a dynamic and evolving virtual landscape.

An interesting feature of Decentraland is the concept of Estates, which allows users to combine adjacent land parcels to create larger, more versatile spaces for development. This feature has led to the creation of expansive virtual venues, from art galleries to concert halls, further enriching the Decentraland ecosystem. As the project continues to grow and evolve, it serves as a prime example of how ERC721 tokens can be used to create immersive, user-owned virtual experiences that blur the lines between the digital and physical worlds.

Bored Ape Yacht Club

The Bored Ape Yacht Club (BAYC) has emerged as one of the most prominent and valuable NFT collections in the crypto space. It showcases the potential of ERC721 tokens to create exclusive digital communities and highly sought-after digital assets. Here are some key details about BAYC:

  • Launched in April 2021
  • Consists of 10,000 unique Bored Ape NFTs, each with its own set of traits and varying degrees of rarity
  • These cartoon ape characters have become more than just digital art; they represent membership in an exclusive club
  • BAYC has attracted celebrities, entrepreneurs, and crypto enthusiasts alike

What sets BAYC apart from many other NFT projects is the extensive utility and benefits that come with owning a Bored Ape. Holders gain access to exclusive merchandise, events, and even additional NFT drops, creating a sense of community and ongoing value beyond the initial purchase. The project has also expanded its ecosystem with related collections like Mutant Ape Yacht Club and Bored Ape Kennel Club, further increasing the appeal and potential value for collectors.

The success of BAYC has not only resulted in skyrocketing prices for individual apes but has also inspired numerous other projects to explore the concept of NFT-gated communities and experiences. As a result, BAYC has become a benchmark in the NFT space, demonstrating how ERC721 tokens can be leveraged to create powerful brands and engaged communities in the digital realm.

Future Trends and Developments in ERC721

Numerous thrilling trends and developments are influencing the future of ERC721 tokens as the NFT ecosystem continues to grow and evolve. One of the most promising areas of innovation is the emergence of cross-chain NFTs, which aim to enhance the interoperability of non-fungible tokens across different blockchain networks. This development has the potential to significantly increase the liquidity and market reach of NFTs, allowing them to be traded and utilized across various platforms and ecosystems. As blockchain technology advances, we can expect to see more seamless integration of NFTs across different chains, opening up new possibilities for creators and collectors alike.

Another significant trend in the ERC721 space is the growing focus on environmental sustainability. As concerns about the energy consumption of blockchain networks continue to mount, there is a push towards adopting more eco-friendly solutions for NFT creation and trading. This includes the development of layer-2 scaling solutions that can reduce the carbon footprint of NFT transactions, as well as the exploration of alternative, more energy-efficient consensus mechanisms. These efforts are crucial for ensuring the long-term viability and public acceptance of NFTs as a mainstream technology.

Looking ahead, the integration of augmented reality (AR) and virtual reality (VR) technologies with NFTs presents exciting possibilities for creating immersive and interactive experiences around digital assets. Imagine being able to display your NFT art collection in a virtual gallery or interact with 3D NFT objects in augmented reality – these are just a few examples of how AR and VR could enhance the value and utility of ERC721 tokens. Additionally, the development of new token standards like ERC-1155 and ERC-6551 is expanding the functionality of NFTs, allowing for more complex interactions and use cases. These advancements, combined with the ongoing innovation in the broader blockchain space, suggest a bright and dynamic future for ERC721 tokens and the NFT ecosystem as a whole.

Summary

As we’ve explored throughout this comprehensive guide, ERC721 tokens have revolutionized the concept of digital ownership and scarcity, paving the way for a new era of blockchain-based assets and experiences. From the fundamental principles of non-fungibility to the wide-ranging applications in gaming, art, and virtual worlds, ERC721 has proven to be a versatile and powerful standard. We’ve delved into the technical aspects of creating and deploying ERC721 tokens, examined best practices for security and metadata implementation, and highlighted some of the most successful projects leveraging this technology.

The future of ERC721 tokens is brimming with potential, as we witness the convergence of blockchain technology with other cutting-edge fields like augmented reality, artificial intelligence, and the metaverse. As the ecosystem continues to mature, we can expect to see even more innovative applications of NFTs, pushing the boundaries of what’s possible in the digital realm. Whether you’re a developer, artist, investor, or simply curious about the future of digital assets, the world of ERC721 tokens offers endless opportunities for exploration and creativity. As we stand on the cusp of this digital revolution, one thing is clear: ERC721 tokens have fundamentally altered our perception of ownership in the digital age, and their impact will continue to resonate across industries for years to come.

Author

  • Mia Patel

    Gaming innovator with a zest for exploring the potential of blockchain in fostering community-driven platforms.

The information provided on this blog is for informational purposes only and does not constitute financial, legal, or investment advice. The views and opinions expressed in the articles are those of the authors and do not necessarily reflect the official policy or position of NFT News Today.