S Price: $0.058165 (-2.27%)
Gas: 55 Gwei

Contract

0xE5De15A9C9bBedb4F5EC13B131E61245f2983A69

Overview

S Balance

Sonic LogoSonic LogoSonic Logo0 S

S Value

$0.00

More Info

Private Name Tags

Transaction Hash
Block
From
To
Relay15490222024-12-25 10:33:25401 days ago1735122805IN
Curve: X-Gov L2 Relayer
0 S0.000039451

Latest 3 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
15482162024-12-25 10:21:26401 days ago1735122086
Curve: X-Gov L2 Relayer
 Contract Creation0 S
15482162024-12-25 10:21:26401 days ago1735122086
Curve: X-Gov L2 Relayer
 Contract Creation0 S
15482162024-12-25 10:21:26401 days ago1735122086
Curve: X-Gov L2 Relayer
 Contract Creation0 S
Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
XYZ Relayer

Compiler Version
vyper:0.3.10

Optimization Enabled:
N/A

Other Settings:
default evmVersion, MIT license

Contract Source Code (Vyper language format)

# @version 0.3.10
"""
@title XYZ Relayer
@author CurveFi
"""


event SetMessenger:
    messenger: address


interface IAgent:
    def execute(_messages: DynArray[Message, MAX_MESSAGES]): nonpayable


enum Agent:
    OWNERSHIP
    PARAMETER
    EMERGENCY


struct Message:
    target: address
    data: Bytes[MAX_BYTES]


MAX_BYTES: constant(uint256) = 1024
MAX_MESSAGES: constant(uint256) = 8

CODE_OFFSET: constant(uint256) = 3


OWNERSHIP_AGENT: public(immutable(address))
PARAMETER_AGENT: public(immutable(address))
EMERGENCY_AGENT: public(immutable(address))


agent: HashMap[Agent, address]
messenger: public(address)


@external
def __init__(_agent_blueprint: address, _messenger: address):
    self.messenger = _messenger
    log SetMessenger(_messenger)

    OWNERSHIP_AGENT = create_from_blueprint(_agent_blueprint, code_offset=CODE_OFFSET)
    PARAMETER_AGENT = create_from_blueprint(_agent_blueprint, code_offset=CODE_OFFSET)
    EMERGENCY_AGENT = create_from_blueprint(_agent_blueprint, code_offset=CODE_OFFSET)

    self.agent[Agent.OWNERSHIP] = OWNERSHIP_AGENT
    self.agent[Agent.PARAMETER] = PARAMETER_AGENT
    self.agent[Agent.EMERGENCY] = EMERGENCY_AGENT


@external
def relay(_agent: Agent, _messages: DynArray[Message, MAX_MESSAGES]):
    """
    @notice Receive messages for an agent and relay them.
    @param _agent The agent to relay messages to.
    @param _messages The sequence of messages to relay.
    """
    assert msg.sender == self.messenger

    IAgent(self.agent[_agent]).execute(_messages)


@external
def set_messenger(_messenger: address):
    """
    @notice Set the messenger which verifies messages and is permitted to call `relay`.
    @dev Only callable by the OWNERSHIP_AGENT.
    """
    assert msg.sender == OWNERSHIP_AGENT

    self.messenger = _messenger
    log SetMessenger(_messenger)

Contract Security Audit

Contract ABI

