Sonic Blaze Testnet

Contract

0xe46F500af457a42FDd753a4AAee4fd7c993DE606

Overview

S Balance

Sonic Blaze LogoSonic Blaze LogoSonic Blaze Logo0 S

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

Parent Transaction Hash Block From To
View All Internal Transactions
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x6241cD9c...09CE7D576
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
PeerToPlayImplementationM1

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 2 : Implementation_m1.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import {Variables} from "../variables.sol";

/**
 * @title PeerToPlayAccount
 * @dev Smart contract for managing PeerToPlay smart account wallet.
 */

interface ConnectorsInterface {
    /**
     * @dev Checks if the provided connector names are valid and returns their corresponding addresses.
     * @param connectorNames Array of connector names to validate.
     * @return bool indicating if all names are valid, and an array of connector addresses.
     */
    function isConnectors(
        string[] calldata connectorNames
    ) external view returns (bool, address[] memory);
}

/**
 * @title Constants
 * @dev Contract that defines immutable constants such as the factory and connectors addresses.
 */
contract Constants is Variables {
    // Address of the PeerToPlayFactory contract.
    address internal immutable peerToPlayFactory;
    // Address of the connectors module.
    address public immutable connectorsM1;

    constructor(address _peerToPlayFactory, address _connectors) {
        connectorsM1 = _connectors;
        peerToPlayFactory = _peerToPlayFactory;
    }
}

/**
 * @title PeerToPlayImplementationM1
 * @dev Contract for executing delegated calls to connectors for PeerToPlay smart accounts.
 */
contract PeerToPlayImplementationM1 is Constants {
    constructor(
        address _peerToPlayFactory,
        address _connectors
    ) Constants(_peerToPlayFactory, _connectors) {}

    /**
     * @dev Decodes the event data from the response of a delegated call.
     * @param response The response bytes from the call.
     * @return _eventCode The event code as a string.
     * @return _eventParams The parameters of the event as bytes.
     */
    function decodeEvent(
        bytes memory response
    )
        internal
        pure
        returns (string memory _eventCode, bytes memory _eventParams)
    {
        if (response.length > 0) {
            (_eventCode, _eventParams) = abi.decode(response, (string, bytes));
        }
    }

    /**
     * @dev Emitted when a cast operation is executed from the PeerToPlay account.
     * @param origin The origin address initiating the cast.
     * @param sender The sender address performing the cast.
     * @param value The amount of Ether sent with the cast.
     * @param targetsNames The names of the target connectors.
     * @param targets The addresses of the target connectors.
     * @param eventNames The names of the events triggered.
     * @param eventParams The parameters of the triggered events.
     */
    event LogCast(
        address indexed origin,
        address indexed sender,
        uint256 value,
        string[] targetsNames,
        address[] targets,
        string[] eventNames,
        bytes[] eventParams
    );

    receive() external payable {}

    /**
     * @dev Delegate a call to a connector.
     * @param _target The address of the connector to delegate to.
     * @param _data The calldata for the function call.
     * @return response The response bytes from the delegated call.
     */
    function spell(
        address _target,
        bytes memory _data
    ) internal returns (bytes memory response) {
        require(_target != address(0), "target-invalid");
        assembly {
            let succeeded := delegatecall(
                gas(),
                _target,
                add(_data, 0x20),
                mload(_data),
                0,
                0
            )
            let size := returndatasize()

            response := mload(0x40)
            mstore(
                0x40,
                add(response, and(add(add(size, 0x20), 0x1f), not(0x1f)))
            )
            mstore(response, size)
            returndatacopy(add(response, 0x20), 0, size)

            switch iszero(succeeded)
            case 1 {
                // Revert if the delegatecall failed
                returndatacopy(0x00, 0x00, size)
                revert(0x00, size)
            }
        }
    }

    /**
     * @dev Executes multiple delegated calls to connectors.
     * @param _targetNames An array of target connector names.
     * @param _datas An array of calldata for each target connector.
     * @param _origin The address that initiated the cast.
     * @return Dummy return value to comply with PeerToPlayFactory buildWithCast function.
     */
    function cast(
        string[] calldata _targetNames,
        bytes[] calldata _datas,
        address _origin
    )
        external
        payable
        returns (
            bytes32 // Dummy return to fix PeerToPlayFactory buildWithCast function
        )
    {
        uint256 _length = _targetNames.length;
        require(
            _auth[msg.sender] || msg.sender == peerToPlayFactory,
            "1: permission-denied"
        );
        require(_length != 0, "1: length-invalid");
        require(_length == _datas.length, "1: array-length-invalid");

        string[] memory eventNames = new string[](_length);
        bytes[] memory eventParams = new bytes[](_length);

        (bool isOk, address[] memory _targets) = ConnectorsInterface(
            connectorsM1
        ).isConnectors(_targetNames);

        require(isOk, "1: not-connector");

        for (uint i = 0; i < _length; i++) {
            bytes memory response = spell(_targets[i], _datas[i]);
            (eventNames[i], eventParams[i]) = decodeEvent(response);
        }

        emit LogCast(
            _origin,
            msg.sender,
            msg.value,
            _targetNames,
            _targets,
            eventNames,
            eventParams
        );
    }
}

