SendUln301

0x37aaaf95887624a363effb7762d489e3c05c2a02

Verification
Verified
v0.8.22+commit.4fc1097e
Type
Contract
22,620 bytes
ABI entries
69
14 read · 11 write
License
none

Contract information

Address
0x37aaaf95887624a363effb7762d489e3c05c2a02
Chain
Robinhood Chain (4663)
Compiler
v0.8.22+commit.4fc1097e
Optimization
Enabled
Creation tx
0x199766c64e…5ceae7e860

Token

Not a token

This contract does not expose ERC-20 metadata.

Read contract (14)

addressSizes(uint32)uint256
estimateFees(uint16, address, bytes, bool, bytes)uint256, uint256
executorConfigs(address, uint32)uint32, address
fees(address)uint256
getAppUlnConfig(address, uint32)tuple
getConfig(uint16, address, uint256)bytes
getExecutorConfig(address, uint32)tuple
getUlnConfig(address, uint32)tuple
isSupportedEid(uint32)bool
nonceContract()address
owner()address
treasury()address
treasuryFeeHandler()address
version()uint64, uint8, uint8

Events (13)

AddressSizeSetDVNFeePaidDefaultExecutorConfigsSetDefaultUlnConfigsSetExecutorConfigSetExecutorFeePaidLzTokenSetNativeFeeWithdrawnOwnershipTransferredPacketSentTreasuryNativeFeeCapSetTreasurySetUlnConfigSet

ABI