API
[{"name":"SetMessenger","inputs":[{"name":"messenger","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"_agent_blueprint","type":"address"},{"name":"_messenger","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"relay","inputs":[{"name":"_agent","type":"uint256"},{"name":"_messages","type":"tuple[]","components":[{"name":"target","type":"address"},{"name":"data","type":"bytes"}]}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_messenger","inputs":[{"name":"_messenger","type":"address"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"OWNERSHIP_AGENT","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"PARAMETER_AGENT","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"EMERGENCY_AGENT","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"messenger","inputs":[],"outputs":[{"name":"","type":"address"}]}]

6102e35150346101295760206103e55f395f518060a01c6101295760405260206104055f395f518060a01c610129576060526060516001557f1cad8cc1a8d1a401572813203e22d0879c363a2a84037659987e185b0354ba0460605160805260206080a16040516003813b0359600182126101295781600382853c81815ff08015610129579050905090506102a3526040516003813b0359600182126101295781600382853c81815ff08015610129579050905090506102c3526040516003813b0359600182126101295781600382853c81815ff08015610129579050905090506102e3526102a3515f60016020525f5260405f20556102c3515f60026020525f5260405f20556102e3515f60046020525f5260405f20556102a361012d61000039610303610000f35b5f80fd5f3560e01c60026005820660011b61029901601e395f51565b63b8eee20e811861029157346102955760206102a360403960206040f3610291565b633175905b811861029157346102955760206102c360403960206040f3610291565b63c67aac47811861007a57346102955760206102e360403960206040f35b63f6caf910811861020b57606436103417610295576004358060031c6102955760405260243560040160088135116102955780355f816008811161029557801561011157905b61044081026080018160051b602086010135602086010180358060a01c61029557825260208101358101610400813511610295576020813501602084018183823750505050506001018181186100c0575b50508060605250506001543318610295575f6040516020525f5260405f205463baae8abf612280526020806122a052806122a0015f6060518083528060051b5f82600881116102955780156101d757905b828160051b60208801015261044081026080018360208801016040825182528060208301526020830181830160208251018082828560045afa50508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190509050905083019250600101818118610162575b50508201602001915050905081015050803b15610295575f61228061244461229c5f855af1610208573d5f5f3e3d5ffd5b50005b6368007e12811861029157602436103417610295576004358060a01c6102955760405260206102a35f395f513318610295576040516001557f1cad8cc1a8d1a401572813203e22d0879c363a2a84037659987e185b0354ba0460405160605260206060a100610291565b633cb747bf811861029157346102955760015460405260206040f35b5f5ffd5b5f80fd0275003a0018005c0291841902a3810a1860a16576797065728300030a001500000000000000000000000013dff1809d1e9ddf9ac901f47817b7f45220a84600000000000000000000000071f718d3e4d1449d1502a6a7595eb84ebccb1683

Deployed Bytecode

0x5f3560e01c60026005820660011b61029901601e395f51565b63b8eee20e811861029157346102955760206102a360403960206040f3610291565b633175905b811861029157346102955760206102c360403960206040f3610291565b63c67aac47811861007a57346102955760206102e360403960206040f35b63f6caf910811861020b57606436103417610295576004358060031c6102955760405260243560040160088135116102955780355f816008811161029557801561011157905b61044081026080018160051b602086010135602086010180358060a01c61029557825260208101358101610400813511610295576020813501602084018183823750505050506001018181186100c0575b50508060605250506001543318610295575f6040516020525f5260405f205463baae8abf612280526020806122a052806122a0015f6060518083528060051b5f82600881116102955780156101d757905b828160051b60208801015261044081026080018360208801016040825182528060208301526020830181830160208251018082828560045afa50508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190509050905083019250600101818118610162575b50508201602001915050905081015050803b15610295575f61228061244461229c5f855af1610208573d5f5f3e3d5ffd5b50005b6368007e12811861029157602436103417610295576004358060a01c6102955760405260206102a35f395f513318610295576040516001557f1cad8cc1a8d1a401572813203e22d0879c363a2a84037659987e185b0354ba0460405160605260206060a100610291565b633cb747bf811861029157346102955760015460405260206040f35b5f5ffd5b5f80fd0275003a0018005c02910000000000000000000000006c9578402a3ace046a12839f45f84aa5448e9c30000000000000000000000000ec5afc9590964f2fa0feed54f0fbb2a34480908d000000000000000000000000a73edcf18421b56d9af1ce08a34e102e23b2c4b6

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000013dff1809d1e9ddf9ac901f47817b7f45220a84600000000000000000000000071f718d3e4d1449d1502a6a7595eb84ebccb1683

-----Decoded View---------------
Arg [0] : _agent_blueprint (address): 0x13DFF1809D1E9ddf9Ac901F47817B7F45220A846
Arg [1] : _messenger (address): 0x71F718D3e4d1449D1502A6A7595eb84eBcCB1683

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000013dff1809d1e9ddf9ac901f47817b7f45220a846
Arg [1] : 00000000000000000000000071f718d3e4d1449d1502a6a7595eb84ebccb1683


Block Transaction Gas Used Reward
view all blocks ##produced##

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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.