WINTG CFA

WCFA WRC-20
Officiel WINTG

Le badge or « Officiel WINTG » est réservé aux tokens émis ou directement reconnus par WINTG. C'est le plus haut niveau de confiance : l'actif fait partie de l'écosystème officiel WINTG.

0xde74bcdcdc44b9…9cfba64fdf

Aperçu

Offre totale max50 000 000,0000 WCFA
Détenteurs1 058
Transferts14 017 · 8 567 (24 h)

Marché

Prix
Cap. on-chain
Cap. circulante

Autres infos

Contrat (18 déc.) 0xde74bcdc…a64fdf
StandardWRC-20
Vérifié✓ Code source
Hash transactionActionBlocÂgeDeVersMontant
0x89c78e6409… Transfert 31 810 il y a 16 h 0x5e1b23…8a7507 0x135696…dace39 136 970,2077 WCFA
0x8fa1e58069… Transfert 31 807 il y a 16 h 0x5e1b23…8a7507 0x135696…dace39 164 080,7586 WCFA
0xd8849e3d36… Transfert 31 803 il y a 16 h 0x5e1b23…8a7507 0x135696…dace39 16 802,5235 WCFA
0xbaa36f381b… Transfert 31 801 il y a 16 h 0x5e1b23…8a7507 0x135696…dace39 174 765,1327 WCFA
0x396b7b1655… Transfert 31 796 il y a 16 h 0x5e1b23…8a7507 0x135696…dace39 84 164,6777 WCFA
0x63b02f526f… Transfert 31 792 il y a 16 h 0x135696…dace39 0x5e1b23…8a7507 140 795,7157 WCFA
0x8ff609ffff… Transfert 31 788 il y a 16 h 0x5e1b23…8a7507 0x135696…dace39 26 212,5003 WCFA
0x8334630e66… Transfert 31 785 il y a 16 h 0x5e1b23…8a7507 0x135696…dace39 162 941,4781 WCFA
0x4c3a29b20e… Transfert 31 780 il y a 16 h 0x135696…dace39 0x5e1b23…8a7507 72 223,7797 WCFA
0x7171fc27c2… Transfert 31 778 il y a 16 h 0x135696…dace39 0x5e1b23…8a7507 162 850,9750 WCFA
0xbf3bcf023d… Transfert 31 775 il y a 16 h 0x135696…dace39 0x5e1b23…8a7507 84 032,1851 WCFA
0xb83546fb61… Transfert 31 772 il y a 16 h 0x135696…dace39 0x5e1b23…8a7507 96 432,2805 WCFA
0x64a3cd7767… Transfert 31 770 il y a 16 h 0x135696…dace39 0x5e1b23…8a7507 80 205,8486 WCFA
0x368fefc49a… Transfert 31 765 il y a 16 h 0x135696…dace39 0x5e1b23…8a7507 143 005,2821 WCFA
0x277f52bb5e… Transfert 31 762 il y a 16 h 0x5e1b23…8a7507 0x135696…dace39 153 144,1334 WCFA
0x1a38ac3018… Transfert 31 758 il y a 16 h 0x135696…dace39 0x5e1b23…8a7507 111 951,6522 WCFA
0x0eb67bda4d… Transfert 31 755 il y a 16 h 0x5e1b23…8a7507 0x135696…dace39 79 403,7710 WCFA
0xfbaa9e0927… Transfert 31 752 il y a 16 h 0x5e1b23…8a7507 0x135696…dace39 145 124,4726 WCFA
0x20d0721827… Transfert 31 750 il y a 16 h 0x5e1b23…8a7507 0x135696…dace39 163 411,4337 WCFA
0x2c1be1c4ec… Transfert 31 747 il y a 16 h 0x5e1b23…8a7507 0x135696…dace39 23 966,6510 WCFA
0xb10daec513… Transfert 31 744 il y a 16 h 0x5e1b23…8a7507 0x135696…dace39 36 583,8181 WCFA
0x8ae6363e6d… Transfert 31 741 il y a 16 h 0x135696…dace39 0x5e1b23…8a7507 76 590,1875 WCFA
0xf5d4482dcf… Transfert 31 738 il y a 16 h 0x135696…dace39 0x5e1b23…8a7507 139 762,4409 WCFA
0xd095eb588a… Transfert 31 735 il y a 16 h 0x135696…dace39 0x5e1b23…8a7507 100 219,8570 WCFA
0x4ec8ace32e… Transfert 31 731 il y a 16 h 0x5e1b23…8a7507 0x135696…dace39 43 366,2911 WCFA
0xf4ca364de3… Transfert 31 726 il y a 16 h 0x135696…dace39 0x5e1b23…8a7507 115 149,3068 WCFA
0x1fb0443d71… Transfert 31 723 il y a 16 h 0x135696…dace39 0x5e1b23…8a7507 73 746,4814 WCFA
0x07ecbd53bd… Transfert 31 719 il y a 16 h 0x5e1b23…8a7507 0x135696…dace39 105 672,8370 WCFA
0x66467dc7ae… Transfert 31 714 il y a 16 h 0x5e1b23…8a7507 0x135696…dace39 47 972,0935 WCFA
0x74c38717c0… Transfert 31 711 il y a 16 h 0x5e1b23…8a7507 0x135696…dace39 53 331,9344 WCFA
Analyse des détenteurs…