[
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_endpoint",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "_treasuryGasLimit",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_treasuryGasForFeeCap",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "_nonceContract",
        "type": "address"
      },
      {
        "internalType": "uint32",
        "name": "_localEid",
        "type": "uint32"
      },
      {
        "internalType": "address",
        "name": "_treasuryFeeHandler",
        "type": "address"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "inputs": [],
    "name": "AddressCast_InvalidAddress",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "AddressSizeConfig_AddressSizeAlreadySet",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "AddressSizeConfig_InvalidAddressSize",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "DVN_InvalidDVNIdx",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "cursor",
        "type": "uint256"
      }
    ],
    "name": "DVN_InvalidDVNOptions",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "LZ_MessageLib_InsufficientMsgValue",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "requested",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "available",
        "type": "uint256"
      }
    ],
    "name": "LZ_MessageLib_InvalidAmount",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "LZ_MessageLib_InvalidExecutor",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "actual",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "max",
        "type": "uint256"
      }
    ],
    "name": "LZ_MessageLib_InvalidMessageSize",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "LZ_MessageLib_InvalidPath",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "LZ_MessageLib_InvalidSender",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "LZ_MessageLib_LzTokenPaymentAddressMustBeSender",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "LZ_MessageLib_OnlyEndpoint",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "LZ_MessageLib_TransferFailed",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "LZ_MessageLib_ZeroMessageSize",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "LZ_ULN_AtLeastOneDVN",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "configType",
        "type": "uint256"
      }
    ],
    "name": "LZ_ULN_InvalidConfigType",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "LZ_ULN_InvalidConfirmations",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "LZ_ULN_InvalidLegacyType1Option",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "LZ_ULN_InvalidLegacyType2Option",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "LZ_ULN_InvalidOptionalDVNCount",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "LZ_ULN_InvalidOptionalDVNThreshold",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "LZ_ULN_InvalidRequiredDVNCount",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint8",
        "name": "workerId",
        "type": "uint8"
      }
    ],
    "name": "LZ_ULN_InvalidWorkerId",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "cursor",
        "type": "uint256"
      }
    ],
    "name": "LZ_ULN_InvalidWorkerOptions",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "LZ_ULN_Unsorted",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint32",
        "name": "eid",
        "type": "uint32"
      }
    ],
    "name": "LZ_ULN_UnsupportedEid",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "optionType",
        "type": "uint16"
      }
    ],
    "name": "LZ_ULN_UnsupportedOptionType",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "_value",
        "type": "uint256"
      }
    ],
    "name": "Transfer_NativeFailed",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "Transfer_ToAddressIsZero",
    "type": "error"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint16",
        "name": "eid",
        "type": "uint16"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "size",
        "type": "uint256"
      }
    ],
    "name": "AddressSizeSet",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "address[]",
        "name": "requiredDVNs",
        "type": "address[]"
      },
      {
        "indexed": false,
        "internalType": "address[]",
        "name": "optionalDVNs",
        "type": "address[]"
      },
      {
        "indexed": false,
        "internalType": "uint256[]",
        "name": "fees",
        "type": "uint256[]"
      }
    ],
    "name": "DVNFeePaid",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "components": [
          {
            "internalType": "uint32",
            "name": "eid",
            "type": "uint32"
          },
          {
            "components": [
              {
                "internalType": "uint32",
                "name": "maxMessageSize",
                "type": "uint32"
              },
              {
                "internalType": "address",
                "name": "executor",
                "type": "address"
              }
            ],
            "internalType": "struct ExecutorConfig",
            "name": "config",
            "type": "tuple"
          }
        ],
        "indexed": false,
        "internalType": "struct SetDefaultExecutorConfigParam[]",
        "name": "params",
        "type": "tuple[]"
      }
    ],
    "name": "DefaultExecutorConfigsSet",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "components": [
          {
            "internalType": "uint32",
            "name": "eid",
            "type": "uint32"
          },
          {
            "components": [
              {
                "internalType": "uint64",
                "name": "confirmations",
                "type": "uint64"
              },
              {
                "internalType": "uint8",
                "name": "requiredDVNCount",
                "type": "uint8"
              },
              {
                "internalType": "uint8",
                "name": "optionalDVNCount",
                "type": "uint8"
              },
              {
                "internalType": "uint8",
                "name": "optionalDVNThreshold",
                "type": "uint8"
              },
              {
                "internalType": "address[]",
                "name": "requiredDVNs",
                "type": "address[]"
              },
              {
                "internalType": "address[]",
                "name": "optionalDVNs",
                "type": "address[]"
              }
            ],
            "internalType": "struct UlnConfig",
            "name": "config",
            "type": "tuple"
          }
        ],
        "indexed": false,
        "internalType": "struct SetDefaultUlnConfigParam[]",
        "name": "params",
        "type": "tuple[]"
      }
    ],
    "name": "DefaultUlnConfigsSet",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "address",
        "name": "oapp",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint32",
        "name": "eid",
        "type": "uint32"
      },
      {
        "components": [
          {
            "internalType": "uint32",
            "name": "maxMessageSize",
            "type": "uint32"
          },
          {
            "internalType": "address",
            "name": "executor",
            "type": "address"
          }
        ],
        "indexed": false,
        "internalType": "struct ExecutorConfig",
        "name": "config",
        "type": "tuple"
      }
    ],
    "name": "ExecutorConfigSet",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "address",
        "name": "executor",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "fee",
        "type": "uint256"
      }
    ],
    "name": "ExecutorFeePaid",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "address",
        "name": "token",
        "type": "address"
      }
    ],
    "name": "LzTokenSet",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "address",
        "name": "user",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "address",
        "name": "receiver",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "NativeFeeWithdrawn",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "previousOwner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "OwnershipTransferred",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "bytes",
        "name": "encodedPayload",
        "type": "bytes"
      },
      {
        "indexed": false,
        "internalType": "bytes",
        "name": "options",
        "type": "bytes"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "nativeFee",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "lzTokenFee",
        "type": "uint256"
      }
    ],
    "name": "PacketSent",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "newTreasuryNativeFeeCap",
        "type": "uint256"
      }
    ],
    "name": "TreasuryNativeFeeCapSet",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "address",
        "name": "treasury",
        "type": "address"
      }
    ],
    "name": "TreasurySet",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "address",
        "name": "oapp",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint32",
        "name": "eid",
        "type": "uint32"
      },
      {
        "components": [
          {
            "internalType": "uint64",
            "name": "confirmations",
            "type": "uint64"
          },
          {
            "internalType": "uint8",
            "name": "requiredDVNCount",
            "type": "uint8"
          },
          {
            "internalType": "uint8",
            "name": "optionalDVNCount",
            "type": "uint8"
          },
          {
            "internalType": "uint8",
            "name": "optionalDVNThreshold",
            "type": "uint8"
          },
          {
            "internalType": "address[]",
            "name": "requiredDVNs",
            "type": "address[]"
          },
          {
            "internalType": "address[]",
            "name": "optionalDVNs",
            "type": "address[]"
          }
        ],
        "indexed": false,
        "internalType": "struct UlnConfig",
        "name": "config",
        "type": "tuple"
      }
    ],
    "name": "UlnConfigSet",
    "type": "event"
  },
  {
    "inputs": [
      {
        "internalType": "uint32",
        "name": "dstEid",
        "type": "uint32"
      }
    ],
    "name": "addressSizes",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "size",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "_dstEid",
        "type": "uint16"
      },
      {
        "internalType": "address",
        "name": "_sender",
        "type": "address"
      },
      {
        "internalType": "bytes",
        "name": "_message",
        "type": "bytes"
      },
      {
        "internalType": "bool",
        "name": "_payInLzToken",
        "type": "bool"
      },
      {
        "internalType": "bytes",
        "name": "_options",
        "type": "bytes"
      }
    ],
    "name": "estimateFees",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "nativeFee",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "lzTokenFee",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "oapp",
        "type": "address"
      },
      {
        "internalType": "uint32",
        "name": "eid",
        "type": "uint32"
      }
    ],
    "name": "executorConfigs",
    "outputs": [
      {
        "internalType": "uint32",
        "name": "maxMessageSize",
        "type": "uint32"
      },
      {
        "internalType": "address",
        "name": "executor",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "worker",
        "type": "address"
      }
    ],
    "name": "fees",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_oapp",
        "type": "address"
      },
      {
        "internalType": "uint32",
        "name": "_remoteEid",
        "type": "uint32"
      }
    ],
    "name": "getAppUlnConfig",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint64",
            "name": "confirmations",
            "type": "uint64"
          },
          {
            "internalType": "uint8",
            "name": "requiredDVNCount",
            "type": "uint8"
          },
          {
            "internalType": "uint8",
            "name": "optionalDVNCount",
            "type": "uint8"
          },
          {
            "internalType": "uint8",
            "name": "optionalDVNThreshold",
            "type": "uint8"
          },
          {
            "internalType": "address[]",
            "name": "requiredDVNs",
            "type": "address[]"
          },
          {
            "internalType": "address[]",
            "name": "optionalDVNs",
            "type": "address[]"
          }
        ],
        "internalType": "struct UlnConfig",
        "name": "",
        "type": "tuple"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "_eid",
        "type": "uint16"
      },
      {
        "internalType": "address",
        "name": "_oapp",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "_configType",
        "type": "uint256"
      }
    ],
    "name": "getConfig",
    "outputs": [
      {
        "internalType": "bytes",
        "name": "",
        "type": "bytes"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_oapp",
        "type": "address"
      },
      {
        "internalType": "uint32",
        "name": "_remoteEid",
        "type": "uint32"
      }
    ],
    "name": "getExecutorConfig",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint32",
            "name": "maxMessageSize",
            "type": "uint32"
          },
          {
            "internalType": "address",
            "name": "executor",
            "type": "address"
          }
        ],
        "internalType": "struct ExecutorConfig",
        "name": "rtnConfig",
        "type": "tuple"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_oapp",
        "type": "address"
      },
      {
        "internalType": "uint32",
        "name": "_remoteEid",
        "type": "uint32"
      }
    ],
    "name": "getUlnConfig",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint64",
            "name": "confirmations",
            "type": "uint64"
          },
          {
            "internalType": "uint8",
            "name": "requiredDVNCount",
            "type": "uint8"
          },
          {
            "internalType": "uint8",
            "name": "optionalDVNCount",
            "type": "uint8"
          },
          {
            "internalType": "uint8",
            "name": "optionalDVNThreshold",
            "type": "uint8"
          },
          {
            "internalType": "address[]",
            "name": "requiredDVNs",
            "type": "address[]"
          },
          {
            "internalType": "address[]",
            "name": "optionalDVNs",
            "type": "address[]"
          }
        ],
        "internalType": "struct UlnConfig",
        "name": "rtnConfig",
        "type": "tuple"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint32",
        "name": "_eid",
        "type": "uint32"
      }
    ],
    "name": "isSupportedEid",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "nonceContract",
    "outputs": [
      {
        "internalType": "contract INonceContract",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "owner",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "renounceOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_sender",
        "type": "address"
      },
      {
        "internalType": "uint64",
        "name": "",
        "type": "uint64"
      },
      {
        "internalType": "uint16",
        "name": "_dstEid",
        "type": "uint16"
      },
      {
        "internalType": "bytes",
        "name": "_path",
        "type": "bytes"
      },
      {
        "internalType": "bytes",
        "name": "_message",
        "type": "bytes"
      },
      {
        "internalType": "address payable",
        "name": "_refundAddress",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "_lzTokenPaymentAddress",
        "type": "address"
      },
      {
        "internalType": "bytes",
        "name": "_options",
        "type": "bytes"
      }
    ],
    "name": "send",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "_eid",
        "type": "uint16"
      },
      {
        "internalType": "uint256",
        "name": "_size",
        "type": "uint256"
      }
    ],
    "name": "setAddressSize",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "_eid",
        "type": "uint16"
      },
      {
        "internalType": "address",
        "name": "_oapp",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "_configType",
        "type": "uint256"
      },
      {
        "internalType": "bytes",
        "name": "_config",
        "type": "bytes"
      }
    ],
    "name": "setConfig",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "uint32",
            "name": "eid",
            "type": "uint32"
          },
          {
            "components": [
              {
                "internalType": "uint32",
                "name": "maxMessageSize",
                "type": "uint32"
              },
              {
                "internalType": "address",
                "name": "executor",
                "type": "address"
              }
            ],
            "internalType": "struct ExecutorConfig",
            "name": "config",
            "type": "tuple"
          }
        ],
        "internalType": "struct SetDefaultExecutorConfigParam[]",
        "name": "_params",
        "type": "tuple[]"
      }
    ],
    "name": "setDefaultExecutorConfigs",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "uint32",
            "name": "eid",
            "type": "uint32"
          },
          {
            "components": [
              {
                "internalType": "uint64",
                "name": "confirmations",
                "type": "uint64"
              },
              {
                "internalType": "uint8",
                "name": "requiredDVNCount",
                "type": "uint8"
              },
              {
                "internalType": "uint8",
                "name": "optionalDVNCount",
                "type": "uint8"
              },
              {
                "internalType": "uint8",
                "name": "optionalDVNThreshold",
                "type": "uint8"
              },
              {
                "internalType": "address[]",
                "name": "requiredDVNs",
                "type": "address[]"
              },
              {
                "internalType": "address[]",
                "name": "optionalDVNs",
                "type": "address[]"
              }
            ],
            "internalType": "struct UlnConfig",
            "name": "config",
            "type": "tuple"
          }
        ],
        "internalType": "struct SetDefaultUlnConfigParam[]",
        "name": "_params",
        "type": "tuple[]"
      }
    ],
    "name": "setDefaultUlnConfigs",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_lzToken",
        "type": "address"
      }
    ],
    "name": "setLzToken",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_treasury",
        "type": "address"
      }
    ],
    "name": "setTreasury",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_newTreasuryNativeFeeCap",
        "type": "uint256"
      }
    ],
    "name": "setTreasuryNativeFeeCap",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "transferOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "treasury",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "treasuryFeeHandler",
    "outputs": [
      {
        "internalType": "contract ITreasuryFeeHandler",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "version",
    "outputs": [
      {
        "internalType": "uint64",
        "name": "major",
        "type": "uint64"
      },
      {
        "internalType": "uint8",
        "name": "minor",
        "type": "uint8"
      },
      {
        "internalType": "uint8",
        "name": "endpointVersion",
        "type": "uint8"
      }
    ],
    "stateMutability": "pure",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "_amount",
        "type": "uint256"
      }
    ],
    "name": "withdrawFee",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  }
]