File 2 of 2 : variables.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/**
 * @title Variables
 * @dev This contract manages the authorization settings for the platform.
 */
contract Variables {
    
    /// @dev Mapping of address to boolean indicating authorization status.
    mapping (address => bool) internal _auth;
    
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "evmVersion": "paris",
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "metadata": {
    "useLiteralContent": true
  },
  "libraries": {}
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_peerToPlayFactory","type":"address"},{"internalType":"address","name":"_connectors","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"origin","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string[]","name":"targetsNames","type":"string[]"},{"indexed":false,"internalType":"address[]","name":"targets","type":"address[]"},{"indexed":false,"internalType":"string[]","name":"eventNames","type":"string[]"},{"indexed":false,"internalType":"bytes[]","name":"eventParams","type":"bytes[]"}],"name":"LogCast","type":"event"},{"inputs":[{"internalType":"string[]","name":"_targetNames","type":"string[]"},{"internalType":"bytes[]","name":"_datas","type":"bytes[]"},{"internalType":"address","name":"_origin","type":"address"}],"name":"cast","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"connectorsM1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

Deployed Bytecode

0x60806040526004361061002d5760003560e01c80636254a08f146100395780639304c9341461008a57600080fd5b3661003457005b600080fd5b34801561004557600080fd5b5061006d7f000000000000000000000000fb8467e90f15882aaeebed50f49b1a779a317ef181565b6040516001600160a01b0390911681526020015b60405180910390f35b61009d6100983660046105b2565b6100ab565b604051908152602001610081565b33600090815260208190526040812054859060ff16806100f35750336001600160a01b037f000000000000000000000000861d5c465d33ac29ee7f429f7dbaa8241fe57e8b16145b61013b5760405162461bcd60e51b81526020600482015260146024820152730c4e881c195c9b5a5cdcda5bdb8b59195b9a595960621b60448201526064015b60405180910390fd5b8060000361017f5760405162461bcd60e51b81526020600482015260116024820152700c4e881b195b99dd1a0b5a5b9d985b1a59607a1b6044820152606401610132565b8084146101ce5760405162461bcd60e51b815260206004820152601760248201527f313a2061727261792d6c656e6774682d696e76616c69640000000000000000006044820152606401610132565b60008167ffffffffffffffff8111156101e9576101e9610636565b60405190808252806020026020018201604052801561021c57816020015b60608152602001906001900390816102075790505b50905060008267ffffffffffffffff81111561023a5761023a610636565b60405190808252806020026020018201604052801561026d57816020015b60608152602001906001900390816102585790505b5090506000807f000000000000000000000000fb8467e90f15882aaeebed50f49b1a779a317ef16001600160a01b031663a0a32c0b8c8c6040518363ffffffff1660e01b81526004016102c1929190610707565b600060405180830381865afa1580156102de573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103069190810190610754565b915091508161034a5760405162461bcd60e51b815260206004820152601060248201526f189d103737ba16b1b7b73732b1ba37b960811b6044820152606401610132565b60005b8581101561042b5760006103d283838151811061036c5761036c610822565b60200260200101518c8c8581811061038657610386610822565b90506020028101906103989190610838565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061048f92505050565b90506103dd81610522565b8784815181106103ef576103ef610822565b6020026020010187858151811061040857610408610822565b6020026020010182905282905250505080806104239061087f565b91505061034d565b50336001600160a01b0316876001600160a01b03167ff6d9b29bbf2ae698de33670961ec53f895af65801d2cdaced431cc6129865347348e8e868a8a6040516104799695949392919061092a565b60405180910390a3505050505095945050505050565b60606001600160a01b0383166104d85760405162461bcd60e51b815260206004820152600e60248201526d1d185c99d95d0b5a5b9d985b1a5960921b6044820152606401610132565b600080835160208501865af43d6040519250601f19601f6020830101168301604052808352806000602085013e81156001810361051957816000803e816000fd5b50505092915050565b60608060008351111561054957828060200190518101906105439190610a0e565b90925090505b915091565b60008083601f84011261056057600080fd5b50813567ffffffffffffffff81111561057857600080fd5b6020830191508360208260051b850101111561059357600080fd5b9250929050565b6001600160a01b03811681146105af57600080fd5b50565b6000806000806000606086880312156105ca57600080fd5b853567ffffffffffffffff808211156105e257600080fd5b6105ee89838a0161054e565b9097509550602088013591508082111561060757600080fd5b506106148882890161054e565b90945092505060408601356106288161059a565b809150509295509295909350565b634e487b7160e01b600052604160045260246000fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b81835260006020808501808196508560051b810191508460005b878110156106fa5782840389528135601e198836030181126106b057600080fd5b8701858101903567ffffffffffffffff8111156106cc57600080fd5b8036038213156106db57600080fd5b6106e686828461064c565b9a87019a955050509084019060010161068f565b5091979650505050505050565b60208152600061071b602083018486610675565b949350505050565b604051601f8201601f1916810167ffffffffffffffff8111828210171561074c5761074c610636565b604052919050565b6000806040838503121561076757600080fd5b8251801515811461077757600080fd5b8092505060208084015167ffffffffffffffff8082111561079757600080fd5b818601915086601f8301126107ab57600080fd5b8151818111156107bd576107bd610636565b8060051b91506107ce848301610723565b81815291830184019184810190898411156107e857600080fd5b938501935b8385101561081257845192506108028361059a565b82825293850193908501906107ed565b8096505050505050509250929050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261084f57600080fd5b83018035915067ffffffffffffffff82111561086a57600080fd5b60200191503681900382131561059357600080fd5b60006001820161089f57634e487b7160e01b600052601160045260246000fd5b5060010190565b60005b838110156108c15781810151838201526020016108a9565b50506000910152565b600081518084526020808501808196508360051b8101915082860160005b858110156106fa5782840389528151805180865261090b818888018985016108a6565b99860199601f01601f19169490940185019350908401906001016108e8565b8681526000602060a08184015261094560a08401888a610675565b838103604085015286518082528288019183019060005b818110156109815783516001600160a01b03168352928401929184019160010161095c565b5050848103606086015261099581886108ca565b9250505082810360808401526109ab81856108ca565b9998505050505050505050565b600067ffffffffffffffff8311156109d2576109d2610636565b6109e5601f8401601f1916602001610723565b90508281528383830111156109f957600080fd5b610a078360208301846108a6565b9392505050565b60008060408385031215610a2157600080fd5b825167ffffffffffffffff80821115610a3957600080fd5b818501915085601f830112610a4d57600080fd5b610a5c868351602085016109b8565b93506020850151915080821115610a7257600080fd5b508301601f81018513610a8457600080fd5b610a93858251602084016109b8565b915050925092905056fea2646970667358221220c54a059109ba9e6a3727c2f1f00d24d8d7b07b526112b39d04f8ee3df205390464736f6c63430008140033

Block Transaction Gas Used Reward
view all blocks produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.