Contract 0xc82bbe41f2cf04e3a8efa18f7032bdd7f6d98a81 6

 

Contract Overview

Balance:
0 MATIC

MATIC Value:
$0.00

Token:
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x14b6afeff17000f905411af718f61d9252697e0023a40c0071c56eeb27799bff0x47153f82285447842022-05-20 10:22:4636 mins ago0xdb9855706a2a3f1634231ec44771560c35350ada IN  0xc82bbe41f2cf04e3a8efa18f7032bdd7f6d98a810 MATIC0.01104780175950.5077
0x0b0db5a0de42090a05c4d51f9a65769fb8f71d2131290ea0b4dcdc5864674c170x47153f82285422732022-05-20 8:47:172 hrs 11 mins ago0x51ff97a716b61b253cbb6ff2cdcc34d36f7b5aae IN  0xc82bbe41f2cf04e3a8efa18f7032bdd7f6d98a810 MATIC0.01375875756749.426683361
0xa5080d998936138c313fa4d2a3905733463af0340ed090ff9e2932019f3113bd0x47153f82285348052022-05-20 4:21:056 hrs 37 mins ago0x51ff97a716b61b253cbb6ff2cdcc34d36f7b5aae IN  0xc82bbe41f2cf04e3a8efa18f7032bdd7f6d98a810 MATIC0.01215959676943.681890343
0x90ad4bc1ef703af45579704e92d8ac06d8ed23bef5f9680dde138ec745145a9f0x47153f82285343182022-05-20 4:04:186 hrs 54 mins ago0x51ff97a716b61b253cbb6ff2cdcc34d36f7b5aae IN  0xc82bbe41f2cf04e3a8efa18f7032bdd7f6d98a810 MATIC0.01116670900940.117942747
0xd7825cfa77f828d932b3e90b0f996506518050034a76ebf0b69493e87d61dfb00x47153f82285342162022-05-20 4:00:506 hrs 58 mins ago0x51ff97a716b61b253cbb6ff2cdcc34d36f7b5aae IN  0xc82bbe41f2cf04e3a8efa18f7032bdd7f6d98a810 MATIC0.01584375676456.928244893
0x76f6a67272849fb8a224bc44fb0680a3f35eb600f9ace5039019911bf951e2840x47153f82285339552022-05-20 3:51:527 hrs 7 mins ago0x51ff97a716b61b253cbb6ff2cdcc34d36f7b5aae IN  0xc82bbe41f2cf04e3a8efa18f7032bdd7f6d98a810 MATIC0.01267100021245.519045764
0x3b191b011d2f4ab37b02329f81b6d0ca3b0e5da69d5a87840f7d602d5018930d0x47153f82285339082022-05-20 3:50:147 hrs 8 mins ago0x51ff97a716b61b253cbb6ff2cdcc34d36f7b5aae IN  0xc82bbe41f2cf04e3a8efa18f7032bdd7f6d98a810 MATIC0.012252705444.019534612
0x052c189b41f611175b2c9a56d29532f8adc912766437f249e0dd7137cc6a75b40x47153f82285338922022-05-20 3:49:427 hrs 9 mins ago0x51ff97a716b61b253cbb6ff2cdcc34d36f7b5aae IN  0xc82bbe41f2cf04e3a8efa18f7032bdd7f6d98a810 MATIC0.01205707772843.313603008
0xa952fafcfbc9845796c0403b7a536c5254b5fa60e012dd3fe5504f43b8dcba450x47153f82285338322022-05-20 3:47:387 hrs 11 mins ago0x51ff97a716b61b253cbb6ff2cdcc34d36f7b5aae IN  0xc82bbe41f2cf04e3a8efa18f7032bdd7f6d98a810 MATIC0.01074404403739.800568398
0x4c25333354bc11d05b0674b1ec9b0de52951ed5d07cf3dbc36bb9c2eb58b1e2c0x47153f82285170112022-05-19 17:53:5117 hrs 5 mins ago0xb3e0438981c0daad59fa2c4913187b15656f1d48 IN  0xc82bbe41f2cf04e3a8efa18f7032bdd7f6d98a810 MATIC0.01087097913558.989397711
0x6ff569d2ec2fd8d5c24c7660449d142ef0d0451d953c87e963240489e13453030x47153f82284933402022-05-19 3:37:461 day 7 hrs ago0x279e1bf98892a608a3156ac43c46f724c7a93175 IN  0xc82bbe41f2cf04e3a8efa18f7032bdd7f6d98a810 MATIC0.00990424579445.27365469
0xa9dc1f8b5e0911ef172ebb098edc41273d26cd5ee72b9505c4344b761a0643cc0x47153f82284898392022-05-19 1:33:011 day 9 hrs ago0x279e1bf98892a608a3156ac43c46f724c7a93175 IN  0xc82bbe41f2cf04e3a8efa18f7032bdd7f6d98a810 MATIC0.0085117348245.844337794
0xe4c7955b360099eaf185a1781801566299fcfaa6e13c0e19f646d3b7443a0aae0x47153f82284896322022-05-19 1:25:551 day 9 hrs ago0x279e1bf98892a608a3156ac43c46f724c7a93175 IN  0xc82bbe41f2cf04e3a8efa18f7032bdd7f6d98a810 MATIC0.00300350088148.608989976
0xd49f94ef03a647d85e6eda21c2c2ec372a69be02304b9e5df33ab9f7aedfa29c0x47153f82284896192022-05-19 1:25:291 day 9 hrs ago0x279e1bf98892a608a3156ac43c46f724c7a93175 IN  0xc82bbe41f2cf04e3a8efa18f7032bdd7f6d98a810 MATIC0.04499280786255.623656768
0xca3e630922c96106bdb0aab2670ed3fadb8db85ff36ad29b3a947ab3f8111b610x47153f82284892132022-05-19 1:11:291 day 9 hrs ago0x279e1bf98892a608a3156ac43c46f724c7a93175 IN  0xc82bbe41f2cf04e3a8efa18f7032bdd7f6d98a810 MATIC0.04535538854251.910964722
0x5265f802c8e28d10894b81bd8b7e6c0e6d29b085c4d8e5c606159c3a6fc9c22a0x47153f82284888712022-05-19 0:59:421 day 9 hrs ago0x279e1bf98892a608a3156ac43c46f724c7a93175 IN  0xc82bbe41f2cf04e3a8efa18f7032bdd7f6d98a810 MATIC0.0461629881351.820373799
0x6ea150816870e12e4fcd45a7982937293c72f28e42a4141faa3976a06b5acf8d0x47153f82284807682022-05-18 20:12:001 day 14 hrs ago0x877ff73d892f45b4c4d12cb401b37d3111c08af9 IN  0xc82bbe41f2cf04e3a8efa18f7032bdd7f6d98a810 MATIC0.01094558716947.227907927
0x39782c1c0056197123790a77e31ed6d763d1ec31ee77d6cf3d57acdfd160f92b0x47153f82284807072022-05-18 20:09:541 day 14 hrs ago0x877ff73d892f45b4c4d12cb401b37d3111c08af9 IN  0xc82bbe41f2cf04e3a8efa18f7032bdd7f6d98a810 MATIC0.00403912964648.430811112
0x9c47400e3d25fd4fa27a8d4a378efff987ed1763da87f52437f7771a3490569f0x47153f82284683702022-05-18 12:28:341 day 22 hrs ago0x82736fc96252c0cc359bc3fd0fe9e06d6eb20708 IN  0xc82bbe41f2cf04e3a8efa18f7032bdd7f6d98a810 MATIC0.00677785135336.776387031
0x432cda6fcbf10369a88c559266ee3b0473f5da225ee8d81d22833dc33dd49a3b0x47153f82284499832022-05-18 1:13:302 days 9 hrs ago0x002a6e8596c291323cecf2f12267a2c3d430aa84 IN  0xc82bbe41f2cf04e3a8efa18f7032bdd7f6d98a810 MATIC0.01080564710358.559892821
0x3ee2cdd4e5be1b8abd9d172317e5e30f08fda098a4d1002602c3576a4d5241230x47153f82284440482022-05-17 21:41:002 days 13 hrs ago0x82736fc96252c0cc359bc3fd0fe9e06d6eb20708 IN  0xc82bbe41f2cf04e3a8efa18f7032bdd7f6d98a810 MATIC0.00841195044445.650878589
0xd2743c9c3a8f8f6ac260860e47bbe8ea90232e40d005eea0f747d21faf7489e00x47153f82284371252022-05-17 17:29:302 days 17 hrs ago0xb3e0438981c0daad59fa2c4913187b15656f1d48 IN  0xc82bbe41f2cf04e3a8efa18f7032bdd7f6d98a810 MATIC0.00636773226934.557095246
0xac3a5f25041e9311dcb8fcdb397dc76d0b550eb682b6eeeca422494a436b5a010x47153f82284363572022-05-17 16:58:502 days 18 hrs ago0x82736fc96252c0cc359bc3fd0fe9e06d6eb20708 IN  0xc82bbe41f2cf04e3a8efa18f7032bdd7f6d98a810 MATIC0.00688644214737.365596922
0x1d05fe095083cc4171eb0e50b35ac22a434d25b48ef2bb3f6b94678392b833450x47153f82284328432022-05-17 14:49:212 days 20 hrs ago0x82736fc96252c0cc359bc3fd0fe9e06d6eb20708 IN  0xc82bbe41f2cf04e3a8efa18f7032bdd7f6d98a810 MATIC0.01223544547766.396309277
0x8dd600e3cdcad1bda6bc0e960c3d25551573fcea00aa2d6dd82b0bbef959565a0x47153f82284308682022-05-17 13:35:022 days 21 hrs ago0x82736fc96252c0cc359bc3fd0fe9e06d6eb20708 IN  0xc82bbe41f2cf04e3a8efa18f7032bdd7f6d98a810 MATIC0.025736310304139.659485372
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Forwarder

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 700 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 3 : Forwarder.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol";
import "@openzeppelin/contracts/utils/cryptography/draft-EIP712.sol";

