ethereum: update the QueryResponse contract

By moving the structs out of the abstract contract, you can use them
directly in any contract that imports QueryResponse.sol *without*
requiring that contract to inherit from the QueryResponse contract. This
seems to work much better with forge's coverage tooling.
This commit is contained in:
Jeff Schroeder 2023-10-12 18:31:13 +00:00 committed by Evan Gray
parent b4a27f4aed
commit 15e1dcd3dd
1 changed files with 34 additions and 34 deletions

View File

@ -6,7 +6,40 @@ pragma solidity ^0.8.0;
import {BytesParsing} from "../relayer/libraries/BytesParsing.sol";
import "../interfaces/IWormhole.sol";
/// @dev QueryResponse is a library that implements the parsing and verification of Cross Chain Query (CCQ) responses.
// @dev ParsedQueryResponse is returned by QueryResponse.parseAndVerifyQueryResponse().
struct ParsedQueryResponse {
uint8 version;
uint16 senderChainId;
uint32 nonce;
bytes requestId; // 65 byte sig for off-chain, 32 byte vaaHash for on-chain
ParsedPerChainQueryResponse [] responses;
}
// @dev ParsedPerChainQueryResponse describes a single per-chain response.
struct ParsedPerChainQueryResponse {
uint16 chainId;
uint8 queryType;
bytes request;
bytes response;
}
// @dev EthCallQueryResponse describes an ETH call per-chain query.
struct EthCallQueryResponse {
bytes requestBlockId;
uint64 blockNum;
uint64 blockTime;
bytes32 blockHash;
EthCallData [] result;
}
// @dev EthCallData describes a single ETH call query / response pair.
struct EthCallData {
address contractAddress;
bytes callData;
bytes result;
}
// @dev QueryResponse is a library that implements the parsing and verification of Cross Chain Query (CCQ) responses.
abstract contract QueryResponse {
using BytesParsing for bytes;
@ -19,39 +52,6 @@ abstract contract QueryResponse {
error UnsupportedQueryType();
error UnexpectedNumberOfResults();
error InvalidPayloadLength(uint256 received, uint256 expected);
/// @dev ParsedQueryResponse is returned by parseAndVerifyQueryResponse().
struct ParsedQueryResponse {
uint8 version;
uint16 senderChainId;
uint32 nonce;
bytes requestId; // 65 byte sig for off-chain, 32 byte vaaHash for on-chain
ParsedPerChainQueryResponse [] responses;
}
/// @dev ParsedPerChainQueryResponse describes a single per-chain response.
struct ParsedPerChainQueryResponse {
uint16 chainId;
uint8 queryType;
bytes request;
bytes response;
}
/// @dev EthCallQueryResponse describes an ETH call per-chain query.
struct EthCallQueryResponse {
bytes requestBlockId;
uint64 blockNum;
uint64 blockTime;
bytes32 blockHash;
EthCallData [] result;
}
/// @dev EthCallData describes a single ETH call query / response pair.
struct EthCallData {
address contractAddress;
bytes callData;
bytes result;
}
bytes public constant responsePrefix = bytes("query_response_0000000000000000000|");
uint8 public constant QT_ETH_CALL = 1;