95 lines
2.7 KiB
Solidity
95 lines
2.7 KiB
Solidity
// SPDX-License-Identifier: Apache 2
|
|
|
|
pragma solidity ^0.8.19;
|
|
|
|
import "../../interfaces/relayer/TypedUnits.sol";
|
|
import {BytesParsing} from "../../relayer/libraries/BytesParsing.sol";
|
|
|
|
error UnexpectedExecutionParamsVersion(uint8 version, uint8 expectedVersion);
|
|
error UnsupportedExecutionParamsVersion(uint8 version);
|
|
error TargetChainAndExecutionParamsVersionMismatch(uint16 targetChain, uint8 version);
|
|
error UnexpectedExecutionInfoVersion(uint8 version, uint8 expectedVersion);
|
|
error UnsupportedExecutionInfoVersion(uint8 version);
|
|
error TargetChainAndExecutionInfoVersionMismatch(uint16 targetChain, uint8 version);
|
|
error VersionMismatchOverride(uint8 instructionVersion, uint8 overrideVersion);
|
|
|
|
using BytesParsing for bytes;
|
|
|
|
enum ExecutionParamsVersion {EVM_V1}
|
|
|
|
struct EvmExecutionParamsV1 {
|
|
Gas gasLimit;
|
|
}
|
|
|
|
enum ExecutionInfoVersion {EVM_V1}
|
|
|
|
struct EvmExecutionInfoV1 {
|
|
Gas gasLimit;
|
|
GasPrice targetChainRefundPerGasUnused;
|
|
}
|
|
|
|
function decodeExecutionParamsVersion(bytes memory data)
|
|
pure
|
|
returns (ExecutionParamsVersion version)
|
|
{
|
|
(version) = abi.decode(data, (ExecutionParamsVersion));
|
|
}
|
|
|
|
function decodeExecutionInfoVersion(bytes memory data)
|
|
pure
|
|
returns (ExecutionInfoVersion version)
|
|
{
|
|
(version) = abi.decode(data, (ExecutionInfoVersion));
|
|
}
|
|
|
|
function encodeEvmExecutionParamsV1(EvmExecutionParamsV1 memory executionParams)
|
|
pure
|
|
returns (bytes memory)
|
|
{
|
|
return abi.encode(uint8(ExecutionParamsVersion.EVM_V1), executionParams.gasLimit);
|
|
}
|
|
|
|
function decodeEvmExecutionParamsV1(bytes memory data)
|
|
pure
|
|
returns (EvmExecutionParamsV1 memory executionParams)
|
|
{
|
|
uint8 version;
|
|
(version, executionParams.gasLimit) = abi.decode(data, (uint8, Gas));
|
|
|
|
if (version != uint8(ExecutionParamsVersion.EVM_V1)) {
|
|
revert UnexpectedExecutionParamsVersion(version, uint8(ExecutionParamsVersion.EVM_V1));
|
|
}
|
|
}
|
|
|
|
function encodeEvmExecutionInfoV1(EvmExecutionInfoV1 memory executionInfo)
|
|
pure
|
|
returns (bytes memory)
|
|
{
|
|
return abi.encode(
|
|
uint8(ExecutionInfoVersion.EVM_V1),
|
|
executionInfo.gasLimit,
|
|
executionInfo.targetChainRefundPerGasUnused
|
|
);
|
|
}
|
|
|
|
function decodeEvmExecutionInfoV1(bytes memory data)
|
|
pure
|
|
returns (EvmExecutionInfoV1 memory executionInfo)
|
|
{
|
|
uint8 version;
|
|
(version, executionInfo.gasLimit, executionInfo.targetChainRefundPerGasUnused) =
|
|
abi.decode(data, (uint8, Gas, GasPrice));
|
|
|
|
if (version != uint8(ExecutionInfoVersion.EVM_V1)) {
|
|
revert UnexpectedExecutionInfoVersion(version, uint8(ExecutionInfoVersion.EVM_V1));
|
|
}
|
|
}
|
|
|
|
function getEmptyEvmExecutionParamsV1()
|
|
pure
|
|
returns (EvmExecutionParamsV1 memory executionParams)
|
|
{
|
|
executionParams.gasLimit = Gas.wrap(uint256(0));
|
|
}
|
|
|