Code du contrat

✓ Vérifié

WCFA · Solidity v0.8.35 · optimiseur activé (200 runs) · licence MIT

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

/// Jeton de cotation (peg FCFA) — mintable par le déployeur, pour seed la liquidité.
contract WCFA {
    string public name = "WINTG CFA";
    string public symbol = "WCFA";
    uint8 public decimals = 18;
    uint256 public totalSupply;
    address public owner;
    mapping(address => uint256) public balanceOf;
    mapping(address => mapping(address => uint256)) public allowance;
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);

    constructor() { owner = msg.sender; }

    function mint(address to, uint256 amt) external {
        require(msg.sender == owner, "!owner");
        totalSupply += amt;
        balanceOf[to] += amt;
        emit Transfer(address(0), to, amt);
    }
    function transfer(address to, uint256 amt) external returns (bool) { _t(msg.sender, to, amt); return true; }
    function approve(address s, uint256 amt) external returns (bool) {
        allowance[msg.sender][s] = amt; emit Approval(msg.sender, s, amt); return true;
    }
    function transferFrom(address f, address to, uint256 amt) external returns (bool) {
        uint256 a = allowance[f][msg.sender];
        require(a >= amt, "allow");
        if (a != type(uint256).max) allowance[f][msg.sender] = a - amt;
        _t(f, to, amt); return true;
    }
    function _t(address f, address to, uint256 amt) internal {
        require(balanceOf[f] >= amt, "bal");
        balanceOf[f] -= amt; balanceOf[to] += amt; emit Transfer(f, to, amt);
    }
}

/// Jeton ERC-20 de test générique (nom/symbole/offre au déploiement).
contract TestToken {
    string public name;
    string public symbol;
    uint8 public decimals = 18;
    uint256 public totalSupply;
    address public owner;
    mapping(address => uint256) public balanceOf;
    mapping(address => mapping(address => uint256)) public allowance;
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);

    constructor(string memory n, string memory s, uint256 supply) {
        name = n; symbol = s; owner = msg.sender;
        totalSupply = supply; balanceOf[msg.sender] = supply;
        emit Transfer(address(0), msg.sender, supply);
    }
    function mint(address to, uint256 amt) external {
        require(msg.sender == owner, "!owner");
        totalSupply += amt; balanceOf[to] += amt; emit Transfer(address(0), to, amt);
    }
    function transfer(address to, uint256 amt) external returns (bool) { _t(msg.sender, to, amt); return true; }
    function approve(address sp, uint256 amt) external returns (bool) {
        allowance[msg.sender][sp] = amt; emit Approval(msg.sender, sp, amt); return true;
    }
    function transferFrom(address f, address to, uint256 amt) external returns (bool) {
        uint256 a = allowance[f][msg.sender]; require(a >= amt, "allow");
        if (a != type(uint256).max) allowance[f][msg.sender] = a - amt;
        _t(f, to, amt); return true;
    }
    function _t(address f, address to, uint256 amt) internal {
        require(balanceOf[f] >= amt, "bal");
        balanceOf[f] -= amt; balanceOf[to] += amt; emit Transfer(f, to, amt);
    }
}