/*
 * @dev Minimal forwarder for GSNv2
 */
contract Forwarder is EIP712 {
    using ECDSA for bytes32;

    struct ForwardRequest {
        address from;
        address to;
        uint256 value;
        uint256 gas;
        uint256 nonce;
        bytes data;
    }

    bytes32 private constant TYPEHASH =
        keccak256("ForwardRequest(address from,address to,uint256 value,uint256 gas,uint256 nonce,bytes data)");

    mapping(address => uint256) private _nonces;

    constructor() EIP712("GSNv2 Forwarder", "0.0.1") {}

    function getNonce(address from) public view returns (uint256) {
        return _nonces[from];
    }

    function verify(ForwardRequest calldata req, bytes calldata signature) public view returns (bool) {
        address signer = _hashTypedDataV4(
            keccak256(abi.encode(TYPEHASH, req.from, req.to, req.value, req.gas, req.nonce, keccak256(req.data)))
        ).recover(signature);

        return _nonces[req.from] == req.nonce && signer == req.from;
    }

    function execute(ForwardRequest calldata req, bytes calldata signature)
        public
        payable
        returns (bool, bytes memory)
    {
        require(verify(req, signature), "MinimalForwarder: signature does not match request");
        _nonces[req.from] = req.nonce + 1;

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory result) = req.to.call{ gas: req.gas, value: req.value }(
            abi.encodePacked(req.data, req.from)
        );

        if (!success) {
            // Next 5 lines from https://ethereum.stackexchange.com/a/83577
            if (result.length < 68) revert("Transaction reverted silently");
            assembly {
                result := add(result, 0x04)
            }
            revert(abi.decode(result, (string)));
        }
        // Check gas: https://ronan.eth.link/blog/ethereum-gas-dangers/
        assert(gasleft() > req.gas / 63);
        return (success, result);
    }
}

