Contrat

Contrat
0xa8e7668576…b6ea4b913e

Solde WTG

10746.085171 WTG

258 037,89 FCFA (@ 24,01 FCFA/WTG)

Avoirs en tokens

0 token

≈ 0,00 FCFA

Plus d'infos

Transactions envoyées1
Dernière activitéil y a 1 min
Première activitéil y a 5 h
Financé par

Code du contrat

✓ Vérifié

WintgEntryPoint · Solidity v0.8.20+commit.a1b79de6 · optimiseur activé (200 runs) · licence Apache-2.0

// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.20;

import { PackedUserOperation, IAccount, IPaymaster } from "./interfaces.sol";

/// @title WintgEntryPoint — minimal ERC-4337 v0.7 EntryPoint for the WINTG devnet
/// @notice Singleton that bundlers call with {handleOps}. It validates each
///         UserOperation (account + optional paymaster), executes the call, and
///         settles gas from the payer's deposit. Faithful to v0.7 packing/hashing
///         so signatures match {WintgAccount}; trimmed of mainnet hardening
///         (stake manager, deep simulation). Devnet reference, not audited.
contract WintgEntryPoint {
    mapping(address => uint256) public deposits;                    // account/paymaster gas balance
    mapping(address => mapping(uint192 => uint64)) public nonceSeq; // sender => key => sequence

    event Deposited(address indexed account, uint256 totalDeposit);
    event Withdrawn(address indexed account, address to, uint256 amount);
    event AccountDeployed(bytes32 indexed userOpHash, address indexed sender, address factory);
    event UserOperationEvent(
        bytes32 indexed userOpHash,
        address indexed sender,
        address indexed paymaster,
        uint256 nonce,
        bool success,
        uint256 actualGasCost,
        uint256 actualGasUsed
    );
    event UserOperationRevertReason(bytes32 indexed userOpHash, address indexed sender, uint256 nonce, bytes revertReason);

    error FailedOp(uint256 opIndex, string reason);

    // ───────────────────────── deposits ─────────────────────────

    function depositTo(address account) public payable {
        deposits[account] += msg.value;
        emit Deposited(account, deposits[account]);
    }

    receive() external payable {
        deposits[msg.sender] += msg.value;
        emit Deposited(msg.sender, deposits[msg.sender]);
    }

    function balanceOf(address account) external view returns (uint256) {
        return deposits[account];
    }

    function withdrawTo(address payable to, uint256 amount) external {
        require(deposits[msg.sender] >= amount, "EP: insufficient deposit");
        deposits[msg.sender] -= amount;
        (bool ok, ) = to.call{ value: amount }("");
        require(ok, "EP: withdraw failed");
        emit Withdrawn(msg.sender, to, amount);
    }

    // 4337 stake API (no-op accounting on devnet, kept for interface compatibility)
    function addStake(uint32) external payable { deposits[msg.sender] += msg.value; }
    function unlockStake() external {}
    function withdrawStake(address payable) external {}

    // ───────────────────────── nonces ─────────────────────────

    function getNonce(address sender, uint192 key) external view returns (uint256) {
        return (uint256(key) << 64) | nonceSeq[sender][key];
    }

    // ───────────────────────── hashing ─────────────────────────

    function getUserOpHash(PackedUserOperation calldata op) public view returns (bytes32) {
        bytes32 inner = keccak256(
            abi.encode(
                op.sender,
                op.nonce,
                keccak256(op.initCode),
                keccak256(op.callData),
                op.accountGasLimits,
                op.preVerificationGas,
                op.gasFees,
                keccak256(op.paymasterAndData)
            )
        );
        return keccak256(abi.encode(inner, address(this), block.chainid));
    }

    // ───────────────────────── execution ─────────────────────────

    function handleOps(PackedUserOperation[] calldata ops, address payable beneficiary) external {
        uint256 collected;
        for (uint256 i; i < ops.length; i++) {
            collected += _handleOp(i, ops[i]);
        }
        if (collected > 0) {
            (bool ok, ) = beneficiary.call{ value: collected }("");
            require(ok, "EP: beneficiary xfer");
        }
    }

    function _handleOp(uint256 opIndex, PackedUserOperation calldata op) internal returns (uint256 actualGasCost) {
        uint256 preGas = gasleft();
        bytes32 opHash = getUserOpHash(op);

        // --- nonce ---
        uint192 key = uint192(op.nonce >> 64);
        uint64 seq = uint64(op.nonce);
        if (nonceSeq[op.sender][key] != seq) revert FailedOp(opIndex, "AA25 invalid nonce");
        nonceSeq[op.sender][key] = seq + 1;

        // --- deploy account from initCode if needed ---
        if (op.initCode.length >= 20) {
            _createSender(op.initCode);
            emit AccountDeployed(opHash, op.sender, address(bytes20(op.initCode[:20])));
        }

        uint256 maxFee = uint128(uint256(op.gasFees));
        uint256 verGas = uint256(op.accountGasLimits) >> 128;
        uint256 callGas = uint128(uint256(op.accountGasLimits));
        uint256 maxCost = (verGas + callGas + op.preVerificationGas) * maxFee;

        address paymaster = op.paymasterAndData.length >= 20 ? address(bytes20(op.paymasterAndData[:20])) : address(0);

        // --- account validation (pays its prefund if no paymaster) ---
        uint256 missing = 0;
        if (paymaster == address(0)) {
            uint256 bal = deposits[op.sender];
            missing = bal >= maxCost ? 0 : maxCost - bal;
        }
        uint256 vd = IAccount(op.sender).validateUserOp(op, opHash, missing);
        _validate(opIndex, vd, "AA24 signature error");
        if (missing > 0) deposits[op.sender] += missing; // account refunded its prefund into its deposit

        // --- paymaster validation ---
        bytes memory context;
        if (paymaster != address(0)) {
            if (deposits[paymaster] < maxCost) revert FailedOp(opIndex, "AA31 paymaster deposit too low");
            (context, vd) = IPaymaster(paymaster).validatePaymasterUserOp(op, opHash, maxCost);
            _validate(opIndex, vd, "AA34 paymaster signature");
        }

        // --- execution ---
        (bool success, bytes memory ret) = op.sender.call{ gas: callGas }(op.callData);
        if (!success) {
            emit UserOperationRevertReason(opHash, op.sender, op.nonce, ret);
        }

        // --- gas settlement ---
        uint256 gasUsed = preGas - gasleft() + op.preVerificationGas;
        actualGasCost = gasUsed * maxFee;
        address payer = paymaster == address(0) ? op.sender : paymaster;
        if (deposits[payer] < actualGasCost) revert FailedOp(opIndex, "AA21 didn't pay prefund");
        deposits[payer] -= actualGasCost;

        if (paymaster != address(0)) {
            IPaymaster(paymaster).postOp(
                success ? IPaymaster.PostOpMode.opSucceeded : IPaymaster.PostOpMode.opReverted,
                context,
                actualGasCost,
                gasUsed
            );
        }

        emit UserOperationEvent(opHash, op.sender, paymaster, op.nonce, success, actualGasCost, gasUsed);
    }

    /// @dev Reverts unless validationData is valid (sig ok + time window ok).
    function _validate(uint256 opIndex, uint256 vd, string memory sigErr) internal view {
        if (vd & 1 == 1) revert FailedOp(opIndex, sigErr);
        uint48 validUntil = uint48(vd >> 160);
        uint48 validAfter = uint48(vd >> 208);
        if (validAfter != 0 && block.timestamp < validAfter) revert FailedOp(opIndex, "AA22 not valid yet");
        if (validUntil != 0 && block.timestamp > validUntil) revert FailedOp(opIndex, "AA22 expired");
    }

    /// @dev Deploy the account: initCode = factory(20 bytes) ++ calldata.
    function _createSender(bytes calldata initCode) internal {
        address factory = address(bytes20(initCode[:20]));
        bytes calldata data = initCode[20:];
        (bool ok, ) = factory.call(data);
        require(ok, "EP: account creation failed");
    }
}
[
    {
        "type": "receive",
        "stateMutability": "payable"
    },
    {
        "type": "function",
        "name": "addStake",
        "inputs": [
            {
                "name": "",
                "type": "uint32",
                "internalType": "uint32"
            }
        ],
        "outputs": [],
        "stateMutability": "payable"
    },
    {
        "type": "function",
        "name": "balanceOf",
        "inputs": [
            {
                "name": "account",
                "type": "address",
                "internalType": "address"
            }
        ],
        "outputs": [
            {
                "name": "",
                "type": "uint256",
                "internalType": "uint256"
            }
        ],
        "stateMutability": "view"
    },
    {
        "type": "function",
        "name": "depositTo",
        "inputs": [
            {
                "name": "account",
                "type": "address",
                "internalType": "address"
            }
        ],
        "outputs": [],
        "stateMutability": "payable"
    },
    {
        "type": "function",
        "name": "deposits",
        "inputs": [
            {
                "name": "",
                "type": "address",
                "internalType": "address"
            }
        ],
        "outputs": [
            {
                "name": "",
                "type": "uint256",
                "internalType": "uint256"
            }
        ],
        "stateMutability": "view"
    },
    {
        "type": "function",
        "name": "getNonce",
        "inputs": [
            {
                "name": "sender",
                "type": "address",
                "internalType": "address"
            },
            {
                "name": "key",
                "type": "uint192",
                "internalType": "uint192"
            }
        ],
        "outputs": [
            {
                "name": "",
                "type": "uint256",
                "internalType": "uint256"
            }
        ],
        "stateMutability": "view"
    },
    {
        "type": "function",
        "name": "getUserOpHash",
        "inputs": [
            {
                "name": "op",
                "type": "tuple",
                "internalType": "struct PackedUserOperation",
                "components": [
                    {
                        "name": "sender",
                        "type": "address",
                        "internalType": "address"
                    },
                    {
                        "name": "nonce",
                        "type": "uint256",
                        "internalType": "uint256"
                    },
                    {
                        "name": "initCode",
                        "type": "bytes",
                        "internalType": "bytes"
                    },
                    {
                        "name": "callData",
                        "type": "bytes",
                        "internalType": "bytes"
                    },
                    {
                        "name": "accountGasLimits",
                        "type": "bytes32",
                        "internalType": "bytes32"
                    },
                    {
                        "name": "preVerificationGas",
                        "type": "uint256",
                        "internalType": "uint256"
                    },
                    {
                        "name": "gasFees",
                        "type": "bytes32",
                        "internalType": "bytes32"
                    },
                    {
                        "name": "paymasterAndData",
                        "type": "bytes",
                        "internalType": "bytes"
                    },
                    {
                        "name": "signature",
                        "type": "bytes",
                        "internalType": "bytes"
                    }
                ]
            }
        ],
        "outputs": [
            {
                "name": "",
                "type": "bytes32",
                "internalType": "bytes32"
            }
        ],
        "stateMutability": "view"
    },
    {
        "type": "function",
        "name": "handleOps",
        "inputs": [
            {
                "name": "ops",
                "type": "tuple[]",
                "internalType": "struct PackedUserOperation[]",
                "components": [
                    {
                        "name": "sender",
                        "type": "address",
                        "internalType": "address"
                    },
                    {
                        "name": "nonce",
                        "type": "uint256",
                        "internalType": "uint256"
                    },
                    {
                        "name": "initCode",
                        "type": "bytes",
                        "internalType": "bytes"
                    },
                    {
                        "name": "callData",
                        "type": "bytes",
                        "internalType": "bytes"
                    },
                    {
                        "name": "accountGasLimits",
                        "type": "bytes32",
                        "internalType": "bytes32"
                    },
                    {
                        "name": "preVerificationGas",
                        "type": "uint256",
                        "internalType": "uint256"
                    },
                    {
                        "name": "gasFees",
                        "type": "bytes32",
                        "internalType": "bytes32"
                    },
                    {
                        "name": "paymasterAndData",
                        "type": "bytes",
                        "internalType": "bytes"
                    },
                    {
                        "name": "signature",
                        "type": "bytes",
                        "internalType": "bytes"
                    }
                ]
            },
            {
                "name": "beneficiary",
                "type": "address",
                "internalType": "address payable"
            }
        ],
        "outputs": [],
        "stateMutability": "nonpayable"
    },
    {
        "type": "function",
        "name": "nonceSeq",
        "inputs": [
            {
                "name": "",
                "type": "address",
                "internalType": "address"
            },
            {
                "name": "",
                "type": "uint192",
                "internalType": "uint192"
            }
        ],
        "outputs": [
            {
                "name": "",
                "type": "uint64",
                "internalType": "uint64"
            }
        ],
        "stateMutability": "view"
    },
    {
        "type": "function",
        "name": "unlockStake",
        "inputs": [],
        "outputs": [],
        "stateMutability": "nonpayable"
    },
    {
        "type": "function",
        "name": "withdrawStake",
        "inputs": [
            {
                "name": "",
                "type": "address",
                "internalType": "address payable"
            }
        ],
        "outputs": [],
        "stateMutability": "nonpayable"
    },
    {
        "type": "function",
        "name": "withdrawTo",
        "inputs": [
            {
                "name": "to",
                "type": "address",
                "internalType": "address payable"
            },
            {
                "name": "amount",
                "type": "uint256",
                "internalType": "uint256"
            }
        ],
        "outputs": [],
        "stateMutability": "nonpayable"
    },
    {
        "type": "event",
        "name": "AccountDeployed",
        "inputs": [
            {
                "name": "userOpHash",
                "type": "bytes32",
                "indexed": true,
                "internalType": "bytes32"
            },
            {
                "name": "sender",
                "type": "address",
                "indexed": true,
                "internalType": "address"
            },
            {
                "name": "factory",
                "type": "address",
                "indexed": false,
                "internalType": "address"
            }
        ],
        "anonymous": false
    },
    {
        "type": "event",
        "name": "Deposited",
        "inputs": [
            {
                "name": "account",
                "type": "address",
                "indexed": true,
                "internalType": "address"
            },
            {
                "name": "totalDeposit",
                "type": "uint256",
                "indexed": false,
                "internalType": "uint256"
            }
        ],
        "anonymous": false
    },
    {
        "type": "event",
        "name": "UserOperationEvent",
        "inputs": [
            {
                "name": "userOpHash",
                "type": "bytes32",
                "indexed": true,
                "internalType": "bytes32"
            },
            {
                "name": "sender",
                "type": "address",
                "indexed": true,
                "internalType": "address"
            },
            {
                "name": "paymaster",
                "type": "address",
                "indexed": true,
                "internalType": "address"
            },
            {
                "name": "nonce",
                "type": "uint256",
                "indexed": false,
                "internalType": "uint256"
            },
            {
                "name": "success",
                "type": "bool",
                "indexed": false,
                "internalType": "bool"
            },
            {
                "name": "actualGasCost",
                "type": "uint256",
                "indexed": false,
                "internalType": "uint256"
            },
            {
                "name": "actualGasUsed",
                "type": "uint256",
                "indexed": false,
                "internalType": "uint256"
            }
        ],
        "anonymous": false
    },
    {
        "type": "event",
        "name": "UserOperationRevertReason",
        "inputs": [
            {
                "name": "userOpHash",
                "type": "bytes32",
                "indexed": true,
                "internalType": "bytes32"
            },
            {
                "name": "sender",
                "type": "address",
                "indexed": true,
                "internalType": "address"
            },
            {
                "name": "nonce",
                "type": "uint256",
                "indexed": false,
                "internalType": "uint256"
            },
            {
                "name": "revertReason",
                "type": "bytes",
                "indexed": false,
                "internalType": "bytes"
            }
        ],
        "anonymous": false
    },
    {
        "type": "event",
        "name": "Withdrawn",
        "inputs": [
            {
                "name": "account",
                "type": "address",
                "indexed": true,
                "internalType": "address"
            },
            {
                "name": "to",
                "type": "address",
                "indexed": false,
                "internalType": "address"
            },
            {
                "name": "amount",
                "type": "uint256",
                "indexed": false,
                "internalType": "uint256"
            }
        ],
        "anonymous": false
    },
    {
        "type": "error",
        "name": "FailedOp",
        "inputs": [
            {
                "name": "opIndex",
                "type": "uint256",
                "internalType": "uint256"
            },
            {
                "name": "reason",
                "type": "string",
                "internalType": "string"
            }
        ]
    }
]
0x60806040526004361015610069575b3615610018575f80fd5b60405f33815280602052818120610030348254610e29565b90553381528060205220546040519081527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c460203392a2005b5f3560e01c80630396cb6014610da8578063205c287814610c8e57806322cdde4c14610c4757806335567e1a14610bea57806370a08231146100e7578063765e827f146102045780639cc7c105146101bc578063b760faf91461014f578063bb9fe6bf1461013d578063c23a5cea146101225763fc7e286d0361000e575b3461011e57602036600319011261011e576001600160a01b03610108610ddd565b165f525f602052602060405f2054604051908152f35b5f80fd5b3461011e57602036600319011261011e5761013b610ddd565b005b3461011e575f36600319011261011e57005b602036600319011261011e576001600160a01b0361016b610ddd565b16805f525f60205260405f20610182348254610e29565b9055805f525f6020527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4602060405f2054604051908152a2005b3461011e576101ca36610df3565b9060018060a01b03165f52600160205260405f209060018060c01b03165f5260205260206001600160401b0360405f205416604051908152f35b3461011e57604036600319011261011e576001600160401b036004351161011e5736602360043501121561011e576001600160401b03600435600401351161011e573660246004356004013560051b60043501011161011e576024356001600160a01b038116810361011e575f905f5b6004356004013581106102e857508161028957005b5f918291829182916001600160a01b03165af16102a4610e9a565b50156102ac57005b60405162461bcd60e51b815260206004820152601460248201527322a81d103132b732b334b1b4b0b93c903c3332b960611b6044820152606490fd5b9160248360051b600435010135906101421960043536030182121561011e575a906103196024846004350101610f45565b92600435810160448101356001600160401b0316906001600160a01b039061034390602401610ec9565b165f52600160205260405f2060448360043501013560401c5f52602052806001600160401b0360405f20541603610ba9576001600160401b0360018201116106c7576001600160a01b0361039d6004358401602401610ec9565b165f52600160205260405f2060448360043501013560401c5f526020526001600160401b03600160405f209201166001600160401b031982541617905560146103f460648360043501016024846004350101610edd565b90501015610aa2575b61044661041f600435830160a401356001600160801b0381169060801c610e29565b600435830160e48101356001600160801b0316916104419160c4013590610e29565b611040565b926101048260043501016014610463826024866004350101610edd565b905010155f14610a9a5761047e906024846004350101610edd565b60141161011e573560601c945b5f6001600160a01b03871615610a55575b806020836001600160a01b036104b86004358901602401610ec9565b1660245f896104e2604051978896879586946306608bdf60e21b86526004350101600485016110a4565b03925af1801561077d575f90610a21575b61052c91506040519061050582610e43565b601482527320a0991a1039b4b3b730ba3ab9329032b93937b960611b60208301528b6111cf565b806109eb575b506060946001600160a01b038716610860575b506105c05f8061055b6024876004350101610ec9565b8161057160043589016084810190602401610edd565b9190826040519384928337810182815203926001600160801b0360a48b60043501013516f19261059f610e9a565b84156107f6575b506105bb60c486600435010135915a90610e36565b610e29565b6105db6001600160801b0360e4866004350101351682611040565b956001600160a01b0388166107f0576105fa6024866004350101610ec9565b60018060a01b0381165f525f6020528760405f2054106107a45760018060a01b03165f525f60205260405f20610631888254610e36565b90556001600160a01b0388166106db575b506106b6967f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f91608091906001600160a01b036106856004358901602401610ec9565b1695604460405198600435010135885215156020880152886040880152606087015260018060a01b031694a4610e29565b915f1981146106c757600101610274565b634e487b7160e01b5f52601160045260245ffd5b831561079c575f905b6001600160a01b0389163b1561011e57604051637c627b2160e01b815291600381101561078857826107295f93829360048401526080602484015260848301906111aa565b604482018b9052606482018690520381836001600160a01b038d165af1801561077d5715610642576001600160401b038111610769576040526080610642565b634e487b7160e01b5f52604160045260245ffd5b6040513d5f823e3d90fd5b634e487b7160e01b5f52602160045260245ffd5b6001906106e4565b60848b60405190631101335b60e11b8252600482015260406024820152601760448201527f41413231206469646e2774207061792070726566756e640000000000000000006064820152fd5b876105fa565b837f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a2016108576001600160a01b036108336004358b01602401610ec9565b169360405191829160448c60043501013583526040602084015260408301906111aa565b0390a38a6105a6565b979695945060018060a01b0385165f525f6020528760405f20541061099f575f6108aa95969798604051809781926314add44b60e21b8352856024896004350101600485016110a4565b0381836001600160a01b038b165af194851561077d575f905f96610912575b5061090c9095604051906108dc82610e43565b601882527f41413334207061796d6173746572207369676e6174757265000000000000000060208301528a6111cf565b88610545565b9550503d94855f823e6109258682610e5e565b604081878101031261011e578051906001600160401b03821161011e57868101601f83830101121561011e57818101519061095f82610e7f565b9761096d604051998a610e5e565b828952810160208385840101011161011e5761099660209261090c9484808c0191850101611189565b015195906108c9565b60848760405190631101335b60e11b8252600482015260406024820152601e60448201527f41413331207061796d6173746572206465706f73697420746f6f206c6f7700006064820152fd5b6001600160a01b03610a036004358601602401610ec9565b165f525f602052610a1960405f20918254610e29565b905588610532565b506020813d602011610a4d575b81610a3b60209383610e5e565b8101031261011e5761052c90516104f3565b3d9150610a2e565b506001600160a01b03610a6e6004358501602401610ec9565b165f525f60205260405f2054858110155f14610a8b57505f61049c565b610a959086610e36565b61049c565b505f9461048b565b610ab760043582016064810190602401610edd565b8060141161011e575f91829182604051918260131991828101601487018337810183838201520301923560601c5af1610aee610e9a565b5015610b6457610b046024826004350101610ec9565b610b1960043583016064810190602401610edd565b60149291921161011e57604051913560601c82526001600160a01b03169085907f12033b5552f54f45d46af0b9ad66a5b30cb58df003c5d32ac2e6aaf3779441a090602090a36103fd565b60405162461bcd60e51b815260206004820152601b60248201527f45503a206163636f756e74206372656174696f6e206661696c656400000000006044820152606490fd5b60848760405190631101335b60e11b825260048201526040602482015260126044820152714141323520696e76616c6964206e6f6e636560701b6064820152fd5b3461011e576020610bfa36610df3565b6001600160a01b039091165f9081526001835260408082206001600160c01b03841683528452908190205481519290911b67ffffffffffffffff19166001600160401b0391909116178152f35b3461011e5760031960203682011261011e57600435906001600160401b03821161011e5761012090823603011261011e57610c86602091600401610f45565b604051908152f35b3461011e57604036600319011261011e57610ca7610ddd565b60243590335f525f6020528160405f205410610d6357335f525f60205260405f20610cd3838254610e36565b90556001600160a01b0316905f80808084865af1610cef610e9a565b5015610d285760405191825260208201527fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb60403392a2005b60405162461bcd60e51b815260206004820152601360248201527211540e881dda5d1a191c985dc819985a5b1959606a1b6044820152606490fd5b60405162461bcd60e51b815260206004820152601860248201527f45503a20696e73756666696369656e74206465706f73697400000000000000006044820152606490fd5b602036600319011261011e5760043563ffffffff81160361011e57335f525f60205260405f20610dd9348254610e29565b9055005b600435906001600160a01b038216820361011e57565b604090600319011261011e576004356001600160a01b038116810361011e57906024356001600160c01b038116810361011e5790565b919082018092116106c757565b919082039182116106c757565b604081019081106001600160401b0382111761076957604052565b90601f801991011681019081106001600160401b0382111761076957604052565b6001600160401b03811161076957601f01601f191660200190565b3d15610ec4573d90610eab82610e7f565b91610eb96040519384610e5e565b82523d5f602084013e565b606090565b356001600160a01b038116810361011e5790565b903590601e198136030182121561011e57018035906001600160401b03821161011e5760200191813603831361011e57565b929192610f1b82610e7f565b91610f296040519384610e5e565b82948184528183011161011e578281602093845f960137010152565b610f4e81610ec9565b610f65610f5e6040840184610edd565b3691610f0f565b602081519101209160c0610f7f610f5e6060840184610edd565b6020815191012091610f97610f5e60e0830183610edd565b602081519101209260405195602087019560018060a01b031686526020830135604088015260608701526080860152608081013560a086015260a081013582860152013560e0840152610100908184015282526101208201906001600160401b039083831082841117610769576040839052835190206101408401908152306101608501524661018085015260608352926101a001908111828210176107695760405251902090565b818102929181159184041417156106c757565b9035601e198236030181121561011e5701602081359101916001600160401b03821161011e57813603831361011e57565b908060209392818452848401375f828201840152601f01601f1916010190565b606081529193929181356001600160a01b038116929083900361011e5761110061117f9160409460608501526020810135608085015261116f6110e986830183611053565b9390610120948560a0890152610180880191611084565b916111666111286111146060840184611053565b605f198a8803810160c08c01529691611084565b608083013560e08901526101009560a0840135878a015260c08401359089015261115560e0840184611053565b90868a8403016101408b0152611084565b93810190611053565b9185840301610160860152611084565b9460208201520152565b5f5b83811061119a5750505f910152565b818101518382015260200161118b565b906020916111c381518092818552858086019101611189565b601f01601f1916010190565b9160018083161461129c575065ffffffffffff8160a01c169060d01c8015159081611292575b50611251578015159081611247575b5061120c5750565b60849060405190631101335b60e11b8252600482015260406024820152600c60448201526b10504c8c88195e1c1a5c995960a21b6064820152fd5b905042115f611204565b60848260405190631101335b60e11b8252600482015260406024820152601260448201527110504c8c881b9bdd081d985b1a59081e595d60721b6064820152fd5b905042105f6111f5565b826112c6604051928392631101335b60e11b845260048401526040602484015260448301906111aa565b0390fdfea26469706673582212202c25503101187e920e6fd460d8d27c703e0bb7809df1898df11bd8cafe96014e64736f6c63430008140033
HashMéthodeBlocÂgeDeÀMontantFrais
0x714209ff13… Opération AA 41 124 il y a 1 min 0x39a783…b19125 ENTR. 0xa8e766…4b913e 14 WCFA 0.00195415 WTG
0xb92c4db3a8… Opération AA 41 100 il y a 2 min 0x39a783…b19125 ENTR. 0xa8e766…4b913e 22 WCFA 0.00165253 WTG
0x013df71de4… Opération AA 41 068 il y a 4 min 0x39a783…b19125 ENTR. 0xa8e766…4b913e 4 WCFA 0.001261 WTG
0x25ea77f9c9… Opération AA 41 042 il y a 5 min 0x39a783…b19125 ENTR. 0xa8e766…4b913e 29 WCFA 0.00199942 WTG
0xbd67f434e3… Opération AA 41 014 il y a 6 min 0x39a783…b19125 ENTR. 0xa8e766…4b913e 48 WCFA 0.00215098 WTG
0x02ac5c6473… Opération AA 40 985 il y a 8 min 0x39a783…b19125 ENTR. 0xa8e766…4b913e 11 WCFA 0.00230331 WTG
0x629cde6995… Opération AA 40 955 il y a 9 min 0x39a783…b19125 ENTR. 0xa8e766…4b913e 20 WCFA 0.00172317 WTG
0xd93b832050… Opération AA 40 920 il y a 11 min 0x39a783…b19125 ENTR. 0xa8e766…4b913e 14 WCFA 0.00199552 WTG
0xad30dfb261… Opération AA 40 895 il y a 12 min 0x39a783…b19125 ENTR. 0xa8e766…4b913e 44 WCFA 0.00412483 WTG
0x5dae4ae403… Opération AA 40 873 il y a 14 min 0x39a783…b19125 ENTR. 0xa8e766…4b913e 20 WCFA 0.00099502 WTG
0x55b59178a3… Opération AA 40 849 il y a 15 min 0x39a783…b19125 ENTR. 0xa8e766…4b913e 38 WCFA 0.00111616 WTG
0xb18859b61c… Opération AA 40 826 il y a 16 min 0x39a783…b19125 ENTR. 0xa8e766…4b913e 5 WCFA 0.00098131 WTG
0x93855fea9f… Opération AA 40 802 il y a 17 min 0x39a783…b19125 ENTR. 0xa8e766…4b913e 30 WCFA 0.00195557 WTG
0xa26ee557ea… Opération AA 40 773 il y a 19 min 0x39a783…b19125 ENTR. 0xa8e766…4b913e 32 WCFA 0.00159072 WTG
0x0f10f2be09… Opération AA 40 745 il y a 20 min 0x39a783…b19125 ENTR. 0xa8e766…4b913e 37 WCFA 0.00113419 WTG
0x07cd196487… Opération AA 40 718 il y a 21 min 0x39a783…b19125 ENTR. 0xa8e766…4b913e 33 WCFA 0.00159853 WTG
0xd768d490f6… Opération AA 40 687 il y a 23 min 0x39a783…b19125 ENTR. 0xa8e766…4b913e 29 WCFA 0.00186822 WTG
0x5ccd3f9341… Opération AA 40 654 il y a 24 min 0x39a783…b19125 ENTR. 0xa8e766…4b913e 5 WCFA 0.00236818 WTG
0x53957bc557… Opération AA 40 625 il y a 26 min 0x39a783…b19125 ENTR. 0xa8e766…4b913e 19 WCFA 0.00093847 WTG
0xd26b403fef… Opération AA 40 594 il y a 27 min 0x39a783…b19125 ENTR. 0xa8e766…4b913e 15 WCFA 0.00242598 WTG
0xc73fd70201… Opération AA 40 562 il y a 29 min 0x39a783…b19125 ENTR. 0xa8e766…4b913e 31 WCFA 0.00101772 WTG
0x02feef0b2b… Opération AA 40 529 il y a 31 min 0x39a783…b19125 ENTR. 0xa8e766…4b913e 35 WCFA 0.00146174 WTG
0xfe509201d1… Opération AA 40 504 il y a 32 min 0x39a783…b19125 ENTR. 0xa8e766…4b913e 42 WCFA 0.0018933 WTG
0xf352083c45… Opération AA 40 470 il y a 34 min 0x39a783…b19125 ENTR. 0xa8e766…4b913e 1 WCFA 0.00112159 WTG
0xaf1129aa5c… Opération AA 40 442 il y a 35 min 0x39a783…b19125 ENTR. 0xa8e766…4b913e 40 WCFA 0.00143932 WTG
Aucun transfert de token.
Tx parenteTypeDeÀValeur
0x714209ff…c05b49 appel 0xa8e766…4b913e 0x39a783…b19125 0.025602 WTG
≈ 0,61 FCFA
0xb92c4db3…452fec appel 0xa8e766…4b913e 0x39a783…b19125 0.025666 WTG
≈ 0,62 FCFA
0x013df71d…4d7dcc appel 0xa8e766…4b913e 0x39a783…b19125 0.013196 WTG
≈ 0,32 FCFA
0x25ea77f9…c34a80 appel 0xa8e766…4b913e 0x39a783…b19125 0.028124 WTG
≈ 0,68 FCFA
0xbd67f434…a846e2 appel 0xa8e766…4b913e 0x39a783…b19125 0.013163 WTG
≈ 0,32 FCFA
0x02ac5c64…995d6b appel 0xa8e766…4b913e 0x39a783…b19125 0.031002 WTG
≈ 0,74 FCFA
0x629cde69…fcb789 appel 0xa8e766…4b913e 0x39a783…b19125 0.018051 WTG
≈ 0,43 FCFA
0xd93b8320…905490 appel 0xa8e766…4b913e 0x39a783…b19125 0.030516 WTG
≈ 0,73 FCFA
0xad30dfb2…790005 appel 0xa8e766…4b913e 0x39a783…b19125 0.026153 WTG
≈ 0,63 FCFA
0x5dae4ae4…0104d8 appel 0xa8e766…4b913e 0x39a783…b19125 0.013196 WTG
≈ 0,32 FCFA
0x55b59178…2b6837 appel 0xa8e766…4b913e 0x39a783…b19125 0.013163 WTG
≈ 0,32 FCFA
0xb18859b6…b1b791 appel 0xa8e766…4b913e 0x39a783…b19125 0.013196 WTG
≈ 0,32 FCFA
0x93855fea…ced742 appel 0xa8e766…4b913e 0x39a783…b19125 0.026153 WTG
≈ 0,63 FCFA
0xa26ee557…137d08 appel 0xa8e766…4b913e 0x39a783…b19125 0.025666 WTG
≈ 0,62 FCFA
0x0f10f2be…6cb0b4 appel 0xa8e766…4b913e 0x39a783…b19125 0.013196 WTG
≈ 0,32 FCFA
0x07cd1964…8a4076 appel 0xa8e766…4b913e 0x39a783…b19125 0.013196 WTG
≈ 0,32 FCFA
0xd768d490…4ff249 appel 0xa8e766…4b913e 0x39a783…b19125 0.028124 WTG
≈ 0,68 FCFA
0x5ccd3f93…3a2cba appel 0xa8e766…4b913e 0x39a783…b19125 0.028124 WTG
≈ 0,68 FCFA
0x53957bc5…45bd95 appel 0xa8e766…4b913e 0x39a783…b19125 0.013196 WTG
≈ 0,32 FCFA
0xd26b403f…adc334 appel 0xa8e766…4b913e 0x39a783…b19125 0.026155 WTG
≈ 0,63 FCFA
0xc73fd702…0a2cd4 appel 0xa8e766…4b913e 0x39a783…b19125 0.013196 WTG
≈ 0,32 FCFA
0x02feef0b…9e4f73 appel 0xa8e766…4b913e 0x39a783…b19125 0.015657 WTG
≈ 0,38 FCFA
0xfe509201…1cf019 appel 0xa8e766…4b913e 0x39a783…b19125 0.026153 WTG
≈ 0,63 FCFA
0xf352083c…6774ab appel 0xa8e766…4b913e 0x39a783…b19125 0.013163 WTG
≈ 0,32 FCFA
0xaf1129aa…f99dfa appel 0xa8e766…4b913e 0x39a783…b19125 0.018051 WTG
≈ 0,43 FCFA