/// Collection NFT ERC-721 minimale (émet Transfer à 3 topics indexés → détecté ERC-721).
contract TestNFT {
    string public name;
    string public symbol;
    uint256 public totalSupply;
    address public owner;
    mapping(uint256 => address) public ownerOf;
    mapping(address => uint256) public balanceOf;
    mapping(uint256 => address) public getApproved;
    event Transfer(address indexed from, address indexed to, uint256 indexed id);
    event Approval(address indexed owner, address indexed approved, uint256 indexed id);

    constructor(string memory n, string memory s) { name = n; symbol = s; owner = msg.sender; }
    function mint(address to) external returns (uint256 id) {
        id = ++totalSupply; ownerOf[id] = to; balanceOf[to]++; emit Transfer(address(0), to, id);
    }
    function transferFrom(address from, address to, uint256 id) external {
        require(ownerOf[id] == from, "own");
        require(msg.sender == from || getApproved[id] == msg.sender, "auth");
        ownerOf[id] = to; balanceOf[from]--; balanceOf[to]++; delete getApproved[id];
        emit Transfer(from, to, id);
    }
    function approve(address a, uint256 id) external {
        require(ownerOf[id] == msg.sender, "own"); getApproved[id] = a; emit Approval(msg.sender, a, id);
    }
}

interface IERC20 {
    function transfer(address to, uint256 amount) external returns (bool);
    function transferFrom(address from, address to, uint256 amount) external returns (bool);
    function balanceOf(address) external view returns (uint256);
}

/// Brûleur de gaz : consomme du gaz de façon contrôlée (vrais opcodes, vrai gaz)
/// pour simuler la DEMANDE réseau sur le devnet — les blocs se remplissent, le base
/// fee EIP-1559 monte/descend selon l'intensité, et le burn de frais devient réel.
contract GasBurner {
    uint256 public acc;
    function churn(uint256 rounds) external {
        uint256 a = acc;
        // Mémoire de travail FIXE (scratch 0x00-0x40) → coût de gaz CONSTANT par tour.
        // (abi.encodePacked dans une boucle allouerait de la mémoire à chaque tour →
        //  coût quadratique → la calibration sous-estime → out-of-gas.)
        assembly {
            for { let i := 0 } lt(i, rounds) { i := add(i, 1) } {
                mstore(0x00, a)
                mstore(0x20, i)
                a := keccak256(0x00, 0x40)
            }
        }
        acc = a;
    }
}

