Skip to content

Introduction

This guide assumes you already know how to read Solidity code and reason about EVM contracts. The goal is not to re-teach blockchain basics. The goal is to remap your instincts to Aptos.

  • Authorization moves from implicit msg.sender checks to explicit &signer parameters.
  • Storage moves from contract-owned slots and mappings to resources and objects in global storage.
  • Tokens move from contract-per-asset standards to framework-backed asset standards like Fungible Asset and Digital Asset.
  • Frontend flows move from Ethers contract instances to the @aptos-labs/ts-sdk plus Wallet Adapter.

Solidity declares events directly in the contract:

event MessageAdded(address sender, string message, uint256 addedAt);

Move treats events as structs annotated with #[event], then emits them with event::emit:

use 0x1::event;
use std::string::String;
#[event]
struct MessageAdded has drop, store {
sender: address,
message: String,
added_at: u64,
}
event::emit(MessageAdded {
sender,
message,
added_at: timestamp::now_seconds(),
});
  1. Accounts
  2. Data Storage Models
  3. Contract vs Container
  4. Ethers.js vs the Aptos TS SDK

If you want the short version first, jump to the cheatsheet.