Skip to content

Contract Definition

Solidity contracts often inherit behavior from base contracts such as Ownable, ERC20, and ERC721. Move does not use inheritance. Instead, it uses modules, imports, and framework standards.

import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
contract DutchAuction is Ownable, ERC721 {
// ...
}
[package]
name = "dutch_auction"
version = "1.0.0"
[addresses]
dutch_auction_address = "_"
[dependencies.AptosFramework]
git = "https://github.com/aptos-labs/aptos-framework"
rev = "mainnet"
subdir = "aptos-move/framework/aptos-framework"

The migration pattern is:

  • inheritance becomes composition over framework modules
  • ERC-20 becomes Fungible Asset
  • ERC-721 becomes Digital Asset
  • ownership rules become explicit signer checks and stored configuration

This is one of the clearest places where Move asks you to stop extending contracts and start assembling capabilities.