/// Pool AMM x*y=k : WTG natif (réserve = solde du contrat) ⟷ WCFA. Frais 0,3 %.
contract WtgPool {
    IERC20 public quote;
    address public owner;
    event Swap(address indexed who, bool wtgIn, uint256 amountIn, uint256 amountOut);

    constructor(address _quote) { quote = IERC20(_quote); owner = msg.sender; }

    /// Prix = quoteReserve / wtgReserve. Sélecteur 0x0902f1ac (compatible lecture explorer).
    function getReserves() external view returns (uint256 wtgReserve, uint256 quoteReserve) {
        return (address(this).balance, quote.balanceOf(address(this)));
    }

    function addLiquidity(uint256 quoteAmount) external payable {
        require(quote.transferFrom(msg.sender, address(this), quoteAmount), "quote in");
    }

    function _out(uint256 amountIn, uint256 rIn, uint256 rOut) internal pure returns (uint256) {
        uint256 inWithFee = amountIn * 997;
        return (inWithFee * rOut) / (rIn * 1000 + inWithFee);
    }

    /// Vend du WTG (msg.value), reçoit de la WCFA → fait BAISSER le prix.
    function swapWtgForQuote(uint256 minOut) external payable returns (uint256 out) {
        uint256 rWtg = address(this).balance - msg.value;
        uint256 rQuote = quote.balanceOf(address(this));
        out = _out(msg.value, rWtg, rQuote);
        require(out >= minOut && out < rQuote, "slip");
        require(quote.transfer(msg.sender, out), "quote out");
        emit Swap(msg.sender, true, msg.value, out);
    }

    /// Vend de la WCFA, reçoit du WTG → fait MONTER le prix.
    function swapQuoteForWtg(uint256 amountIn, uint256 minOut) external returns (uint256 out) {
        require(quote.transferFrom(msg.sender, address(this), amountIn), "quote in");
        uint256 rQuote = quote.balanceOf(address(this)) - amountIn;
        uint256 rWtg = address(this).balance;
        out = _out(amountIn, rQuote, rWtg);
        require(out >= minOut && out < rWtg, "slip");
        (bool ok, ) = msg.sender.call{value: out}("");
        require(ok, "wtg out");
        emit Swap(msg.sender, false, amountIn, out);
    }

    receive() external payable {}
}
[
    {
        "inputs": [],
        "stateMutability": "nonpayable",
        "type": "constructor"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "internalType": "address",
                "name": "owner",
                "type": "address"
            },
            {
                "indexed": true,
                "internalType": "address",
                "name": "spender",
                "type": "address"
            },
            {
                "indexed": false,
                "internalType": "uint256",
                "name": "value",
                "type": "uint256"
            }
        ],
        "name": "Approval",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "internalType": "address",
                "name": "from",
                "type": "address"
            },
            {
                "indexed": true,
                "internalType": "address",
                "name": "to",
                "type": "address"
            },
            {
                "indexed": false,
                "internalType": "uint256",
                "name": "value",
                "type": "uint256"
            }
        ],
        "name": "Transfer",
        "type": "event"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "",
                "type": "address"
            },
            {
                "internalType": "address",
                "name": "",
                "type": "address"
            }
        ],
        "name": "allowance",
        "outputs": [
            {
                "internalType": "uint256",
                "name": "",
                "type": "uint256"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "s",
                "type": "address"
            },
            {
                "internalType": "uint256",
                "name": "amt",
                "type": "uint256"
            }
        ],
        "name": "approve",
        "outputs": [
            {
                "internalType": "bool",
                "name": "",
                "type": "bool"
            }
        ],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "",
                "type": "address"
            }
        ],
        "name": "balanceOf",
        "outputs": [
            {
                "internalType": "uint256",
                "name": "",
                "type": "uint256"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [],
        "name": "decimals",
        "outputs": [
            {
                "internalType": "uint8",
                "name": "",
                "type": "uint8"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "to",
                "type": "address"
            },
            {
                "internalType": "uint256",
                "name": "amt",
                "type": "uint256"
            }
        ],
        "name": "mint",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [],
        "name": "name",
        "outputs": [
            {
                "internalType": "string",
                "name": "",
                "type": "string"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [],
        "name": "owner",
        "outputs": [
            {
                "internalType": "address",
                "name": "",
                "type": "address"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [],
        "name": "symbol",
        "outputs": [
            {
                "internalType": "string",
                "name": "",
                "type": "string"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [],
        "name": "totalSupply",
        "outputs": [
            {
                "internalType": "uint256",
                "name": "",
                "type": "uint256"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "to",
                "type": "address"
            },
            {
                "internalType": "uint256",
                "name": "amt",
                "type": "uint256"
            }
        ],
        "name": "transfer",
        "outputs": [
            {
                "internalType": "bool",
                "name": "",
                "type": "bool"
            }
        ],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "f",
                "type": "address"
            },
            {
                "internalType": "address",
                "name": "to",
                "type": "address"
            },
            {
                "internalType": "uint256",
                "name": "amt",
                "type": "uint256"
            }
        ],
        "name": "transferFrom",
        "outputs": [
            {
                "internalType": "bool",
                "name": "",
                "type": "bool"
            }
        ],
        "stateMutability": "nonpayable",
        "type": "function"
    }
]
0x608060405234801561001057600080fd5b50600436106100a95760003560e01c806340c10f191161007157806340c10f191461013857806370a082311461014d5780638da5cb5b1461016d57806395d89b4114610198578063a9059cbb146101a0578063dd62ed3e146101b357600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610106578063313ce56714610119575b600080fd5b6100b66101de565b6040516100c39190610573565b60405180910390f35b6100df6100da3660046105dd565b61026c565b60405190151581526020016100c3565b6100f860035481565b6040519081526020016100c3565b6100df610114366004610607565b6102d9565b6002546101269060ff1681565b60405160ff90911681526020016100c3565b61014b6101463660046105dd565b610388565b005b6100f861015b366004610644565b60056020526000908152604090205481565b600454610180906001600160a01b031681565b6040516001600160a01b0390911681526020016100c3565b6100b6610454565b6100df6101ae3660046105dd565b610461565b6100f86101c1366004610666565b600660209081526000928352604080842090915290825290205481565b600080546101eb90610699565b80601f016020809104026020016040519081016040528092919081815260200182805461021790610699565b80156102645780601f1061023957610100808354040283529160200191610264565b820191906000526020600020905b81548152906001019060200180831161024757829003601f168201915b505050505081565b3360008181526006602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906102c79086815260200190565b60405180910390a35060015b92915050565b6001600160a01b03831660009081526006602090815260408083203384529091528120548281101561033a5760405162461bcd60e51b8152602060048201526005602482015264616c6c6f7760d81b60448201526064015b60405180910390fd5b60001981146103725761034d83826106e9565b6001600160a01b03861660009081526006602090815260408083203384529091529020555b61037d858585610477565b506001949350505050565b6004546001600160a01b031633146103cb5760405162461bcd60e51b815260206004820152600660248201526510b7bbb732b960d11b6044820152606401610331565b80600360008282546103dd91906106fc565b90915550506001600160a01b0382166000908152600560205260408120805483929061040a9084906106fc565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600180546101eb90610699565b600061046e338484610477565b50600192915050565b6001600160a01b0383166000908152600560205260409020548111156104c55760405162461bcd60e51b815260206004820152600360248201526218985b60ea1b6044820152606401610331565b6001600160a01b038316600090815260056020526040812080548392906104ed9084906106e9565b90915550506001600160a01b0382166000908152600560205260408120805483929061051a9084906106fc565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161056691815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156105a15760208186018101516040868401015201610584565b506000604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b03811681146105d857600080fd5b919050565b600080604083850312156105f057600080fd5b6105f9836105c1565b946020939093013593505050565b60008060006060848603121561061c57600080fd5b610625846105c1565b9250610633602085016105c1565b929592945050506040919091013590565b60006020828403121561065657600080fd5b61065f826105c1565b9392505050565b6000806040838503121561067957600080fd5b610682836105c1565b9150610690602084016105c1565b90509250929050565b600181811c908216806106ad57607f821691505b6020821081036106cd57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156102d3576102d36106d3565b808201808211156102d3576102d36106d356fea2646970667358221220c39c1d09a627075dd5da9d465bdae505cf2ecf58eef378b8db53f60f78bd7e7b64736f6c63430008230033