File 2 of 3 : ECDSA.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
 *
 * These functions can be used to verify that a message was signed by the holder
 * of the private keys of a given address.
 */
library ECDSA {
    enum RecoverError {
        NoError,
        InvalidSignature,
        InvalidSignatureLength,
        InvalidSignatureS,
        InvalidSignatureV
    }

    function _throwError(RecoverError error) private pure {
        if (error == RecoverError.NoError) {
            return; // no error: do nothing
        } else if (error == RecoverError.InvalidSignature) {
            revert("ECDSA: invalid signature");
        } else if (error == RecoverError.InvalidSignatureLength) {
            revert("ECDSA: invalid signature length");
        } else if (error == RecoverError.InvalidSignatureS) {
            revert("ECDSA: invalid signature 's' value");
        } else if (error == RecoverError.InvalidSignatureV) {
            revert("ECDSA: invalid signature 'v' value");
        }
    }

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature` or error string. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {toEthSignedMessageHash} on it.
     *
     * Documentation for signature generation:
     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]
     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]
     *
     * _Available since v4.3._
     */
    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {
        // Check the signature length
        // - case 65: r,s,v signature (standard)
        // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._
        if (signature.length == 65) {
            bytes32 r;
            bytes32 s;
            uint8 v;
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            assembly {
                r := mload(add(signature, 0x20))
                s := mload(add(signature, 0x40))
                v := byte(0, mload(add(signature, 0x60)))
            }
            return tryRecover(hash, v, r, s);
        } else if (signature.length == 64) {
            bytes32 r;
            bytes32 vs;
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            assembly {
                r := mload(add(signature, 0x20))
                vs := mload(add(signature, 0x40))
            }
            return tryRecover(hash, r, vs);
        } else {
            return (address(0), RecoverError.InvalidSignatureLength);
        }
    }

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature`. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {toEthSignedMessageHash} on it.
     */
    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, signature);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.
     *
     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]
     *
     * _Available since v4.3._
     */
    function tryRecover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address, RecoverError) {
        bytes32 s;
        uint8 v;
        assembly {
            s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)
            v := add(shr(255, vs), 27)
        }
        return tryRecover(hash, v, r, s);
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.
     *
     * _Available since v4.2._
     */
    function recover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, r, vs);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,
     * `r` and `s` signature fields separately.
     *
     * _Available since v4.3._
     */
    function tryRecover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address, RecoverError) {
        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
        // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most
        // signatures from current libraries generate a unique signature with an s-value in the lower half order.
        //
        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
        // these malleable signatures as well.
        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
            return (address(0), RecoverError.InvalidSignatureS);
        }
        if (v != 27 && v != 28) {
            return (address(0), RecoverError.InvalidSignatureV);
        }

        // If the signature is valid (and not malleable), return the signer address
        address signer = ecrecover(hash, v, r, s);
        if (signer == address(0)) {
            return (address(0), RecoverError.InvalidSignature);
        }

        return (signer, RecoverError.NoError);
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `v`,
     * `r` and `s` signature fields separately.
     */
    function recover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Returns an Ethereum Signed Message, created from a `hash`. This
     * produces hash corresponding to the one signed with the
     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]
     * JSON-RPC method as part of EIP-191.
     *
     * See {recover}.
     */
    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {
        // 32 is the length in bytes of hash,
        // enforced by the type signature above
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
    }

    /**
     * @dev Returns an Ethereum Signed Typed Data, created from a
     * `domainSeparator` and a `structHash`. This produces hash corresponding
     * to the one signed with the
     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]
     * JSON-RPC method as part of EIP-712.
     *
     * See {recover}.
     */
    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
    }
}

