You have 1 DAI.

Using a wallet's UI (like Metamask), you click enough buttons and fill enough text inputs to say that you're sending 1 DAI to 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045 (that's vitalik.eth).

And hit send.

After some time the wallet says the transaction's been confirmed. All of sudden, Vitalik is now 1 DAI richer. WTF just happened?

Let's rewind. And replay in slow motion.

Ready?

Index

  1. Building the transaction
  2. Execution
  3. Afterword

Building the transaction

Wallets are pieces of software that facilitate sending transactions to the Ethereum network.

A transaction is just a way to tell the Ethereum network that you, as a user, want to execute an action. In this case that'd be sending 1 DAI to Vitalik. And a wallet (e.g., Metamask) helps build such transaction in a relatively beginner-friendly way.

Let's first go over the transaction that a wallet would build. It can be represented as an object with fields and their corresponding values.

Ours will start looking like this:

{
    "to": "0x6b175474e89094c44da98b954eedeac495271d0f",
    // [...]
}

Where the field to states the target address. In this case, 0x6b175474e89094c44da98b954eedeac495271d0f is the address of the DAI smart contract.

Wait, what?

Weren't we supposed to be sending 1 DAI to Vitalik ? Shouldn't to be Vitalik's address?