Source code

// SPDX-License-Identifier: LZBL-1.2

pragma solidity ^0.8.20;

import { Packet } from "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol";

import { ExecutorConfig, WorkerOptions } from "../../SendLibBase.sol";
import { SendLibBaseE1 } from "./SendLibBaseE1.sol";
import { SendUlnBase } from "../SendUlnBase.sol";
import { UlnConfig } from "../UlnBase.sol";

/// @dev ULN301 will be deployed on EndpointV1 and is for backward compatibility with ULN302 on EndpointV2. 301 can talk to both 301 and 302
/// @dev This is a gluing contract. It simply parses the requests and forward to the super.impl() accordingly.
/// @dev In this case, it combines the logic of SendUlnBase and SendLibBaseE1
contract SendUln301 is SendUlnBase, SendLibBaseE1 {
    uint256 internal constant CONFIG_TYPE_EXECUTOR = 1;
    uint256 internal constant CONFIG_TYPE_ULN = 2;

    error LZ_ULN_InvalidConfigType(uint256 configType);

    constructor(
        address _endpoint,
        uint256 _treasuryGasLimit,
        uint256 _treasuryGasForFeeCap,
        address _nonceContract,
        uint32 _localEid,
        address _treasuryFeeHandler
    )
        SendLibBaseE1(
            _endpoint,
            _treasuryGasLimit,
            _treasuryGasForFeeCap,
            _nonceContract,
            _localEid,
            _treasuryFeeHandler
        )
    {}

    // ============================ OnlyEndpoint ===================================

    function setConfig(
        uint16 _eid,
        address _oapp,
        uint256 _configType,
        bytes calldata _config
    ) external override onlyEndpoint {
        _assertSupportedEid(_eid);
        if (_configType == CONFIG_TYPE_EXECUTOR) {
            _setExecutorConfig(_eid, _oapp, abi.decode(_config, (ExecutorConfig)));
        } else if (_configType == CONFIG_TYPE_ULN) {
            _setUlnConfig(_eid, _oapp, abi.decode(_config, (UlnConfig)));
        } else {
            revert LZ_ULN_InvalidConfigType(_configType);
        }
    }

    // ============================ View ===================================

    function getConfig(uint16 _eid, address _oapp, uint256 _configType) external view override returns (bytes memory) {
        if (_configType == CONFIG_TYPE_EXECUTOR) {
            return abi.encode(getExecutorConfig(_oapp, _eid));
        } else if (_configType == CONFIG_TYPE_ULN) {
            return abi.encode(getUlnConfig(_oapp, _eid));
        } else {
            revert LZ_ULN_InvalidConfigType(_configType);
        }
    }

    function version() external pure override returns (uint64 major, uint8 minor, uint8 endpointVersion) {
        return (3, 0, 1);
    }

    function isSupportedEid(uint32 _eid) external view returns (bool) {
        return _isSupportedEid(_eid);
    }

    // ============================ Internal ===================================

    function _quoteVerifier(
        address _sender,
        uint32 _dstEid,
        WorkerOptions[] memory _options
    ) internal view override returns (uint256) {
        return _quoteDVNs(_sender, _dstEid, _options);
    }

    function _payVerifier(
        Packet memory _packet,
        WorkerOptions[] memory _options
    ) internal virtual override returns (uint256 otherWorkerFees, bytes memory encodedPacket) {
        (otherWorkerFees, encodedPacket) = _payDVNs(fees, _packet, _options);
    }

    function _splitOptions(
        bytes calldata _options
    ) internal pure override returns (bytes memory, WorkerOptions[] memory) {
        return _splitUlnOptions(_options);
    }
}
Chain explorer3009msChain node88ms