File 3 of 3 : draft-EIP712.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./ECDSA.sol";

/**
 * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.
 *
 * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,
 * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding
 * they need in their contracts using a combination of `abi.encode` and `keccak256`.
 *
 * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding
 * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA
 * ({_hashTypedDataV4}).
 *
 * The implementation of the domain separator was designed to be as efficient as possible while still properly updating
 * the chain id to protect against replay attacks on an eventual fork of the chain.
 *
 * NOTE: This contract implements the version of the encoding known as "v4", as implemented by the JSON RPC method
 * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].
 *
 * _Available since v3.4._
 */
abstract contract EIP712 {
    /* solhint-disable var-name-mixedcase */
    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to
    // invalidate the cached domain separator if the chain id changes.
    bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;
    uint256 private immutable _CACHED_CHAIN_ID;

    bytes32 private immutable _HASHED_NAME;
    bytes32 private immutable _HASHED_VERSION;
    bytes32 private immutable _TYPE_HASH;

    /* solhint-enable var-name-mixedcase */

    /**
     * @dev Initializes the domain separator and parameter caches.
     *
     * The meaning of `name` and `version` is specified in
     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:
     *
     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.
     * - `version`: the current major version of the signing domain.
     *
     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart
     * contract upgrade].
     */
    constructor(string memory name, string memory version) {
        bytes32 hashedName = keccak256(bytes(name));
        bytes32 hashedVersion = keccak256(bytes(version));
        bytes32 typeHash = keccak256(
            "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"
        );
        _HASHED_NAME = hashedName;
        _HASHED_VERSION = hashedVersion;
        _CACHED_CHAIN_ID = block.chainid;
        _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);
        _TYPE_HASH = typeHash;
    }

    /**
     * @dev Returns the domain separator for the current chain.
     */
    function _domainSeparatorV4() internal view returns (bytes32) {
        if (block.chainid == _CACHED_CHAIN_ID) {
            return _CACHED_DOMAIN_SEPARATOR;
        } else {
            return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);
        }
    }

    function _buildDomainSeparator(
        bytes32 typeHash,
        bytes32 nameHash,
        bytes32 versionHash
    ) private view returns (bytes32) {
        return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));
    }

    /**
     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this
     * function returns the hash of the fully encoded EIP712 message for this domain.
     *
     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:
     *
     * ```solidity
     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(
     *     keccak256("Mail(address to,string contents)"),
     *     mailTo,
     *     keccak256(bytes(mailContents))
     * )));
     * address signer = ECDSA.recover(digest, signature);
     * ```
     */
    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {
        return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);
    }
}

