0
0
Blockchain / Solidityprogramming~7 mins

Transfer and approve flow in Blockchain / Solidity

Choose your learning style9 modes available
Introduction

This flow helps you safely send tokens from one person to another and allow others to spend tokens on your behalf.

When you want to send tokens directly to a friend.
When you want to let a smart contract spend tokens for you.
When you want to set a spending limit for another user.
When you want to manage token transfers without sharing your private keys.
Syntax
Blockchain / Solidity
function transfer(address to, uint256 amount) returns (bool);
function approve(address spender, uint256 amount) returns (bool);
function transferFrom(address from, address to, uint256 amount) returns (bool);

transfer sends tokens directly to another address.

approve lets another address spend tokens from your balance.

Examples
Sends 100 tokens directly to address 0x1234...
Blockchain / Solidity
token.transfer(0x1234..., 100);
Allows address 0x5678... to spend up to 50 tokens from your balance.
Blockchain / Solidity
token.approve(0x5678..., 50);
Spends 30 tokens from 0x9abc... to 0xdef0... if approved.
Blockchain / Solidity
token.transferFrom(0x9abc..., 0xdef0..., 30);
Sample Program

This smart contract lets users transfer tokens, approve others to spend tokens, and transfer tokens on behalf of others if approved.

Blockchain / Solidity
pragma solidity ^0.8.0;

contract SimpleToken {
    mapping(address => uint256) public balances;
    mapping(address => mapping(address => uint256)) public allowances;

    constructor() {
        balances[msg.sender] = 1000;
    }

    function transfer(address to, uint256 amount) public returns (bool) {
        require(balances[msg.sender] >= amount, "Not enough tokens");
        balances[msg.sender] -= amount;
        balances[to] += amount;
        return true;
    }

    function approve(address spender, uint256 amount) public returns (bool) {
        allowances[msg.sender][spender] = amount;
        return true;
    }

    function transferFrom(address from, address to, uint256 amount) public returns (bool) {
        require(balances[from] >= amount, "Not enough tokens");
        require(allowances[from][msg.sender] >= amount, "Not approved for this amount");

        balances[from] -= amount;
        balances[to] += amount;
        allowances[from][msg.sender] -= amount;
        return true;
    }
}
OutputSuccess
Important Notes

Always check balances before transferring tokens.

Approvals set spending limits, so be careful who you approve.

transferFrom requires prior approval to work.

Summary

transfer sends tokens directly to another address.

approve lets someone else spend tokens from your balance.

transferFrom moves tokens from one address to another using approval.