Settings
{
  "metadata": {
    "bytecodeHash": "none"
  },
  "optimizer": {
    "enabled": true,
    "runs": 700
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"components":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"gas","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct Forwarder.ForwardRequest","name":"req","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"execute","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"}],"name":"getNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"gas","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct Forwarder.ForwardRequest","name":"req","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"verify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

61012060405234801561001157600080fd5b50604080518082018252600f81526e23a9a73b19102337b93bb0b93232b960891b602080830191825283518085019094526005845264302e302e3160d81b908401528151902060c08190527fae209a0b48f21c054280f2455d32cf309387644879d9acbd8ffc19916381188560e08190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6100b58184846100c6565b608052610100525061012c92505050565b600083838346306040516020016100e1959493929190610100565b6040516020818303038152906040528051906020012090509392505050565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b60805160a05160c05160e05161010051610d53610170600039600061047b015260006104bd0152600061049c01526000610429015260006104520152610d536000f3fe6080604052600436106100345760003560e01c80632d0335ab1461003957806347153f821461006f578063bf5d3bdb14610090575b600080fd5b34801561004557600080fd5b5061005961005436600461081c565b6100bd565b6040516100669190610c6e565b60405180910390f35b61008261007d3660046108ed565b6100d8565b604051610066929190610a2c565b34801561009c57600080fd5b506100b06100ab3660046108ed565b610297565b6040516100669190610a21565b6001600160a01b031660009081526020819052604090205490565b600060606100e7858585610297565b61010c5760405162461bcd60e51b815260040161010390610b1f565b60405180910390fd5b61011b60808601356001610cbc565b60008061012b602089018961081c565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600080866020016020810190610165919061081c565b6001600160a01b03166060880135604089013561018560a08b018b610c77565b61019260208d018d61081c565b6040516020016101a4939291906109c1565b60408051601f19818403018152908290526101be916109ea565b600060405180830381858888f193505050503d80600081146101fc576040519150601f19603f3d011682016040523d82523d6000602084013e610201565b606091505b5091509150816102605760448151101561022d5760405162461bcd60e51b815260040161010390610c37565b60048101905080806020019051810190610247919061084a565b60405162461bcd60e51b81526004016101039190610ad5565b61026f603f6060890135610ce0565b5a1161028b57634e487b7160e01b600052600160045260246000fd5b90969095509350505050565b60008061037d84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061037792507fdd8f4b70b0f4393e889bd39128a30628a78b61816a9eb8199759e7a349657e489150610307905060208a018a61081c565b61031760408b0160208c0161081c565b60408b013560608c013560808d013561033360a08f018f610c77565b6040516103419291906109b1565b60405190819003812061035c97969594939291602001610a4f565b604051602081830303815290604052805190602001206103e8565b90610401565b90506080850135600080610394602089018961081c565b6001600160a01b03166001600160a01b03168152602001908152602001600020541480156103df57506103ca602086018661081c565b6001600160a01b0316816001600160a01b0316145b95945050505050565b60006103fb6103f5610425565b836104e7565b92915050565b6000806000610410858561051a565b9150915061041d8161058a565b509392505050565b60007f000000000000000000000000000000000000000000000000000000000000000046141561047657507f00000000000000000000000000000000000000000000000000000000000000006104e4565b6104e17f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006106ba565b90505b90565b600082826040516020016104fc929190610a06565b60405160208183030381529060405280519060200120905092915050565b6000808251604114156105515760208301516040840151606085015160001a610545878285856106f4565b94509450505050610583565b82516040141561057b57602083015160408401516105708683836107d4565b935093505050610583565b506000905060025b9250929050565b60008160048111156105ac57634e487b7160e01b600052602160045260246000fd5b14156105b7576106b7565b60018160048111156105d957634e487b7160e01b600052602160045260246000fd5b14156105f75760405162461bcd60e51b815260040161010390610ae8565b600281600481111561061957634e487b7160e01b600052602160045260246000fd5b14156106375760405162461bcd60e51b815260040161010390610b7c565b600381600481111561065957634e487b7160e01b600052602160045260246000fd5b14156106775760405162461bcd60e51b815260040161010390610bb3565b600481600481111561069957634e487b7160e01b600052602160045260246000fd5b14156106b75760405162461bcd60e51b815260040161010390610bf5565b50565b600083838346306040516020016106d5959493929190610a8b565b6040516020818303038152906040528051906020012090509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561072b57506000905060036107cb565b8460ff16601b1415801561074357508460ff16601c14155b1561075457506000905060046107cb565b6000600187878787604051600081526020016040526040516107799493929190610ab7565b6020604051602081039080840390855afa15801561079b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166107c4576000600192509250506107cb565b9150600090505b94509492505050565b6000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831660ff84901c601b0161080e878288856106f4565b935093505050935093915050565b60006020828403121561082d578081fd5b81356001600160a01b0381168114610843578182fd5b9392505050565b60006020828403121561085b578081fd5b815167ffffffffffffffff80821115610872578283fd5b818401915084601f830112610885578283fd5b81518181111561089757610897610d30565b604051601f8201601f1916810160200183811182821017156108bb576108bb610d30565b6040528181528382016020018710156108d2578485fd5b6108e3826020830160208701610d00565b9695505050505050565b600080600060408486031215610901578182fd5b833567ffffffffffffffff80821115610918578384fd5b9085019060c0828803121561092b578384fd5b90935060208501359080821115610940578384fd5b818601915086601f830112610953578384fd5b813581811115610961578485fd5b876020828501011115610972578485fd5b6020830194508093505050509250925092565b6000815180845261099d816020860160208601610d00565b601f01601f19169290920160200192915050565b6000828483379101908152919050565b6000838583375060609190911b6bffffffffffffffffffffffff19169101908152601401919050565b600082516109fc818460208701610d00565b9190910192915050565b61190160f01b81526002810192909252602282015260420190565b901515815260200190565b6000831515825260406020830152610a476040830184610985565b949350505050565b9687526001600160a01b0395861660208801529390941660408601526060850191909152608084015260a083019190915260c082015260e00190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b93845260ff9290921660208401526040830152606082015260800190565b6000602082526108436020830184610985565b60208082526018908201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604082015260600190565b60208082526032908201527f4d696e696d616c466f727761726465723a207369676e617475726520646f657360408201527f206e6f74206d6174636820726571756573740000000000000000000000000000606082015260800190565b6020808252601f908201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604082015261756560f01b606082015260800190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604082015261756560f01b606082015260800190565b6020808252601d908201527f5472616e73616374696f6e2072657665727465642073696c656e746c79000000604082015260600190565b90815260200190565b6000808335601e19843603018112610c8d578283fd5b83018035915067ffffffffffffffff821115610ca7578283fd5b60200191503681900382131561058357600080fd5b60008219821115610cdb57634e487b7160e01b81526011600452602481fd5b500190565b600082610cfb57634e487b7160e01b81526012600452602481fd5b500490565b60005b83811015610d1b578181015183820152602001610d03565b83811115610d2a576000848401525b50505050565b634e487b7160e01b600052604160045260246000fdfea164736f6c6343000800000a

Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.