From fdd057579d6e3f16784914213615fc21ffe21c63 Mon Sep 17 00:00:00 2001 From: sam bacha Date: Thu, 23 May 2024 21:56:09 -0700 Subject: [PATCH] Deployed 2e93d1c with MkDocs version: 1.6.0 --- 404.html | 4 +- Clients/accounting/index.html | 22 +- Clients/clients/index.html | 22 +- Clients/configuration/index.html | 22 +- Clients/index.html | 22 +- Clients/relay/index.html | 22 +- Clients/requirements/index.html | 22 +- Clients/validators/index.html | 22 +- Developers/builders/index.html | 22 +- Developers/index.html | 22 +- Developers/interface/index.html | 45 +- Developers/mainnet/index.html | 22 +- Developers/payment-methods/index.html | 22 +- Developers/sdk/index.html | 63 +- Developers/testnet/index.html | 22 +- Learning/Forward-Contracts/index.html | 22 +- Learning/aup_auction/index.html | 22 +- Learning/flashbots-comparison/index.html | 22 +- Learning/secondary-market/index.html | 22 +- Legal/CDD/index.html | 22 +- Legal/Content-Disclaimer/index.html | 22 +- Legal/Disclosure-Statement/index.html | 22 +- Legal/index.html | 22 +- Reference/constants/index.html | 22 +- Reference/contract_design/index.html | 22 +- Reference/contract_summary/index.html | 22 +- Reference/erc6909/index.html | 22 +- Reference/glossary/index.html | 22 +- Reference/rpc-payload/index.html | 22 +- Relay/captive-insurance/index.html | 22 +- Relay/index.html | 22 +- Rulebook/bylaws/index.html | 25 +- .../contract.Accountant/index.html | 83 +- .../contract.Auctioneer/index.html | 81 +- .../interface.Bidder/index.html | 29 +- .../interface.IAccountant/index.html | 25 +- .../contract.L1Holding/index.html | 44 +- .../contract.SettlementHouse/index.html | 32 +- .../abstract.Ownable2Step/index.html | 2583 ---------------- Rulebook/contracts/auth/index.html | 2545 --------------- .../solady.auth.sol/abstract.Owned/index.html | 2563 ---------------- Rulebook/contracts/index.html | 27 +- .../interface.IERC6909/index.html | 56 +- .../interface.IL1Bridge/index.html | 39 +- .../interface.IL2Bridge/index.html | 41 +- .../IWETH.sol/interface.IWETH/index.html | 25 +- Rulebook/contracts/interfaces/index.html | 25 +- .../library.LibSort/index.html | 2728 ----------------- Rulebook/definitions/index.html | 25 +- Rulebook/delivery-and-settlement/index.html | 25 +- Rulebook/general/index.html | 25 +- Rulebook/governance/index.html | 25 +- .../network-clearing-participants/index.html | 25 +- Rulebook/obligations/index.html | 25 +- Rulebook/suspension/index.html | 25 +- api/beta-auction/index.html | 22 +- api/bundle/index.html | 22 +- api/index.html | 22 +- api/relay/index.html | 2310 +++++++++++++- api/self-report/index.html | 22 +- api/signature-scheme/index.html | 22 +- .../timeline-for-v0-to-v1/index.html | 22 +- blog/archive/2024/index.html | 4 +- blog/category/announcements/index.html | 4 +- blog/category/changelog/index.html | 4 +- blog/index.html | 4 +- index.html | 124 +- search/search_index.json | 2 +- sitemap.xml | 144 +- sitemap.xml.gz | Bin 862 -> 803 bytes stylesheets/neoteroi-mkdocs.css | 1670 ++++++++++ 71 files changed, 4307 insertions(+), 11945 deletions(-) delete mode 100644 Rulebook/contracts/auth/Ownable2Step.sol/abstract.Ownable2Step/index.html delete mode 100644 Rulebook/contracts/auth/index.html delete mode 100644 Rulebook/contracts/auth/solady.auth.sol/abstract.Owned/index.html delete mode 100644 Rulebook/contracts/solady.libsort.sol/library.LibSort/index.html create mode 100644 stylesheets/neoteroi-mkdocs.css diff --git a/404.html b/404.html index d09cb30..55af3f8 100644 --- a/404.html +++ b/404.html @@ -49,7 +49,7 @@ - + @@ -2470,8 +2470,6 @@

404 - Not found

- - diff --git a/Clients/accounting/index.html b/Clients/accounting/index.html index 8c8157e..f03cac7 100644 --- a/Clients/accounting/index.html +++ b/Clients/accounting/index.html @@ -55,7 +55,7 @@ - + @@ -2676,27 +2676,9 @@

Proposer Payments Value (PPV) - - - - - - - April 24, 2024 - - - - - - - - @@ -2792,8 +2774,6 @@

Proposer Payments Value (PPV) - - diff --git a/Clients/clients/index.html b/Clients/clients/index.html index c809100..fb75ef8 100644 --- a/Clients/clients/index.html +++ b/Clients/clients/index.html @@ -55,7 +55,7 @@ - + @@ -2711,27 +2711,9 @@

Lifecycle of a transaction - - - - - - - May 10, 2024 - - - - - - - - @@ -2827,8 +2809,6 @@

Lifecycle of a transaction - - diff --git a/Clients/configuration/index.html b/Clients/configuration/index.html index 2ce0d37..b7344bc 100644 --- a/Clients/configuration/index.html +++ b/Clients/configuration/index.html @@ -55,7 +55,7 @@ - + @@ -2684,27 +2684,9 @@

Footnotes - - - - - - - April 24, 2024 - - - - - - - - @@ -2800,8 +2782,6 @@

Footnotes - - diff --git a/Clients/index.html b/Clients/index.html index 46080fb..ae8dc46 100644 --- a/Clients/index.html +++ b/Clients/index.html @@ -55,7 +55,7 @@ - + @@ -2625,27 +2625,9 @@

Receiving a block - - - - - - - April 24, 2024 - - - - - - - - @@ -2741,8 +2723,6 @@

Receiving a block - - diff --git a/Clients/relay/index.html b/Clients/relay/index.html index eba0f92..3b81a34 100644 --- a/Clients/relay/index.html +++ b/Clients/relay/index.html @@ -55,7 +55,7 @@ - + @@ -2573,27 +2573,9 @@

Relay& - - - - @@ -2689,8 +2671,6 @@

Relay& - - diff --git a/Clients/requirements/index.html b/Clients/requirements/index.html index 9528cff..3007ee6 100644 --- a/Clients/requirements/index.html +++ b/Clients/requirements/index.html @@ -55,7 +55,7 @@ - + @@ -2585,27 +2585,9 @@

Required Validator Endpoints - - - - - - - May 10, 2024 - - - - - - - - @@ -2701,8 +2683,6 @@

Required Validator Endpoints - - diff --git a/Clients/validators/index.html b/Clients/validators/index.html index dc55584..c0bd73e 100644 --- a/Clients/validators/index.html +++ b/Clients/validators/index.html @@ -55,7 +55,7 @@ - + @@ -2714,27 +2714,9 @@

Receiving a block - - - - - - - May 10, 2024 - - - - - - - - @@ -2830,8 +2812,6 @@

Receiving a block - - diff --git a/Developers/builders/index.html b/Developers/builders/index.html index aa7fefb..8ee2447 100644 --- a/Developers/builders/index.html +++ b/Developers/builders/index.html @@ -55,7 +55,7 @@ - + @@ -2985,27 +2985,9 @@

Properties - - - - - - - April 24, 2024 - - - - - - - - @@ -3101,8 +3083,6 @@

Properties - - diff --git a/Developers/index.html b/Developers/index.html index abdac4f..704800d 100644 --- a/Developers/index.html +++ b/Developers/index.html @@ -55,7 +55,7 @@ - + @@ -2519,27 +2519,9 @@

Builder and Searcher specific - - - - - - - May 22, 2024 - - - - - - - - @@ -2635,8 +2617,6 @@

Builder and Searcher specific - - diff --git a/Developers/interface/index.html b/Developers/interface/index.html index a9d473a..92b56e0 100644 --- a/Developers/interface/index.html +++ b/Developers/interface/index.html @@ -55,7 +55,7 @@ - + @@ -2508,8 +2508,7 @@

Summary InterfacesAuctioneer Interface

Git Source

-

Inherits: -ERC6909, Ownable2Step

+

Inherits: ERC6909, Ownable2Step

Implements an auction mechanism for selling block space.

Structs

Auction

@@ -2568,9 +2567,9 @@

bidCountFunctions

bid

Bid function for bidders to submit manual bids.

-

function bid(uint256 slot, uint256[] memory packedBids) external;
+
function bid(uint256 slot, uint256[] memory packedBids) external;
 
-Parameters

+

Parameters

@@ -2594,9 +2593,9 @@

bid¶<

getBidderInfo

Retrieve information about a bidder after auction settlement.

-

function getBidderInfo(uint256 slot, address bidder) external view returns (uint120 itemsBought, uint128 amountOwed);
+
function getBidderInfo(uint256 slot, address bidder) external view returns (uint120 itemsBought, uint128 amountOwed);
 
-Parameters

+

Parameters

@@ -2642,9 +2641,9 @@

getBidderInfo

packBid

Packed Bid details into a uint256 for submission.

-

function packBid(uint128 bidPrice, uint120 itemsToBuy, uint8 bidderId) external pure returns (uint256 packedBid);
+
function packBid(uint128 bidPrice, uint120 itemsToBuy, uint8 bidderId) external pure returns (uint256 packedBid);
 
-Parameters

+

Parameters

@@ -2690,9 +2689,9 @@

packBidcalcAverageBid

Calculate average bid price for the last n auctions

-

function calcAverageBid(uint256 numAuctions) external view returns (uint128 avBidPrice);
+
function calcAverageBid(uint256 numAuctions) external view returns (uint128 avBidPrice);
 
-Parameters

+

Parameters

@@ -2800,9 +2799,9 @@

Bidder InterfaceFunctions

getBid

Get the bid from a bidder for a specific slot and round.

-

function getBid(uint256 slot) external view returns (uint256[] memory packedBids);
+
function getBid(uint256 slot) external view returns (uint256[] memory packedBids);
 
-Parameters

+

Parameters

@@ -2844,27 +2843,9 @@

getBid - - - - - - - May 22, 2024 - - - - - - - - @@ -2960,8 +2941,6 @@

getBid - - diff --git a/Developers/mainnet/index.html b/Developers/mainnet/index.html index ee45b7e..d87625c 100644 --- a/Developers/mainnet/index.html +++ b/Developers/mainnet/index.html @@ -51,7 +51,7 @@ - + @@ -2509,27 +2509,9 @@

Resources - - - - - - - May 22, 2024 - - - - - - - - @@ -2587,8 +2569,6 @@

Resources - - diff --git a/Developers/payment-methods/index.html b/Developers/payment-methods/index.html index 598f220..3a350d8 100644 --- a/Developers/payment-methods/index.html +++ b/Developers/payment-methods/index.html @@ -55,7 +55,7 @@ - + @@ -2676,27 +2676,9 @@

Intermediate Transfer Payment - - - - @@ -2792,8 +2774,6 @@

Intermediate Transfer Payment - - diff --git a/Developers/sdk/index.html b/Developers/sdk/index.html index 16ea91e..c169f10 100644 --- a/Developers/sdk/index.html +++ b/Developers/sdk/index.html @@ -55,7 +55,7 @@ - + @@ -2723,19 +2723,31 @@ -

XGA auction winners are granted future block space via a token, which is used with submission of transactions for inclusion in the beta block. Budding bidders can register themselves with the protocol to participate in beta block auctions. Thereupon custom implementations will be required to bid and submit transactions. Technical details are provided herein.

-

Technical Overview: -- Bidding: - - Connect to L2 RPC - - Bridge eth to L2 - - Understand auction contracts - - Deploy custom bidding strategy contract -- Submitting bundles: - - Beta Bundle RPC - - Bundle JSON Requests and Responses

-

Full working examples are available for: -- Zero latency open bidder contract -- Bundle submissions

+

XGA auction winners are granted future block space via a token, which is used +with submission of transactions for inclusion in the beta block. Budding bidders +can register themselves with the protocol to participate in beta block auctions. +Thereupon custom implementations will be required to bid and submit +transactions. Technical details are provided herein.

+

Technical Overview:

+ +

Full working examples are available for:

+

Bidding

L2 RPC

@@ -2543,9 +2543,9 @@

onlyAuctioneergetValidatorList

Get validator list

-

function getValidatorList() external view returns (address[] memory validators);
+
function getValidatorList() external view returns (address[] memory validators);
 
-Returns

+

Returns

@@ -2564,9 +2564,9 @@

getValidatorListgetTotalPayout

Get total payouts

-

function getTotalPayout() external view returns (uint256 total);
+
function getTotalPayout() external view returns (uint256 total);
 
-Returns

+

Returns

@@ -2593,9 +2593,9 @@

payoutupdateBridge

Updates the address of the L2 bridge contract.

-

function updateBridge(address _bridge) external onlyOwner;
+
function updateBridge(address _bridge) external onlyOwner;
 
-Parameters

+

Parameters

@@ -2614,9 +2614,9 @@

updateBridge

updateMinGasLimit

Updates the minimum gas limit for L2 bridge transactions.

-

function updateMinGasLimit(uint32 _minGasLimit) external onlyOwner;
+
function updateMinGasLimit(uint32 _minGasLimit) external onlyOwner;
 
-Parameters

+

Parameters

@@ -2635,9 +2635,9 @@

updateMinGasLimitupdateMinPayout

Updates the minimum threshold balance for L1 validator payouts.

-

function updateMinPayout(uint256 _minPayout) external onlyOwner;
+
function updateMinPayout(uint256 _minPayout) external onlyOwner;
 
-Parameters

+

Parameters

@@ -2656,9 +2656,9 @@

updateMinPayoutregisterValidator

Registers a validator.

-

function registerValidator(address validator, uint256 numValidators) public onlyOwner;
+
function registerValidator(address validator, uint256 numValidators) public onlyOwner;
 
-Parameters

+

Parameters

@@ -2682,9 +2682,9 @@

registerValidatorupdateNumValidators

Updates a number of registered a validators.

-

function updateNumValidators(address validator, uint256 numValidators) external onlyOwner;
+
function updateNumValidators(address validator, uint256 numValidators) external onlyOwner;
 
-Parameters

+

Parameters

@@ -2708,9 +2708,9 @@

updateNumValidatorsunregisterValidator

Unregisters a validator.

-

function unregisterValidator(address validator) public onlyOwner;
+
function unregisterValidator(address validator) public onlyOwner;
 
-Parameters

+

Parameters

@@ -2729,9 +2729,9 @@

unregisterValidatorregisterBatchValidators

Registers a batch of validators.

-

function registerBatchValidators(address[] calldata validators, uint256[] calldata numValidators) external onlyOwner;
+
function registerBatchValidators(address[] calldata validators, uint256[] calldata numValidators) external onlyOwner;
 
-Parameters

+

Parameters

@@ -2755,9 +2755,9 @@

registerBatchValidators

unregisterBatchValidators

Unregisters a batch of validators.

-

function unregisterBatchValidators(address[] calldata validators) external onlyOwner;
+
function unregisterBatchValidators(address[] calldata validators) external onlyOwner;
 
-Parameters

+

Parameters

@@ -2776,9 +2776,9 @@

unregisterBatchValidatorsupdateAuctioneer

Updates auctioneer address

-

function updateAuctioneer(address _auctioneer) external onlyOwner;
+
function updateAuctioneer(address _auctioneer) external onlyOwner;
 
-Parameters

+

Parameters

@@ -2797,9 +2797,9 @@

updateAuctioneerremoveValidatorFromArray

Removes a validator address from the activeValidators array.

-

function removeValidatorFromArray(address validator) internal;
+
function removeValidatorFromArray(address validator) internal;
 
-Parameters

+

Parameters

@@ -2837,27 +2837,6 @@

ThresholdBalanceNotMet - - - - - - - May 22, 2024 - - - - - - - @@ -2916,8 +2895,6 @@

ThresholdBalanceNotMet - - diff --git a/Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/index.html b/Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/index.html index 798cf00..dd324a2 100644 --- a/Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/index.html +++ b/Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/index.html @@ -51,7 +51,7 @@ - + @@ -2445,8 +2445,8 @@

Auctioneer

Git Source

-

Inherits: -ERC6909, Ownable2Step

+

Inherits: ERC6909, +Ownable2Step

Implements an auction mechanism for selling block space.

State Variables

maxBidder

@@ -2497,9 +2497,9 @@

onlyOperator

newBidder

Add a new bidder to the auction.

-

function newBidder(address additionalBidder) external onlyOwner returns (uint8 newId);
+
function newBidder(address additionalBidder) external onlyOwner returns (uint8 newId);
 
-Parameters

+

Parameters

@@ -2518,9 +2518,9 @@

newBidderremoveBidder

Remove a bidder from the auction.

-

function removeBidder(uint8 bidderId) external onlyOwner;
+
function removeBidder(uint8 bidderId) external onlyOwner;
 
-Parameters

+

Parameters

@@ -2539,9 +2539,9 @@

removeBidder

changeOperator

Change operator of the auction.

-

function changeOperator(address newOperator) external onlyOwner;
+
function changeOperator(address newOperator) external onlyOwner;
 
-Parameters

+

Parameters

@@ -2560,9 +2560,9 @@

changeOperatoropenAuction

Open a new auction for a specific slot.

-

function openAuction(uint256 slot, uint120 itemsForSale) external onlyOperator;
+
function openAuction(uint256 slot, uint120 itemsForSale) external onlyOperator;
 
-Parameters

+

Parameters

@@ -2586,9 +2586,9 @@

openAuction

bid

Bid function for bidders to submit manual bids.

-

function bid(uint256 slot, uint256[] memory packedBids) external;
+
function bid(uint256 slot, uint256[] memory packedBids) external;
 
-Parameters

+

Parameters

@@ -2612,9 +2612,9 @@

bid¶<

runAndSettle

Execute the auction for a specific slot.

-

function runAndSettle(uint256 slot) public onlyOperator;
+
function runAndSettle(uint256 slot) public onlyOperator;
 
-Parameters

+

Parameters

@@ -2633,9 +2633,9 @@

runAndSettle

payout

Payout revenue from auction to validators

-

function payout(uint256 slot) external onlyOperator;
+
function payout(uint256 slot) external onlyOperator;
 
-Parameters

+

Parameters

@@ -2654,9 +2654,9 @@

payoutrefund

Refund revenue from auction to bidders

-

function refund(uint256 slot) external onlyOperator;
+
function refund(uint256 slot) external onlyOperator;
 
-Parameters

+

Parameters

@@ -2675,9 +2675,9 @@

refundgetBidderInfo

Retrieve information about a bidder after auction settlement.

-

function getBidderInfo(uint256 slot, address bidder) external view returns (uint120 itemsBought, uint128 amountOwed);
+
function getBidderInfo(uint256 slot, address bidder) external view returns (uint120 itemsBought, uint128 amountOwed);
 
-Parameters

+

Parameters

@@ -2723,9 +2723,9 @@

getBidderInfo

packBid

Packed Bid details into a uint256 for submission.

-

function packBid(uint128 bidPrice, uint120 itemsToBuy, uint8 bidderId) external pure returns (uint256 packedBid);
+
function packBid(uint128 bidPrice, uint120 itemsToBuy, uint8 bidderId) external pure returns (uint256 packedBid);
 
-Parameters

+

Parameters

@@ -2771,9 +2771,9 @@

packBiddecodeBid

Decode the packed bid information.

-

function decodeBid(uint256 packedBid) internal pure returns (uint8 bidderId, uint120 itemsToBuy, uint128 bidPrice);
+
function decodeBid(uint256 packedBid) internal pure returns (uint8 bidderId, uint120 itemsToBuy, uint128 bidPrice);
 
-Parameters

+

Parameters

@@ -2819,9 +2819,9 @@

decodeBidcalcAverageBid

Calculate average bid price for the last n auctions

-

function calcAverageBid(uint256 numAuctions) external view returns (uint128 avBidPrice);
+
function calcAverageBid(uint256 numAuctions) external view returns (uint128 avBidPrice);
 
-Parameters

+

Parameters

@@ -2857,7 +2857,7 @@

calcAverageBidcheckAndStoreBid

Check the validity of a bid.

-

function checkAndStoreBid(
+
function checkAndStoreBid(
     bool revertInvalid,
     address bidder,
     uint256 slot,
@@ -2865,7 +2865,7 @@ 

checkAndStoreBid uint256[] memory packedBids ) internal;

-Parameters

+

Parameters

@@ -2991,27 +2991,6 @@

BidderInfo - - - - - - - May 22, 2024 - - - - - - - @@ -3070,8 +3049,6 @@

BidderInfo - - diff --git a/Rulebook/contracts/Auctioneer.sol/interface.Bidder/index.html b/Rulebook/contracts/Auctioneer.sol/interface.Bidder/index.html index 40091ee..ee5c604 100644 --- a/Rulebook/contracts/Auctioneer.sol/interface.Bidder/index.html +++ b/Rulebook/contracts/Auctioneer.sol/interface.Bidder/index.html @@ -51,7 +51,7 @@ - + @@ -2448,9 +2448,9 @@

BidderFunctions

getBid

Get the bid from a bidder for a specific slot and round.

-

function getBid(uint256 slot) external view returns (uint256[] memory packedBids);
+
function getBid(uint256 slot) external view returns (uint256[] memory packedBids);
 
-Parameters

+

Parameters

@@ -2491,27 +2491,6 @@

getBid - - - - - - - May 22, 2024 - - - - - - - @@ -2570,8 +2549,6 @@

getBid - - diff --git a/Rulebook/contracts/Auctioneer.sol/interface.IAccountant/index.html b/Rulebook/contracts/Auctioneer.sol/interface.IAccountant/index.html index c6accaa..a9bb4b7 100644 --- a/Rulebook/contracts/Auctioneer.sol/interface.IAccountant/index.html +++ b/Rulebook/contracts/Auctioneer.sol/interface.IAccountant/index.html @@ -51,7 +51,7 @@ - + @@ -2462,27 +2462,6 @@

minPayout - - - - - - - May 22, 2024 - - - - - - - @@ -2541,8 +2520,6 @@

minPayout - - diff --git a/Rulebook/contracts/L1Holding.sol/contract.L1Holding/index.html b/Rulebook/contracts/L1Holding.sol/contract.L1Holding/index.html index b080fd6..420dbe3 100644 --- a/Rulebook/contracts/L1Holding.sol/contract.L1Holding/index.html +++ b/Rulebook/contracts/L1Holding.sol/contract.L1Holding/index.html @@ -51,7 +51,7 @@ - + @@ -2447,8 +2447,7 @@

L1HoldingGit Source

Inherits: Ownable2Step

-

Author: -MEV Protocol

+

Author: MEV Protocol

Pays out L1 builder payments to L2 Accountant

State Variables

minGasLimit

@@ -2466,9 +2465,9 @@

bridgeFunctions

constructor

Initializes the L1Holding contract.

-

constructor(address _accountant, address _bridge) Ownable2Step(msg.sender);
+
constructor(address _accountant, address _bridge) Ownable2Step(msg.sender);
 
-Parameters

+

Parameters

@@ -2500,9 +2499,9 @@

payAccounatnt

updateAccountant

Updates the L2 accountant address.

-

function updateAccountant(address _accountant) external onlyOwner;
+
function updateAccountant(address _accountant) external onlyOwner;
 
-Parameters

+

Parameters

@@ -2521,9 +2520,9 @@

updateAccountantupdateBridge

Updates the address of the L2 bridge contract.

-

function updateBridge(address _bridge) external onlyOwner;
+
function updateBridge(address _bridge) external onlyOwner;
 
-Parameters

+

Parameters

@@ -2542,9 +2541,9 @@

updateBridge

updateMinGasLimit

Updates the minimum gas limit for L2 bridge transactions.

-

function updateMinGasLimit(uint32 _minGasLimit) external onlyOwner;
+
function updateMinGasLimit(uint32 _minGasLimit) external onlyOwner;
 
-Parameters

+

Parameters

@@ -2575,27 +2574,6 @@

PaymentSent - - - - - - - May 22, 2024 - - - - - - - @@ -2654,8 +2632,6 @@

PaymentSent - - diff --git a/Rulebook/contracts/SettlementHouse.sol/contract.SettlementHouse/index.html b/Rulebook/contracts/SettlementHouse.sol/contract.SettlementHouse/index.html index 53d3c65..75c15cc 100644 --- a/Rulebook/contracts/SettlementHouse.sol/contract.SettlementHouse/index.html +++ b/Rulebook/contracts/SettlementHouse.sol/contract.SettlementHouse/index.html @@ -51,7 +51,7 @@ - + @@ -2458,10 +2458,11 @@

bundlesFunctions

constructor

-

Constructor to initialize the contract with the futures token contract address.

-

constructor(IERC6909 _futuresToken);
+

Constructor to initialize the contract with the futures token contract +address.

+
constructor(IERC6909 _futuresToken);
 
-Parameters

+

Parameters

@@ -2507,27 +2508,6 @@

Bundle - - - - - - - May 22, 2024 - - - - - - - @@ -2586,8 +2566,6 @@

Bundle - - diff --git a/Rulebook/contracts/auth/Ownable2Step.sol/abstract.Ownable2Step/index.html b/Rulebook/contracts/auth/Ownable2Step.sol/abstract.Ownable2Step/index.html deleted file mode 100644 index 1ee3092..0000000 --- a/Rulebook/contracts/auth/Ownable2Step.sol/abstract.Ownable2Step/index.html +++ /dev/null @@ -1,2583 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - Ownable2Step - XGA Auctions Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - - - -
- - - - - - - -
- -
- - - - -
-
- - - -
-
-
- - - - - - - - - -
-
-
- - - - -
- - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -

Ownable2Step

-

Git Source

-

Inherits: -Owned

-

An abstract contract that extends the Owned contract and provides a two-step ownership -transfer mechanism. -The contract allows the current owner to initiate a transfer of ownership to a new account. The -new owner must then -explicitly accept the ownership transfer to complete the process. -This contract emits an OwnershipTransferStarted event when the ownership transfer is initiated, -and an -OwnershipTransferred event when the transfer is completed.

-

State Variables

-

pendingOwner

-
address public pendingOwner;
-
-

Functions

-

constructor

-
constructor(address _owner) Owned(_owner);
-
-

onlyPendingOwner

-
modifier onlyPendingOwner() virtual;
-
-

transferOwnership

-

Starts the ownership transfer of the contract to a new account. Replaces the pending -transfer if there is one. -Can only be called by the current owner.

-
function transferOwnership(address newOwner) public virtual override onlyOwner;
-
-

_transferOwnership

-

Transfers ownership of the contract to a new account (newOwner) and deletes any pending -owner. -Internal function without access restriction.

-
function _transferOwnership(address newOwner) internal virtual;
-
-

acceptOwnership

-

The new owner accepts the ownership transfer.

-
function acceptOwnership() public virtual onlyPendingOwner;
-
-

Events

-

OwnershipTransferStarted

-
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);
-
- - - - - - - - - - - - - - - - - - - - -
-
- - - -
- - - -
- -
- - - - -
- -
-
-
-
- -
- - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Rulebook/contracts/auth/index.html b/Rulebook/contracts/auth/index.html deleted file mode 100644 index 71cae7e..0000000 --- a/Rulebook/contracts/auth/index.html +++ /dev/null @@ -1,2545 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - Contents - XGA Auctions Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - - - -
- - - - - - - -
- -
- - - - -
-
- - - -
-
-
- - - - - - - - - -
-
-
- - - - -
- - - - - - - - - - -
- - - -
- - - -
- -
- - - - -
- -
-
-
-
- -
- - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Rulebook/contracts/auth/solady.auth.sol/abstract.Owned/index.html b/Rulebook/contracts/auth/solady.auth.sol/abstract.Owned/index.html deleted file mode 100644 index 0b50fb7..0000000 --- a/Rulebook/contracts/auth/solady.auth.sol/abstract.Owned/index.html +++ /dev/null @@ -1,2563 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - Owned - XGA Auctions Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - - - -
- - - - - - - -
- -
- - - - -
-
- - - -
-
-
- - - - - - - - - -
-
-
- - - - -
- - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -

Owned

-

Git Source

-

Author: -Solmate (https://github.com/transmissions11/solmate/blob/main/src/auth/Owned.sol)

-

Simple single owner authorization mixin.

-

State Variables

-

owner

-
address public owner;
-
-

Functions

-

onlyOwner

-
modifier onlyOwner() virtual;
-
-

constructor

-
constructor(address _owner);
-
-

transferOwnership

-
function transferOwnership(address newOwner) public virtual onlyOwner;
-
-

Events

-

OwnershipTransferred

-
event OwnershipTransferred(address indexed user, address indexed newOwner);
-
- - - - - - - - - - - - - - - - - - - - -
-
- - - -
- - - -
- -
- - - - -
- -
-
-
-
- -
- - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Rulebook/contracts/index.html b/Rulebook/contracts/index.html index cedcfad..d1edd52 100644 --- a/Rulebook/contracts/index.html +++ b/Rulebook/contracts/index.html @@ -51,7 +51,7 @@ - + @@ -2453,7 +2453,7 @@

ContentsAuctioneer
  • L1Holding
  • SettlementHouse
  • -
  • LibSort
  • +
  • LibSort
  • @@ -2462,27 +2462,6 @@

    Contents - - - - - - - May 22, 2024 - - - - - - - @@ -2541,8 +2520,6 @@

    Contents - - diff --git a/Rulebook/contracts/interfaces/IERC6909.sol/interface.IERC6909/index.html b/Rulebook/contracts/interfaces/IERC6909.sol/interface.IERC6909/index.html index c31528c..0b9e88e 100644 --- a/Rulebook/contracts/interfaces/IERC6909.sol/interface.IERC6909/index.html +++ b/Rulebook/contracts/interfaces/IERC6909.sol/interface.IERC6909/index.html @@ -51,7 +51,7 @@ - + @@ -2445,14 +2445,13 @@

    IERC6909

    Git Source

    -

    Author: -jtriley.eth

    +

    Author: jtriley.eth

    Functions

    balanceOf

    Owner balance of an id.

    -

    function balanceOf(address owner, uint256 id) external view returns (uint256 amount);
    +
    function balanceOf(address owner, uint256 id) external view returns (uint256 amount);
     
    -Parameters

    +

    Parameters

    @@ -2493,9 +2492,9 @@

    balanceOfallowance

    Spender allowance of an id.

    -

    function allowance(address owner, address spender, uint256 id) external view returns (uint256 amount);
    +
    function allowance(address owner, address spender, uint256 id) external view returns (uint256 amount);
     
    -Parameters

    +

    Parameters

    @@ -2541,9 +2540,9 @@

    allowanceisOperator

    Checks if a spender is approved by an owner as an operator

    -

    function isOperator(address owner, address spender) external view returns (bool approved);
    +
    function isOperator(address owner, address spender) external view returns (bool approved);
     
    -Parameters

    +

    Parameters

    @@ -2584,9 +2583,9 @@

    isOperatortransfer

    Transfers an amount of an id from the caller to a receiver.

    -

    function transfer(address receiver, uint256 id, uint256 amount) external returns (bool);
    +
    function transfer(address receiver, uint256 id, uint256 amount) external returns (bool);
     
    -Parameters

    +

    Parameters

    @@ -2615,9 +2614,9 @@

    transfertransferFrom

    Transfers an amount of an id from a sender to a receiver.

    -

    function transferFrom(address sender, address receiver, uint256 id, uint256 amount) external returns (bool);
    +
    function transferFrom(address sender, address receiver, uint256 id, uint256 amount) external returns (bool);
     
    -Parameters

    +

    Parameters

    @@ -2651,9 +2650,9 @@

    transferFrom

    approve

    Approves an amount of an id to a spender.

    -

    function approve(address spender, uint256 id, uint256 amount) external returns (bool);
    +
    function approve(address spender, uint256 id, uint256 amount) external returns (bool);
     
    -Parameters

    +

    Parameters

    @@ -2682,9 +2681,9 @@

    approvesetOperator

    Sets or removes a spender as an operator for the caller.

    -

    function setOperator(address spender, bool approved) external returns (bool);
    +
    function setOperator(address spender, bool approved) external returns (bool);
     
    -Parameters

    +

    Parameters

    @@ -2822,27 +2821,6 @@

    Approval - - - - - - - May 22, 2024 - - - - - - - @@ -2901,8 +2879,6 @@

    Approval - - diff --git a/Rulebook/contracts/interfaces/IL1Bridge.sol/interface.IL1Bridge/index.html b/Rulebook/contracts/interfaces/IL1Bridge.sol/interface.IL1Bridge/index.html index a2d9a2f..4d0acb7 100644 --- a/Rulebook/contracts/interfaces/IL1Bridge.sol/interface.IL1Bridge/index.html +++ b/Rulebook/contracts/interfaces/IL1Bridge.sol/interface.IL1Bridge/index.html @@ -51,7 +51,7 @@ - + @@ -2447,14 +2447,14 @@

    IL1BridgeGit Source

    Functions

    depositETHTo

    -

    Deposits some amount of ETH into a target account on L2. -Note that if ETH is sent to a contract on L2 and the call fails, then that ETH will -be locked in the L2StandardBridge. ETH may be recoverable if the call can be -successfully replayed by increasing the amount of gas supplied to the call. If the -call will fail for any amount of gas, then the ETH will be locked permanently.

    -

    function depositETHTo(address _to, uint32 _minGasLimit, bytes calldata _extraData) external payable;
    +

    Deposits some amount of ETH into a target account on L2. Note that if ETH is +sent to a contract on L2 and the call fails, then that ETH will be locked in the +L2StandardBridge. ETH may be recoverable if the call can be successfully +replayed by increasing the amount of gas supplied to the call. If the call will +fail for any amount of gas, then the ETH will be locked permanently.

    +
    function depositETHTo(address _to, uint32 _minGasLimit, bytes calldata _extraData) external payable;
     
    -Parameters

    +

    Parameters

    @@ -2488,27 +2488,6 @@

    depositETHTo - - - - - - - May 22, 2024 - - - - - - - @@ -2567,8 +2546,6 @@

    depositETHTo - - diff --git a/Rulebook/contracts/interfaces/IL2Bridge.sol/interface.IL2Bridge/index.html b/Rulebook/contracts/interfaces/IL2Bridge.sol/interface.IL2Bridge/index.html index bb65b6d..284ccdd 100644 --- a/Rulebook/contracts/interfaces/IL2Bridge.sol/interface.IL2Bridge/index.html +++ b/Rulebook/contracts/interfaces/IL2Bridge.sol/interface.IL2Bridge/index.html @@ -51,7 +51,7 @@ - + @@ -2447,18 +2447,18 @@

    IL2BridgeGit Source

    Functions

    withdrawTo

    -

    Initiates a withdrawal from L2 to L1 to a target account on L1. -Note that if ETH is sent to a contract on L1 and the call fails, then that ETH will -be locked in the L1StandardBridge. ETH may be recoverable if the call can be -successfully replayed by increasing the amount of gas supplied to the call. If the -call will fail for any amount of gas, then the ETH will be locked permanently. -This function only works with OptimismMintableERC20 tokens or ether. Use the +

    Initiates a withdrawal from L2 to L1 to a target account on L1. Note that if ETH +is sent to a contract on L1 and the call fails, then that ETH will be locked in +the L1StandardBridge. ETH may be recoverable if the call can be successfully +replayed by increasing the amount of gas supplied to the call. If the call will +fail for any amount of gas, then the ETH will be locked permanently. This +function only works with OptimismMintableERC20 tokens or ether. Use the bridgeERC20To function to bridge native L2 tokens to L1.

    -

    function withdrawTo(address _l2Token, address _to, uint256 _amount, uint32 _minGasLimit, bytes calldata _extraData)
    +
    function withdrawTo(address _l2Token, address _to, uint256 _amount, uint32 _minGasLimit, bytes calldata _extraData)
         external
         payable;
     
    -Parameters

    +

    Parameters

    @@ -2502,27 +2502,6 @@

    withdrawTo - - - - - - - May 22, 2024 - - - - - - - @@ -2581,8 +2560,6 @@

    withdrawTo - - diff --git a/Rulebook/contracts/interfaces/IWETH.sol/interface.IWETH/index.html b/Rulebook/contracts/interfaces/IWETH.sol/interface.IWETH/index.html index 9c7887c..101e239 100644 --- a/Rulebook/contracts/interfaces/IWETH.sol/interface.IWETH/index.html +++ b/Rulebook/contracts/interfaces/IWETH.sol/interface.IWETH/index.html @@ -51,7 +51,7 @@ - + @@ -2459,27 +2459,6 @@

    withdraw - - - - - - - May 22, 2024 - - - - - - - @@ -2538,8 +2517,6 @@

    withdraw - - diff --git a/Rulebook/contracts/interfaces/index.html b/Rulebook/contracts/interfaces/index.html index 69f42a0..e1a6fd0 100644 --- a/Rulebook/contracts/interfaces/index.html +++ b/Rulebook/contracts/interfaces/index.html @@ -51,7 +51,7 @@ - + @@ -2457,27 +2457,6 @@

    Contents - - - - - - - May 22, 2024 - - - - - - - @@ -2536,8 +2515,6 @@

    Contents - - diff --git a/Rulebook/contracts/solady.libsort.sol/library.LibSort/index.html b/Rulebook/contracts/solady.libsort.sol/library.LibSort/index.html deleted file mode 100644 index 60d39e4..0000000 --- a/Rulebook/contracts/solady.libsort.sol/library.LibSort/index.html +++ /dev/null @@ -1,2728 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - LibSort - XGA Auctions Documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - - - -
    - - - - - - - -
    - -
    - - - - -
    -
    - - - -
    -
    -
    - - - - - - - - - -
    -
    -
    - - - - -
    - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - -

    LibSort

    -

    Git Source

    -

    Author: -Solady (https://github.com/vectorized/solady/blob/main/src/utils/Sort.sol)

    -

    Optimized sorts and operations for sorted arrays.

    -

    Functions

    -

    insertionSort

    -

    Sorts the array in-place with insertion sort.

    -
    function insertionSort(uint256[] memory a) internal pure;
    -
    -

    insertionSort

    -

    Sorts the array in-place with insertion sort.

    -
    function insertionSort(int256[] memory a) internal pure;
    -
    -

    insertionSort

    -

    Sorts the array in-place with insertion sort.

    -
    function insertionSort(address[] memory a) internal pure;
    -
    -

    sort

    -

    Sorts the array in-place with intro-quicksort.

    -
    function sort(uint256[] memory a) internal pure;
    -
    -

    sort

    -

    Sorts the array in-place with intro-quicksort.

    -
    function sort(int256[] memory a) internal pure;
    -
    -

    sort

    -

    Sorts the array in-place with intro-quicksort.

    -
    function sort(address[] memory a) internal pure;
    -
    -

    uniquifySorted

    -

    Removes duplicate elements from a ascendingly sorted memory array.

    -
    function uniquifySorted(uint256[] memory a) internal pure;
    -
    -

    uniquifySorted

    -

    Removes duplicate elements from a ascendingly sorted memory array.

    -
    function uniquifySorted(int256[] memory a) internal pure;
    -
    -

    uniquifySorted

    -

    Removes duplicate elements from a ascendingly sorted memory array.

    -
    function uniquifySorted(address[] memory a) internal pure;
    -
    -

    searchSorted

    -

    Returns whether a contains needle, and the index of needle. -index precedence: equal to > nearest before > nearest after.

    -
    function searchSorted(uint256[] memory a, uint256 needle) internal pure returns (bool found, uint256 index);
    -
    -

    searchSorted

    -

    Returns whether a contains needle, and the index of needle. -index precedence: equal to > nearest before > nearest after.

    -
    function searchSorted(int256[] memory a, int256 needle) internal pure returns (bool found, uint256 index);
    -
    -

    searchSorted

    -

    Returns whether a contains needle, and the index of needle. -index precedence: equal to > nearest before > nearest after.

    -
    function searchSorted(address[] memory a, address needle) internal pure returns (bool found, uint256 index);
    -
    -

    reverse

    -

    Reverses the array in-place.

    -
    function reverse(uint256[] memory a) internal pure;
    -
    -

    reverse

    -

    Reverses the array in-place.

    -
    function reverse(int256[] memory a) internal pure;
    -
    -

    reverse

    -

    Reverses the array in-place.

    -
    function reverse(address[] memory a) internal pure;
    -
    -

    isSorted

    -

    Returns whether the array is sorted in ascending order.

    -
    function isSorted(uint256[] memory a) internal pure returns (bool result);
    -
    -

    isSorted

    -

    Returns whether the array is sorted in ascending order.

    -
    function isSorted(int256[] memory a) internal pure returns (bool result);
    -
    -

    isSorted

    -

    Returns whether the array is sorted in ascending order.

    -
    function isSorted(address[] memory a) internal pure returns (bool result);
    -
    -

    isSortedAndUniquified

    -

    Returns whether the array is strictly ascending (sorted and uniquified).

    -
    function isSortedAndUniquified(uint256[] memory a) internal pure returns (bool result);
    -
    -

    isSortedAndUniquified

    -

    Returns whether the array is strictly ascending (sorted and uniquified).

    -
    function isSortedAndUniquified(int256[] memory a) internal pure returns (bool result);
    -
    -

    isSortedAndUniquified

    -

    Returns whether the array is strictly ascending (sorted and uniquified).

    -
    function isSortedAndUniquified(address[] memory a) internal pure returns (bool result);
    -
    -

    difference

    -

    Returns the sorted set difference of a and b. -Note: Behaviour is undefined if inputs are not sorted and uniquified.

    -
    function difference(uint256[] memory a, uint256[] memory b) internal pure returns (uint256[] memory c);
    -
    -

    difference

    -

    Returns the sorted set difference between a and b. -Note: Behaviour is undefined if inputs are not sorted and uniquified.

    -
    function difference(int256[] memory a, int256[] memory b) internal pure returns (int256[] memory c);
    -
    -

    difference

    -

    Returns the sorted set difference between a and b. -Note: Behaviour is undefined if inputs are not sorted and uniquified.

    -
    function difference(address[] memory a, address[] memory b) internal pure returns (address[] memory c);
    -
    -

    intersection

    -

    Returns the sorted set intersection between a and b. -Note: Behaviour is undefined if inputs are not sorted and uniquified.

    -
    function intersection(uint256[] memory a, uint256[] memory b) internal pure returns (uint256[] memory c);
    -
    -

    intersection

    -

    Returns the sorted set intersection between a and b. -Note: Behaviour is undefined if inputs are not sorted and uniquified.

    -
    function intersection(int256[] memory a, int256[] memory b) internal pure returns (int256[] memory c);
    -
    -

    intersection

    -

    Returns the sorted set intersection between a and b. -Note: Behaviour is undefined if inputs are not sorted and uniquified.

    -
    function intersection(address[] memory a, address[] memory b) internal pure returns (address[] memory c);
    -
    -

    union

    -

    Returns the sorted set union of a and b. -Note: Behaviour is undefined if inputs are not sorted and uniquified.

    -
    function union(uint256[] memory a, uint256[] memory b) internal pure returns (uint256[] memory c);
    -
    -

    union

    -

    Returns the sorted set union of a and b. -Note: Behaviour is undefined if inputs are not sorted and uniquified.

    -
    function union(int256[] memory a, int256[] memory b) internal pure returns (int256[] memory c);
    -
    -

    union

    -

    Returns the sorted set union between a and b. -Note: Behaviour is undefined if inputs are not sorted and uniquified.

    -
    function union(address[] memory a, address[] memory b) internal pure returns (address[] memory c);
    -
    -

    _toUints

    -

    Reinterpret cast to an uint256 array.

    -
    function _toUints(int256[] memory a) private pure returns (uint256[] memory casted);
    -
    -

    _toUints

    -

    Reinterpret cast to an uint256 array.

    -
    function _toUints(address[] memory a) private pure returns (uint256[] memory casted);
    -
    -

    _toInts

    -

    Reinterpret cast to an int array.

    -
    function _toInts(uint256[] memory a) private pure returns (int256[] memory casted);
    -
    -

    _toAddresses

    -

    Reinterpret cast to an address array.

    -
    function _toAddresses(uint256[] memory a) private pure returns (address[] memory casted);
    -
    -

    _flipSign

    -

    Converts an array of signed integers to unsigned -integers suitable for sorting or vice versa.

    -
    function _flipSign(int256[] memory a) private pure;
    -
    -

    _searchSorted

    -

    Returns whether a contains needle, and the index of needle. -index precedence: equal to > nearest before > nearest after.

    -
    function _searchSorted(uint256[] memory a, uint256 needle, uint256 signed)
    -    private
    -    pure
    -    returns (bool found, uint256 index);
    -
    -

    _difference

    -

    Returns the sorted set difference of a and b. -Note: Behaviour is undefined if inputs are not sorted and uniquified.

    -
    function _difference(uint256[] memory a, uint256[] memory b, uint256 signed)
    -    private
    -    pure
    -    returns (uint256[] memory c);
    -
    -

    _intersection

    -

    Returns the sorted set intersection between a and b. -Note: Behaviour is undefined if inputs are not sorted and uniquified.

    -
    function _intersection(uint256[] memory a, uint256[] memory b, uint256 signed)
    -    private
    -    pure
    -    returns (uint256[] memory c);
    -
    -

    _union

    -

    Returns the sorted set union of a and b. -Note: Behaviour is undefined if inputs are not sorted and uniquified.

    -
    function _union(uint256[] memory a, uint256[] memory b, uint256 signed) private pure returns (uint256[] memory c);
    -
    - - - - - - - - - - - - - - - - - - - - -
    -
    - - - -
    - - - -
    - -
    - - - - -
    - -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Rulebook/definitions/index.html b/Rulebook/definitions/index.html index d161e8b..762b806 100644 --- a/Rulebook/definitions/index.html +++ b/Rulebook/definitions/index.html @@ -55,7 +55,7 @@ - + @@ -2528,27 +2528,6 @@

    Definitions - - - - - - - May 1, 2024 - - - - - - - @@ -2645,8 +2624,6 @@

    Definitions - - diff --git a/Rulebook/delivery-and-settlement/index.html b/Rulebook/delivery-and-settlement/index.html index 80c2892..be055d7 100644 --- a/Rulebook/delivery-and-settlement/index.html +++ b/Rulebook/delivery-and-settlement/index.html @@ -55,7 +55,7 @@ - + @@ -2528,27 +2528,6 @@

    Submission of Trades - - - - - - - May 1, 2024 - - - - - - - @@ -2645,8 +2624,6 @@

    Submission of Trades - - diff --git a/Rulebook/general/index.html b/Rulebook/general/index.html index 371c4dd..62c133c 100644 --- a/Rulebook/general/index.html +++ b/Rulebook/general/index.html @@ -55,7 +55,7 @@ - + @@ -2528,27 +2528,6 @@

    General - - - - - - - May 1, 2024 - - - - - - - @@ -2645,8 +2624,6 @@

    General - - diff --git a/Rulebook/governance/index.html b/Rulebook/governance/index.html index 1722a67..3b7122a 100644 --- a/Rulebook/governance/index.html +++ b/Rulebook/governance/index.html @@ -55,7 +55,7 @@ - + @@ -2528,27 +2528,6 @@

    200 Governance - - - - - - - May 1, 2024 - - - - - - - @@ -2645,8 +2624,6 @@

    200 Governance - - diff --git a/Rulebook/network-clearing-participants/index.html b/Rulebook/network-clearing-participants/index.html index 045d233..a659226 100644 --- a/Rulebook/network-clearing-participants/index.html +++ b/Rulebook/network-clearing-participants/index.html @@ -55,7 +55,7 @@ - + @@ -2528,27 +2528,6 @@

    - - - - - - - May 1, 2024 - - - - - - - @@ -2645,8 +2624,6 @@

    - - diff --git a/Rulebook/obligations/index.html b/Rulebook/obligations/index.html index aa73ea4..2870e3c 100644 --- a/Rulebook/obligations/index.html +++ b/Rulebook/obligations/index.html @@ -55,7 +55,7 @@ - + @@ -2528,27 +2528,6 @@

    500 Obligations - - - - - - - May 1, 2024 - - - - - - - @@ -2645,8 +2624,6 @@

    500 Obligations - - diff --git a/Rulebook/suspension/index.html b/Rulebook/suspension/index.html index 9f74615..96b359f 100644 --- a/Rulebook/suspension/index.html +++ b/Rulebook/suspension/index.html @@ -55,7 +55,7 @@ - + @@ -2528,27 +2528,6 @@

    600 Suspension and Discipli - - - - - - - @@ -2645,8 +2624,6 @@

    600 Suspension and Discipli - - diff --git a/api/beta-auction/index.html b/api/beta-auction/index.html index 0f2a11d..5c8e3e2 100644 --- a/api/beta-auction/index.html +++ b/api/beta-auction/index.html @@ -55,7 +55,7 @@ - + @@ -2560,27 +2560,9 @@

    Beta Block - - - - - - - March 29, 2024 - - - - - - - - @@ -2676,8 +2658,6 @@

    Beta Block - - diff --git a/api/bundle/index.html b/api/bundle/index.html index e101744..73430f6 100644 --- a/api/bundle/index.html +++ b/api/bundle/index.html @@ -55,7 +55,7 @@ - + @@ -2560,27 +2560,9 @@

    Bundle API - - - - - - - March 25, 2024 - - - - - - - - @@ -2676,8 +2658,6 @@

    Bundle API - - diff --git a/api/index.html b/api/index.html index b570391..25d397c 100644 --- a/api/index.html +++ b/api/index.html @@ -55,7 +55,7 @@ - + @@ -2680,27 +2680,9 @@

    80 requests per minute is - - - - @@ -2796,8 +2778,6 @@

    80 requests per minute is - - diff --git a/api/relay/index.html b/api/relay/index.html index d9a8179..3220253 100644 --- a/api/relay/index.html +++ b/api/relay/index.html @@ -6,7 +6,7 @@ - + @@ -55,7 +55,7 @@ - + @@ -1286,8 +1286,23 @@ - + @@ -1305,6 +1320,346 @@ + + + + @@ -2503,8 +2858,1933 @@ -

    Relay REST API

    -

    !!swagger relay-oapi.yaml!!

    +

    Relay REST API

    +

    Extended from the Relay spec

    + + +

    Relay API dev

    +

    API specification for MEV-Boost PBS relays.

    +
    +
    + Contact: GitHub Repository +
    + +
    + License: CC0-1.0 +
    + +

    Servers

    +

    + + + + + + + + + + + + +
    DescriptionURL
    {server_url} + {server_url} +
    + +

    Builder

    +
    + +

    GET /relay/v1/builder/validators

    +

    Get a list of validator registrations for validators scheduled to propose +in the current and next epoch.

    +
    +Description +
      +
    • +

      Used by builders to know when to submit bids for an upcoming proposal.

      +
    • +
    • +

      Returns an array of validator registrations for the current and next +epoch.

      +
    • +
    • +

      Each entry includes a slot and the validator with assigned duty.

      +
    • +
    • +

      Slots without a registered validator are omitted.

      +
    • +
    +
    +

    + Response 200 OK +

    + +
    +
    +
    +

    [
    +    {
    +        "slot": "1",
    +        "validator_index": "1",
    +        "entry": {
    +            "message": {
    +                "fee_recipient": "0xAbcF8e0d4e9587369b2301D0790347320302cc09",
    +                "gas_limit": "1",
    +                "timestamp": "1",
    +                "pubkey": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a"
    +            },
    +            "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505"
    +        }
    +    }
    +]
    +
    +⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

    +
    +Schema of the response body +
    {
    +    "type": "array",
    +    "items": {
    +        "type": "object",
    +        "properties": {
    +            "slot": {
    +                "type": "string",
    +                "example": "1"
    +            },
    +            "validator_index": {
    +                "type": "string",
    +                "example": "1"
    +            },
    +            "entry": {
    +                "type": "object",
    +                "description": "The `SignedValidatorRegistration` object from the Builder API specification.",
    +                "required": [
    +                    "message",
    +                    "signature"
    +                ],
    +                "properties": {
    +                    "message": {
    +                        "type": "object",
    +                        "description": "The `ValidatorRegistration` object from the Builder API specification.",
    +                        "required": [
    +                            "fee_recipient",
    +                            "gas_limit",
    +                            "timestamp",
    +                            "pubkey"
    +                        ],
    +                        "properties": {
    +                            "fee_recipient": {
    +                                "description": "Address to receive fees from the block.",
    +                                "type": "string",
    +                                "format": "hex",
    +                                "example": "0xAbcF8e0d4e9587369b2301D0790347320302cc09",
    +                                "pattern": "^0x[a-fA-F0-9]{40}$"
    +                            },
    +                            "gas_limit": {
    +                                "description": "Preferred gas limit of validator.",
    +                                "type": "string",
    +                                "example": "1"
    +                            },
    +                            "timestamp": {
    +                                "description": "Unix timestamp of registration.",
    +                                "type": "string",
    +                                "example": "1"
    +                            },
    +                            "pubkey": {
    +                                "description": "BLS public key of validator.",
    +                                "type": "string",
    +                                "format": "hex",
    +                                "pattern": "^0x[a-fA-F0-9]{96}$",
    +                                "example": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a"
    +                            }
    +                        }
    +                    },
    +                    "signature": {
    +                        "type": "string",
    +                        "format": "hex",
    +                        "pattern": "^0x[a-fA-F0-9]{192}$",
    +                        "example": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505"
    +                    }
    +                }
    +            }
    +        }
    +    }
    +}
    +
    +
    +
    +
    +
    +
    + +

    POST /relay/v1/builder/blocks

    +

    Submit a new block to the relay.

    +
    +Description +
      +
    • +

      Blocks can be submitted as JSON or SSZ, and optionally GZIP encoded. To be + clear, there are four options: JSON, JSON+GZIP, SSZ, SSZ+GZIP. If JSON, +the + content type should be application/json. If SSZ, the content type should + be application/octet-stream.

      +
    • +
    • +

      To enable GZIP compression for the request body, the HTTP content encoding + should be gzip. Compression is optional.

      +
    • +
    • +

      The relay will simulate the block to verify properties and proposer + payment in the payment transaction from builder to proposer + fee_recipient at the end of block.

      +
    • +
    • +

      For accountability, builder signature is over the SSZ encoded message.

      +
    • +
    • +

      The message, which does not include the transactions, will be made + public via the data API, allowing anyone to verify the builder signature.

      +
    • +
    • +

      Any new submission by a builder will overwrite a previous one by the same + builder_pubkey, even if it is less profitable.

      +
    • +
    +
    +

    Input parameters

    + + + + + + + + + + + + + + + + + + + + + +
    ParameterInTypeDefaultNullableDescription
    cancellationsquerystringNoIf set to 1, opt into bid cancellations.
    +

    Request body

    + +
    +
    +
    +
    {
    +    "message": {
    +        "slot": "1",
    +        "parent_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +        "block_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +        "builder_pubkey": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a",
    +        "proposer_fee_recipient": "0xabcf8e0d4e9587369b2301d0790347320302cc09",
    +        "gas_limit": "1",
    +        "gas_used": "1",
    +        "value": "1"
    +    },
    +    "execution_payload": {
    +        "parent_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +        "fee_recipient": "0xabcf8e0d4e9587369b2301d0790347320302cc09",
    +        "state_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +        "receipts_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +        "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    +        "prev_randao": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +        "block_number": "1",
    +        "gas_limit": "1",
    +        "gas_used": "1",
    +        "timestamp": "1",
    +        "extra_data": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +        "base_fee_per_gas": "1",
    +        "block_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +        "transactions": [
    +            "0x02f878831469668303f51d843b9ac9f9843b9aca0082520894c93269b73096998db66be0441e836d873535cb9c8894a19041886f000080c001a031cc29234036afbf9a1fb9476b463367cb1f957ac0b919b69bbc798436e604aaa018c4e9c3914eb27aadd0b91e10b18655739fcf8c1fc398763a9f1beecb8ddc86"
    +        ]
    +    },
    +    "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505"
    +}
    +
    +
    {
    +    "message": {
    +        "slot": "1",
    +        "parent_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +        "block_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +        "builder_pubkey": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a",
    +        "proposer_fee_recipient": "0xabcf8e0d4e9587369b2301d0790347320302cc09",
    +        "gas_limit": "1",
    +        "gas_used": "1",
    +        "value": "1"
    +    },
    +    "execution_payload": {
    +        "parent_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +        "fee_recipient": "0xabcf8e0d4e9587369b2301d0790347320302cc09",
    +        "state_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +        "receipts_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +        "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    +        "prev_randao": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +        "block_number": "1",
    +        "gas_limit": "1",
    +        "gas_used": "1",
    +        "timestamp": "1",
    +        "extra_data": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +        "base_fee_per_gas": "1",
    +        "block_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +        "transactions": [
    +            "0x02f878831469668303f51d843b9ac9f9843b9aca0082520894c93269b73096998db66be0441e836d873535cb9c8894a19041886f000080c001a031cc29234036afbf9a1fb9476b463367cb1f957ac0b919b69bbc798436e604aaa018c4e9c3914eb27aadd0b91e10b18655739fcf8c1fc398763a9f1beecb8ddc86"
    +        ],
    +        "withdrawals": [
    +            {
    +                "index": "1",
    +                "validator_index": "1",
    +                "address": "0xabcf8e0d4e9587369b2301d0790347320302cc09",
    +                "amount": "32000000000"
    +            }
    +        ]
    +    },
    +    "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505"
    +}
    +
    +
    {
    +    "message": {
    +        "slot": "1",
    +        "parent_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +        "block_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +        "builder_pubkey": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a",
    +        "proposer_fee_recipient": "0xabcf8e0d4e9587369b2301d0790347320302cc09",
    +        "gas_limit": "1",
    +        "gas_used": "1",
    +        "value": "1"
    +    },
    +    "execution_payload": {
    +        "parent_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +        "fee_recipient": "0xabcf8e0d4e9587369b2301d0790347320302cc09",
    +        "state_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +        "receipts_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +        "logs_bloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    +        "prev_randao": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +        "block_number": "1",
    +        "gas_limit": "1",
    +        "gas_used": "1",
    +        "timestamp": "1",
    +        "extra_data": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +        "base_fee_per_gas": "1",
    +        "block_hash": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +        "transactions": [
    +            "0x02f878831469668303f51d843b9ac9f9843b9aca0082520894c93269b73096998db66be0441e836d873535cb9c8894a19041886f000080c001a031cc29234036afbf9a1fb9476b463367cb1f957ac0b919b69bbc798436e604aaa018c4e9c3914eb27aadd0b91e10b18655739fcf8c1fc398763a9f1beecb8ddc86"
    +        ],
    +        "withdrawals": [
    +            {
    +                "index": "1",
    +                "validator_index": "1",
    +                "address": "0xabcf8e0d4e9587369b2301d0790347320302cc09",
    +                "amount": "32000000000"
    +            }
    +        ]
    +    },
    +    "blobs_bundle": {
    +        "commitments": [
    +            "0x8dab030c51e16e84be9caab84ee3d0b8bbec1db4a0e4de76439da8424d9b957370a10a78851f97e4b54d2ce1ab0d686f"
    +        ],
    +        "proofs": [
    +            "0xb4021b0de10f743893d4f71e1bf830c019e832958efd6795baf2f83b8699a9eccc5dc99015d8d4d8ec370d0cc333c06a"
    +        ],
    +        "blobs": [
    +            "0x24564723180fcb3d994104538d351c8dcbde12d541676bb736cf678018ca4739"
    +        ]
    +    },
    +    "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505"
    +}
    +
    +
    +Schema of the request body +
    {
    +    "oneOf": [
    +        {
    +            "allOf": [
    +                {
    +                    "type": "object",
    +                    "properties": {
    +                        "message": {
    +                            "type": "object",
    +                            "properties": {
    +                                "slot": {
    +                                    "type": "string",
    +                                    "example": "1"
    +                                },
    +                                "parent_hash": {
    +                                    "type": "string",
    +                                    "format": "hex",
    +                                    "example": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +                                    "pattern": "^0x[a-fA-F0-9]{64}$"
    +                                },
    +                                "block_hash": {
    +                                    "type": "string",
    +                                    "format": "hex",
    +                                    "example": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +                                    "pattern": "^0x[a-fA-F0-9]{64}$"
    +                                },
    +                                "builder_pubkey": {
    +                                    "type": "string",
    +                                    "format": "hex",
    +                                    "pattern": "^0x[a-fA-F0-9]{96}$",
    +                                    "description": "The validator's BLS public key, uniquely identifying them. _48-bytes, hex encoded with 0x prefix, case insensitive._",
    +                                    "example": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a"
    +                                },
    +                                "proposer_pubkey": {
    +                                    "type": "string",
    +                                    "format": "hex",
    +                                    "pattern": "^0x[a-fA-F0-9]{96}$",
    +                                    "description": "The validator's BLS public key, uniquely identifying them. _48-bytes, hex encoded with 0x prefix, case insensitive._",
    +                                    "example": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a"
    +                                },
    +                                "proposer_fee_recipient": {
    +                                    "type": "string",
    +                                    "format": "hex",
    +                                    "description": "An address on the execution (Ethereum 1) network.",
    +                                    "example": "0xAbcF8e0d4e9587369b2301D0790347320302cc09",
    +                                    "pattern": "^0x[a-fA-F0-9]{40}$"
    +                                },
    +                                "gas_limit": {
    +                                    "type": "string",
    +                                    "example": "1"
    +                                },
    +                                "gas_used": {
    +                                    "type": "string",
    +                                    "example": "1"
    +                                },
    +                                "value": {
    +                                    "type": "string",
    +                                    "example": "1"
    +                                }
    +                            }
    +                        },
    +                        "signature": {
    +                            "type": "string",
    +                            "format": "hex",
    +                            "pattern": "^0x[a-fA-F0-9]{192}$",
    +                            "example": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505"
    +                        }
    +                    }
    +                },
    +                {
    +                    "type": "object",
    +                    "properties": {
    +                        "execution_payload": {
    +                            "allOf": [
    +                                {
    +                                    "type": "object",
    +                                    "description": "The [`ExecutionPayload`](https://github.com/ethereum/consensus-specs/blob/v1.3.0/specs/bellatrix/beacon-chain.md#executionpayload) object from the CL Bellatrix spec.",
    +                                    "required": [
    +                                        "parent_hash",
    +                                        "fee_recipient",
    +                                        "state_root",
    +                                        "receipts_root",
    +                                        "logs_bloom",
    +                                        "prev_randao",
    +                                        "block_number",
    +                                        "gas_limit",
    +                                        "gas_used",
    +                                        "timestamp",
    +                                        "extra_data",
    +                                        "base_fee_per_gas",
    +                                        "block_hash"
    +                                    ],
    +                                    "properties": {
    +                                        "parent_hash": {
    +                                            "type": "string",
    +                                            "format": "hex",
    +                                            "example": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +                                            "pattern": "^0x[a-fA-F0-9]{64}$"
    +                                        },
    +                                        "fee_recipient": {
    +                                            "type": "string",
    +                                            "format": "hex",
    +                                            "description": "An address on the execution (Ethereum 1) network.",
    +                                            "example": "0xAbcF8e0d4e9587369b2301D0790347320302cc09",
    +                                            "pattern": "^0x[a-fA-F0-9]{40}$"
    +                                        },
    +                                        "state_root": {
    +                                            "type": "string",
    +                                            "format": "hex",
    +                                            "example": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +                                            "pattern": "^0x[a-fA-F0-9]{64}$"
    +                                        },
    +                                        "receipts_root": {
    +                                            "type": "string",
    +                                            "format": "hex",
    +                                            "example": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +                                            "pattern": "^0x[a-fA-F0-9]{64}$"
    +                                        },
    +                                        "logs_bloom": {
    +                                            "type": "string",
    +                                            "format": "hex",
    +                                            "example": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    +                                            "pattern": "^0x[a-fA-F0-9]{512}$"
    +                                        },
    +                                        "prev_randao": {
    +                                            "type": "string",
    +                                            "format": "hex",
    +                                            "example": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +                                            "pattern": "^0x[a-fA-F0-9]{64}$"
    +                                        },
    +                                        "block_number": {
    +                                            "type": "string",
    +                                            "example": "1"
    +                                        },
    +                                        "gas_limit": {
    +                                            "type": "string",
    +                                            "example": "1"
    +                                        },
    +                                        "gas_used": {
    +                                            "type": "string",
    +                                            "example": "1"
    +                                        },
    +                                        "timestamp": {
    +                                            "type": "string",
    +                                            "example": "1"
    +                                        },
    +                                        "extra_data": {
    +                                            "type": "string",
    +                                            "format": "hex",
    +                                            "description": "Extra data on the execution (Ethereum 1) network.",
    +                                            "example": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +                                            "pattern": "^0x[a-fA-F0-9]{0,64}$"
    +                                        },
    +                                        "base_fee_per_gas": {
    +                                            "type": "string",
    +                                            "example": "1"
    +                                        },
    +                                        "block_hash": {
    +                                            "type": "string",
    +                                            "format": "hex",
    +                                            "example": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +                                            "pattern": "^0x[a-fA-F0-9]{64}$"
    +                                        }
    +                                    }
    +                                },
    +                                {
    +                                    "type": "object",
    +                                    "required": [
    +                                        "transactions"
    +                                    ],
    +                                    "properties": {
    +                                        "transactions": {
    +                                            "type": "array",
    +                                            "items": {
    +                                                "type": "string",
    +                                                "format": "hex",
    +                                                "description": "A transaction on the execution (Ethereum 1) network.",
    +                                                "example": "0x02f878831469668303f51d843b9ac9f9843b9aca0082520894c93269b73096998db66be0441e836d873535cb9c8894a19041886f000080c001a031cc29234036afbf9a1fb9476b463367cb1f957ac0b919b69bbc798436e604aaa018c4e9c3914eb27aadd0b91e10b18655739fcf8c1fc398763a9f1beecb8ddc86",
    +                                                "pattern": "^0x[a-fA-F0-9]{0,2147483648}$"
    +                                            },
    +                                            "maxItems": 1048576
    +                                        }
    +                                    }
    +                                }
    +                            ]
    +                        }
    +                    }
    +                }
    +            ]
    +        },
    +        {
    +            "allOf": [
    +                {
    +                    "type": "object",
    +                    "properties": {
    +                        "message": {
    +                            "type": "object",
    +                            "properties": {
    +                                "slot": {
    +                                    "type": "string",
    +                                    "example": "1"
    +                                },
    +                                "parent_hash": {
    +                                    "type": "string",
    +                                    "format": "hex",
    +                                    "example": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +                                    "pattern": "^0x[a-fA-F0-9]{64}$"
    +                                },
    +                                "block_hash": {
    +                                    "type": "string",
    +                                    "format": "hex",
    +                                    "example": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +                                    "pattern": "^0x[a-fA-F0-9]{64}$"
    +                                },
    +                                "builder_pubkey": {
    +                                    "type": "string",
    +                                    "format": "hex",
    +                                    "pattern": "^0x[a-fA-F0-9]{96}$",
    +                                    "description": "The validator's BLS public key, uniquely identifying them. _48-bytes, hex encoded with 0x prefix, case insensitive._",
    +                                    "example": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a"
    +                                },
    +                                "proposer_pubkey": {
    +                                    "type": "string",
    +                                    "format": "hex",
    +                                    "pattern": "^0x[a-fA-F0-9]{96}$",
    +                                    "description": "The validator's BLS public key, uniquely identifying them. _48-bytes, hex encoded with 0x prefix, case insensitive._",
    +                                    "example": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a"
    +                                },
    +                                "proposer_fee_recipient": {
    +                                    "type": "string",
    +                                    "format": "hex",
    +                                    "description": "An address on the execution (Ethereum 1) network.",
    +                                    "example": "0xAbcF8e0d4e9587369b2301D0790347320302cc09",
    +                                    "pattern": "^0x[a-fA-F0-9]{40}$"
    +                                },
    +                                "gas_limit": {
    +                                    "type": "string",
    +                                    "example": "1"
    +                                },
    +                                "gas_used": {
    +                                    "type": "string",
    +                                    "example": "1"
    +                                },
    +                                "value": {
    +                                    "type": "string",
    +                                    "example": "1"
    +                                }
    +                            }
    +                        },
    +                        "signature": {
    +                            "type": "string",
    +                            "format": "hex",
    +                            "pattern": "^0x[a-fA-F0-9]{192}$",
    +                            "example": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505"
    +                        }
    +                    }
    +                },
    +                {
    +                    "type": "object",
    +                    "properties": {
    +                        "execution_payload": {
    +                            "allOf": [
    +                                {
    +                                    "type": "object",
    +                                    "description": "The [`ExecutionPayload`](https://github.com/ethereum/consensus-specs/blob/v1.3.0/specs/capella/beacon-chain.md#executionpayload) object from the CL Capella spec.",
    +                                    "required": [
    +                                        "parent_hash",
    +                                        "fee_recipient",
    +                                        "state_root",
    +                                        "receipts_root",
    +                                        "logs_bloom",
    +                                        "prev_randao",
    +                                        "block_number",
    +                                        "gas_limit",
    +                                        "gas_used",
    +                                        "timestamp",
    +                                        "extra_data",
    +                                        "base_fee_per_gas",
    +                                        "block_hash"
    +                                    ],
    +                                    "properties": {
    +                                        "parent_hash": {
    +                                            "type": "string",
    +                                            "format": "hex",
    +                                            "example": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +                                            "pattern": "^0x[a-fA-F0-9]{64}$"
    +                                        },
    +                                        "fee_recipient": {
    +                                            "type": "string",
    +                                            "format": "hex",
    +                                            "description": "An address on the execution (Ethereum 1) network.",
    +                                            "example": "0xAbcF8e0d4e9587369b2301D0790347320302cc09",
    +                                            "pattern": "^0x[a-fA-F0-9]{40}$"
    +                                        },
    +                                        "state_root": {
    +                                            "type": "string",
    +                                            "format": "hex",
    +                                            "example": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +                                            "pattern": "^0x[a-fA-F0-9]{64}$"
    +                                        },
    +                                        "receipts_root": {
    +                                            "type": "string",
    +                                            "format": "hex",
    +                                            "example": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +                                            "pattern": "^0x[a-fA-F0-9]{64}$"
    +                                        },
    +                                        "logs_bloom": {
    +                                            "type": "string",
    +                                            "format": "hex",
    +                                            "example": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    +                                            "pattern": "^0x[a-fA-F0-9]{512}$"
    +                                        },
    +                                        "prev_randao": {
    +                                            "type": "string",
    +                                            "format": "hex",
    +                                            "example": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +                                            "pattern": "^0x[a-fA-F0-9]{64}$"
    +                                        },
    +                                        "block_number": {
    +                                            "type": "string",
    +                                            "example": "1"
    +                                        },
    +                                        "gas_limit": {
    +                                            "type": "string",
    +                                            "example": "1"
    +                                        },
    +                                        "gas_used": {
    +                                            "type": "string",
    +                                            "example": "1"
    +                                        },
    +                                        "timestamp": {
    +                                            "type": "string",
    +                                            "example": "1"
    +                                        },
    +                                        "extra_data": {
    +                                            "type": "string",
    +                                            "format": "hex",
    +                                            "description": "Extra data on the execution (Ethereum 1) network.",
    +                                            "example": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +                                            "pattern": "^0x[a-fA-F0-9]{0,64}$"
    +                                        },
    +                                        "base_fee_per_gas": {
    +                                            "type": "string",
    +                                            "example": "1"
    +                                        },
    +                                        "block_hash": {
    +                                            "type": "string",
    +                                            "format": "hex",
    +                                            "example": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +                                            "pattern": "^0x[a-fA-F0-9]{64}$"
    +                                        }
    +                                    }
    +                                },
    +                                {
    +                                    "type": "object",
    +                                    "required": [
    +                                        "transactions",
    +                                        "withdrawals"
    +                                    ],
    +                                    "properties": {
    +                                        "transactions": {
    +                                            "type": "array",
    +                                            "items": {
    +                                                "type": "string",
    +                                                "format": "hex",
    +                                                "description": "A transaction on the execution (Ethereum 1) network.",
    +                                                "example": "0x02f878831469668303f51d843b9ac9f9843b9aca0082520894c93269b73096998db66be0441e836d873535cb9c8894a19041886f000080c001a031cc29234036afbf9a1fb9476b463367cb1f957ac0b919b69bbc798436e604aaa018c4e9c3914eb27aadd0b91e10b18655739fcf8c1fc398763a9f1beecb8ddc86",
    +                                                "pattern": "^0x[a-fA-F0-9]{0,2147483648}$"
    +                                            },
    +                                            "maxItems": 1048576
    +                                        },
    +                                        "withdrawals": {
    +                                            "type": "array",
    +                                            "items": {
    +                                                "type": "object",
    +                                                "required": [
    +                                                    "index",
    +                                                    "validator_index",
    +                                                    "address",
    +                                                    "amount"
    +                                                ],
    +                                                "properties": {
    +                                                    "index": {
    +                                                        "description": "The index of the withdrawal.",
    +                                                        "type": "string",
    +                                                        "example": "1"
    +                                                    },
    +                                                    "validator_index": {
    +                                                        "description": "The index of the withdrawing validator.",
    +                                                        "type": "string",
    +                                                        "example": "1"
    +                                                    },
    +                                                    "address": {
    +                                                        "description": "The address to which the withdrawal is credited.",
    +                                                        "type": "string",
    +                                                        "format": "hex",
    +                                                        "example": "0xAbcF8e0d4e9587369b2301D0790347320302cc09",
    +                                                        "pattern": "^0x[a-fA-F0-9]{40}$"
    +                                                    },
    +                                                    "amount": {
    +                                                        "description": "The value withdrawn (gwei).",
    +                                                        "type": "string",
    +                                                        "example": "1"
    +                                                    }
    +                                                }
    +                                            },
    +                                            "maxItems": 16
    +                                        }
    +                                    }
    +                                }
    +                            ]
    +                        }
    +                    }
    +                }
    +            ]
    +        },
    +        {
    +            "allOf": [
    +                {
    +                    "type": "object",
    +                    "properties": {
    +                        "message": {
    +                            "type": "object",
    +                            "properties": {
    +                                "slot": {
    +                                    "type": "string",
    +                                    "example": "1"
    +                                },
    +                                "parent_hash": {
    +                                    "type": "string",
    +                                    "format": "hex",
    +                                    "example": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +                                    "pattern": "^0x[a-fA-F0-9]{64}$"
    +                                },
    +                                "block_hash": {
    +                                    "type": "string",
    +                                    "format": "hex",
    +                                    "example": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +                                    "pattern": "^0x[a-fA-F0-9]{64}$"
    +                                },
    +                                "builder_pubkey": {
    +                                    "type": "string",
    +                                    "format": "hex",
    +                                    "pattern": "^0x[a-fA-F0-9]{96}$",
    +                                    "description": "The validator's BLS public key, uniquely identifying them. _48-bytes, hex encoded with 0x prefix, case insensitive._",
    +                                    "example": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a"
    +                                },
    +                                "proposer_pubkey": {
    +                                    "type": "string",
    +                                    "format": "hex",
    +                                    "pattern": "^0x[a-fA-F0-9]{96}$",
    +                                    "description": "The validator's BLS public key, uniquely identifying them. _48-bytes, hex encoded with 0x prefix, case insensitive._",
    +                                    "example": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a"
    +                                },
    +                                "proposer_fee_recipient": {
    +                                    "type": "string",
    +                                    "format": "hex",
    +                                    "description": "An address on the execution (Ethereum 1) network.",
    +                                    "example": "0xAbcF8e0d4e9587369b2301D0790347320302cc09",
    +                                    "pattern": "^0x[a-fA-F0-9]{40}$"
    +                                },
    +                                "gas_limit": {
    +                                    "type": "string",
    +                                    "example": "1"
    +                                },
    +                                "gas_used": {
    +                                    "type": "string",
    +                                    "example": "1"
    +                                },
    +                                "value": {
    +                                    "type": "string",
    +                                    "example": "1"
    +                                }
    +                            }
    +                        },
    +                        "signature": {
    +                            "type": "string",
    +                            "format": "hex",
    +                            "pattern": "^0x[a-fA-F0-9]{192}$",
    +                            "example": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505"
    +                        }
    +                    }
    +                },
    +                {
    +                    "type": "object",
    +                    "description": "A wrapper object containing the ExecutionPayload and the BlobsBundle",
    +                    "required": [
    +                        "execution_payload",
    +                        "blobs_bundle"
    +                    ],
    +                    "properties": {
    +                        "execution_payload": {
    +                            "allOf": [
    +                                {
    +                                    "type": "object",
    +                                    "description": "The [`ExecutionPayload`](https://github.com/ethereum/consensus-specs/blob/master/specs/deneb/beacon-chain.md#executionpayload) object from the CL Deneb spec.",
    +                                    "properties": {
    +                                        "parent_hash": {
    +                                            "type": "string",
    +                                            "format": "hex",
    +                                            "example": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +                                            "pattern": "^0x[a-fA-F0-9]{64}$"
    +                                        },
    +                                        "fee_recipient": {
    +                                            "type": "string",
    +                                            "format": "hex",
    +                                            "description": "An address on the execution (Ethereum 1) network.",
    +                                            "example": "0xabcf8e0d4e9587369b2301d0790347320302cc09",
    +                                            "pattern": "^0x[a-fA-F0-9]{40}$"
    +                                        },
    +                                        "state_root": {
    +                                            "type": "string",
    +                                            "format": "hex",
    +                                            "example": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +                                            "pattern": "^0x[a-fA-F0-9]{64}$"
    +                                        },
    +                                        "receipts_root": {
    +                                            "type": "string",
    +                                            "format": "hex",
    +                                            "example": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +                                            "pattern": "^0x[a-fA-F0-9]{64}$"
    +                                        },
    +                                        "logs_bloom": {
    +                                            "type": "string",
    +                                            "format": "hex",
    +                                            "example": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    +                                            "pattern": "^0x[a-fA-F0-9]{512}$"
    +                                        },
    +                                        "prev_randao": {
    +                                            "type": "string",
    +                                            "format": "hex",
    +                                            "example": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +                                            "pattern": "^0x[a-fA-F0-9]{64}$"
    +                                        },
    +                                        "block_number": {
    +                                            "type": "string",
    +                                            "example": "1"
    +                                        },
    +                                        "gas_limit": {
    +                                            "type": "string",
    +                                            "example": "1"
    +                                        },
    +                                        "gas_used": {
    +                                            "type": "string",
    +                                            "example": "1"
    +                                        },
    +                                        "timestamp": {
    +                                            "type": "string",
    +                                            "example": "1"
    +                                        },
    +                                        "extra_data": {
    +                                            "type": "string",
    +                                            "format": "hex",
    +                                            "description": "Extra data on the execution (Ethereum 1) network.",
    +                                            "example": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +                                            "pattern": "^0x[a-fA-F0-9]{0,64}$"
    +                                        },
    +                                        "base_fee_per_gas": {
    +                                            "type": "string",
    +                                            "example": "1"
    +                                        },
    +                                        "excess_data_gas": {
    +                                            "type": "string",
    +                                            "example": "1"
    +                                        },
    +                                        "block_hash": {
    +                                            "type": "string",
    +                                            "format": "hex",
    +                                            "example": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +                                            "pattern": "^0x[a-fA-F0-9]{64}$"
    +                                        }
    +                                    }
    +                                },
    +                                {
    +                                    "type": "object",
    +                                    "properties": {
    +                                        "transactions": {
    +                                            "type": "array",
    +                                            "items": {
    +                                                "type": "string",
    +                                                "format": "hex",
    +                                                "description": "A transaction on the execution (Ethereum 1) network.",
    +                                                "example": "0x02f878831469668303f51d843b9ac9f9843b9aca0082520894c93269b73096998db66be0441e836d873535cb9c8894a19041886f000080c001a031cc29234036afbf9a1fb9476b463367cb1f957ac0b919b69bbc798436e604aaa018c4e9c3914eb27aadd0b91e10b18655739fcf8c1fc398763a9f1beecb8ddc86",
    +                                                "pattern": "^0x[a-fA-F0-9]{0,2147483648}$"
    +                                            },
    +                                            "maxItems": 1048576
    +                                        },
    +                                        "withdrawals": {
    +                                            "type": "array",
    +                                            "items": {
    +                                                "type": "object",
    +                                                "properties": {
    +                                                    "index": {
    +                                                        "description": "The index of the withdrawal.",
    +                                                        "type": "string",
    +                                                        "example": "1"
    +                                                    },
    +                                                    "validator_index": {
    +                                                        "description": "The index of the withdrawing validator.",
    +                                                        "type": "string",
    +                                                        "example": "1"
    +                                                    },
    +                                                    "address": {
    +                                                        "description": "The address to which the withdrawal is credited.",
    +                                                        "type": "string",
    +                                                        "format": "hex",
    +                                                        "example": "0xabcf8e0d4e9587369b2301d0790347320302cc09",
    +                                                        "pattern": "^0x[a-fA-F0-9]{40}$"
    +                                                    },
    +                                                    "amount": {
    +                                                        "description": "The value withdrawn (gwei).",
    +                                                        "type": "string",
    +                                                        "example": "1"
    +                                                    }
    +                                                }
    +                                            },
    +                                            "maxItems": 16
    +                                        }
    +                                    }
    +                                }
    +                            ]
    +                        },
    +                        "blobs_bundle": {
    +                            "type": "object",
    +                            "description": "The `BlobsBundle` object from the CL Deneb spec",
    +                            "required": [
    +                                "blobs",
    +                                "commitments",
    +                                "proofs"
    +                            ],
    +                            "properties": {
    +                                "blobs": {
    +                                    "type": "array",
    +                                    "items": {
    +                                        "type": "string",
    +                                        "format": "hex",
    +                                        "pattern": "^0x[a-fA-F0-9]{262144}$",
    +                                        "description": "A blob is `FIELD_ELEMENTS_PER_BLOB * size_of(BLSFieldElement) = 4096 * 32 = 131072` bytes (`DATA`) representing a SSZ-encoded Blob as defined in Deneb"
    +                                    },
    +                                    "minItems": 0,
    +                                    "maxItems": 4096
    +                                },
    +                                "commitments": {
    +                                    "type": "array",
    +                                    "items": {
    +                                        "type": "string",
    +                                        "format": "hex",
    +                                        "pattern": "^0x[a-fA-F0-9]{96}$",
    +                                        "description": "A G1 curve point. Same as BLS standard \"is valid pubkey\" check but also allows `0x00..00` for point-at-infinity",
    +                                        "example": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a"
    +                                    },
    +                                    "minItems": 0,
    +                                    "maxItems": 4096
    +                                },
    +                                "proofs": {
    +                                    "type": "array",
    +                                    "items": {
    +                                        "type": "string",
    +                                        "format": "hex",
    +                                        "pattern": "^0x[a-fA-F0-9]{96}$",
    +                                        "description": "A G1 curve point. Used for verifying that the `KZGCommitment` for a given `Blob` is correct."
    +                                    },
    +                                    "minItems": 0,
    +                                    "maxItems": 4096
    +                                }
    +                            }
    +                        }
    +                    }
    +                }
    +            ]
    +        }
    +    ]
    +}
    +
    +
    +
    +
    +
    +Schema of the request body +
    {
    +    "description": "SSZ serialized request. Use content type header to indicate that SSZ data is contained in the request body."
    +}
    +
    +
    +
    +
    +
    +

    + Response 200 OK +

    + +

    + Response 400 Bad Request +

    + +
    +
    +
    +
    +Schema of the response body +
    {
    +    "allOf": [
    +        {
    +            "type": "object",
    +            "required": [
    +                "code",
    +                "message"
    +            ],
    +            "properties": {
    +                "code": {
    +                    "description": "Either specific error code in case of invalid request or http status code",
    +                    "type": "number",
    +                    "example": 404
    +                },
    +                "message": {
    +                    "description": "Message describing error",
    +                    "type": "string"
    +                },
    +                "stacktraces": {
    +                    "description": "Optional stacktraces, sent when node is in debug mode",
    +                    "type": "array",
    +                    "items": {
    +                        "type": "string"
    +                    }
    +                }
    +            }
    +        },
    +        {
    +            "example": {
    +                "code": 400,
    +                "message": "payload for this slot was already delivered"
    +            }
    +        }
    +    ]
    +}
    +
    +
    +
    +
    +
    +

    + Response 500 Internal Server Error +

    + +
    +
    +
    +
    {
    +    "code": 500,
    +    "message": "internal server error"
    +}
    +
    +
    +Schema of the response body +
    {
    +    "type": "object",
    +    "properties": {
    +        "code": {
    +            "description": "Either specific error code in case of invalid request or http status code",
    +            "type": "number",
    +            "example": 404
    +        },
    +        "message": {
    +            "description": "Message describing error",
    +            "type": "string"
    +        },
    +        "stacktraces": {
    +            "description": "Optional stacktraces, sent when node is in debug mode",
    +            "type": "array",
    +            "items": {
    +                "type": "string"
    +            }
    +        }
    +    }
    +}
    +
    +
    +
    +
    +
    +

    Data

    +
    + +

    GET /relay/v1/data/bidtraces/proposer_payload_delivered

    +

    Get payloads that were delivered to proposers.

    +
    +Description +
      +
    • +

      Payloads become available after the relay responds to a getPayload +request from the proposer.

      +
    • +
    • +

      Query arguments are used as filters.

      +
    • +
    +
    +

    Input parameters

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ParameterInTypeDefaultNullableDescription
    block_hashquerystringNoA specific block hash.
    block_numberquerystringNoA specific block number.
    builder_pubkeyquerystringNoA specific builder public key.
    cursorquerystringNoA starting slot for multiple results.
    limitquerystringNoThe number of results.
    order_byquerystringNoSort results in order of...
    proposer_pubkeyquerystringNoA specific proposer public key.
    slotquerystringNoA specific slot.
    + +

    + Response 200 OK +

    + +
    +
    +
    +

    [
    +    null
    +]
    +
    +⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

    +
    +Schema of the response body +
    {
    +    "type": "array",
    +    "items": {
    +        "allOf": [
    +            {
    +                "type": "object",
    +                "properties": {
    +                    "slot": {
    +                        "type": "string",
    +                        "example": "1"
    +                    },
    +                    "parent_hash": {
    +                        "type": "string",
    +                        "format": "hex",
    +                        "example": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +                        "pattern": "^0x[a-fA-F0-9]{64}$"
    +                    },
    +                    "block_hash": {
    +                        "type": "string",
    +                        "format": "hex",
    +                        "example": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +                        "pattern": "^0x[a-fA-F0-9]{64}$"
    +                    },
    +                    "builder_pubkey": {
    +                        "type": "string",
    +                        "format": "hex",
    +                        "pattern": "^0x[a-fA-F0-9]{96}$",
    +                        "description": "The validator's BLS public key, uniquely identifying them. _48-bytes, hex encoded with 0x prefix, case insensitive._",
    +                        "example": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a"
    +                    },
    +                    "proposer_pubkey": {
    +                        "type": "string",
    +                        "format": "hex",
    +                        "pattern": "^0x[a-fA-F0-9]{96}$",
    +                        "description": "The validator's BLS public key, uniquely identifying them. _48-bytes, hex encoded with 0x prefix, case insensitive._",
    +                        "example": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a"
    +                    },
    +                    "proposer_fee_recipient": {
    +                        "type": "string",
    +                        "format": "hex",
    +                        "description": "An address on the execution (Ethereum 1) network.",
    +                        "example": "0xAbcF8e0d4e9587369b2301D0790347320302cc09",
    +                        "pattern": "^0x[a-fA-F0-9]{40}$"
    +                    },
    +                    "gas_limit": {
    +                        "type": "string",
    +                        "example": "1"
    +                    },
    +                    "gas_used": {
    +                        "type": "string",
    +                        "example": "1"
    +                    },
    +                    "value": {
    +                        "type": "string",
    +                        "example": "1"
    +                    }
    +                }
    +            },
    +            {
    +                "type": "object",
    +                "properties": {
    +                    "block_number": {
    +                        "type": "string",
    +                        "example": "1"
    +                    },
    +                    "num_tx": {
    +                        "type": "string",
    +                        "example": "1"
    +                    }
    +                }
    +            }
    +        ]
    +    }
    +}
    +
    +
    +
    +
    +
    +

    + Response 400 Bad Request +

    + +
    +
    +
    +
    +Schema of the response body +
    {
    +    "allOf": [
    +        {
    +            "type": "object",
    +            "required": [
    +                "code",
    +                "message"
    +            ],
    +            "properties": {
    +                "code": {
    +                    "description": "Either specific error code in case of invalid request or http status code",
    +                    "type": "number",
    +                    "example": 404
    +                },
    +                "message": {
    +                    "description": "Message describing error",
    +                    "type": "string"
    +                },
    +                "stacktraces": {
    +                    "description": "Optional stacktraces, sent when node is in debug mode",
    +                    "type": "array",
    +                    "items": {
    +                        "type": "string"
    +                    }
    +                }
    +            }
    +        },
    +        {
    +            "example": {
    +                "code": 400,
    +                "message": "invalid block_hash argument"
    +            }
    +        }
    +    ]
    +}
    +
    +
    +
    +
    +
    +

    + Response 500 Internal Server Error +

    + +
    +
    +
    +
    {
    +    "code": 500,
    +    "message": "internal server error"
    +}
    +
    +
    +Schema of the response body +
    {
    +    "type": "object",
    +    "properties": {
    +        "code": {
    +            "description": "Either specific error code in case of invalid request or http status code",
    +            "type": "number",
    +            "example": 404
    +        },
    +        "message": {
    +            "description": "Message describing error",
    +            "type": "string"
    +        },
    +        "stacktraces": {
    +            "description": "Optional stacktraces, sent when node is in debug mode",
    +            "type": "array",
    +            "items": {
    +                "type": "string"
    +            }
    +        }
    +    }
    +}
    +
    +
    +
    +
    +
    +
    + +

    GET /relay/v1/data/bidtraces/builder_blocks_received

    +

    Get builder bid submissions.

    +
    +Description +
      +
    • +

      Returns a list of builder bids without execution payloads.

      +
    • +
    • +

      Only submissions that were successfully verified.

      +
    • +
    +
    +

    Input parameters

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ParameterInTypeDefaultNullableDescription
    block_hashquerystringNoA specific block hash.
    block_numberquerystringNoA specific block number.
    builder_pubkeyquerystringNoA specific builder public key.
    limitquerystringNoThe number of results.
    slotquerystringNoA specific slot.
    + +

    + Response 200 OK +

    + +
    +
    +
    +

    [
    +    null
    +]
    +
    +⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

    +
    +Schema of the response body +
    {
    +    "type": "array",
    +    "items": {
    +        "allOf": [
    +            {
    +                "allOf": [
    +                    {
    +                        "type": "object",
    +                        "properties": {
    +                            "slot": {
    +                                "type": "string",
    +                                "example": "1"
    +                            },
    +                            "parent_hash": {
    +                                "type": "string",
    +                                "format": "hex",
    +                                "example": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +                                "pattern": "^0x[a-fA-F0-9]{64}$"
    +                            },
    +                            "block_hash": {
    +                                "type": "string",
    +                                "format": "hex",
    +                                "example": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2",
    +                                "pattern": "^0x[a-fA-F0-9]{64}$"
    +                            },
    +                            "builder_pubkey": {
    +                                "type": "string",
    +                                "format": "hex",
    +                                "pattern": "^0x[a-fA-F0-9]{96}$",
    +                                "description": "The validator's BLS public key, uniquely identifying them. _48-bytes, hex encoded with 0x prefix, case insensitive._",
    +                                "example": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a"
    +                            },
    +                            "proposer_pubkey": {
    +                                "type": "string",
    +                                "format": "hex",
    +                                "pattern": "^0x[a-fA-F0-9]{96}$",
    +                                "description": "The validator's BLS public key, uniquely identifying them. _48-bytes, hex encoded with 0x prefix, case insensitive._",
    +                                "example": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a"
    +                            },
    +                            "proposer_fee_recipient": {
    +                                "type": "string",
    +                                "format": "hex",
    +                                "description": "An address on the execution (Ethereum 1) network.",
    +                                "example": "0xAbcF8e0d4e9587369b2301D0790347320302cc09",
    +                                "pattern": "^0x[a-fA-F0-9]{40}$"
    +                            },
    +                            "gas_limit": {
    +                                "type": "string",
    +                                "example": "1"
    +                            },
    +                            "gas_used": {
    +                                "type": "string",
    +                                "example": "1"
    +                            },
    +                            "value": {
    +                                "type": "string",
    +                                "example": "1"
    +                            }
    +                        }
    +                    },
    +                    {
    +                        "type": "object",
    +                        "properties": {
    +                            "block_number": {
    +                                "type": "string",
    +                                "example": "1"
    +                            },
    +                            "num_tx": {
    +                                "type": "string",
    +                                "example": "1"
    +                            }
    +                        }
    +                    }
    +                ]
    +            },
    +            {
    +                "type": "object",
    +                "properties": {
    +                    "timestamp": {
    +                        "type": "string",
    +                        "example": "1"
    +                    },
    +                    "timestamp_ms": {
    +                        "type": "string",
    +                        "example": "1"
    +                    }
    +                }
    +            }
    +        ]
    +    }
    +}
    +
    +
    +
    +
    +
    +

    + Response 400 Bad Request +

    + +
    +
    +
    +
    +Schema of the response body +
    {
    +    "allOf": [
    +        {
    +            "type": "object",
    +            "required": [
    +                "code",
    +                "message"
    +            ],
    +            "properties": {
    +                "code": {
    +                    "description": "Either specific error code in case of invalid request or http status code",
    +                    "type": "number",
    +                    "example": 404
    +                },
    +                "message": {
    +                    "description": "Message describing error",
    +                    "type": "string"
    +                },
    +                "stacktraces": {
    +                    "description": "Optional stacktraces, sent when node is in debug mode",
    +                    "type": "array",
    +                    "items": {
    +                        "type": "string"
    +                    }
    +                }
    +            }
    +        },
    +        {
    +            "example": {
    +                "code": 400,
    +                "message": "cannot specify both slot and cursor"
    +            }
    +        }
    +    ]
    +}
    +
    +
    +
    +
    +
    +

    + Response 500 Internal Server Error +

    + +
    +
    +
    +
    {
    +    "code": 500,
    +    "message": "internal server error"
    +}
    +
    +
    +Schema of the response body +
    {
    +    "type": "object",
    +    "properties": {
    +        "code": {
    +            "description": "Either specific error code in case of invalid request or http status code",
    +            "type": "number",
    +            "example": 404
    +        },
    +        "message": {
    +            "description": "Message describing error",
    +            "type": "string"
    +        },
    +        "stacktraces": {
    +            "description": "Optional stacktraces, sent when node is in debug mode",
    +            "type": "array",
    +            "items": {
    +                "type": "string"
    +            }
    +        }
    +    }
    +}
    +
    +
    +
    +
    +
    +
    + +

    GET /relay/v1/data/validator_registration

    +

    Check that a validator is registered with the relay.

    +
    +Description +
      +
    • +

      Returns the latest validator registration for a given pubkey.

      +
    • +
    • +

      Useful to check whether your own registration was successful.

      +
    • +
    +
    +

    Input parameters

    + + + + + + + + + + + + + + + + + + + + + +
    ParameterInTypeDefaultNullableDescription
    pubkeyquerystringNoThe validator's public key.
    + +

    + Response 200 OK +

    + +
    +
    +
    +

    {
    +    "message": {
    +        "fee_recipient": "0xAbcF8e0d4e9587369b2301D0790347320302cc09",
    +        "gas_limit": "1",
    +        "timestamp": "1",
    +        "pubkey": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a"
    +    },
    +    "signature": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505"
    +}
    +
    +⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

    +
    +Schema of the response body +
    {
    +    "type": "object",
    +    "description": "The `SignedValidatorRegistration` object from the Builder API specification.",
    +    "required": [
    +        "message",
    +        "signature"
    +    ],
    +    "properties": {
    +        "message": {
    +            "type": "object",
    +            "description": "The `ValidatorRegistration` object from the Builder API specification.",
    +            "required": [
    +                "fee_recipient",
    +                "gas_limit",
    +                "timestamp",
    +                "pubkey"
    +            ],
    +            "properties": {
    +                "fee_recipient": {
    +                    "description": "Address to receive fees from the block.",
    +                    "type": "string",
    +                    "format": "hex",
    +                    "example": "0xAbcF8e0d4e9587369b2301D0790347320302cc09",
    +                    "pattern": "^0x[a-fA-F0-9]{40}$"
    +                },
    +                "gas_limit": {
    +                    "description": "Preferred gas limit of validator.",
    +                    "type": "string",
    +                    "example": "1"
    +                },
    +                "timestamp": {
    +                    "description": "Unix timestamp of registration.",
    +                    "type": "string",
    +                    "example": "1"
    +                },
    +                "pubkey": {
    +                    "description": "BLS public key of validator.",
    +                    "type": "string",
    +                    "format": "hex",
    +                    "pattern": "^0x[a-fA-F0-9]{96}$",
    +                    "example": "0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a"
    +                }
    +            }
    +        },
    +        "signature": {
    +            "type": "string",
    +            "format": "hex",
    +            "pattern": "^0x[a-fA-F0-9]{192}$",
    +            "example": "0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505"
    +        }
    +    }
    +}
    +
    +
    +
    +
    +
    +

    + Response 400 Bad Request +

    + +
    +
    +
    +
    +Schema of the response body +
    {
    +    "allOf": [
    +        {
    +            "type": "object",
    +            "required": [
    +                "code",
    +                "message"
    +            ],
    +            "properties": {
    +                "code": {
    +                    "description": "Either specific error code in case of invalid request or http status code",
    +                    "type": "number",
    +                    "example": 404
    +                },
    +                "message": {
    +                    "description": "Message describing error",
    +                    "type": "string"
    +                },
    +                "stacktraces": {
    +                    "description": "Optional stacktraces, sent when node is in debug mode",
    +                    "type": "array",
    +                    "items": {
    +                        "type": "string"
    +                    }
    +                }
    +            }
    +        },
    +        {
    +            "example": {
    +                "code": 400,
    +                "message": "missing pubkey argument"
    +            }
    +        }
    +    ]
    +}
    +
    +
    +
    +
    +
    +

    + Response 500 Internal Server Error +

    + +
    +
    +
    +
    {
    +    "code": 500,
    +    "message": "internal server error"
    +}
    +
    +
    +Schema of the response body +
    {
    +    "type": "object",
    +    "properties": {
    +        "code": {
    +            "description": "Either specific error code in case of invalid request or http status code",
    +            "type": "number",
    +            "example": 404
    +        },
    +        "message": {
    +            "description": "Message describing error",
    +            "type": "string"
    +        },
    +        "stacktraces": {
    +            "description": "Optional stacktraces, sent when node is in debug mode",
    +            "type": "array",
    +            "items": {
    +                "type": "string"
    +            }
    +        }
    +    }
    +}
    +
    +
    +
    +
    +
    +
    +

    Schemas

    +

    Bellatrix.SubmitBlockRequest

    +

    Type:

    +

    BidTraceV2

    +

    Type:

    +

    BidTraceV2WithTimestamp

    +

    Type:

    +

    Capella-ExecutionPayload

    +

    Type:

    +

    Capella-SubmitBlockRequest

    +

    Type:

    +

    Capella.SubmitBlockRequest

    +

    Type:

    +

    Deneb-ExecutionPayload

    +

    Type:

    +

    Deneb-SubmitBlockRequest

    +

    Type:

    +

    Deneb.SubmitBlockRequest

    +

    Type:

    +

    ExecutionPayload

    +

    Type:

    +

    SubmitBlockRequest

    +

    Type:

    +

    Tags

    + + + + + + + + + + + + + + + + + +
    NameDescription
    BuilderSet of endpoints to interact with an external block builder.
    DataSet of endpoints to provide data about the relay.
    @@ -2513,27 +4793,9 @@

    Relay REST API - - - - - - - April 3, 2024 - - - - - - - - @@ -2629,8 +4891,6 @@

    Relay REST API - - diff --git a/api/self-report/index.html b/api/self-report/index.html index 650b75f..d1470ac 100644 --- a/api/self-report/index.html +++ b/api/self-report/index.html @@ -55,7 +55,7 @@ - + @@ -2560,27 +2560,9 @@

    Validator Reporting REST API - - - - - - - April 3, 2024 - - - - - - - - @@ -2676,8 +2658,6 @@

    Validator Reporting REST API - - diff --git a/api/signature-scheme/index.html b/api/signature-scheme/index.html index 9a67cf2..b9207d5 100644 --- a/api/signature-scheme/index.html +++ b/api/signature-scheme/index.html @@ -55,7 +55,7 @@ - + @@ -2717,27 +2717,9 @@

    Example Data - - - - - - - April 24, 2024 - - - - - - - - @@ -2833,8 +2815,6 @@

    Example Data - - diff --git a/blog/announcements/changelog/timeline-for-v0-to-v1/index.html b/blog/announcements/changelog/timeline-for-v0-to-v1/index.html index 2d84cc6..4437a00 100644 --- a/blog/announcements/changelog/timeline-for-v0-to-v1/index.html +++ b/blog/announcements/changelog/timeline-for-v0-to-v1/index.html @@ -51,7 +51,7 @@ - + @@ -2573,27 +2573,9 @@

    Timeline for v0 to v1 - - - - - - - May 10, 2024 - - - - - - - - @@ -2653,8 +2635,6 @@

    Timeline for v0 to v1 - - diff --git a/blog/archive/2024/index.html b/blog/archive/2024/index.html index 3fc276e..2fb7f2b 100644 --- a/blog/archive/2024/index.html +++ b/blog/archive/2024/index.html @@ -53,7 +53,7 @@ - + @@ -2579,8 +2579,6 @@

    - - diff --git a/blog/category/announcements/index.html b/blog/category/announcements/index.html index 49f6bb5..5b0e101 100644 --- a/blog/category/announcements/index.html +++ b/blog/category/announcements/index.html @@ -55,7 +55,7 @@ - + @@ -2597,8 +2597,6 @@

    - - diff --git a/blog/category/changelog/index.html b/blog/category/changelog/index.html index c1ac7fc..ed58fe0 100644 --- a/blog/category/changelog/index.html +++ b/blog/category/changelog/index.html @@ -55,7 +55,7 @@ - + @@ -2597,8 +2597,6 @@

    - - diff --git a/blog/index.html b/blog/index.html index 19f1ec3..85c9f8a 100644 --- a/blog/index.html +++ b/blog/index.html @@ -55,7 +55,7 @@ - + @@ -2585,8 +2585,6 @@

    - - diff --git a/index.html b/index.html index 6dd4ba4..d4d1cbe 100644 --- a/index.html +++ b/index.html @@ -53,7 +53,7 @@ - + @@ -510,7 +510,7 @@ - Block Structure + Block Structure @@ -524,7 +524,7 @@ - ⍺-blockspace + ⍺-blockspace @@ -537,7 +537,7 @@ - β-blockspace + β-blockspace @@ -550,7 +550,7 @@ - Elastic Supply Schedule + Elastic Supply Schedule @@ -2640,19 +2640,80 @@

    eXtensible Gas Auction (XGA)Block Structure

    +
    +
    +
    +
    +
    +

    Want to learn more about the platform?

    +


    +Get started on the test net or jump right into main net! +
    +
    +Getting Started +

    +
    +
    +
    +
    +
    +
    +
    +
    +

    Technical specifications and roadmap

    +


    +See our list of roadmap iteams and technical specifications. +
    +
    +See supported features and more +

    +
    +
    +
    +
    +
    +
    +
    +
    +

    Want to connect for your Validator?

    +


    +Run Ethereum services easily with our supported Validator setups. +
    +
    +Run XGA Ethereum services on... +

    +
    +
    +
    +
    +
    +
    +
    +
    +

    Have a question or need help?

    +


    +Ask questions on our discussion board and get in touch with our community. +
    +
    +Ask a question

    +
    +
    +
    +
    +
    +

    Block Structure

    We divide a block in two parts: ⍺-blockspace and β-blockspace

    ⍺-blockspace is a very time sensitive kind of priority transactions. These transactions often come in last second.

    β-blockspace however can be considered non-priority sensitive, meaning it is not very time sensitive, hence can be priced differently.

    -

    ⍺-blockspace

    +

    ⍺-blockspace

    • ⍺-blockspace - represents the top part of the blockspace. Economically, this is where competitive searchers want to place their transactions (e.g. for arbitrages etc.).1
    -

    β-blockspace

    +

    β-blockspace

    • β-blockspace - represents the rest of the blockspace. Economically, this is where low-priority transactions - direct transfers, low volume swaps, @@ -2679,11 +2740,11 @@

      β-blockspace

    The Auction platform uses the SecureRPC.com relay, in -which permissioned validator sets use exclusively. As such, we will know 2 -epochs in advance in which slots we will mint a block. So, we can sell that -blockspace about 2 epochs in advance, providing a forward contract market for -β-blockspace.

    -

    Elastic Supply Schedule

    +which permissioned validator sets use exclusively3. As such, we will know 2 +epochs in advance in which slots we will mint a block. Therefore, we can sell +a proportion of blockspace 2 epochs in advance, enabling a forward call market for +β-blockspace.

    +

    Elastic Supply Schedule

    Elastic Supply Schedule: Breaking away from the rigidness of a fixed supply, we're introducing elasticity. When prices dip low, we'll strategically limit the availability of options. This dynamic approach ensures a balance between supply @@ -2695,7 +2756,7 @@

    Elastic Supply ScheduleWhy These Changes Matter

    Shortcomings of the standard uniform price auction

    Traditionally, with a fixed supply, there's a looming risk of plummeting prices. -This phenomenon, identified by Wilson in 1979, highlights a bidder's tendency to +This phenomenon, identified by Wilson4, highlights a bidder's tendency to underbid. In multi-unit auctions, this is a critical challenge. In a uniform price auction, underbidding on the marginal unit doesn't just lower the price for that unit; it slashes the overall price you pay.

    @@ -2715,11 +2776,11 @@

    Tie Breaking RuleElastic Supply Curve Detail

    -

    Maximum capacity is fixed, but the supply curve

    +

    Maximum capacity is fixed, but the supply curve varies with price,

    \(S:P→Q\)

    -

    varies with price, offering different quantities of options.

    +

    Thus we have different offering quantities of options.

    The supply function is designed to be initially concave, then constant at -maximum capacity. This approach, theoretically supported by Licalzi (2005), aims +maximum capacity. This approach, theoretically supported by Licalzi (2005)5, aims to mitigate dramatic underpricing.

    Footnotes

    @@ -2731,6 +2792,15 @@

    Footnotes

    Previously this was called 'below' 

    +
  • +

    Exclusivity is only needed in v1, v2 eliminates this requirement. 

    +
  • +
  • +

    Robert Wilson, 1979. "Auctions of Shares," The Quarterly Journal of Economics, President and Fellows of Harvard College, vol. 93(4), pages 675-689. 

    +
  • +
  • +

    Marco LiCalzi, 2005. "Tilting the supply schedule to enhance competition in uniform-price auctions" European Economic Review, Volume 49, Issue 1, 2005, Pages 227-250 

    +
  • @@ -2741,27 +2811,9 @@

    Footnotes - - - - - - - May 22, 2024 - - - - - - - - @@ -2841,8 +2893,6 @@

    Footnotes - - diff --git a/search/search_index.json b/search/search_index.json index 5895ec1..762ca87 100644 --- a/search/search_index.json +++ b/search/search_index.json @@ -1 +1 @@ -{"config":{"lang":["en"],"separator":"[\\s\\-\\.\\_]+","pipeline":["stopWordFilter"],"fields":{"title":{"boost":1000.0},"text":{"boost":1.0},"tags":{"boost":1000000.0}}},"docs":[{"location":"","title":"eXtensible Gas Auction (XGA)","text":"

    Multi-unit auctions, unlike their single-unit counterparts, present complex allocation mechanisms. The MEV Auction platform implements several innovative strategies:

    1. An enhanced uniform price auction,
    2. A Bifurcated Block Structure (splitting the block into halves),
    3. Elastic Supply Scheduling,
    4. Contract based bidding.
    5. Backwards compatible with MEV-Boost
    6. Exclusive Relay endpoint for Validator usage
    "},{"location":"#block-structure","title":"Block Structure","text":"

    We divide a block in two parts: \u237a-blockspace and \u03b2-blockspace

    \u237a-blockspace is a very time sensitive kind of priority transactions. These transactions often come in last second.

    \u03b2-blockspace however can be considered non-priority sensitive, meaning it is not very time sensitive, hence can be priced differently.

    "},{"location":"#-blockspace","title":"\u237a-blockspace","text":"
    • \u237a-blockspace - represents the top part of the blockspace. Economically, this is where competitive searchers want to place their transactions (e.g. for arbitrages etc.).1
    "},{"location":"#-blockspace_1","title":"\u03b2-blockspace","text":"
    • \u03b2-blockspace - represents the rest of the blockspace. Economically, this is where low-priority transactions - direct transfers, low volume swaps, some kind of intents, etc. - would go. The rationale for this is simple: above and below represent two very different markets: The first serves strategic actors, whereas the second serves 'everyone else' - people not interested in speculation that just want to transact, e.g., to pay for stuff.2
    gantt\n    title Future auction for `below`\n    dateFormat YY-MM\n    axisFormat %m\n    tickInterval 1month\n    section Epoch i\n        We know slots for Epoch i+2 are 03,08 and 11 : crit, done, milestone, 00-01, 1m\n        Auction for `below`, slots 03,08,11 : 00-01, 6M\n        Futures awarded : milestone, 00-07, 1m\n        Users can transact: active, 00-07, 6M\n    section Epoch i+1\n        Users can transact: active, 01-01, 12M\n    section Epoch i+2\n        Slot 03, future can be used : crit, active, milestone, 02-03, 1\n        Slot 08, future can be used : crit, active, milestone, 02-08, 1\n        Slot 11, future can be used : crit, active, milestone, 02-11, 1

    The Auction platform uses the SecureRPC.com relay, in which permissioned validator sets use exclusively. As such, we will know 2 epochs in advance in which slots we will mint a block. So, we can sell that blockspace about 2 epochs in advance, providing a forward contract market for \u03b2-blockspace.

    "},{"location":"#elastic-supply-schedule","title":"Elastic Supply Schedule","text":"

    Elastic Supply Schedule: Breaking away from the rigidness of a fixed supply, we're introducing elasticity. When prices dip low, we'll strategically limit the availability of options. This dynamic approach ensures a balance between supply and demand, maintaining value and interest.

    Revamped Tie-Breaking Rule: In the world of auctions, ties are inevitable. Our approach is different. We're moving away from the conventional method that prioritizes higher marginal bids. Instead, we're implementing a novel rule that intensifies competition, particularly for those crucial marginal quantities.

    "},{"location":"#why-these-changes-matter","title":"Why These Changes Matter","text":""},{"location":"#shortcomings-of-the-standard-uniform-price-auction","title":"Shortcomings of the standard uniform price auction","text":"

    Traditionally, with a fixed supply, there's a looming risk of plummeting prices. This phenomenon, identified by Wilson in 1979, highlights a bidder's tendency to underbid. In multi-unit auctions, this is a critical challenge. In a uniform price auction, underbidding on the marginal unit doesn't just lower the price for that unit; it slashes the overall price you pay.

    The real danger of severe under-pricing hinges on demand factors, which are often unpredictable and not easily deduced from existing data. The debate over whether discriminatory or uniform price auctions yield higher revenue remains unresolved, both theoretically (as discussed by Ausubel et al. 2011) and empirically.

    "},{"location":"#tie-breaking-rule","title":"Tie Breaking Rule","text":"

    The traditional tie-breaking rule, which prioritizes higher marginal bids, is inherently flawed. It doesn't account for the strategic value of the marginal unit. This is particularly problematic in multi-unit auctions, where the marginal unit is often the most valuable. The current rule fails to capture the true value of the marginal unit, leading to suboptimal outcomes. This is due to the discrete nature of bids, it can happen that there is market-clearing price (where demand=supply). The typical rule applied in many auctions favors high marginal bids first. We will consider an alternative that introduces more pressure at the quantity at the margin.

    "},{"location":"#elastic-supply-curve-detail","title":"Elastic Supply Curve Detail","text":"

    Maximum capacity is fixed, but the supply curve

    \\(S:P\u2192Q\\)

    varies with price, offering different quantities of options.

    The supply function is designed to be initially concave, then constant at maximum capacity. This approach, theoretically supported by Licalzi (2005), aims to mitigate dramatic underpricing.

    "},{"location":"#footnotes","title":"Footnotes","text":"
    1. Previously this was called 'above'\u00a0\u21a9

    2. Previously this was called 'below'\u00a0\u21a9

    "},{"location":"Clients/","title":"Validators","text":""},{"location":"Clients/#requirements","title":"Requirements","text":"
    • Operate as a self-reporting node operator
    • Operating using MEV-Boost
    "},{"location":"Clients/#protections","title":"Protections","text":"

    Node Operators are being provided with a tailored risk management solution that addresses the unique challenges and risks of participating through the relay.

    Read more at Relay: Captive Insurance

    This is a block diagram of all the parts of the system and will be updated as needed.

    graph LR\nsubgraph \"Consensus Node\"\n  engine[Engine API Client]\n  BAPI[Beacon API]\n  TICK[Slot processor]\n  blk_db[Block DB]\n  BS_db[Beacon State DB]\n  brod[Broadway]\n  FCTree[Fork choice store - Genserver]\n  BAPI -->|Beacon state queries| BS_db\n  brod -->|Save blocks| blk_db\n  brod -->|Blocks and attestations| FCTree\n  TICK -->|New ticks| FCTree\n  BAPI --> engine\n  BAPI --> |head/slot requests| FCTree\n  brod --> |Save new states|BS_db\nend\nGOS[Gossip Protocols]\nexec[Execution Client]\nVALIDATOR[Validator]\nengine <--> |payload validation, execution| exec\nGOS -->|blocks, attestations| brod\nVALIDATOR --> BAPI
    "},{"location":"Clients/#networking","title":"Networking","text":"

    The main entry for new events is the gossip protocol, which is how consensus nodes communicates with other consensus nodes.

    1. Discovery: our node has a series of known bootnodes hardcoded. We request a list of the nodes they know about and add them to our list. We save them locally and now can use those too to request new nodes.

    2. Message propagation. When a proposer sends a new block, or validators attest for a new block, they send those to other known nodes. Those, in turn, propagate the messages sent to other nodes. This process is repeated until, ideally, the whole network receives the messages.

    "},{"location":"Clients/#gossipsub","title":"Gossipsub","text":"

    One of the main communication protocols is GossipSub. This allows us to tell peers which topics we're interested in and receive events for them. The main external events we react to are blocks and attestations.

    "},{"location":"Clients/#receiving-an-attestation","title":"Receiving an attestation","text":"
    sequenceDiagram\n    participant prod as Topic Producer (GenStage)\n    participant proc as Topic Processor (Broadway)\n    participant FC as Fork-choice store\n\n    prod ->> proc: Produce demand\n    proc ->> proc: Decompress and deserialize message\n    proc ->>+ proc: on_attestation()\n    proc ->> FC: request latest message by the same validator\n    FC -->> proc: return\n    proc ->> proc: Validate attestation\n    proc ->>- FC: Update fork-choice store weights

    When receiving an attestation, it's processed by the on_attestation callback. We just validate it and send it to the fork choice store to update its weights and target checkpoints. The attestation is only processed if this attestation is the latest message by that validator. If there's a newer one, it should be discarded.

    The most relevant piece of the spec here is the get_weight function, which is the core of the fork-choice algorithm. In the specs, this function is called on demand, when calling get_head, works with the store's values, and recalculates them each time.

    Important

    It is a requirement that the validator cache the weights and the head root each time it adds a block or attestation: so it won't need to do the same calculations again. Additionally, it should save the latest messages in persistent storage as well so that if the node crashes it can recover the tree weights.

    "},{"location":"Clients/#receiving-a-block","title":"Receiving a block","text":"
    sequenceDiagram\n    participant prod as Topic Producer (GenStage)\n    participant proc as Topic Processor (Broadway)\n    participant block as Block DB\n    participant state as Beacon States DB\n    participant FC as Fork-choice store\n    participant exec as Execution Client\n\n    prod ->> proc: Produce demand\n    proc ->> proc: Decompress and deserialize message\n    proc ->>+ proc: on_block(block)\n    proc ->> exec: Validate execution payload\n    exec -->> proc: ok\n    proc ->> FC: request validation metadata\n    FC -->> proc: return\n    proc ->> proc: Validate block\n    proc ->> block: Save new block\n    proc ->> proc: Calculate state transition\n    proc ->> state: Save new beacon state metadata\n    proc ->> FC: Add a new block to the tree and update weights\n    loop\n        proc ->>- proc: process_operations\n    end\n    loop\n        proc ->> proc: on_attestation\n    end

    Receiving a block is more complex:

    • The block itself needs to be stored.
    • The state transition needs to be applied, a new beacon state calculated, and stored separately.
    • A new node needs to be added to the block tree aside from updating weights.
    • on_attestation needs to be called for each attestation.

    Also, there's a more complex case: we can only include a block in the fork tree if we know of its parents and their connection with our current finalized checkpoint. If we receive a disconnected node, we'll need to use Request-Response to ask peers for the missing blocks.

    "},{"location":"Clients/accounting/","title":"Accounting and Rewards","text":""},{"location":"Clients/accounting/#payment-processing-and-finalization","title":"Payment processing and finalization","text":"

    Builder payments are processed during the epoch finalization process (a two-epoch lag).

    • The builder ExecutionPayloadHeader is part of the canonical chain (i.e., the CL block for that slot is not missing). This includes two cases: The corresponding ExecutionPayload MUST also part of the canonical chain.

    • The builder ExecutionPayloadHeader is part of the canonical chain even if the corresponding ExecutionPayload is not.

    This means that there is consensus that the builder was not on time by virtue of having an empty block. However, this may be intentional in the mutli-block auction scenario so is subject to change

    "},{"location":"Clients/accounting/#proposer-equivocation","title":"Proposer equivocation","text":"

    There is no evidence of proposer equivocation.

    • A builder who sees an equivocation can get the validator slashed. Any slashed validator will not receive the unconditional builder payment.
    "},{"location":"Clients/accounting/#builder-payment-methods","title":"Builder Payment Methods","text":"

    Builder payment patterns in the context of MEV payments to the validators

    Read more at Learning: Payment Methods

    "},{"location":"Clients/accounting/#indirect-address-payment-iap-method","title":"Indirect Address Payment (IAP) Method","text":"

    This method involves the builder using a different address to pay the proposer through an end-of-block transaction. In this pattern, the builder first sets its own address to receive the block\u2019s transaction fees and then employs a different address to remunerate the proposer in the end-of-block transaction.

    "},{"location":"Clients/accounting/#intermediate-transfer-payment-itp-method","title":"Intermediate Transfer Payment (ITP) Method","text":"

    In this method, the builder pays the proposer through an end-of-block transaction, initially transferring the amount to an alternate address, which then initiates an internal transaction to send the funds to the proposer. This involves a two-step process where the payment is first sent to an intermediary address (like a smart contract) before reaching the proposer.

    "},{"location":"Clients/accounting/#proposer-payments-value-ppv","title":"Proposer Payments Value (PPV)","text":"

    The feeReceipent address is configured in the consensus layer client and is provided by the NO at the time of the block proposal. Because the eth1 address that is provided for the feeReceipent is under the complete control of the NO, there is an opportunity for a NO to steal all the PPV for themselves.

    "},{"location":"Clients/clients/","title":"Clients","text":""},{"location":"Clients/clients/#ethereum-network","title":"Ethereum Network","text":"

    What is the Etheruem network?1

    • A user of the network sends a transaction (e.g. an ETH transfer) to the network.
    • The network validates the transaction.
    • The network includes the transaction in a block.
    • The network includes the block in the chain, so the new state includes the transaction sent by the user. Any user can request this information and the change will be reflected.

    The problem here is: what does sending something to the network mean?

    "},{"location":"Clients/clients/#execution-and-consensus-clients","title":"Execution and Consensus clients","text":"

    A full node is split into two clients:

    • The execution client knows how to represent the EVM state and apply state changes (transactions) to generate new states. It represents the state machine.
    • The consensus client knows very little about the state machine, but knows how to choose between different worldviews and agree with other nodes. It enables the execution client to apply the correct state transitions.
    graph BT\nsubgraph consensus[Consensus Client]\n    bstate[Beacon State]\n    Validator\nend\n\nsubgraph \"Execution Client\"\n    mempool\n    state\nend\n\n\nex_gossip[Execution Gossip Protocol]\ncon_gossip[Consensus Gossip Protocol]\nex_gossip<-->|Transactions|mempool\n\ncon_gossip -->|Proposed blocks \\n attestations| bstate\nValidator -->|Propose a block|con_gossip\nmempool-->|Get a block to build a proposal|Validator\nbstate-->|Apply a block|state\nuser -->|Sends new transactions| mempool\nstate -->|State queries| user\n\nlinkStyle 2 stroke:#ff0000,stroke-width:2px;\nlinkStyle 3 stroke:#ff0000,stroke-width:2px;

    You might notice there's a section called \"validator\" in there, with red arrows. Your node is considered a validator if it has 32 ETH staked in the validator contract, which makes it capable of proposing new blocks and attesting to other proposals. That is: actively participating in the protocol and getting rewards for it.

    If you're not a validator you can still participate though! The block diagram is the same, without the red lines (and you won't receive rewards for it). You can still send transactions to your local node, propagate them to others, and receive updates.

    "},{"location":"Clients/clients/#lifecycle-of-a-transaction","title":"Lifecycle of a transaction","text":"

    Here's the full sequence from the perspective of a non-validator node:

    1. A user builds, signs, and sends a transaction to their execution client's JSON-RPC API. This is usually done with a wrapper library like ethers, hardhat, or foundry.

    2. The execution client receives the transaction and:

      1. Validates it (checks the user has enough ETH, the signature matches, etc).

      2. Adds it to its local mempool. The mempool is a local pool of transactions that are not yet executed.

      3. Broadcasts it through the execution gossip layer, to other execution nodes. Other execution nodes include it in their mempools.

    3. A validator node is selected as a block proposer. As a proposer:

      1. Their execution client bundles many transactions from its mempool into a block.

      2. All transactions in the bundle are executed locally and state change is calculated.

      3. Their consensus client gets this block (or as consensus calls it, \"execution payload\") and adds consensus layer information, like attestations, slashings, rewards, penalties, etc. The execution payload + consensus metadata forms a \"beacon block\".

      4. The beacon block is signed and sent over the consensus gossip layer to other nodes.
    4. A committee of validators validates that block and sends signed attestations for it over the consensus gossip protocol too.

    5. All nodes receive both the new proposed block and attestations. Then they:

      1. Include the new block in their local fork tree if it's valid.
      2. Save the attestations and update the weights of the blocks on the tree.
      3. Apply fork choice to recalculate, if necessary, what blocks are included in the canonical chain.
      4. The changes + the new block are propagated to the execution node so transactions are applied and the state is changed and up to date.

    The Ethereum network is not a networked database: It's a series of tubes. And if you don't understand, those tubes can be filled and if they are filled, when you put your message in, it gets in line and it's going to be delayed by anyone that puts into that tube enormous amounts of material, enormous amounts of material. Ted Stevens (2024) Wikipedia. Available at: https://en.wikipedia.org/wiki/Ted_Stevens (Accessed: 03 April 2024).

    "},{"location":"Clients/configuration/","title":"Configuration","text":""},{"location":"Clients/configuration/#mandatory-values-for-validator-and-beacon-clients","title":"Mandatory Values for Validator and Beacon clients","text":"

    LocalBlockValueBoost is the value boost for local block construction. This is used to prioritize local block construction over relay/builder block construction.

    LocalBlockValueBoost = 0\n

    The equation is as follows:

    "},{"location":"Clients/configuration/#prysm","title":"Prysm1","text":"\\[ builder_bid_value _ 100 > local_block_value _ (local-block-value-boost + 100) \\]"},{"location":"Clients/configuration/#teku","title":"Teku2","text":"\\[ exec_node_payload_value >= builder_boost_factor \\* (builder_payload_value // 100) \\]"},{"location":"Clients/configuration/#example-prysm","title":"Example: Prysm","text":"
    EthBurnAddressHex                string           // EthBurnAddressHex is the constant eth address written in hex format to burn fees in that network. the default is 0x0\nDefaultBuilderGasLimit           uint64           // DefaultBuilderGasLimit is the default used to set the gaslimit for the Builder APIs, typically at around 30M wei.\n\n// Mev-boost circuit breaker\nMaxBuilderConsecutiveMissedSlots primitives.Slot // MaxBuilderConsecutiveMissedSlots defines the number of consecutive skip slot to fallback from using relay/builder to local execution engine for block construction.\nMaxBuilderEpochMissedSlots       primitives.Slot // MaxBuilderEpochMissedSlots is defines the number of total skip slot (per epoch rolling windows) to fallback from using relay/builder to local execution engine for block construction.\nLocalBlockValueBoost             uint64          // LocalBlockValueBoost is the value boost for local block construction. This is used to prioritize local block construction over relay/builder block construction.\n\n// Execution engine timeout value\n
    "},{"location":"Clients/configuration/#example-teku","title":"Example: Teku","text":"
      private void logPayloadValueComparisonDetails(\n      final boolean localPayloadValueWon,\n      final UInt256 builderBidValue,\n      final UInt256 localPayloadValue,\n      final boolean isRequestedBuilderBoostFactor,\n      final UInt64 actualBuilderBoostFactor) {\n    final String actualComparisonFactorString;\n    final String comparisonFactorSource = isRequestedBuilderBoostFactor ? \"VC\" : \"BN\";\n\n    if (actualBuilderBoostFactor.equals(BUILDER_BOOST_FACTOR_MAX_PROFIT)) {\n      actualComparisonFactorString = \"MAX_PROFIT\";\n    } else if (actualBuilderBoostFactor.equals(BUILDER_BOOST_FACTOR_PREFER_EXECUTION)) {\n      actualComparisonFactorString = \"PREFER_EXECUTION\";\n    } else if (actualBuilderBoostFactor.equals(BUILDER_BOOST_FACTOR_PREFER_BUILDER)) {\n      actualComparisonFactorString = \"PREFER_BUILDER\";\n    } else {\n      actualComparisonFactorString = actualBuilderBoostFactor + \"%\";\n    }\n
    "},{"location":"Clients/configuration/#footnotes","title":"Footnotes","text":"
    1. Prysm\u00a0\u21a9

    2. Teku\u00a0\u21a9

    "},{"location":"Clients/relay/","title":"Relay","text":""},{"location":"Clients/relay/#relay","title":"Relay","text":"

    proposer payout: empty block, 0; non empty block, non-negative value < 0

    Once a proposer calls submitBlindedBlock to a relay (with a signed header), it depends on the relay to release the block to be able to propose anything (no fallback to a local block is possible at that point due to possible slashing).

    There's several relay error scenarios:

    1. payload withholding (relay doesn't release the payload and the proposer needs to forfeit the slot)

    2. incorrect payload a. incorrect value (the final amount paid by the builder to the proposer was different to the amount claimed in the BuilderBid) b. invalid block (invalid data / fields)

    "},{"location":"Clients/requirements/","title":"Requirements","text":"","tags":["Forward Contracts","gas auction","mechanism design"]},{"location":"Clients/requirements/#required-validator-endpoints","title":"Required Validator Endpoints","text":"
    • /eth/v1/validator/attestation_data
    • /eth/v1/beacon/headers/{block_id}
    • /eth/v1/beacon/states/{state_id}/finality_checkpoints
    • /eth/v1/beacon/states/{state_id}/fork
    • /eth/v1/beacon/headers
    • /eth/v1/validator/liveness
    • /eth/v1/node/syncing
    • /eth/v1/config/deposit_contract
    • /eth/v1/beacon/states/{state_id}/committees
    • /eth/v1/validator/duties/attester/{epoch}
    • /eth/v1/validator/duties/proposer/{epoch}
    • /eth/v1/validator/duties/sync/{epoch}
    • /eth/v1/beacon/genesis
    • /eth/v1/validator/prepare_beacon_proposer
    • /eth/v1/beacon/pool/attestations
    • /eth/v1/beacon/blinded_blocks
    • /eth/v1/beacon/blocks
    • /eth/v1/beacon/pool/voluntary_exits
    • /eth/v1/validator/register_validator
    • /eth/v1/beacon/states/{state_id}/validators
    • /eth/v1/validator/aggregate_attestation
    • /eth/v1/validator/aggregate_and_proofs
    • /eth/v1/validator/contribution_and_proofs
    • /eth/v1/validator/beacon_committee_subscriptions
    • /eth/v1/beacon/pool/sync_committees
    • /eth/v1/beacon/blocks/{block_id}/root
    • /eth/v1/validator/sync_committee_contribution
    ","tags":["Forward Contracts","gas auction","mechanism design"]},{"location":"Clients/validators/","title":"Validators","text":"

    This is a block diagram of all the parts of the system and will be updated as needed.

    graph LR\nsubgraph \"Consensus Node\"\n  engine[Engine API Client]\n  BAPI[Beacon API]\n  TICK[Slot processor]\n  blk_db[Block DB]\n  BS_db[Beacon State DB]\n  brod[Broadway]\n  FCTree[Fork choice store - Genserver]\n  BAPI -->|Beacon state queries| BS_db\n  brod -->|Save blocks| blk_db\n  brod -->|Blocks and attestations| FCTree\n  TICK -->|New ticks| FCTree\n  BAPI --> engine\n  BAPI --> |head/slot requests| FCTree\n  brod --> |Save new states|BS_db\nend\nGOS[Gossip Protocols]\nexec[Execution Client]\nVALIDATOR[Validator]\nengine <--> |payload validation, execution| exec\nGOS -->|blocks, attestations| brod\nVALIDATOR --> BAPI
    "},{"location":"Clients/validators/#networking","title":"Networking","text":"

    The main entry for new events is the gossip protocol, which is how consensus nodes communicates with other consensus nodes.

    1. Discovery: our node has a series of known bootnodes hardcoded. We request a list of the nodes they know about and add them to our list. We save them locally and now can use those too to request new nodes.

    2. Message propagation. When a proposer sends a new block, or validators attest for a new block, they send those to other known nodes. Those, in turn, propagate the messages sent to other nodes. This process is repeated until, ideally, the whole network receives the messages.

    "},{"location":"Clients/validators/#gossipsub","title":"Gossipsub","text":"

    One of the main communication protocols is GossipSub. This allows us to tell peers which topics we're interested in and receive events for them. The main external events we react to are blocks and attestations.

    "},{"location":"Clients/validators/#receiving-an-attestation","title":"Receiving an attestation","text":"
    sequenceDiagram\n    participant prod as Topic Producer (GenStage)\n    participant proc as Topic Processor (Broadway)\n    participant FC as Fork-choice store\n\n    prod ->> proc: Produce demand\n    proc ->> proc: Decompress and deserialize message\n    proc ->>+ proc: on_attestation()\n    proc ->> FC: request latest message by the same validator\n    FC -->> proc: return\n    proc ->> proc: Validate attestation\n    proc ->>- FC: Update fork-choice store weights

    When receiving an attestation, it's processed by the on_attestation callback. We just validate it and send it to the fork choice store to update its weights and target checkpoints. The attestation is only processed if this attestation is the latest message by that validator. If there's a newer one, it should be discarded.

    The most relevant piece of the spec here is the get_weight function, which is the core of the fork-choice algorithm. In the specs, this function is called on demand, when calling get_head, works with the store's values, and recalculates them each time.

    Important

    It is a requirement that the validator cache the weights and the head root each time it adds a block or attestation: so it won't need to do the same calculations again. Additionally, it should save the latest messages in persistent storage as well so that if the node crashes it can recover the tree weights.

    "},{"location":"Clients/validators/#receiving-a-block","title":"Receiving a block","text":"
    sequenceDiagram\n    participant prod as Topic Producer (GenStage)\n    participant proc as Topic Processor (Broadway)\n    participant block as Block DB\n    participant state as Beacon States DB\n    participant FC as Fork-choice store\n    participant exec as Execution Client\n\n    prod ->> proc: Produce demand\n    proc ->> proc: Decompress and deserialize message\n    proc ->>+ proc: on_block(block)\n    proc ->> exec: Validate execution payload\n    exec -->> proc: ok\n    proc ->> FC: request validation metadata\n    FC -->> proc: return\n    proc ->> proc: Validate block\n    proc ->> block: Save new block\n    proc ->> proc: Calculate state transition\n    proc ->> state: Save new beacon state metadata\n    proc ->> FC: Add a new block to the tree and update weights\n    loop\n        proc ->>- proc: process_operations\n    end\n    loop\n        proc ->> proc: on_attestation\n    end

    Receiving a block is more complex:

    • The block itself needs to be stored.
    • The state transition needs to be applied, a new beacon state calculated, and stored separately.
    • A new node needs to be added to the block tree aside from updating weights.
    • on_attestation needs to be called for each attestation.

    Also, there's a more complex case: we can only include a block in the fork tree if we know of its parents and their connection with our current finalized checkpoint. If we receive a disconnected node, we'll need to use Request-Response to ask peers for the missing blocks.

    "},{"location":"Developers/","title":"Developer overview","text":""},{"location":"Developers/#general","title":"General","text":"
    • SDK

    • Mainnet

    • Holesky Testnet

    "},{"location":"Developers/#auction-contracts-v10","title":"Auction Contracts v1.0","text":"
    • Interface
    "},{"location":"Developers/#builder-and-searcher-specific","title":"Builder and Searcher specific","text":"

    Requirements

    Payment Methods

    "},{"location":"Developers/builders/","title":"Builder overview","text":""},{"location":"Developers/builders/#block-properties","title":"Block Properties","text":"

    Builders need the following data:

    Field Where it comes from Notes feeRecipient validator (builder_registerValidator) Address to receive fees from the block. gasLimit validator (builder_registerValidator) preferred gas limit of validator timestamp relay (BN) value for the timestamp field of the new payload prevRandao relay (BN) from previous slot extraData builder graffiti from builder, not proposer"},{"location":"Developers/builders/#builder-api","title":"Builder Api","text":"

    All URIs are relative to http://localhost:18550

    Method HTTP request Description getValidators GET /relay/v1/builder/validators Get a list of validator registrations for validators scheduled to propose in the current and next epoch. submitBlock POST /relay/v1/builder/blocks Submit a new block to the relay.

    "},{"location":"Developers/builders/#getvalidators","title":"getValidators","text":"

    List getValidators()

    Get a list of validator registrations for validators scheduled to propose in the current and next epoch.

    • Used by builders to know when to submit bids for an upcoming proposal.
    • Returns an array of validator registrations for the current and next epoch.
    • Each entry includes a slot and the validator with assigned duty.
    • Slots without a registered validator are omitted.
    "},{"location":"Developers/builders/#parameters","title":"Parameters","text":"

    This endpoint does not need any parameter.

    "},{"location":"Developers/builders/#return-type","title":"Return type","text":"

    List

    Name Type Description Notes fee_recipient String Address to receive fees from the block. [default to null] gas_limit String Preferred gas limit of validator. [default to null] timestamp String Unix timestamp of registration. [default to null] pubkey String BLS public key of validator. [default to null]"},{"location":"Developers/builders/#authorization","title":"Authorization","text":"

    No authorization required

    "},{"location":"Developers/builders/#http-request-headers","title":"HTTP request headers","text":"
    • Content-Type: Not defined
    • Accept: application/json
    "},{"location":"Developers/builders/#submitblock","title":"submitBlock","text":"

    submitBlock(submitBlock_request, cancellations)

    Submit a new block to the relay.

    • Blocks can be submitted as JSON or SSZ, and optionally GZIP encoded. To be clear, there are four options: JSON, JSON+GZIP, SSZ, SSZ+GZIP. If JSON, the content type should be `application/json`. If SSZ, the content type should be `application/octet-stream`.
    • To enable GZIP compression for the request body, the HTTP content encoding should be `gzip`. Compression is optional.
    • The relay will simulate the block to verify properties and proposer payment in the payment transaction from builder to proposer `fee_recipient` at the end of block.
    • For accountability, builder signature is over the SSZ encoded `message`.
    • The `message`, which does not include the transactions, will be made public via the data API, allowing anyone to verify the builder signature.
    • Any new submission by a builder will overwrite a previous one by the same `builder_pubkey`, even if it is less profitable.
    "},{"location":"Developers/builders/#parameters_1","title":"Parameters","text":"Name Type Description Notes submitBlock_request submitBlock_request A signed bid with an execution payload. cancellations String If set to 1, opt into bid cancellations. [optional] [default to null]"},{"location":"Developers/builders/#return-type_1","title":"Return type","text":"

    null (empty response body)

    "},{"location":"Developers/builders/#authorization_1","title":"Authorization","text":"

    No authorization required

    "},{"location":"Developers/builders/#http-request-headers_1","title":"HTTP request headers","text":"
    • Content-Type: application/json, application/octet-stream
    • Accept: application/json
    "},{"location":"Developers/builders/#submitblock_request","title":"submitBlock_request","text":""},{"location":"Developers/builders/#properties","title":"Properties","text":"Name Type Description Notes slot String [optional] [default to null] parent_hash String [optional] [default to null] block_hash String [optional] [default to null] builder_pubkey String The validator's BLS public key, uniquely identifying them. 48-bytes, hex encoded with 0x prefix, case insensitive. [optional] [default to null] proposer_pubkey String The validator's BLS public key, uniquely identifying them. 48-bytes, hex encoded with 0x prefix, case insensitive. [optional] [default to null] proposer_fee_recipient String An address on the execution (Ethereum 1) network. [optional] [default to null] gas_limit String [optional] [default to null] gas_used String [optional] [default to null] value String [optional] [default to null]"},{"location":"Developers/interface/","title":"Summary Interfaces","text":"
    • Auctioneer
    • Settlement
    • Bidder
    "},{"location":"Developers/interface/#auctioneer-interface","title":"Auctioneer Interface","text":"

    Git Source

    Inherits: ERC6909, Ownable2Step

    Implements an auction mechanism for selling block space.

    "},{"location":"Developers/interface/#structs","title":"Structs","text":""},{"location":"Developers/interface/#auction","title":"Auction","text":"
    struct Auction {\n    uint120 itemsForSale;\n    bool isOpen;\n    bool isSettled;\n    bool isPaidOut;\n    bool isRefunded;\n    mapping(address => BidderInfo) biddersInfo;\n}\n
    "},{"location":"Developers/interface/#bidderinfo","title":"BidderInfo","text":"
    struct BidderInfo {\n    uint120 itemsBought;\n    uint128 amountOwed;\n}\n
    "},{"location":"Developers/interface/#state-variables","title":"State Variables","text":""},{"location":"Developers/interface/#maxbidder","title":"maxBidder","text":"
    uint8 public maxBidder;\n
    "},{"location":"Developers/interface/#weth9","title":"WETH9","text":"
    WETH public immutable WETH9;\n
    "},{"location":"Developers/interface/#accountant","title":"accountant","text":"
    address public accountant;\n
    "},{"location":"Developers/interface/#maxbids","title":"maxBids","text":"
    uint256 public maxBids = 50;\n
    "},{"location":"Developers/interface/#mingasamount","title":"minGasAmount","text":"
    uint120 public minGasAmount = 20000;\n
    "},{"location":"Developers/interface/#operator","title":"operator","text":"
    address public operator;\n
    "},{"location":"Developers/interface/#idmap","title":"IdMap","text":"
    mapping(address bidder => uint8 id) public IdMap;\n
    "},{"location":"Developers/interface/#biddermap","title":"bidderMap","text":"
    mapping(uint8 id => address bidder) public bidderMap;\n
    "},{"location":"Developers/interface/#auctions","title":"auctions","text":"
    mapping(uint256 slot => Auction) public auctions;\n
    "},{"location":"Developers/interface/#slotscount","title":"slotsCount","text":"
    uint256 public slotsCount;\n
    "},{"location":"Developers/interface/#slotsauctioned","title":"slotsAuctioned","text":"
    mapping(uint256 index => uint256 slot) public slotsAuctioned;\n
    "},{"location":"Developers/interface/#bidcount","title":"bidCount","text":"
    mapping(uint256 slot => uint256 count) public bidCount;\n
    "},{"location":"Developers/interface/#functions","title":"Functions","text":""},{"location":"Developers/interface/#bid","title":"bid","text":"

    Bid function for bidders to submit manual bids.

    function bid(uint256 slot, uint256[] memory packedBids) external;\n
    Parameters

    Name Type Description slot uint256 The auction slot. packedBids uint256[] Array of packed bids"},{"location":"Developers/interface/#getbidderinfo","title":"getBidderInfo","text":"

    Retrieve information about a bidder after auction settlement.

    function getBidderInfo(uint256 slot, address bidder) external view returns (uint120 itemsBought, uint128 amountOwed);\n
    Parameters

    Name Type Description slot uint256 The slot identifier of the auction. bidder address The address of the bidder for whom information is requested.

    Returns

    Name Type Description itemsBought uint120 The number of items bought by the bidder in the specified auction. amountOwed uint128 The amount owed by the bidder for the items bought in the specified auction. Requirements: - The auction must have been settled. - The provided bidder address must be valid and have participated in the auction."},{"location":"Developers/interface/#packbid","title":"packBid","text":"

    Packed Bid details into a uint256 for submission.

    function packBid(uint128 bidPrice, uint120 itemsToBuy, uint8 bidderId) external pure returns (uint256 packedBid);\n
    Parameters

    Name Type Description bidPrice uint128 Price per item. itemsToBuy uint120 Items to buy in the auction. bidderId uint8 Id for bidder

    Returns

    Name Type Description packedBid uint256 for auction submission"},{"location":"Developers/interface/#calcaveragebid","title":"calcAverageBid","text":"

    Calculate average bid price for the last n auctions

    function calcAverageBid(uint256 numAuctions) external view returns (uint128 avBidPrice);\n
    Parameters

    Name Type Description numAuctions uint256 Number of auctions to average for

    Returns

    Name Type Description avBidPrice uint128 for last n auctions"},{"location":"Developers/interface/#events","title":"Events","text":""},{"location":"Developers/interface/#auctionsettled","title":"AuctionSettled","text":"
    event AuctionSettled(uint256 indexed slot);\n
    "},{"location":"Developers/interface/#bidderadded","title":"BidderAdded","text":"
    event BidderAdded(address indexed bidder, uint8 indexed bidderId);\n
    "},{"location":"Developers/interface/#bidderremoved","title":"BidderRemoved","text":"
    event BidderRemoved(address indexed bidder, uint8 indexed bidderId);\n
    "},{"location":"Developers/interface/#auctionopened","title":"AuctionOpened","text":"
    event AuctionOpened(uint256 indexed slot, uint120 itemsForSale);\n
    "},{"location":"Developers/interface/#auctionpaidout","title":"AuctionPaidOut","text":"
    event AuctionPaidOut(uint256 indexed slot);\n
    "},{"location":"Developers/interface/#auctionrefund","title":"AuctionRefund","text":"
    event AuctionRefund(uint256 indexed slot);\n
    "},{"location":"Developers/interface/#errors","title":"Errors","text":""},{"location":"Developers/interface/#invalidid","title":"InvalidId","text":"
    error InvalidId();\n
    "},{"location":"Developers/interface/#unauthorized","title":"Unauthorized","text":"
    error Unauthorized();\n
    "},{"location":"Developers/interface/#invalidbiditems","title":"InvalidBidItems","text":"
    error InvalidBidItems();\n
    "},{"location":"Developers/interface/#insufficientfunds","title":"InsufficientFunds","text":"
    error InsufficientFunds();\n
    "},{"location":"Developers/interface/#auctionnotopen","title":"AuctionNotOpen","text":"
    error AuctionNotOpen(uint256 slot);\n
    "},{"location":"Developers/interface/#auctionnotclosed","title":"AuctionNotClosed","text":"
    error AuctionNotClosed(uint256 slot);\n
    "},{"location":"Developers/interface/#auctionalreadyopen","title":"AuctionAlreadyOpen","text":"
    error AuctionAlreadyOpen(uint256 slot);\n
    "},{"location":"Developers/interface/#auctionalreadysettled","title":"AuctionAlreadySettled","text":"
    error AuctionAlreadySettled(uint256 slot);\n
    "},{"location":"Developers/interface/#biddernotregistered","title":"BidderNotRegistered","text":"
    error BidderNotRegistered(address bidder);\n
    "},{"location":"Developers/interface/#bidderalreadyexists","title":"BidderAlreadyExists","text":"
    error BidderAlreadyExists(address bidder);\n
    "},{"location":"Developers/interface/#settlementhouse-interface","title":"SettlementHouse Interface","text":"

    Git Source

    A contract for managing bundles of transactions for a futures token.

    "},{"location":"Developers/interface/#structs_1","title":"Structs","text":""},{"location":"Developers/interface/#bundle","title":"Bundle","text":"
    struct Bundle {\n    address submitter;\n    uint256 amountOfGas;\n    bytes32[] bundleHashes;\n}\n
    "},{"location":"Developers/interface/#state-variables_1","title":"State Variables","text":""},{"location":"Developers/interface/#futurestoken","title":"futuresToken","text":"
    IERC6909 public immutable futuresToken;\n
    "},{"location":"Developers/interface/#functions_1","title":"Functions","text":""},{"location":"Developers/interface/#submitbundle","title":"submitBundle","text":"
    function submitBundle(uint256 slot, uint256 amountOfGas, bytes32[] calldata bundleHashes) external;\n
    "},{"location":"Developers/interface/#bidder-interface","title":"Bidder Interface","text":"

    Git Source

    "},{"location":"Developers/interface/#functions_2","title":"Functions","text":""},{"location":"Developers/interface/#getbid","title":"getBid","text":"

    Get the bid from a bidder for a specific slot and round.

    function getBid(uint256 slot) external view returns (uint256[] memory packedBids);\n
    Parameters

    Name Type Description slot uint256 The auction slot.

    Returns

    Name Type Description packedBids uint256[] Array of bids (in a packed format). uint256(uint128(bidPrice),uint120(itemsToBuy),uint8(bidderId))"},{"location":"Developers/mainnet/","title":"XGA L2 Mainnet","text":"
    • Live auction dashboard
    • L2 Blockchain explorer
    "},{"location":"Developers/mainnet/#node-operators","title":"Node Operators","text":"

    Please coordinate with us to register your validator set with our registry service. We will provide you with the necessary information to get started.

    "},{"location":"Developers/mainnet/#validators","title":"Validators","text":"

    Connecting to the relay without being registered will result in your validator operating correctly so long as MEV Boost is also running.

    "},{"location":"Developers/mainnet/#mainnet-information","title":"Mainnet Information","text":"
    • L2 RPC:

      • Description: L2 Node RPC
      • URL: https://xga-api.securerpc.com/v1
      • Methods: eth_*
      • ChainId: 7890785
      • Limits: 300 req per minute per IP
    • Beta bundle RPC:

      • Description: Beta bundle submission RPC
      • URL: https://mainnet-auction.securerpc.com/
      • Method: mev_sendBetaBundle
      • Parameters:
        • txs: List of txs as bundle e.g. [0x2323...,]
        • slot: slot number e.g. \"11282389\"
      • ChainId: 1
    "},{"location":"Developers/mainnet/#builders-and-searchers","title":"Builders and searchers","text":"

    Aquire some Holesky Testnet ETH through a faucet in the resources listed below. If you are unable to secure enough, please reach out to us.

    "},{"location":"Developers/mainnet/#contracts","title":"Contracts","text":"

    L2 Auctioneer: 0x86Bc75A43704E38f0FD94BdA423C50071fE17c99

    L2 SettlementHouse: 0x80C5FfF824d14c87C799D6F90b7D8e0a715bd33C

    L1StandardBridgeProxy: 0x490B959870889D5FA0B329431683B8B3e850DD95

    To monetize yourself on L2, send some ETH on L1 to 0x490B959870889D5FA0B329431683B8B3e850DD95

    "},{"location":"Developers/mainnet/#resources","title":"Resources","text":"
    • Block Explorers
      • etherscan.io
      • beaconcha.in
    "},{"location":"Developers/payment-methods/","title":"Builder and Searcher payment methods","text":"

    To further classify the payment methods, we can consider the broader context of Ethereum block building, including both traditional and MEV-Auction scenarios as it relates to payment mechanisms.

    This classification covers a range of payment methods from the simplest direct payments to more complex arrangements involving smart contracts and off-chain agreements.

    1. Direct Payment Method

    2. Description: The most straightforward method where the block proposer (validator) receives the transaction fees directly from the transactions included in the block.

    3. Use Case: Commonly used in standard Ethereum block building.

    4. Coinbase Transfer Payment Method

    5. Description: In this method, the transaction fees and MEV rewards are transferred directly to the block proposer's address via the coinbase transaction.

    6. Use Case: Utilized in both traditional and MEV-Auction scenarios.

    7. Indirect Address Payment (IAP) Method

    8. Description: The builder uses a different address to pay the proposer through an end-of-block transaction, separate from the address receiving the block\u2019s transaction fees.

    9. Use Case: Specific to MEV-Auction, where builders and proposers are distinct entities.

    10. Intermediate Transfer Payment (ITP) Methods

    11. Description: Involves a two-step process where the builder first transfers the payment to an intermediary address, which then sends it to the proposer.

    12. Use Case: Also specific to MEV-Auction, particularly when involving smart contracts or third-party addresses.

    13. Smart Contract-Based Payment Method

    14. Description: Payments are handled through a smart contract, which can programmatically distribute rewards based on predefined rules.

    15. Use Case: Useful in decentralized block building scenarios or when complex payment distributions are required.

    16. Off-Chain Payment Method

    17. Description: Payment occurs outside the Ethereum blockchain, possibly through other cryptocurrencies or traditional banking systems.

    18. Use Case: Might be used in private agreements between parties involved in block building.
    ","tags":["primary market","validators","builders","searchers","payment"]},{"location":"Developers/payment-methods/#builder-payment-methods","title":"Builder Payment Methods","text":"

    Builder payment patterns in the context of MEV payments to the validators

    ","tags":["primary market","validators","builders","searchers","payment"]},{"location":"Developers/payment-methods/#indirect-address-payment-iap-method","title":"Indirect Address Payment (IAP) Method","text":"

    This method involves the builder using a different address to pay the proposer through an end-of-block transaction. In this pattern, the builder first sets its own address to receive the block\u2019s transaction fees and then employs a different address to remunerate the proposer in the end-of-block transaction.

    ","tags":["primary market","validators","builders","searchers","payment"]},{"location":"Developers/payment-methods/#intermediate-transfer-payment-itp-method","title":"Intermediate Transfer Payment (ITP) Method","text":"

    In this method, the builder pays the proposer through an end-of-block transaction, initially transferring the amount to an alternate address, which then initiates an internal transaction to send the funds to the proposer. This involves a two-step process where the payment is first sent to an intermediary address (like a smart contract) before reaching the proposer.

    ","tags":["primary market","validators","builders","searchers","payment"]},{"location":"Developers/sdk/","title":"Auction SDK","text":"

    XGA auction winners are granted future block space via a token, which is used with submission of transactions for inclusion in the beta block. Budding bidders can register themselves with the protocol to participate in beta block auctions. Thereupon custom implementations will be required to bid and submit transactions. Technical details are provided herein.

    Technical Overview: - Bidding: - Connect to L2 RPC - Bridge eth to L2 - Understand auction contracts - Deploy custom bidding strategy contract - Submitting bundles: - Beta Bundle RPC - Bundle JSON Requests and Responses

    Full working examples are available for: - Zero latency open bidder contract - Bundle submissions

    "},{"location":"Developers/sdk/#bidding","title":"Bidding","text":""},{"location":"Developers/sdk/#l2-rpc","title":"L2 RPC","text":"
    • L2 RPC:

      • Description: L2 Node RPC
      • URL: https://xga-api.securerpc.com/v1
      • Methods: eth_*
      • ChainId: 7890785
    • L2 RPC (TESTNET):

      • Description: L2 Node RPC (Testnet)
      • URL: https://holesky-api.securerpc.com/l2
      • Methods: eth_*
      • ChainId: 42169
    "},{"location":"Developers/sdk/#l1-bridge","title":"L1 Bridge","text":"

    Fund L2 address by sending ETH to the L1 bridge address.

    "},{"location":"Developers/sdk/#deployed-address","title":"Deployed Address","text":"
    L1_BRIDGE=\"0x490B959870889D5FA0B329431683B8B3e850DD95\"\n
    "},{"location":"Developers/sdk/#deployed-address-testnet","title":"Deployed Address (Testnet)","text":"
    L1_BRIDGE=\"0x3Ae5Ca0B05bE12d4FF9983Ed70D86de9C34e820C\"\n
    "},{"location":"Developers/sdk/#weth","title":"WETH","text":""},{"location":"Developers/sdk/#deployed-address-mainnet-and-testnet","title":"Deployed Address (Mainnet and Testnet)","text":"
    WETH=\"0x4200000000000000000000000000000000000006\"\n
    "},{"location":"Developers/sdk/#auction-contracts","title":"Auction Contracts","text":""},{"location":"Developers/sdk/#deployed-addresses","title":"Deployed Addresses","text":"
    AUCTIONEER=\"0x86Bc75A43704E38f0FD94BdA423C50071fE17c99\"\nSETTLEMENT=\"0x80C5FfF824d14c87C799D6F90b7D8e0a715bd33C\"\n
    "},{"location":"Developers/sdk/#deployed-addresses-testnet","title":"Deployed Addresses (Testnet)","text":"
    AUCTIONEER=\"0xD88e271AD39dAb4DEB0f7f9475d993ed4Bf5029b\"\nSETTLEMENT=\"0x7Ac1A452B59114Fb1E67470720343A2e9AE18297\"\n
    "},{"location":"Developers/sdk/#registering-a-bidder","title":"Registering a bidder","text":"

    Only registered bidders can participate in the auction. Operators can onboard new bidders through the contract.

    To check for bidderId when registered, call IdMap on the contract:

    function IdMap(address bidder) external view returns (uint8 id);\n
    "},{"location":"Developers/sdk/#packing-a-bid","title":"Packing a bid","text":"

    Bids are packed by price, amount, bidderId

        /**\n     * @dev Packed Bid details into a uint256 for submission.\n     *\n     * @param bidPrice Price per item.\n     * @param itemsToBuy Items to buy in the auction.\n     * @param bidderId Id for bidder\n     * @return packedBid for auction submission\n     */\n    function packBid(uint256 bidPrice, uint256 itemsToBuy, uint256 bidderId)\n        external\n        pure\n        returns (uint256 packedBid);\n
    "},{"location":"Developers/sdk/#winning-bid-info","title":"Winning bid info","text":"

    After an auction is closed, bidders can query their bid results:

        /**\n     * @dev Retrieve information about a bidder after auction settlement.\n     *\n     * @param slot The slot identifier of the auction.\n     * @param bidder The address of the bidder for whom information is requested.\n     * @return itemsBought The number of items bought by the bidder in the specified auction.\n     * @return amountOwed The amount owed by the bidder for the items bought in the specified auction.\n     *\n     * Requirements:\n     * - The auction must have been settled.\n     * - The provided `bidder` address must be valid and have participated in the auction.\n     *\n     */\n    function getBidderInfo(uint256 slot, address bidder)\n        external\n        view\n        returns (uint120 itemsBought, uint128 amountOwed);\n
    "},{"location":"Developers/sdk/#bidder-contracts","title":"Bidder Contracts","text":"

    A minimal viable bidder is provided below. A more sophisticated fill or kill open bidder contract is provided.

    /// SPDX-License-Identifier: UPL-1.0\npragma solidity ^0.8.25;\n\nimport {WETH} from \"solmate/tokens/WETH.sol\";\nimport {ERC6909} from \"solmate/tokens/ERC6909.sol\";\n\ninterface SettlementHouse {\n    function submitBundle(uint256 slot, uint256 amount, bytes32[] calldata hashes) external;\n}\n\n/// @title MockBidder\ncontract MockBidder {\n    uint256[] public bids;\n    ERC6909 auctioneer;\n    SettlementHouse house;\n    WETH weth;\n\n    constructor(WETH _weth, address _auctioneer, address settlement) {\n        weth = _weth;\n        auctioneer = ERC6909(_auctioneer);\n        house = SettlementHouse(settlement);\n        weth.approve(_auctioneer, type(uint256).max);\n    }\n\n    function setBids(uint256[] memory newBids) public {\n        bids = newBids;\n    }\n\n    function getBid(uint256) external view returns (uint256[] memory packedBids) {\n        return bids;\n    }\n\n    function submit(uint256 slot, uint256 amount, bytes32[] calldata hashes) external {\n        auctioneer.approve(address(house), slot, amount);\n        house.submitBundle(slot, amount, hashes);\n    }\n}\n
    "},{"location":"Developers/sdk/#submitting-bundles","title":"Submitting bundles","text":""},{"location":"Developers/sdk/#beta-bundle-rpc","title":"Beta Bundle RPC","text":"
    • Beta bundle RPC:

      • Description: Beta bundle submission RPC
      • URL: https://mainnet-auction.securerpc.com/
      • Method: mev_sendBetaBundle
      • Parameters:
        • txs: List of txs as bundle e.g. [0x2323...,]
        • slot: slot number e.g. \"11282389\"
      • ChainId: 1
    • Beta bundle RPC (Testnet):

      • Description: Beta bundle submission RPC
      • URL: https://holesky-api.securerpc.com/v2
      • Method: mev_sendBetaBundle
      • Parameters:
        • txs: List of txs as bundle e.g. [0x2323...,]
        • slot: slot number e.g. \"11282389\"
      • ChainId: 17000
    "},{"location":"Developers/sdk/#bundle-json-requests-and-responses","title":"Bundle JSON Requests and Responses","text":""},{"location":"Developers/sdk/#example-json-request","title":"Example JSON request","text":"
    {\n    \"jsonrpc\": \"2.0\",\n    \"method\": \"mev_sendBetaBundle\",\n    \"params\": [\n      {\n        \"txs\": [0x... ],\n        \"slot\": \"1001\"\n      }\n    ],\n    \"id\": 8\n}\n
    "},{"location":"Developers/sdk/#example-json-response","title":"Example JSON response","text":"
    {\n    \"jsonrpc\": \"2.0\",\n    \"id\": 1,\n    \"method\": \"mev_sendBetaBundle\",\n    \"result\": \"0x79e5cba7876f532218ac35a357209800be2362dd2e3f1e6dc5974698f0d7cee4\",\n}\n
    "},{"location":"Developers/sdk/#bundler-examples","title":"Bundler Examples","text":"
    • Python bundler - employs a deployed bidder contract for continuous automated bidding, while listening for auction close event, then submits the bundle
    "},{"location":"Developers/testnet/","title":"XGA L2 Testnet","text":"
    • Live auction dashboard
    • L2 Blockchain explorer
    "},{"location":"Developers/testnet/#node-operators","title":"Node Operators","text":"

    Please coordinate with us to register your validator set with our registry service. We will provide you with the necessary information to get started.

    "},{"location":"Developers/testnet/#validators","title":"Validators","text":"

    Connecting to the relay without being registered will result in your validator operating correctly so long as MEV Boost is also running.

    "},{"location":"Developers/testnet/#holesky-information","title":"Holesky Information","text":"
    • L2 RPC (TESTNET):

      • Description: L2 Node RPC (Testnet)
      • URL: https://holesky-api.securerpc.com/l2
      • Methods: eth_*
      • ChainId: 42169
    • Beta bundle RPC (Testnet):

      • Description: Beta bundle submission RPC
      • URL: https://holesky-api.securerpc.com/v2
      • Method: mev_sendBetaBundle
      • Parameters:
        • txs: List of txs as bundle e.g. [0x2323...,]
        • slot: slot number e.g. \"11282389\"
      • ChainId: 17000
    "},{"location":"Developers/testnet/#builders-and-searchers","title":"Builders and searchers","text":"

    Aquire some Holesky Testnet ETH through a faucet in the resources listed below. If you are unable to secure enough, please reach out to us.

    "},{"location":"Developers/testnet/#contracts","title":"Contracts","text":"

    L2 Auctioneer: 0xD88e271AD39dAb4DEB0f7f9475d993ed4Bf5029b

    L2 SettlementHouse: 0x7Ac1A452B59114Fb1E67470720343A2e9AE18297

    L1StandardBridgeProxy: 0x3Ae5Ca0B05bE12d4FF9983Ed70D86de9C34e820C

    To monetize yourself on L2, send some ETH on L1 (Holesky) to 0x3Ae5Ca0B05bE12d4FF9983Ed70D86de9C34e820C

    "},{"location":"Developers/testnet/#resources","title":"Resources","text":"
    • Block Explorers
      • holesky.etherscan.io
      • holesky.beaconcha.in
      • dora-holesky.pk910.de
    • Ethstats: ethstats.holesky.ethpandaops.io
    • Faucets:
      • holesky-faucet.pk910.de
      • QuickNode Faucet
      • Chainstack Faucet
      • Automata Holesky Faucet
    "},{"location":"Learning/Forward-Contracts/","title":"Forward Contracts","text":"","tags":["Forward Contracts","gas auction","mechanism design"]},{"location":"Learning/Forward-Contracts/#forward-contracts","title":"Forward Contracts","text":"","tags":["Forward Contracts","gas auction","mechanism design"]},{"location":"Learning/Forward-Contracts/#nature-of-the-forwards-to-be-sold","title":"Nature of the Forwards to be sold","text":"

    The embedded volumetric optionality is primarily intended, at the time that the parties enter into the agreement, contract, or transaction, to address constraint factors that influence demand for transaction inclusion rights (i.e. blockspace). This instrument addresses the potential variability in the supply of available blockspace available for usage by different actors.

    The options refer to slices of the overall gas size of \u03b2-blockspace. We aim to homogenize it, i.e. all slices of gas are equal and interchangeable. This is how the forward contract is exercised.

    The nature of the forwards we are selling under the \u03b2-blockspace market depends on the capacity restriction we impose. Most importantly, do we guarantee enough capacity that the calls get included or not? The problem with guaranteeing a fixed capacity for \u03b2-blockspace is that this means restricting the capacity for \u237a-blockspace. The problem with this is that \u237a-blockspace might be more lucrative for us. In particular, we know that lottery blocks come along that make up a large chunk of the overall remuneration we can achieve at all.

    Figure 1: Tradeoff of \u237a/\u03b2-blockspace

    If we fix \u237a-blockspace, we might be missing a significant amount of value. The tradeoff can be seen in the picture below.

    We make the assumption that top of the block gas space is more valuable. The main assumption is that at some point, the marginal value for a builder owning the whole block (green) goes below the marginal value of a \u03b2-blockspace buyer (typically someone who wants to be just included independently of the order).

    If we had perfect information, we could fix the capacity constraint at exactly the intersection point. But this information is not available. We can only approximate it. The question of lottery blocks can also be seen in the diagram, the question is whether for such a block both curves are shifted in the same way. If not, it would indicate the need to give \u237a-blockspace builders more space relative to \u03b2-blockspace builders.

    ","tags":["Forward Contracts","gas auction","mechanism design"]},{"location":"Learning/Forward-Contracts/#bidder-characteristics","title":"Bidder characteristics","text":"

    Assumption of Intrablock Position

    We operate under the assumption that position does not matter; if it does might affect the design significantly.

    • Bidders are possibly risk-averse: Standard revenue equivalence might go out of the window. Bidders are asymmetric; in particular if there is private orderflow.

    • Bidders valuations are not clear: If they draw from a public mempool or if there are global conditions affecting value of block space, their valuations will be interdependent. - There is also the danger of a further coordination issue; this might favor a winner-takes-all solution

    ","tags":["Forward Contracts","gas auction","mechanism design"]},{"location":"Learning/Forward-Contracts/#relation-to-the-secondary-market","title":"Relation to the secondary market","text":"

    Traditionally we would assume that a well-designed auction does not require a secondary market. If the result of the auction is in the core, no change in the allocation makes sense. This is different here as information comes in overtime. - Base fee - Transactions updates for \u237a-blockspace bidders We operate under the assumption that position does not matter; if it does might affect the design significantly.

    New bidders are active on the secondary market. The secondary market therefore is not just a reallocation of the primary auction but includes information updates.

    Secondary Market Effects

    This is in contrast to most work on auctions with resale (re: secondary) markets. The secondary market changes the rationale for bidding in the primary auction

    ","tags":["Forward Contracts","gas auction","mechanism design"]},{"location":"Learning/aup_auction/","title":"Augmented Uniform Price Auction","text":"","tags":["primary market","price auction","auction format","gas auction","mechanism design"]},{"location":"Learning/aup_auction/#specification-for-primary-market","title":"Specification for Primary Market","text":"

    We are augmenting the standard uniform price auction format with two features:

    1. Instead of providing a perfectly inelastic supply (also known as a fixed amount that we auction off), we offer an elastic supply schedule: If the price is very low, we will offer only limited amounts of options.

    2. We introduce a different tie-breaking rule for excess demand. Owing to the discrete nature of bids, situations can arise where no market-clearing price exists (where demand equals supply). While the typical rule in many auctions prioritizes high marginal bids first, we propose an alternative that exerts more pressure at the marginal quantity level.

    We explain the rationale behind these two features below.

    Before we delve into the details, let us address the issue with the standard uniform price auction. When the supply is fixed, or perfectly inelastic, there is a risk of resulting in very low prices. This concept, well understood since the work of Wilson (1979), highlights that bidders are incentivized to understate their bids, a common challenge in most multi-unit auctions. In the uniform price auction, the tradeoff is evident: if you lower your bid for the marginal unit, not only do you reduce your price for that unit, but if you win, you also decrease the overall price you pay.

    Now, the overall effect and danger of severe under-pricing is contingent on demand factors. It cannot be easily inferred from data. It is also well understood that there is no clear way to tell whether the discriminatory or uniform price auction provides more revenue, neither theoretically (Ausubel et al. 2011) nor empirically.

    ","tags":["primary market","price auction","auction format","gas auction","mechanism design"]},{"location":"Learning/aup_auction/#elastic-supply-curve","title":"Elastic supply curve","text":"
    • Fix the max capacity of beta, \\(q^{max}\\). We assume this is given for the auction. Obviously, it can be a parameter that we will optimize over time.

    • The supply curve, \\(S \\colon P \\to Q\\), where \\(P\\) is the set of allowed prices; and \\(Q\\) the set of available options. It gives for each price the amount of gas space we offer.

    • The set of options will be determined by the tick size we provide. \\(Q\\) will be further limited by the max capacity we offer. That is, typically,

    \\[ Q=0, t_q, 2 t_q, \\ldots, q^{\\max } \\text { where } t_q \\] \\[ t_q=q^{\\max } / k \\]

    for some \\(k \\in N\\).

    • The idea for the shape of the supply function is to have an initial segment of the supply curve which is concave and a second segment that then only provides a constant amount. This is the maximally available capacity. Below are pictures, that will make this clearer.

    • Concretely, one parameterized functional form is this:

    \\[ S(p) = \\begin{cases} s(p) & \\text{for } p < p' \\\\ s(p') & \\text{for } p >= p' \\end{cases} \\]

    where $ s(p) $

    \\[ s(p) = ap^n \\]

    where \\(a,n\\) are constants. The idea, again, is that the function is concave and thereby monotonically increasing until price \\(p'\\).

    This price is calculated by setting the max quantity, \\(q^{max} = ap^n\\), and then deriving

    \\[ p' \\equiv (q^{max} / a)^{1/n} \\]

    NOTE: It goes without saying that the functional form above is up for change if we want to.

    NOTE: It is theoretically well understood that an elastic supply curve can reduce the danger of dramatically underpricing. In practice, this is not so often used. One reason can be that the value of the good might be lower for the auctioneer.

    In our case, however, this can be different. The reason is that we possibly have use for the space ourselves. So, as remarked above, we might have a positive outside value and might not be willing to sell for any price.

    ","tags":["primary market","price auction","auction format","gas auction","mechanism design"]},{"location":"Learning/aup_auction/#bidders","title":"Bidders","text":"

    Each bidder can submit several (quantity,price) pairs. We thereby elicit his (partial) demand function \\(d_i(p) \\colon P \\to Q\\).

    ","tags":["primary market","price auction","auction format","gas auction","mechanism design"]},{"location":"Learning/aup_auction/#aggregation-of-demand","title":"Aggregation of demand","text":"

    The way that a uniform auction proceeds is by aggregating demand and matching it to supply. This allows to determine a market clearing price - if it exists. Reasons for non-existence can be increasing demand curves.

    Now, first, consider the aggregate demand:

    \\[ D(p) \\equiv \\sum_j d_j(p) \\]

    Fix the highest price at which the all the demand can be satisfied (if it exists). That is,

    \\[ p^{*}=max\\{p|D(p)=S(p)\\} \\]

    Note, in the case where there is excess demand for this price, i.e. \\(D(p^{*})>S(p^{*})\\), we need an allocation rule that determines who gets what.

    Note, if demand schedules \\(d_j(p)\\) were continuous, then excess demand would not be feasible.

    Lastly note, that the fact that actual bids are discontinuous might reduce the likelihood of a low price outcome (Kastl 2011).

    ","tags":["primary market","price auction","auction format","gas auction","mechanism design"]},{"location":"Learning/aup_auction/#allocation-rule","title":"Allocation rule","text":"

    In case of excess demand, how is the excess demand cleared?

    The standard rule is higher price, higher priority:

    \\[ q_j = d_{j,\\>}(p^{*}) + \\frac{d_{j}(p^{ *})- d_{j,>}(p^{*})}{D_{j}(p^{ *})- D_{j,>}(p^{*})} \\]

    where \\(d_{j,\\>}(p^{*})\\) is the individual demand of \\(j\\) for higher prices than \\(p^{*}\\) and \\(D_{j,>}(p^{*}\\) is the aggregate demand at prices higher than \\(p^{*}\\).

    So, an agent first gets his demand that he stated at higher prices. Then he will receive a relative share of the remaining excess demand at the market clearing price.

    There is an alternative allocation rule though:

    Give a share relative to individual demand at that point. That is,

    \\[ q_i = d_i(p^{**})/D(p^{**}) \\]

    Which means the larger the demand relative to overall demand at that price, the larger the share that a player will get. In contrast to the rule above, only the marginal demand matters; demand stated at higher demand levels are irrelevant.

    Reflection

    This creates stronger incentives to bid closer to true valuations; it reduces the tendency to end up

    in a low price equilibrium.

    ","tags":["primary market","price auction","auction format","gas auction","mechanism design"]},{"location":"Learning/flashbots-comparison/","title":"Flashbots Comparison","text":"","tags":["flashbots","sgx","auction format","suave","mev boost"]},{"location":"Learning/flashbots-comparison/#mev-boost","title":"MEV Boost","text":"
    sequenceDiagram\n    participant consensus\n    participant mev_boost\n    participant execution\n    participant relays\n    Title: Block Proposal\n    Note over consensus: wait for allocated slot\n    consensus->>mev_boost: engine_forkchoiceUpdatedV1\n    mev_boost->>execution: engine_forkchoiceUpdatedV1\n    mev_boost->>relays: engine_forkchoiceUpdatedV1\n    Note over mev_boost: begin polling\n    mev_boost->>relays: relay_getPayloadHeaderV1\n    consensus->>mev_boost: builder_getPayloadHeaderV1\n    mev_boost->>execution: engine_getPayloadV1\n    Note over mev_boost: select best payload\n    mev_boost-->>consensus: builder_getPayloadHeaderV1 response\n    Note over consensus: sign the block\n    consensus->>mev_boost: builder_proposeBlindedBlockV1\n    Note over mev_boost: identify payload source\n    mev_boost->>relays: relay_proposeBlindedBlockV1\n    Note over relays: validate signature\n    relays-->>mev_boost: relay_proposeBlindedBlockV1 response\n    mev_boost-->>consensus: builder_proposeBlindedBlockV1 response
    ","tags":["flashbots","sgx","auction format","suave","mev boost"]},{"location":"Learning/flashbots-comparison/#suave-sgx","title":"Suave SGX","text":"

    Suave specification is in development, so terms may not be finalized.

    sequenceDiagram\n    participant Discovery\n    participant Searcher\n    participant Kettle_SGX as \"Kettle SGX\"\n    participant Validators\n    participant Execution_Client_SGX as \"Execution Client SGX\"\n\n    Discovery->>Discovery: A registry exists\n    Discovery->>Discovery: Discover each other through a registry\n    Discovery->>Discovery: Perform handshake and verify attestations\n\n    Searcher->>Searcher: Finds MEV and crafts bundle\n    Searcher->>Searcher: Passes bundle to modified Ethereum node\n    Searcher->>Searcher: Node generates block with bundle\n    Searcher->>Searcher: Generates block witness and truncated header hash\n\n    Kettle_SGX->>Kettle_SGX: Inputs into SGX\n    Kettle_SGX->>Kettle_SGX: Uses block witness to verify block\n    Kettle_SGX->>Kettle_SGX: Verifies coinbase difference\n    Kettle_SGX->>Kettle_SGX: Encrypts block for validator\n\n    Validators->>Validators: Verifies block signed by searcher\n    Validators->>Validators: Chooses most profitable block\n    Validators->>Execution_Client_SGX: Proposes block with attestation\n\n    Execution_Client_SGX->>Execution_Client_SGX: Executes transactions and proposes block\n    Execution_Client_SGX->>Validators: Sends proposed block\n\n    Validators->>Validators: Attest to the proposed block\n    Validators->>Validators: Final
    ","tags":["flashbots","sgx","auction format","suave","mev boost"]},{"location":"Learning/secondary-market/","title":"Secondary Market","text":"","tags":["secondary market","gas auction","mechanism design"]},{"location":"Learning/secondary-market/#secondary-market","title":"Secondary Market","text":"

    The structure the secondary market so that a concentrated selling back is feasible

    The main purpose of this market is to account for information differences over time - builders might realize they cannot fill a block; or they might need more space The base fee is not known at the time of the primary market; so there should be updates regarding the base fee happening with before-strike-time blocks being minted. This also affects the initial pricing we offer.

    !!! info inline \"Allocation subject to change\" It is unclear what allocation we will have from the primary market, as a winner-takes all is possible

    ","tags":["secondary market","gas auction","mechanism design"]},{"location":"Legal/","title":"Legal","text":""},{"location":"Legal/#notices-and-compliance","title":"Notices and Compliance","text":""},{"location":"Legal/CDD/","title":"Market Participant Requirements","text":""},{"location":"Legal/CDD/#customer-due-diligence-cdd","title":"Customer Due Diligence (CDD)","text":"
    • Verification Procedures: We conduct thorough identity verification for new customers using government-issued documents, biometric verification, or third-party verification services.
    • Enhanced Due Diligence (EDD): For higher-risk clients, we perform enhanced due diligence, including the source of funds, to identify potential sanctions risks.
    • Automated Screening Tools: We screen transactions and parties against global sanctions lists (e.g., OFAC) in real-time to prevent unauthorized transactions.
    • Global IP Denylist: We block IP Addresses from Government affiliated entities, as well.
    • Regular List Updates: We ensure that our screening tool is updated regularly to reflect changes in sanctions lists. We maintain and monitor addresses from the Specially Designated Nationals (SDN) list\u00a0of the US Office of Foreign Asset Control. We maintain an open source tool that automates the update process for new addresses, which can be found here: sambacha/ofac-list
    "},{"location":"Legal/Content-Disclaimer/","title":"Content Disclaimer","text":""},{"location":"Legal/Content-Disclaimer/#disclaimer","title":"Disclaimer","text":"

    Full Copyright Statement

    Copyright (C) Manifold Finance, Incorporated (2024). All Rights Reserved.

    This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Manifold Finance, Inc. or other relevant organizations, except as needed for the purpose of developing EIP/ERC standards within the Ethereum ecosystem, in which case the procedures for copyrights defined in the development process must be followed, or as required.

    This document and the information contained herein is provided on an \"AS IS\" basis and MANIFOLD FINANCE, INCORPORATED AND ITS CONTRIBUTORS DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

    "},{"location":"Legal/Disclosure-Statement/","title":"Disclosue Statement","text":""},{"location":"Legal/Disclosure-Statement/#nfa-disclosure-statement","title":"NFA Disclosure Statement","text":"

    Although the material contained in this website was prepared based on information from public and private sources that and/or Manifold Finance, Inc believes to be reliable, no representation, warranty or undertaking, stated or implied, is given as to the accuracy of the information contained herein, CommodityStream LLC and/or Manifold Finance, Inc expressly disclaims any liability for the accuracy and completeness of information contained in this website and/or social media posting.

    This website is distributed for general informational and educational purposes only and is not intended to constitute legal, tax, accounting or investment advice. The information, opinions and views contained herein have not been tailored to the investment objectives of any one individual, are current only as of the date hereof and may be subject to change at any time without prior notice. CommodityStream LLC and/or Manifold Finance, Inc and/or Manifold Finance, Inc does not have any obligation to provide revised opinions in the event of changed circumstances. All investment strategies and investments involve risk of loss. Nothing contained in this website should be construed as investment advice. Any reference to an investment\u2019s past or potential performance is not, and should not be construed as, a recommendation or as a guarantee of any specific outcome or profit.

    Any ideas or strategies discussed herein should not be undertaken by any individual without prior consultation with a financial professional for the purpose of assessing whether the ideas or strategies that are discussed are suitable to you based on your own personal financial objectives, needs and risk tolerance. CommodityStream LLC and/or Manifold Finance, Inc expressly disclaims any liability or loss incurred by any person who acts on the information, ideas or strategies discussed herein.

    The information contained herein is not, and shall not constitute an offer to sell, a solicitation of an offer to buy or an offer to purchase any securities, nor should it be deemed to be an offer, or a solicitation of an offer, to purchase or sell any investment product or service.

    "},{"location":"Reference/constants/","title":"Constants","text":""},{"location":"Reference/constants/#gwei-values","title":"Gwei values","text":"Name Value MIN_DEPOSIT_AMOUNT Gwei(2**0 * 10**9) (= 1,000,000,000) MAX_EFFECTIVE_BALANCE Gwei(2**5 * 10**9) (= 32,000,000,000) EFFECTIVE_BALANCE_INCREMENT Gwei(2**0 * 10**9) (= 1,000,000,000)"},{"location":"Reference/constants/#time-parameters","title":"Time parameters","text":"Name Value Unit Duration MIN_ATTESTATION_INCLUSION_DELAY uint64(2**0) (= 1) slots 12 seconds SLOTS_PER_EPOCH uint64(2**5) (= 32) slots 6.4 minutes MIN_SEED_LOOKAHEAD uint64(2**0) (= 1) epochs 6.4 minutes MAX_SEED_LOOKAHEAD uint64(2**2) (= 4) epochs 25.6 minutes MIN_EPOCHS_TO_INACTIVITY_PENALTY uint64(2**2) (= 4) epochs 25.6 minutes EPOCHS_PER_ETH1_VOTING_PERIOD uint64(2**6) (= 64) epochs ~6.8 hours SLOTS_PER_HISTORICAL_ROOT uint64(2**13) (= 8,192) slots ~27 hours"},{"location":"Reference/constants/#time-parameters_1","title":"Time parameters","text":"Name Value Unit Duration SECONDS_PER_SLOT uint64(12) seconds 12 seconds SECONDS_PER_ETH1_BLOCK uint64(14) seconds 14 seconds MIN_VALIDATOR_WITHDRAWABILITY_DELAY uint64(2**8) (= 256) epochs ~27 hours SHARD_COMMITTEE_PERIOD uint64(2**8) (= 256) epochs ~27 hours ETH1_FOLLOW_DISTANCE uint64(2**11) (= 2,048) Eth1 blocks ~8 hours
    # https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/beacon-chain.md#misc\nFAR_FUTURE_EPOCH = 2 ** 64 - 1\n# https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/beacon-chain.md#time-parameters-1\nMIN_VALIDATOR_WITHDRAWABILITY_DELAY = 2**8\nSHARD_COMMITTEE_PERIOD = 256\nMAX_SEED_LOOKAHEAD = 4\n# https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/beacon-chain.md#state-list-lengths\nEPOCHS_PER_SLASHINGS_VECTOR = 2**13\n# https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/beacon-chain.md#rewards-and-penalties\nPROPORTIONAL_SLASHING_MULTIPLIER_BELLATRIX = 3\n# https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/beacon-chain.md#gwei-values\nEFFECTIVE_BALANCE_INCREMENT = 2 ** 0 * 10 ** 9\nMAX_EFFECTIVE_BALANCE = 32 * 10 ** 9\n# https://github.com/ethereum/consensus-specs/blob/dev/specs/capella/beacon-chain.md#execution\nMAX_WITHDRAWALS_PER_PAYLOAD = 2 ** 4\n# https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/beacon-chain.md#withdrawal-prefixes\nETH1_ADDRESS_WITHDRAWAL_PREFIX = '0x01'\n# https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/beacon-chain.md#validator-cycle\nMIN_PER_EPOCH_CHURN_LIMIT = 2 ** 2\nCHURN_LIMIT_QUOTIENT = 2 ** 16\n\n# Local constants\nGWEI_TO_WEI = 10 ** 9\nSHARE_RATE_PRECISION_E27 = 10**27\nTOTAL_BASIS_POINTS = 10000\n\nMAX_BLOCK_GAS_LIMIT = 30_000_000\n
    "},{"location":"Reference/contract_design/","title":"Auction and Market Designs","text":""},{"location":"Reference/contract_design/#market-and-auction-design-and-structure","title":"Market and Auction Design and Structure","text":""},{"location":"Reference/contract_design/#alpha","title":"Alpha","text":"

    We will keep the alpha part as is for now. We do not want to impose a new format on bidders as given our small size might mean being ignored. The only change is the restriction of gas to 25MM. (The rest goes to the beta market).

    Tip

    This means that the auction is backwards compatible with MEV Boost

    "},{"location":"Reference/contract_design/#beta","title":"Beta","text":"

    We will go with a discriminatory auction first.

    Warning

    It is understood though that we adapt the auction format depending on: (i) feedback by potential bidders (ii) actual behavior in the market.

    We will restrict the residual claim only to full bids for now.

    This is to avoid too small of token allocations that are then practically of no use.

    The main reasons are:

    • Simple and familiar format
    • In principle compatible with a secondary market
    • But first and foremost: Want to get feedback from bidders how they bid.
    "},{"location":"Reference/contract_design/#contingencies","title":"Contingencies","text":"
    1. Depending on the step bidding, we increase the token size.
    2. If we observe bidding on whole blocks only (or close to it), we can simplify the whole setup dramatically.
    3. If we observe upward sloping demand curves, we might need to change the format completely.
    "},{"location":"Reference/contract_design/#secondary-market","title":"Secondary market","text":"
    • Market running after primary allocation took place
    • Need to think whether we should provide the marketplace ourselves

      • In principle could be handled by external parties
      • But the interlocking of different markets (that the timing of spot market and secondary market is making sense) is probably relevant and easier to orchestrate by us.
    • The main purpose of this market is to account for information differences over time - e.g. builders might realize they cannot fill a block; or they might need more space.

    • The base fee is not known at the time of the primary market;so there should be updates regarding the base fee happening with before-strike-time blocks being minted. This also affects the initial pricing we offer.

    "},{"location":"Reference/contract_summary/","title":"Contract Protocol summary","text":""},{"location":"Reference/contract_summary/#primary-market","title":"Primary Market","text":"

    The Auctioneer Contract is a Solidity smart contract that implements an auction mechanism for selling block space. This contract allows bidders to participate in auctions, submit manual bids, and settle the auctions. It supports multiple bidders, each with a unique ID.

    "},{"location":"Reference/contract_summary/#key-features","title":"Key Features","text":"
    • Bidders: Add and remove bidders dynamically.
    • Auctions: Open and run auctions for selling block space.
    • Manual Bids: Bidders can submit manual bids with specific quantities and prices.
    • Settlement: After the auction, settle with successful bidders, transferring owed amounts.
    "},{"location":"Reference/contract_summary/#contract-structure","title":"Contract Structure","text":"
    • The contract is based on the ERC6909 standard.
    • It uses the SafeTransferLib for safe WETH (Wrapped Ether) transfers.
    • Bidders can participate through the getBid function.
    • Manual bids are supported via the bid function.
    "},{"location":"Reference/contract_summary/#events","title":"Events","text":"
    • BidderAdded and BidderRemoved for dynamic management of bidders.
    • AuctionOpened signals the start of a new auction.
    • ManualBidSubmitted is emitted when a bidder submits a manual bid.
    • AuctionSettled indicates the successful settlement of an auction.
    "},{"location":"Reference/contract_summary/#errors","title":"Errors","text":"
    • Various error messages to handle exceptional cases, such as invalid bids or insufficient funds.
    "},{"location":"Reference/contract_summary/#functions","title":"Functions","text":"
    • newBidder: Add a new bidder to the auction.
    • removeBidder: Remove a bidder from the auction.
    • openAuction: Open a new auction for a specific slot.
    • bid: Submit a bid for a specific auction slot.
    • run: Execute the auction for a specific slot, considering manual and contract bids.
    • settle: Settle the auction by transferring owed amounts to successful bidders.
    • getBidderInfo: Retrieve information about a bidder after auction settlement.
    • packBid: Pack bid details into a uint256 for submission.
    • decodeBid: Decode packed bid information for analysis.
    • checkBid: Check the validity of a bid before execution.
    "},{"location":"Reference/erc6909/","title":"ERC6909 Interface","text":""},{"location":"Reference/erc6909/#functions","title":"Functions","text":""},{"location":"Reference/erc6909/#balanceof","title":"balanceOf","text":"

    Owner balance of an id.

    function balanceOf(address owner, uint256 id) external view returns (uint256 amount);\n

    Parameters

    Name Type Description owner address The address of the owner. id uint256 The id of the token.

    Returns

    Name Type Description amount uint256 The balance of the token."},{"location":"Reference/erc6909/#allowance","title":"allowance","text":"

    Spender allowance of an id.

    function allowance(address owner, address spender, uint256 id) external view returns (uint256 amount);\n

    Parameters

    Name Type Description owner address The address of the owner. spender address The address of the spender. id uint256 The id of the token.

    Returns

    Name Type Description amount uint256 The allowance of the token."},{"location":"Reference/erc6909/#isoperator","title":"isOperator","text":"

    Checks if a spender is approved by an owner as an operator

    function isOperator(address owner, address spender) external view returns (bool approved);\n

    Parameters

    Name Type Description owner address The address of the owner. spender address The address of the spender.

    Returns

    Name Type Description approved bool The approval status."},{"location":"Reference/erc6909/#transfer","title":"transfer","text":"

    Transfers an amount of an id from the caller to a receiver.

    function transfer(address receiver, uint256 id, uint256 amount) external returns (bool);\n

    Parameters

    Name Type Description receiver address The address of the receiver. id uint256 The id of the token. amount uint256 The amount of the token."},{"location":"Reference/erc6909/#transferfrom","title":"transferFrom","text":"

    Transfers an amount of an id from a sender to a receiver.

    function transferFrom(address sender, address receiver, uint256 id, uint256 amount) external returns (bool);\n

    Parameters

    Name Type Description sender address The address of the sender. receiver address The address of the receiver. id uint256 The id of the token. amount uint256 The amount of the token."},{"location":"Reference/erc6909/#approve","title":"approve","text":"

    Approves an amount of an id to a spender.

    function approve(address spender, uint256 id, uint256 amount) external returns (bool);\n

    Parameters

    Name Type Description spender address The address of the spender. id uint256 The id of the token. amount uint256 The amount of the token."},{"location":"Reference/erc6909/#setoperator","title":"setOperator","text":"

    Sets or removes a spender as an operator for the caller.

    function setOperator(address spender, bool approved) external returns (bool);\n

    Parameters

    Name Type Description spender address The address of the spender. approved bool The approval status."},{"location":"Reference/erc6909/#events","title":"Events","text":""},{"location":"Reference/erc6909/#transfer_1","title":"Transfer","text":"

    The event emitted when a transfer occurs.

    event Transfer(address caller, address indexed sender, address indexed receiver, uint256 indexed id, uint256 amount);\n

    Parameters

    Name Type Description caller address The caller of the transfer. sender address The address of the sender. receiver address The address of the receiver. id uint256 The id of the token. amount uint256 The amount of the token."},{"location":"Reference/erc6909/#operatorset","title":"OperatorSet","text":"

    The event emitted when an operator is set.

    event OperatorSet(address indexed owner, address indexed spender, bool approved);\n

    Parameters

    Name Type Description owner address The address of the owner. spender address The address of the spender. approved bool The approval status."},{"location":"Reference/erc6909/#approval","title":"Approval","text":"

    The event emitted when an approval occurs.

    event Approval(address indexed owner, address indexed spender, uint256 indexed id, uint256 amount);\n

    Parameters

    Name Type Description owner address The address of the owner. spender address The address of the spender. id uint256 The id of the token. amount uint256 The amount of the token."},{"location":"Reference/glossary/","title":"Glossary","text":""},{"location":"Reference/glossary/#platform-terms","title":"Platform Terms","text":"Term Description Auctioneer Contract A smart contract designed for auctioning Ethereum block space, enabling dynamic participation and settlement. ERC6909 Standard A specification for managing auction-related functionalities within smart contracts. SafeTransferLib A library ensuring the safe transfer of WETH (Wrapped Ether) within smart contract operations. Bidders Entities that participate in auctions by submitting bids for block space. Manual Bids Bids placed by bidders manually for specific quantities and prices in an auction. Settlement The process of concluding an auction, involving transferring owed amounts to successful bidders. SDK (Software Development Kit) Tools and libraries provided to developers for building applications on a specific platform. Testnet A testing network where developers can deploy and test their applications in a simulated environment without using real assets. Direct Payment Method A straightforward payment approach where transaction fees are paid directly by the transactions included in a block. Coinbase Transfer Payment Method A method where transaction fees and rewards are transferred to the block proposer's address via the coinbase transaction. Indirect Address Payment Method A payment method involving the use of a different address by the builder to pay the proposer through an end-of-block transaction. Intermediate Transfer Payment Method A two-step payment process involving an intermediary address for transferring payments to the proposer. Smart Contract-Based Payment Method Payment processing through a smart contract, allowing for programmable distributions based on predefined rules. Off-Chain Payment Method Payments made outside the blockchain network, possibly through other cryptocurrencies or banking systems. Validator A network participant responsible for validating transactions and blocks on the Ethereum blockchain. MEV (Miner Extractable Value) Value extracted by miners (or validators) through their ability to include, exclude, or reorder transactions within blocks. Slashing A penalty mechanism where a validator's stake is reduced due to malicious actions or failure to comply with network rules. Primary Market The initial auction market where block space is auctioned to bidders. Secondary Market A market that operates after the primary allocation, allowing for reallocation and adjustment based on new information. Uniform Price Auction An auction format where all winning bidders pay the same price. Discriminatory Price Auction An auction format where winning bidders pay according to their bid prices. Augmented Uniform Price Auction A modified uniform price auction designed to address underpricing by introducing features like elastic supply and alternative tie-breaking rules. WETH (Wrapped Ether) A token that represents Ether 1:1, allowing for easier integration with ERC-20 compatible services. Gas A measure of computational effort required to execute operations on the Ethereum network. Gas Price The cost per unit of gas, paid by users to compensate for the computational energy required to process and validate transactions. Gwei A denomination of Ether, where 1 Gwei equals 10^-9 ETH. Block Proposal The process by which validators or miners propose a set of transactions to be included in a new block. Staking The act of locking up cryptocurrency holdings to support the operation of a blockchain network, often in exchange for rewards. Epoch A division of time used in blockchain networks, referring to a set period during which certain processes or updates occur."},{"location":"Reference/rpc-payload/","title":"RPC Payload","text":""},{"location":"Reference/rpc-payload/#execution-layer-encoding","title":"Execution Layer Encoding","text":"field type description network_id string The network on which you want the simulate the transaction. One of: block_number number Block height. If left out the pending block will be used transaction_index number The index of the transaction inside the block. Note: This parameter must be omitted or 0 when the block_number property is left out from string The originating address for the simulated transaction to string The destination address for the simulated transaction input string ABI encoded input for the transaction gas number The gas limit for the transaction gas_price string The gas price for the transcation value string The ETH value sent in the transcation simulation_type string Either full or quick. full simulations use the contracts source code to generate a full trace, while the quick simulation will only use the contracts bytecode. If omitted, the default value is full. raw is available as well as the fastest one, which skips some steps save boolean Whether or not to save this simulation for later inspection save_if_fails boolean Save the simulation if the simulated transaction failed state_objects map[address]StateObject Use provided state objects to overwrite current state objects at address contracts []Contract Array of contract deployment info (exactly like contract upload requests). Will use the source field to overwrite the contracts source at a given address. block_header BlockHeader BlockHeader override. Used to change the timestamp or block number inside the EVM. Consists of timestamp and number both of which are optional. timestamp and number are hexadecimal values starting with 0x."},{"location":"Relay/","title":"ValidatorRegistration","text":""},{"location":"Relay/#properties","title":"Properties","text":"Name Type Description Notes fee_recipient String Address to receive fees from the block. [default to null] gas_limit String Preferred gas limit of validator. [default to null] timestamp String Unix timestamp of registration. [default to null] pubkey String BLS public key of validator. [default to null]"},{"location":"Relay/#validatorsresponseentry","title":"ValidatorsResponseEntry","text":""},{"location":"Relay/#properties_1","title":"Properties","text":"Name Type Description Notes slot String [optional] [default to null] validator_index String [optional] [default to null] entry getValidators_200_response_inner_entry [optional] [default to null]"},{"location":"Relay/captive-insurance/","title":"Captive Insurance","text":""},{"location":"Relay/captive-insurance/#captive-market-infrastructure-insurance","title":"Captive Market Infrastructure Insurance","text":"

    The proposed forward contract market for captive insurance is designed to provide a platform for the efficient transfer of risk between participating validators and other market participants with the operation of the platform by the Relay.

    The Relay manages validator connectivity and provides the validator with block proposals for the validator to use when creating a block. The captive insurance is used to provide a service level agreement between the relay and the validators connecting to the relay.

    "},{"location":"Relay/captive-insurance/#relay-insurance","title":"Relay Insurance","text":"

    XGA establishes the necessary infrastructure for trading, including contract execution, record-keeping, and dispute resolution mechanisms. Additionally it will implement systems for monitoring contract performance and ensuring compliance with the terms.

    "},{"location":"Relay/captive-insurance/#coverage-scope","title":"Coverage Scope","text":"

    In addition to traditional sorts of slashing protection mechanisms, the captive insurance model covers:

    • Service Downtime: Compensation for periods when the relay is not operational or accessible.
    • Incorrect or Malicious Proposals: Protection against losses due to incorrect or malicious block proposals provided by the relay.
    • Performance Degradation: Coverage for scenarios where the relay's performance significantly degrades, impacting validator operations.
    "},{"location":"Relay/captive-insurance/#premium-calculation","title":"Premium Calculation","text":"

    Based on the validator's stake size and the level of dependency on the relay service. Adjusted for the historical performance and reliability metrics of the relay.

    "},{"location":"Relay/captive-insurance/#claim-process","title":"Claim Process","text":"

    Validators submit claims with evidence of the relay service issue (e.g., logs, performance metrics). Claims are verified against relay service logs and performance data. Payouts are made based on the validated impact and the terms of the insurance policy.

    "},{"location":"Relay/captive-insurance/#understanding-validator-slashing","title":"Understanding Validator Slashing","text":"

    Validator slashing occurs when a validator on the Ethereum network acts maliciously or fails to comply with network consensus rules. This can result in the validator's stake being \"slashed\" or reduced as a penalty. Insurance against slashing would compensate the validator for a portion of their lost stake.

    "},{"location":"Relay/captive-insurance/#captive-insurance-smart-contract-design","title":"Captive Insurance Smart Contract Design","text":"

    This contract would act as the \"captive insurer,\" managing the insurance pool and claims.

    Stake Pooling: Validators would contribute to an insurance pool, held in the smart contract. This pool would collect premiums from validators who wish to insure their stake against slashing.

    Premium Calculation: The smart contract would calculate premiums based on the risk of slashing, which could be determined by past behavior, the amount of stake, and other risk factors.

    Claim Conditions: The smart contract would define the conditions under which a claim can be made, such as the type of slashing event and the evidence required to prove the slashing occurred.

    Claim Process: In the event of slashing, the affected validator would submit a claim to the smart contract along with evidence of the slashing event.

    Verification: The smart contract would include or interact with an oracle or a set of oracles to verify the slashing event. This requires manual verification by Manifold Finance as the underwriter.

    Payouts: Upon successful claim verification, the smart contract would automatically execute a payout to the slashed validator from the insurance pool, according to the terms of the policy.

    "},{"location":"Relay/captive-insurance/#api","title":"API","text":"

    This specification includes endpoints for retrieving the total accumulated premiums and claims, which would be useful for reporting and auditing purposes. The claims queue endpoint allows for managing and viewing the list of claims that are pending action. Lastly, the health check endpoint provides a simple way to monitor the API's status, which is crucial for maintenance and uptime monitoring.

    /premiums/accumulated:\n    get:\n        summary: Get total accumulated premiums\n        operationId: getAccumulatedPremiums\n        tags:\n            - Premiums\n        responses:\n            \"200\":\n                description: Total accumulated premiums retrieved successfully\n                content:\n                    application/json:\n                        schema:\n                            $ref: \"#/components/schemas/AccumulatedPremiums\"\n\n/claims/accumulated:\n    get:\n        summary: Get total accumulated claims\n        operationId: getAccumulatedClaims\n        tags:\n            - Claims\n        responses:\n            \"200\":\n                description: Total accumulated claims retrieved successfully\n                content:\n                    application/json:\n                        schema:\n                            $ref: \"#/components/schemas/AccumulatedClaims\"\n\n/claims/queue:\n    get:\n        summary: Get the queue of claims awaiting processing\n        operationId: getClaimsQueue\n        tags:\n            - Claims\n        responses:\n            \"200\":\n                description: Claims queue retrieved successfully\n                content:\n                    application/json:\n                        schema:\n                            $ref: \"#/components/schemas/ClaimsQueue\"\n
    "},{"location":"Rulebook/bylaws/","title":"Reference, Bylaws","text":""},{"location":"Rulebook/definitions/","title":"Definitions","text":""},{"location":"Rulebook/delivery-and-settlement/","title":"Submission of Trades","text":""},{"location":"Rulebook/general/","title":"General","text":""},{"location":"Rulebook/governance/","title":"200 Governance","text":""},{"location":"Rulebook/network-clearing-participants/","title":"300 General Eligibility Requirements of Network and Clearing Participants","text":""},{"location":"Rulebook/obligations/","title":"500 Obligations","text":""},{"location":"Rulebook/suspension/","title":"600 Suspension and Disciplinary Proceedings","text":""},{"location":"Rulebook/contracts/","title":"Contents","text":"
    • auth
    • interfaces
    • Accountant
    • Bidder
    • IAccountant
    • Auctioneer
    • L1Holding
    • SettlementHouse
    • LibSort
    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/","title":"Accountant","text":"

    Git Source

    Inherits: Ownable2Step

    Author: MEV Protocol

    Pays out validators, protocol fees and L2 infrastructure from auction and coinbase revenue

    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#state-variables","title":"State Variables","text":""},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#mingaslimit","title":"minGasLimit","text":"

    min gas limit for L2 bridge tx

    uint32 public minGasLimit = 200_000;\n
    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#bridge","title":"bridge","text":"

    L2 => L1 bridge

    IL2Bridge public bridge;\n
    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#weth","title":"weth","text":"

    L2 Weth

    WETH public immutable weth;\n
    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#auctioneer","title":"auctioneer","text":"
    address public auctioneer;\n
    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#legacy_erc20_eth","title":"LEGACY_ERC20_ETH","text":"

    Address of the LegacyERC20ETH predeploy

    address internal constant LEGACY_ERC20_ETH = 0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000;\n
    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#adminfeepertenthousand","title":"adminFeePerTenThousand","text":"

    per 10,000 of revenue to allocate for protocol

    uint256 public constant adminFeePerTenThousand = 1;\n
    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#isvalidatorregistered","title":"isValidatorRegistered","text":"

    registered validator payout addresses

    mapping(address => bool) public isValidatorRegistered;\n
    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#activevalidators","title":"activeValidators","text":"

    List of active validators

    mapping(uint256 => address) public activeValidators;\n
    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#numvalidatorsregistered","title":"numValidatorsRegistered","text":"

    number of validators registered to reward address

    mapping(address => uint256) public numValidatorsRegistered;\n
    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#validatorcount","title":"validatorCount","text":"

    Number of active validator reward addresses

    uint256 public validatorCount;\n
    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#totalvalidatorcount","title":"totalValidatorCount","text":"

    Cumulative total of registered validators

    uint256 public totalValidatorCount;\n
    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#payoutrecord","title":"payoutRecord","text":"
    mapping(address validator => uint256 cumulativeAmount) public payoutRecord;\n
    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#minpayout","title":"minPayout","text":"

    threshold payout amount to make make L1 fees worthwhile

    uint256 public minPayout;\n
    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#functions","title":"Functions","text":""},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#constructor","title":"constructor","text":"

    Initializes the Accountant contract.

    constructor(address _bridge, address _weth, uint256 _minPayout) Ownable2Step(msg.sender);\n
    Parameters

    Name Type Description _bridge address Address of the L2 bridge contract. _weth address Address of the WETH contract. _minPayout uint256"},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#receive","title":"receive","text":"

    Fallback function to receive Ether.

    receive() external payable;\n
    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#onlyauctioneer","title":"onlyAuctioneer","text":"

    Modifier to only allow Auctioneer contract as caller

    modifier onlyAuctioneer();\n
    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#getvalidatorlist","title":"getValidatorList","text":"

    Get validator list

    function getValidatorList() external view returns (address[] memory validators);\n
    Returns

    Name Type Description validators address[] list"},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#gettotalpayout","title":"getTotalPayout","text":"

    Get total payouts

    function getTotalPayout() external view returns (uint256 total);\n
    Returns

    Name Type Description total uint256 payout amount"},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#getpayoutbalance","title":"getPayoutBalance","text":"

    gets current aggregated balance for validator payouts

    function getPayoutBalance() external view returns (uint256 payoutBalance);\n
    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#payout","title":"payout","text":"

    Distributes funds to various addresses based on predefined shares.

    function payout() external onlyAuctioneer;\n
    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#updatebridge","title":"updateBridge","text":"

    Updates the address of the L2 bridge contract.

    function updateBridge(address _bridge) external onlyOwner;\n
    Parameters

    Name Type Description _bridge address New address of the L2 bridge contract."},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#updatemingaslimit","title":"updateMinGasLimit","text":"

    Updates the minimum gas limit for L2 bridge transactions.

    function updateMinGasLimit(uint32 _minGasLimit) external onlyOwner;\n
    Parameters

    Name Type Description _minGasLimit uint32 New minimum gas limit."},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#updateminpayout","title":"updateMinPayout","text":"

    Updates the minimum threshold balance for L1 validator payouts.

    function updateMinPayout(uint256 _minPayout) external onlyOwner;\n
    Parameters

    Name Type Description _minPayout uint256 New minimum payout threshold."},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#registervalidator","title":"registerValidator","text":"

    Registers a validator.

    function registerValidator(address validator, uint256 numValidators) public onlyOwner;\n
    Parameters

    Name Type Description validator address Address of the validator to register. numValidators uint256 Number of validators registered for above address."},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#updatenumvalidators","title":"updateNumValidators","text":"

    Updates a number of registered a validators.

    function updateNumValidators(address validator, uint256 numValidators) external onlyOwner;\n
    Parameters

    Name Type Description validator address Address of the validator. numValidators uint256 Number of validators registered for above address."},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#unregistervalidator","title":"unregisterValidator","text":"

    Unregisters a validator.

    function unregisterValidator(address validator) public onlyOwner;\n
    Parameters

    Name Type Description validator address Address of the validator to unregister."},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#registerbatchvalidators","title":"registerBatchValidators","text":"

    Registers a batch of validators.

    function registerBatchValidators(address[] calldata validators, uint256[] calldata numValidators) external onlyOwner;\n
    Parameters

    Name Type Description validators address[] Address list of the validators to register. numValidators uint256[] Number of validators registered for each above address."},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#unregisterbatchvalidators","title":"unregisterBatchValidators","text":"

    Unregisters a batch of validators.

    function unregisterBatchValidators(address[] calldata validators) external onlyOwner;\n
    Parameters

    Name Type Description validators address[] Address list of the validators to unregister."},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#updateauctioneer","title":"updateAuctioneer","text":"

    Updates auctioneer address

    function updateAuctioneer(address _auctioneer) external onlyOwner;\n
    Parameters

    Name Type Description _auctioneer address address of Auctioneer contract"},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#removevalidatorfromarray","title":"removeValidatorFromArray","text":"

    Removes a validator address from the activeValidators array.

    function removeValidatorFromArray(address validator) internal;\n
    Parameters

    Name Type Description validator address Address of the validator to remove."},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#events","title":"Events","text":""},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#paymentreceived","title":"PaymentReceived","text":"
    event PaymentReceived(address indexed sender, uint256 amount);\n
    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#paymentsplit","title":"PaymentSplit","text":"
    event PaymentSplit(address indexed sender, uint256 adminFee, uint256 validatorsShare);\n
    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#auctioneerupdated","title":"AuctioneerUpdated","text":"
    event AuctioneerUpdated(address indexed _auctioneer);\n
    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#errors","title":"Errors","text":""},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#thresholdbalancenotmet","title":"ThresholdBalanceNotMet","text":"
    error ThresholdBalanceNotMet();\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/","title":"Auctioneer","text":"

    Git Source

    Inherits: ERC6909, Ownable2Step

    Implements an auction mechanism for selling block space.

    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#state-variables","title":"State Variables","text":""},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#maxbidder","title":"maxBidder","text":"
    uint8 public maxBidder;\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#weth9","title":"WETH9","text":"
    WETH public immutable WETH9;\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#accountant","title":"accountant","text":"
    address public accountant;\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#maxbids","title":"maxBids","text":"
    uint256 public maxBids = 50;\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#mingasamount","title":"minGasAmount","text":"
    uint120 public minGasAmount = 20_000;\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#operator","title":"operator","text":"
    address public operator;\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#idmap","title":"IdMap","text":"
    mapping(address bidder => uint8 id) public IdMap;\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#biddermap","title":"bidderMap","text":"
    mapping(uint8 id => address bidder) public bidderMap;\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#auctions","title":"auctions","text":"
    mapping(uint256 slot => Auction) public auctions;\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#slotscount","title":"slotsCount","text":"
    uint256 public slotsCount;\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#slotsauctioned","title":"slotsAuctioned","text":"
    mapping(uint256 index => uint256 slot) public slotsAuctioned;\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#bidcount","title":"bidCount","text":"
    mapping(uint256 slot => uint256 count) public bidCount;\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#bids","title":"bids","text":"
    mapping(uint256 slot => mapping(uint256 index => uint256 bid)) internal bids;\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#functions","title":"Functions","text":""},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#constructor","title":"constructor","text":"
    constructor(WETH _weth, address _accountant) Ownable2Step(msg.sender);\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#onlyoperator","title":"onlyOperator","text":"
    modifier onlyOperator();\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#newbidder","title":"newBidder","text":"

    Add a new bidder to the auction.

    function newBidder(address additionalBidder) external onlyOwner returns (uint8 newId);\n
    Parameters

    Name Type Description additionalBidder address The address of the additional bidder."},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#removebidder","title":"removeBidder","text":"

    Remove a bidder from the auction.

    function removeBidder(uint8 bidderId) external onlyOwner;\n
    Parameters

    Name Type Description bidderId uint8 The index of the bidder to be removed."},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#changeoperator","title":"changeOperator","text":"

    Change operator of the auction.

    function changeOperator(address newOperator) external onlyOwner;\n
    Parameters

    Name Type Description newOperator address The address of the new operator"},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#openauction","title":"openAuction","text":"

    Open a new auction for a specific slot.

    function openAuction(uint256 slot, uint120 itemsForSale) external onlyOperator;\n
    Parameters

    Name Type Description slot uint256 The auction slot. itemsForSale uint120 The number of items available for sale in the auction."},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#bid","title":"bid","text":"

    Bid function for bidders to submit manual bids.

    function bid(uint256 slot, uint256[] memory packedBids) external;\n
    Parameters

    Name Type Description slot uint256 The auction slot. packedBids uint256[] Array of packed bids"},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#runandsettle","title":"runAndSettle","text":"

    Execute the auction for a specific slot.

    function runAndSettle(uint256 slot) public onlyOperator;\n
    Parameters

    Name Type Description slot uint256 The auction slot."},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#payout","title":"payout","text":"

    Payout revenue from auction to validators

    function payout(uint256 slot) external onlyOperator;\n
    Parameters

    Name Type Description slot uint256 The auction slot."},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#refund","title":"refund","text":"

    Refund revenue from auction to bidders

    function refund(uint256 slot) external onlyOperator;\n
    Parameters

    Name Type Description slot uint256 The auction slot."},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#getbidderinfo","title":"getBidderInfo","text":"

    Retrieve information about a bidder after auction settlement.

    function getBidderInfo(uint256 slot, address bidder) external view returns (uint120 itemsBought, uint128 amountOwed);\n
    Parameters

    Name Type Description slot uint256 The slot identifier of the auction. bidder address The address of the bidder for whom information is requested.

    Returns

    Name Type Description itemsBought uint120 The number of items bought by the bidder in the specified auction. amountOwed uint128 The amount owed by the bidder for the items bought in the specified auction. Requirements: - The auction must have been settled. - The provided bidder address must be valid and have participated in the auction."},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#packbid","title":"packBid","text":"

    Packed Bid details into a uint256 for submission.

    function packBid(uint128 bidPrice, uint120 itemsToBuy, uint8 bidderId) external pure returns (uint256 packedBid);\n
    Parameters

    Name Type Description bidPrice uint128 Price per item. itemsToBuy uint120 Items to buy in the auction. bidderId uint8 Id for bidder

    Returns

    Name Type Description packedBid uint256 for auction submission"},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#decodebid","title":"decodeBid","text":"

    Decode the packed bid information.

    function decodeBid(uint256 packedBid) internal pure returns (uint8 bidderId, uint120 itemsToBuy, uint128 bidPrice);\n
    Parameters

    Name Type Description packedBid uint256 The packed bid information.

    Returns

    Name Type Description bidderId uint8 The bidder's ID. itemsToBuy uint120 The number of items the bidder wants to buy. bidPrice uint128 The price per item in the bid."},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#calcaveragebid","title":"calcAverageBid","text":"

    Calculate average bid price for the last n auctions

    function calcAverageBid(uint256 numAuctions) external view returns (uint128 avBidPrice);\n
    Parameters

    Name Type Description numAuctions uint256 Number of auctions to average for

    Returns

    Name Type Description avBidPrice uint128 for last n auctions"},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#checkandstorebid","title":"checkAndStoreBid","text":"

    Check the validity of a bid.

    function checkAndStoreBid(\n    bool revertInvalid,\n    address bidder,\n    uint256 slot,\n    uint256 itemsForSale,\n    uint256[] memory packedBids\n) internal;\n
    Parameters

    Name Type Description revertInvalid bool true for manual bids causing reverts for invalid data bidder address Address of bidder. slot uint256 The auction slot. itemsForSale uint256 Total items for sale for the slot. packedBids uint256[] Array of packed bids Requirements: - The number of items in the bid must not exceed the available items for sale in the auction. - The bidder must have enough funds to cover the bid amount."},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#updateaccountant","title":"updateAccountant","text":"

    update accountant address

    function updateAccountant(address newAccountant) external onlyOwner;\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#updatemaxbids","title":"updateMaxBids","text":"

    update max num of bids per bidder

    function updateMaxBids(uint256 newMaxBids) external onlyOwner;\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#updatemingasamount","title":"updateMinGasAmount","text":"

    update minGasAmount

    function updateMinGasAmount(uint120 newAmount) external onlyOwner;\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#events","title":"Events","text":""},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#operatorupdated","title":"OperatorUpdated","text":"
    event OperatorUpdated(address indexed oldOperator, address indexed newOperator);\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#auctionsettled","title":"AuctionSettled","text":"
    event AuctionSettled(uint256 indexed slot);\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#bidderadded","title":"BidderAdded","text":"
    event BidderAdded(address indexed bidder, uint8 indexed bidderId);\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#bidderremoved","title":"BidderRemoved","text":"
    event BidderRemoved(address indexed bidder, uint8 indexed bidderId);\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#auctionopened","title":"AuctionOpened","text":"
    event AuctionOpened(uint256 indexed slot, uint120 itemsForSale);\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#auctionpaidout","title":"AuctionPaidOut","text":"
    event AuctionPaidOut(uint256 indexed slot);\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#auctionrefund","title":"AuctionRefund","text":"
    event AuctionRefund(uint256 indexed slot);\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#errors","title":"Errors","text":""},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#invalidid","title":"InvalidId","text":"
    error InvalidId();\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#unauthorized","title":"Unauthorized","text":"
    error Unauthorized();\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#invalidbiditems","title":"InvalidBidItems","text":"
    error InvalidBidItems();\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#insufficientfunds","title":"InsufficientFunds","text":"
    error InsufficientFunds();\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#auctionnotopen","title":"AuctionNotOpen","text":"
    error AuctionNotOpen(uint256 slot);\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#auctionnotclosed","title":"AuctionNotClosed","text":"
    error AuctionNotClosed(uint256 slot);\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#auctionalreadyopen","title":"AuctionAlreadyOpen","text":"
    error AuctionAlreadyOpen(uint256 slot);\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#auctionalreadysettled","title":"AuctionAlreadySettled","text":"
    error AuctionAlreadySettled(uint256 slot);\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#biddernotregistered","title":"BidderNotRegistered","text":"
    error BidderNotRegistered(address bidder);\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#bidderalreadyexists","title":"BidderAlreadyExists","text":"
    error BidderAlreadyExists(address bidder);\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#structs","title":"Structs","text":""},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#auction","title":"Auction","text":"
    struct Auction {\n    uint120 itemsForSale;\n    bool isOpen;\n    bool isSettled;\n    bool isPaidOut;\n    bool isRefunded;\n    mapping(address => BidderInfo) biddersInfo;\n}\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#bidderinfo","title":"BidderInfo","text":"
    struct BidderInfo {\n    uint120 itemsBought;\n    uint128 amountOwed;\n}\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/interface.Bidder/","title":"Bidder","text":"

    Git Source

    "},{"location":"Rulebook/contracts/Auctioneer.sol/interface.Bidder/#functions","title":"Functions","text":""},{"location":"Rulebook/contracts/Auctioneer.sol/interface.Bidder/#getbid","title":"getBid","text":"

    Get the bid from a bidder for a specific slot and round.

    function getBid(uint256 slot) external view returns (uint256[] memory packedBids);\n
    Parameters

    Name Type Description slot uint256 The auction slot.

    Returns

    Name Type Description packedBids uint256[] Array of bids (in a packed format). uint256(uint128(bidPrice),uint120(itemsToBuy),uint8(bidderId))"},{"location":"Rulebook/contracts/Auctioneer.sol/interface.IAccountant/","title":"IAccountant","text":"

    Git Source

    "},{"location":"Rulebook/contracts/Auctioneer.sol/interface.IAccountant/#functions","title":"Functions","text":""},{"location":"Rulebook/contracts/Auctioneer.sol/interface.IAccountant/#payout","title":"payout","text":"
    function payout() external;\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/interface.IAccountant/#getpayoutbalance","title":"getPayoutBalance","text":"
    function getPayoutBalance() external view returns (uint256 payoutBalance);\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/interface.IAccountant/#minpayout","title":"minPayout","text":"
    function minPayout() external view returns (uint256 amount);\n
    "},{"location":"Rulebook/contracts/L1Holding.sol/contract.L1Holding/","title":"L1Holding","text":"

    Git Source

    Inherits: Ownable2Step

    Author: MEV Protocol

    Pays out L1 builder payments to L2 Accountant

    "},{"location":"Rulebook/contracts/L1Holding.sol/contract.L1Holding/#state-variables","title":"State Variables","text":""},{"location":"Rulebook/contracts/L1Holding.sol/contract.L1Holding/#mingaslimit","title":"minGasLimit","text":"

    min gas limit for L2 bridge tx

    uint32 public minGasLimit = 200_000;\n
    "},{"location":"Rulebook/contracts/L1Holding.sol/contract.L1Holding/#accountant","title":"accountant","text":"

    L2 accountant

    address public accountant;\n
    "},{"location":"Rulebook/contracts/L1Holding.sol/contract.L1Holding/#bridge","title":"bridge","text":"

    L1 => L2 bridge

    IL1Bridge public bridge;\n
    "},{"location":"Rulebook/contracts/L1Holding.sol/contract.L1Holding/#functions","title":"Functions","text":""},{"location":"Rulebook/contracts/L1Holding.sol/contract.L1Holding/#constructor","title":"constructor","text":"

    Initializes the L1Holding contract.

    constructor(address _accountant, address _bridge) Ownable2Step(msg.sender);\n
    Parameters

    Name Type Description _accountant address Address of the protocol treasury. _bridge address Address of the L2 bridge contract."},{"location":"Rulebook/contracts/L1Holding.sol/contract.L1Holding/#receive","title":"receive","text":"

    Fallback function to receive Ether.

    receive() external payable;\n
    "},{"location":"Rulebook/contracts/L1Holding.sol/contract.L1Holding/#payaccounatnt","title":"payAccounatnt","text":"

    Pays accountant.

    function payAccounatnt() external;\n
    "},{"location":"Rulebook/contracts/L1Holding.sol/contract.L1Holding/#updateaccountant","title":"updateAccountant","text":"

    Updates the L2 accountant address.

    function updateAccountant(address _accountant) external onlyOwner;\n
    Parameters

    Name Type Description _accountant address New address of the L2 accountant"},{"location":"Rulebook/contracts/L1Holding.sol/contract.L1Holding/#updatebridge","title":"updateBridge","text":"

    Updates the address of the L2 bridge contract.

    function updateBridge(address _bridge) external onlyOwner;\n
    Parameters

    Name Type Description _bridge address New address of the L2 bridge contract."},{"location":"Rulebook/contracts/L1Holding.sol/contract.L1Holding/#updatemingaslimit","title":"updateMinGasLimit","text":"

    Updates the minimum gas limit for L2 bridge transactions.

    function updateMinGasLimit(uint32 _minGasLimit) external onlyOwner;\n
    Parameters

    Name Type Description _minGasLimit uint32 New minimum gas limit."},{"location":"Rulebook/contracts/L1Holding.sol/contract.L1Holding/#events","title":"Events","text":""},{"location":"Rulebook/contracts/L1Holding.sol/contract.L1Holding/#paymentreceived","title":"PaymentReceived","text":"
    event PaymentReceived(address indexed sender, uint256 amount);\n
    "},{"location":"Rulebook/contracts/L1Holding.sol/contract.L1Holding/#paymentsent","title":"PaymentSent","text":"
    event PaymentSent(address indexed recipient, uint256 amount);\n
    "},{"location":"Rulebook/contracts/SettlementHouse.sol/contract.SettlementHouse/","title":"SettlementHouse","text":"

    Git Source

    A contract for managing bundles of transactions for a futures token.

    "},{"location":"Rulebook/contracts/SettlementHouse.sol/contract.SettlementHouse/#state-variables","title":"State Variables","text":""},{"location":"Rulebook/contracts/SettlementHouse.sol/contract.SettlementHouse/#futurestoken","title":"futuresToken","text":"
    IERC6909 public immutable futuresToken;\n
    "},{"location":"Rulebook/contracts/SettlementHouse.sol/contract.SettlementHouse/#bundlecounter","title":"bundleCounter","text":"
    mapping(uint256 => uint256) internal bundleCounter;\n
    "},{"location":"Rulebook/contracts/SettlementHouse.sol/contract.SettlementHouse/#bundles","title":"bundles","text":"
    mapping(uint256 => mapping(uint256 => Bundle)) internal bundles;\n
    "},{"location":"Rulebook/contracts/SettlementHouse.sol/contract.SettlementHouse/#functions","title":"Functions","text":""},{"location":"Rulebook/contracts/SettlementHouse.sol/contract.SettlementHouse/#constructor","title":"constructor","text":"

    Constructor to initialize the contract with the futures token contract address.

    constructor(IERC6909 _futuresToken);\n
    Parameters

    Name Type Description _futuresToken IERC6909 Address of the futures token contract."},{"location":"Rulebook/contracts/SettlementHouse.sol/contract.SettlementHouse/#submitbundle","title":"submitBundle","text":"
    function submitBundle(uint256 slot, uint256 amountOfGas, bytes32[] calldata bundleHashes) external;\n
    "},{"location":"Rulebook/contracts/SettlementHouse.sol/contract.SettlementHouse/#querybundles","title":"queryBundles","text":"
    function queryBundles(uint256 slot) external view returns (Bundle[] memory slotBundles);\n
    "},{"location":"Rulebook/contracts/SettlementHouse.sol/contract.SettlementHouse/#events","title":"Events","text":""},{"location":"Rulebook/contracts/SettlementHouse.sol/contract.SettlementHouse/#bundlesubmitted","title":"BundleSubmitted","text":"
    event BundleSubmitted(address indexed sender, uint256 indexed slot, uint256 indexed index, uint256 amountOfGas);\n
    "},{"location":"Rulebook/contracts/SettlementHouse.sol/contract.SettlementHouse/#errors","title":"Errors","text":""},{"location":"Rulebook/contracts/SettlementHouse.sol/contract.SettlementHouse/#unauthorized","title":"Unauthorized","text":"
    error Unauthorized();\n
    "},{"location":"Rulebook/contracts/SettlementHouse.sol/contract.SettlementHouse/#structs","title":"Structs","text":""},{"location":"Rulebook/contracts/SettlementHouse.sol/contract.SettlementHouse/#bundle","title":"Bundle","text":"
    struct Bundle {\n    address submitter;\n    uint256 amountOfGas;\n    bytes32[] bundleHashes;\n}\n
    "},{"location":"Rulebook/contracts/auth/","title":"Contents","text":"
    • Ownable2Step
    • Owned
    "},{"location":"Rulebook/contracts/auth/Ownable2Step.sol/abstract.Ownable2Step/","title":"Ownable2Step","text":"

    Git Source

    Inherits: Owned

    An abstract contract that extends the Owned contract and provides a two-step ownership transfer mechanism. The contract allows the current owner to initiate a transfer of ownership to a new account. The new owner must then explicitly accept the ownership transfer to complete the process. This contract emits an OwnershipTransferStarted event when the ownership transfer is initiated, and an OwnershipTransferred event when the transfer is completed.

    "},{"location":"Rulebook/contracts/auth/Ownable2Step.sol/abstract.Ownable2Step/#state-variables","title":"State Variables","text":""},{"location":"Rulebook/contracts/auth/Ownable2Step.sol/abstract.Ownable2Step/#pendingowner","title":"pendingOwner","text":"
    address public pendingOwner;\n
    "},{"location":"Rulebook/contracts/auth/Ownable2Step.sol/abstract.Ownable2Step/#functions","title":"Functions","text":""},{"location":"Rulebook/contracts/auth/Ownable2Step.sol/abstract.Ownable2Step/#constructor","title":"constructor","text":"
    constructor(address _owner) Owned(_owner);\n
    "},{"location":"Rulebook/contracts/auth/Ownable2Step.sol/abstract.Ownable2Step/#onlypendingowner","title":"onlyPendingOwner","text":"
    modifier onlyPendingOwner() virtual;\n
    "},{"location":"Rulebook/contracts/auth/Ownable2Step.sol/abstract.Ownable2Step/#transferownership","title":"transferOwnership","text":"

    Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner.

    function transferOwnership(address newOwner) public virtual override onlyOwner;\n
    "},{"location":"Rulebook/contracts/auth/Ownable2Step.sol/abstract.Ownable2Step/#_transferownership","title":"_transferOwnership","text":"

    Transfers ownership of the contract to a new account (newOwner) and deletes any pending owner. Internal function without access restriction.

    function _transferOwnership(address newOwner) internal virtual;\n
    "},{"location":"Rulebook/contracts/auth/Ownable2Step.sol/abstract.Ownable2Step/#acceptownership","title":"acceptOwnership","text":"

    The new owner accepts the ownership transfer.

    function acceptOwnership() public virtual onlyPendingOwner;\n
    "},{"location":"Rulebook/contracts/auth/Ownable2Step.sol/abstract.Ownable2Step/#events","title":"Events","text":""},{"location":"Rulebook/contracts/auth/Ownable2Step.sol/abstract.Ownable2Step/#ownershiptransferstarted","title":"OwnershipTransferStarted","text":"
    event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);\n
    "},{"location":"Rulebook/contracts/auth/solady.auth.sol/abstract.Owned/","title":"Owned","text":"

    Git Source

    Author: Solmate (https://github.com/transmissions11/solmate/blob/main/src/auth/Owned.sol)

    Simple single owner authorization mixin.

    "},{"location":"Rulebook/contracts/auth/solady.auth.sol/abstract.Owned/#state-variables","title":"State Variables","text":""},{"location":"Rulebook/contracts/auth/solady.auth.sol/abstract.Owned/#owner","title":"owner","text":"
    address public owner;\n
    "},{"location":"Rulebook/contracts/auth/solady.auth.sol/abstract.Owned/#functions","title":"Functions","text":""},{"location":"Rulebook/contracts/auth/solady.auth.sol/abstract.Owned/#onlyowner","title":"onlyOwner","text":"
    modifier onlyOwner() virtual;\n
    "},{"location":"Rulebook/contracts/auth/solady.auth.sol/abstract.Owned/#constructor","title":"constructor","text":"
    constructor(address _owner);\n
    "},{"location":"Rulebook/contracts/auth/solady.auth.sol/abstract.Owned/#transferownership","title":"transferOwnership","text":"
    function transferOwnership(address newOwner) public virtual onlyOwner;\n
    "},{"location":"Rulebook/contracts/auth/solady.auth.sol/abstract.Owned/#events","title":"Events","text":""},{"location":"Rulebook/contracts/auth/solady.auth.sol/abstract.Owned/#ownershiptransferred","title":"OwnershipTransferred","text":"
    event OwnershipTransferred(address indexed user, address indexed newOwner);\n
    "},{"location":"Rulebook/contracts/interfaces/","title":"Contents","text":"
    • IERC6909
    • IL1Bridge
    • IL2Bridge
    • IWETH
    "},{"location":"Rulebook/contracts/interfaces/IERC6909.sol/interface.IERC6909/","title":"IERC6909","text":"

    Git Source

    Author: jtriley.eth

    "},{"location":"Rulebook/contracts/interfaces/IERC6909.sol/interface.IERC6909/#functions","title":"Functions","text":""},{"location":"Rulebook/contracts/interfaces/IERC6909.sol/interface.IERC6909/#balanceof","title":"balanceOf","text":"

    Owner balance of an id.

    function balanceOf(address owner, uint256 id) external view returns (uint256 amount);\n
    Parameters

    Name Type Description owner address The address of the owner. id uint256 The id of the token.

    Returns

    Name Type Description amount uint256 The balance of the token."},{"location":"Rulebook/contracts/interfaces/IERC6909.sol/interface.IERC6909/#allowance","title":"allowance","text":"

    Spender allowance of an id.

    function allowance(address owner, address spender, uint256 id) external view returns (uint256 amount);\n
    Parameters

    Name Type Description owner address The address of the owner. spender address The address of the spender. id uint256 The id of the token.

    Returns

    Name Type Description amount uint256 The allowance of the token."},{"location":"Rulebook/contracts/interfaces/IERC6909.sol/interface.IERC6909/#isoperator","title":"isOperator","text":"

    Checks if a spender is approved by an owner as an operator

    function isOperator(address owner, address spender) external view returns (bool approved);\n
    Parameters

    Name Type Description owner address The address of the owner. spender address The address of the spender.

    Returns

    Name Type Description approved bool The approval status."},{"location":"Rulebook/contracts/interfaces/IERC6909.sol/interface.IERC6909/#transfer","title":"transfer","text":"

    Transfers an amount of an id from the caller to a receiver.

    function transfer(address receiver, uint256 id, uint256 amount) external returns (bool);\n
    Parameters

    Name Type Description receiver address The address of the receiver. id uint256 The id of the token. amount uint256 The amount of the token."},{"location":"Rulebook/contracts/interfaces/IERC6909.sol/interface.IERC6909/#transferfrom","title":"transferFrom","text":"

    Transfers an amount of an id from a sender to a receiver.

    function transferFrom(address sender, address receiver, uint256 id, uint256 amount) external returns (bool);\n
    Parameters

    Name Type Description sender address The address of the sender. receiver address The address of the receiver. id uint256 The id of the token. amount uint256 The amount of the token."},{"location":"Rulebook/contracts/interfaces/IERC6909.sol/interface.IERC6909/#approve","title":"approve","text":"

    Approves an amount of an id to a spender.

    function approve(address spender, uint256 id, uint256 amount) external returns (bool);\n
    Parameters

    Name Type Description spender address The address of the spender. id uint256 The id of the token. amount uint256 The amount of the token."},{"location":"Rulebook/contracts/interfaces/IERC6909.sol/interface.IERC6909/#setoperator","title":"setOperator","text":"

    Sets or removes a spender as an operator for the caller.

    function setOperator(address spender, bool approved) external returns (bool);\n
    Parameters

    Name Type Description spender address The address of the spender. approved bool The approval status."},{"location":"Rulebook/contracts/interfaces/IERC6909.sol/interface.IERC6909/#events","title":"Events","text":""},{"location":"Rulebook/contracts/interfaces/IERC6909.sol/interface.IERC6909/#transfer_1","title":"Transfer","text":"

    The event emitted when a transfer occurs.

    event Transfer(address caller, address indexed sender, address indexed receiver, uint256 indexed id, uint256 amount);\n

    Parameters

    Name Type Description caller address The caller of the transfer. sender address The address of the sender. receiver address The address of the receiver. id uint256 The id of the token. amount uint256 The amount of the token."},{"location":"Rulebook/contracts/interfaces/IERC6909.sol/interface.IERC6909/#operatorset","title":"OperatorSet","text":"

    The event emitted when an operator is set.

    event OperatorSet(address indexed owner, address indexed spender, bool approved);\n

    Parameters

    Name Type Description owner address The address of the owner. spender address The address of the spender. approved bool The approval status."},{"location":"Rulebook/contracts/interfaces/IERC6909.sol/interface.IERC6909/#approval","title":"Approval","text":"

    The event emitted when an approval occurs.

    event Approval(address indexed owner, address indexed spender, uint256 indexed id, uint256 amount);\n

    Parameters

    Name Type Description owner address The address of the owner. spender address The address of the spender. id uint256 The id of the token. amount uint256 The amount of the token."},{"location":"Rulebook/contracts/interfaces/IL1Bridge.sol/interface.IL1Bridge/","title":"IL1Bridge","text":"

    Git Source

    "},{"location":"Rulebook/contracts/interfaces/IL1Bridge.sol/interface.IL1Bridge/#functions","title":"Functions","text":""},{"location":"Rulebook/contracts/interfaces/IL1Bridge.sol/interface.IL1Bridge/#depositethto","title":"depositETHTo","text":"

    Deposits some amount of ETH into a target account on L2. Note that if ETH is sent to a contract on L2 and the call fails, then that ETH will be locked in the L2StandardBridge. ETH may be recoverable if the call can be successfully replayed by increasing the amount of gas supplied to the call. If the call will fail for any amount of gas, then the ETH will be locked permanently.

    function depositETHTo(address _to, uint32 _minGasLimit, bytes calldata _extraData) external payable;\n
    Parameters

    Name Type Description _to address Address of the recipient on L2. _minGasLimit uint32 Minimum gas limit for the deposit message on L2. _extraData bytes Optional data to forward to L2. Data supplied here will not be used to execute any code on L2 and is only emitted as extra data for the convenience of off-chain tooling."},{"location":"Rulebook/contracts/interfaces/IL2Bridge.sol/interface.IL2Bridge/","title":"IL2Bridge","text":"

    Git Source

    "},{"location":"Rulebook/contracts/interfaces/IL2Bridge.sol/interface.IL2Bridge/#functions","title":"Functions","text":""},{"location":"Rulebook/contracts/interfaces/IL2Bridge.sol/interface.IL2Bridge/#withdrawto","title":"withdrawTo","text":"

    Initiates a withdrawal from L2 to L1 to a target account on L1. Note that if ETH is sent to a contract on L1 and the call fails, then that ETH will be locked in the L1StandardBridge. ETH may be recoverable if the call can be successfully replayed by increasing the amount of gas supplied to the call. If the call will fail for any amount of gas, then the ETH will be locked permanently. This function only works with OptimismMintableERC20 tokens or ether. Use the bridgeERC20To function to bridge native L2 tokens to L1.

    function withdrawTo(address _l2Token, address _to, uint256 _amount, uint32 _minGasLimit, bytes calldata _extraData)\n    external\n    payable;\n
    Parameters

    Name Type Description _l2Token address Address of the L2 token to withdraw. _to address Recipient account on L1. _amount uint256 Amount of the L2 token to withdraw. _minGasLimit uint32 Minimum gas limit to use for the transaction. _extraData bytes Extra data attached to the withdrawal."},{"location":"Rulebook/contracts/interfaces/IWETH.sol/interface.IWETH/","title":"IWETH","text":"

    Git Source

    "},{"location":"Rulebook/contracts/interfaces/IWETH.sol/interface.IWETH/#functions","title":"Functions","text":""},{"location":"Rulebook/contracts/interfaces/IWETH.sol/interface.IWETH/#deposit","title":"deposit","text":"
    function deposit() external payable;\n
    "},{"location":"Rulebook/contracts/interfaces/IWETH.sol/interface.IWETH/#withdraw","title":"withdraw","text":"
    function withdraw(uint256 amount) external;\n
    "},{"location":"Rulebook/contracts/solady.libsort.sol/library.LibSort/","title":"LibSort","text":"

    Git Source

    Author: Solady (https://github.com/vectorized/solady/blob/main/src/utils/Sort.sol)

    Optimized sorts and operations for sorted arrays.

    "},{"location":"Rulebook/contracts/solady.libsort.sol/library.LibSort/#functions","title":"Functions","text":""},{"location":"Rulebook/contracts/solady.libsort.sol/library.LibSort/#insertionsort","title":"insertionSort","text":"

    Sorts the array in-place with insertion sort.

    function insertionSort(uint256[] memory a) internal pure;\n
    "},{"location":"Rulebook/contracts/solady.libsort.sol/library.LibSort/#insertionsort_1","title":"insertionSort","text":"

    Sorts the array in-place with insertion sort.

    function insertionSort(int256[] memory a) internal pure;\n
    "},{"location":"Rulebook/contracts/solady.libsort.sol/library.LibSort/#insertionsort_2","title":"insertionSort","text":"

    Sorts the array in-place with insertion sort.

    function insertionSort(address[] memory a) internal pure;\n
    "},{"location":"Rulebook/contracts/solady.libsort.sol/library.LibSort/#sort","title":"sort","text":"

    Sorts the array in-place with intro-quicksort.

    function sort(uint256[] memory a) internal pure;\n
    "},{"location":"Rulebook/contracts/solady.libsort.sol/library.LibSort/#sort_1","title":"sort","text":"

    Sorts the array in-place with intro-quicksort.

    function sort(int256[] memory a) internal pure;\n
    "},{"location":"Rulebook/contracts/solady.libsort.sol/library.LibSort/#sort_2","title":"sort","text":"

    Sorts the array in-place with intro-quicksort.

    function sort(address[] memory a) internal pure;\n
    "},{"location":"Rulebook/contracts/solady.libsort.sol/library.LibSort/#uniquifysorted","title":"uniquifySorted","text":"

    Removes duplicate elements from a ascendingly sorted memory array.

    function uniquifySorted(uint256[] memory a) internal pure;\n
    "},{"location":"Rulebook/contracts/solady.libsort.sol/library.LibSort/#uniquifysorted_1","title":"uniquifySorted","text":"

    Removes duplicate elements from a ascendingly sorted memory array.

    function uniquifySorted(int256[] memory a) internal pure;\n
    "},{"location":"Rulebook/contracts/solady.libsort.sol/library.LibSort/#uniquifysorted_2","title":"uniquifySorted","text":"

    Removes duplicate elements from a ascendingly sorted memory array.

    function uniquifySorted(address[] memory a) internal pure;\n
    "},{"location":"Rulebook/contracts/solady.libsort.sol/library.LibSort/#searchsorted","title":"searchSorted","text":"

    Returns whether a contains needle, and the index of needle. index precedence: equal to > nearest before > nearest after.

    function searchSorted(uint256[] memory a, uint256 needle) internal pure returns (bool found, uint256 index);\n
    "},{"location":"Rulebook/contracts/solady.libsort.sol/library.LibSort/#searchsorted_1","title":"searchSorted","text":"

    Returns whether a contains needle, and the index of needle. index precedence: equal to > nearest before > nearest after.

    function searchSorted(int256[] memory a, int256 needle) internal pure returns (bool found, uint256 index);\n
    "},{"location":"Rulebook/contracts/solady.libsort.sol/library.LibSort/#searchsorted_2","title":"searchSorted","text":"

    Returns whether a contains needle, and the index of needle. index precedence: equal to > nearest before > nearest after.

    function searchSorted(address[] memory a, address needle) internal pure returns (bool found, uint256 index);\n
    "},{"location":"Rulebook/contracts/solady.libsort.sol/library.LibSort/#reverse","title":"reverse","text":"

    Reverses the array in-place.

    function reverse(uint256[] memory a) internal pure;\n
    "},{"location":"Rulebook/contracts/solady.libsort.sol/library.LibSort/#reverse_1","title":"reverse","text":"

    Reverses the array in-place.

    function reverse(int256[] memory a) internal pure;\n
    "},{"location":"Rulebook/contracts/solady.libsort.sol/library.LibSort/#reverse_2","title":"reverse","text":"

    Reverses the array in-place.

    function reverse(address[] memory a) internal pure;\n
    "},{"location":"Rulebook/contracts/solady.libsort.sol/library.LibSort/#issorted","title":"isSorted","text":"

    Returns whether the array is sorted in ascending order.

    function isSorted(uint256[] memory a) internal pure returns (bool result);\n
    "},{"location":"Rulebook/contracts/solady.libsort.sol/library.LibSort/#issorted_1","title":"isSorted","text":"

    Returns whether the array is sorted in ascending order.

    function isSorted(int256[] memory a) internal pure returns (bool result);\n
    "},{"location":"Rulebook/contracts/solady.libsort.sol/library.LibSort/#issorted_2","title":"isSorted","text":"

    Returns whether the array is sorted in ascending order.

    function isSorted(address[] memory a) internal pure returns (bool result);\n
    "},{"location":"Rulebook/contracts/solady.libsort.sol/library.LibSort/#issortedanduniquified","title":"isSortedAndUniquified","text":"

    Returns whether the array is strictly ascending (sorted and uniquified).

    function isSortedAndUniquified(uint256[] memory a) internal pure returns (bool result);\n
    "},{"location":"Rulebook/contracts/solady.libsort.sol/library.LibSort/#issortedanduniquified_1","title":"isSortedAndUniquified","text":"

    Returns whether the array is strictly ascending (sorted and uniquified).

    function isSortedAndUniquified(int256[] memory a) internal pure returns (bool result);\n
    "},{"location":"Rulebook/contracts/solady.libsort.sol/library.LibSort/#issortedanduniquified_2","title":"isSortedAndUniquified","text":"

    Returns whether the array is strictly ascending (sorted and uniquified).

    function isSortedAndUniquified(address[] memory a) internal pure returns (bool result);\n
    "},{"location":"Rulebook/contracts/solady.libsort.sol/library.LibSort/#difference","title":"difference","text":"

    Returns the sorted set difference of a and b. Note: Behaviour is undefined if inputs are not sorted and uniquified.

    function difference(uint256[] memory a, uint256[] memory b) internal pure returns (uint256[] memory c);\n
    "},{"location":"Rulebook/contracts/solady.libsort.sol/library.LibSort/#difference_1","title":"difference","text":"

    Returns the sorted set difference between a and b. Note: Behaviour is undefined if inputs are not sorted and uniquified.

    function difference(int256[] memory a, int256[] memory b) internal pure returns (int256[] memory c);\n
    "},{"location":"Rulebook/contracts/solady.libsort.sol/library.LibSort/#difference_2","title":"difference","text":"

    Returns the sorted set difference between a and b. Note: Behaviour is undefined if inputs are not sorted and uniquified.

    function difference(address[] memory a, address[] memory b) internal pure returns (address[] memory c);\n
    "},{"location":"Rulebook/contracts/solady.libsort.sol/library.LibSort/#intersection","title":"intersection","text":"

    Returns the sorted set intersection between a and b. Note: Behaviour is undefined if inputs are not sorted and uniquified.

    function intersection(uint256[] memory a, uint256[] memory b) internal pure returns (uint256[] memory c);\n
    "},{"location":"Rulebook/contracts/solady.libsort.sol/library.LibSort/#intersection_1","title":"intersection","text":"

    Returns the sorted set intersection between a and b. Note: Behaviour is undefined if inputs are not sorted and uniquified.

    function intersection(int256[] memory a, int256[] memory b) internal pure returns (int256[] memory c);\n
    "},{"location":"Rulebook/contracts/solady.libsort.sol/library.LibSort/#intersection_2","title":"intersection","text":"

    Returns the sorted set intersection between a and b. Note: Behaviour is undefined if inputs are not sorted and uniquified.

    function intersection(address[] memory a, address[] memory b) internal pure returns (address[] memory c);\n
    "},{"location":"Rulebook/contracts/solady.libsort.sol/library.LibSort/#union","title":"union","text":"

    Returns the sorted set union of a and b. Note: Behaviour is undefined if inputs are not sorted and uniquified.

    function union(uint256[] memory a, uint256[] memory b) internal pure returns (uint256[] memory c);\n
    "},{"location":"Rulebook/contracts/solady.libsort.sol/library.LibSort/#union_1","title":"union","text":"

    Returns the sorted set union of a and b. Note: Behaviour is undefined if inputs are not sorted and uniquified.

    function union(int256[] memory a, int256[] memory b) internal pure returns (int256[] memory c);\n
    "},{"location":"Rulebook/contracts/solady.libsort.sol/library.LibSort/#union_2","title":"union","text":"

    Returns the sorted set union between a and b. Note: Behaviour is undefined if inputs are not sorted and uniquified.

    function union(address[] memory a, address[] memory b) internal pure returns (address[] memory c);\n
    "},{"location":"Rulebook/contracts/solady.libsort.sol/library.LibSort/#_touints","title":"_toUints","text":"

    Reinterpret cast to an uint256 array.

    function _toUints(int256[] memory a) private pure returns (uint256[] memory casted);\n
    "},{"location":"Rulebook/contracts/solady.libsort.sol/library.LibSort/#_touints_1","title":"_toUints","text":"

    Reinterpret cast to an uint256 array.

    function _toUints(address[] memory a) private pure returns (uint256[] memory casted);\n
    "},{"location":"Rulebook/contracts/solady.libsort.sol/library.LibSort/#_toints","title":"_toInts","text":"

    Reinterpret cast to an int array.

    function _toInts(uint256[] memory a) private pure returns (int256[] memory casted);\n
    "},{"location":"Rulebook/contracts/solady.libsort.sol/library.LibSort/#_toaddresses","title":"_toAddresses","text":"

    Reinterpret cast to an address array.

    function _toAddresses(uint256[] memory a) private pure returns (address[] memory casted);\n
    "},{"location":"Rulebook/contracts/solady.libsort.sol/library.LibSort/#_flipsign","title":"_flipSign","text":"

    Converts an array of signed integers to unsigned integers suitable for sorting or vice versa.

    function _flipSign(int256[] memory a) private pure;\n
    "},{"location":"Rulebook/contracts/solady.libsort.sol/library.LibSort/#_searchsorted","title":"_searchSorted","text":"

    Returns whether a contains needle, and the index of needle. index precedence: equal to > nearest before > nearest after.

    function _searchSorted(uint256[] memory a, uint256 needle, uint256 signed)\n    private\n    pure\n    returns (bool found, uint256 index);\n
    "},{"location":"Rulebook/contracts/solady.libsort.sol/library.LibSort/#_difference","title":"_difference","text":"

    Returns the sorted set difference of a and b. Note: Behaviour is undefined if inputs are not sorted and uniquified.

    function _difference(uint256[] memory a, uint256[] memory b, uint256 signed)\n    private\n    pure\n    returns (uint256[] memory c);\n
    "},{"location":"Rulebook/contracts/solady.libsort.sol/library.LibSort/#_intersection","title":"_intersection","text":"

    Returns the sorted set intersection between a and b. Note: Behaviour is undefined if inputs are not sorted and uniquified.

    function _intersection(uint256[] memory a, uint256[] memory b, uint256 signed)\n    private\n    pure\n    returns (uint256[] memory c);\n
    "},{"location":"Rulebook/contracts/solady.libsort.sol/library.LibSort/#_union","title":"_union","text":"

    Returns the sorted set union of a and b. Note: Behaviour is undefined if inputs are not sorted and uniquified.

    function _union(uint256[] memory a, uint256[] memory b, uint256 signed) private pure returns (uint256[] memory c);\n
    "},{"location":"api/","title":"API Reference","text":"

    API paths to resources are generally broken into multiple segments,

    {scheme}://{host}/{version}/{category}/[{pathSegment}][?{query}]:

    • version: can be v1.0 or beta.
    • category: is a logical grouping of APIs into top-level categories.
    • pathSegment: is one or many navigation segments that can address an entity, collection of entities, property, or operation available for an entity.
    • query: string must follow the OData standard for query representations
    "},{"location":"api/#rpc-methods-available","title":"RPC Methods Available","text":"RPC Method Description eth_blockNumber Returns the number of the most recent block. eth_call Executes a new message call immediately without creating a transaction on the block chain. eth_estimateGas Estimates the amount of gas required to execute a transaction. eth_gasPrice Returns the current price per gas in wei. eth_getBalance Returns the balance of the account of given address. eth_getBlockByHash Returns information about a block by hash. eth_getBlockByNumber Returns information about a block by block number. eth_getBlockTransactionCountByHash Returns the number of transactions in a block from a block matching the given block hash. eth_getBlockTransactionCountByNumber Returns the number of transactions in a block matching the given block number. eth_getCode Returns the code at a given address. eth_getStorageAt Returns the value from a storage position at a given address. eth_getTransactionByBlockHashAndIndex Returns information about a transaction by block hash and transaction index position. eth_getTransactionByBlockNumberAndIndex Returns information about a transaction by block number and transaction index position. eth_getTransactionByHash Returns information about a transaction requested by transaction hash. eth_getTransactionCount Returns the number of transactions sent from an address. eth_getTransactionReceipt Returns the receipt of a transaction by transaction hash. eth_getUncleByBlockHashAndIndex Returns information about an uncle of a block by hash and uncle index position. eth_getUncleByBlockNumberAndIndex Returns information about an uncle of a block by block number and uncle index position. eth_getUncleCountByBlockHash Returns the number of uncles in a block from a block matching the given block hash. eth_getUncleCountByBlockNumber Returns the number of uncles in a block from a block matching the given block number. eth_sign Signs data with a given address. eth_signTypedData Signs typed data with a given address (EIP-712). eth_getLogs Returns an array of logs matching a specified filter condition. net_version Returns the current network protocol version."},{"location":"api/#api-rate-limiting","title":"API Rate Limiting","text":"

    If you receive a rate limit error, you should stop making requests temporarily according to these guidelines:

    Continuing to make requests while you are rate limited may result in the banning of you, your family, and possibly your entire country.

    "},{"location":"api/#exceeding-the-rate-limit","title":"Exceeding the rate limit","text":""},{"location":"api/#80-requests-per-minute-is-the-public-default","title":"80 requests per minute is the public default","text":"

    Warning

    Reach out to us via Telegram or Email to get a rate limit increase if needed.

    If you exceed your primary rate limit, you will receive a 403 or 429 response, and the x-ratelimit-remaining header will be 0. You should not retry your request until after the time specified by the x-ratelimit-reset header.

    If you exceed a secondary rate limit, you will receive a 403 or 429 response and an error message that indicates that you exceeded a secondary rate limit.

    If the retry-after response header is present, you should not retry your request until after that many seconds has elapsed. If the x-ratelimit-remaining header is 0, you should not retry your request until after the time, in UTC epoch seconds, specified by the x-ratelimit-reset header.1

    1. Response header for retry/rate limit is not yet available.\u00a0\u21a9

    "},{"location":"api/beta-auction/","title":"Auction RPC API","text":""},{"location":"api/beta-auction/#beta-block","title":"Beta Block","text":"

    !!swagger openapi.yml!!

    "},{"location":"api/bundle/","title":"Ethereum Bundle API","text":""},{"location":"api/bundle/#bundle-api","title":"Bundle API","text":"

    !!swagger eth-bundle.yml!!

    "},{"location":"api/relay/","title":"Relay REST API","text":"

    !!swagger relay-oapi.yaml!!

    "},{"location":"api/self-report/","title":"Validator Reporting API","text":""},{"location":"api/self-report/#validator-reporting-rest-api","title":"Validator Reporting REST API","text":"

    !!swagger rated.selfreport.ymll!!

    "},{"location":"api/signature-scheme/","title":"Authenticated JSON RPC Service Access","text":""},{"location":"api/signature-scheme/#custom-payload-signature-scheme-for-authenticated-json-rpc-service-access","title":"Custom Payload Signature Scheme for Authenticated JSON RPC Service Access","text":"

    This document specifies a method for authenticating requests to a JSON RPC service endpoint using a custom payload signature scheme. The scheme involves signing the request payload with an Ethereum key and including this signature in the request headers.

    Note

    This method is based off of Flashbot's X-Flashbots-Signature schema, and is compatible with it.

    "},{"location":"api/signature-scheme/#introduction","title":"Introduction","text":"

    This specification defines a method for authenticating requests made to a JSON RPC service endpoint. The authentication is achieved by signing the request payload using an Ethereum key and including this signature in the request's HTTP headers. This method ensures that the requests are authenticated and can be tracked over time for user statistics.

    "},{"location":"api/signature-scheme/#terminology","title":"Terminology:","text":"
    • JSON RPC: A remote procedure call protocol encoded in JSON.
    • Ethereum Key: A cryptographic key used for signing transactions in the Ethereum blockchain.
    • Payload Signature: A digital signature generated by signing the request payload.
    • X-Ethereum-Signature: HTTP header used to include the payload signature for auction requests.
    "},{"location":"api/signature-scheme/#specification","title":"Specification:","text":""},{"location":"api/signature-scheme/#signature-generation","title":"Signature Generation:","text":"
    • The client MUST generate a digital signature by signing the hash of the JSON body of the request. The JSON body MUST be encoded as UTF-8 bytes before hashing.
    • Any valid Ethereum key CAN be used for signing the payload.
    • The Ethereum address associated with the key used for signing WILL be utilized by the service to track requests and provide user statistics.
    "},{"location":"api/signature-scheme/#request-headers","title":"Request Headers:","text":"
    • The client MUST include the generated signature in the request headers.
    • For auction requests, the signature MUST be included in the X-Ethereum-Signature header.
    • The headers X-Ethereum-Signature are CASE-INSENSITIVE.
    "},{"location":"api/signature-scheme/#example-usage-with-curl","title":"Example Usage with cURL:","text":"
    • For auction requests:
    curl -X POST -H \"Content-Type: application/json\" -H \"X-Ethereum-Signature: 0x1234:0xabcd\" --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_sendBundle\",\"params\":[...],\"id\":1}' <https://api.securerpc.com/v1/auction>\n
    "},{"location":"api/signature-scheme/#example-data","title":"Example Data","text":"
    {\n    \"jsonrpc\": \"2.0\",\n    \"method\": \"eth_sendBundle\",\n    \"params\": [...],\n    \"id\": 1\n}\n
    "},{"location":"blog/","title":"Blog","text":""},{"location":"blog/announcements/changelog/timeline-for-v0-to-v1/","title":"Timeline for v0 to v1","text":"

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.

    timeline\n    title Timeline of Key Events\n    dateFormat MM-DD\n    section Deployment and Governance\n    May 14th : Rollup Deployment\n    May 17th : v1 Main Net Enabled\n    May 20th : Governance Proposal Submitted\n    May 24th : First Week of Data Available\n\n    section Meetings and Voting\n    May 30th : Ethereum ACD Meeting\n    May 30th : Lido DAO Snapshot Voting Period Starts\n    June 6th : Lido DAO Snapshot Voting Period Ends

    Read the forum post here

    "},{"location":"blog/archive/2024/","title":"2024","text":""},{"location":"blog/category/announcements/","title":"announcements","text":""},{"location":"blog/category/changelog/","title":"changelog","text":""}]} \ No newline at end of file +{"config":{"lang":["en"],"separator":"[\\s\\-\\.\\_]+","pipeline":["stopWordFilter"],"fields":{"title":{"boost":1000.0},"text":{"boost":1.0},"tags":{"boost":1000000.0}}},"docs":[{"location":"","title":"eXtensible Gas Auction (XGA)","text":"

    Multi-unit auctions, unlike their single-unit counterparts, present complex allocation mechanisms. The MEV Auction platform implements several innovative strategies:

    1. An enhanced uniform price auction,
    2. A Bifurcated Block Structure (splitting the block into halves),
    3. Elastic Supply Scheduling,
    4. Contract based bidding.
    5. Backwards compatible with MEV-Boost
    6. Exclusive Relay endpoint for Validator usage

    Want to learn more about the platform?

    Get started on the test net or jump right into main net! Getting Started

    Technical specifications and roadmap

    See our list of roadmap iteams and technical specifications. See supported features and more

    Want to connect for your Validator?

    Run Ethereum services easily with our supported Validator setups. Run XGA Ethereum services on...

    Have a question or need help?

    Ask questions on our discussion board and get in touch with our community. Ask a question

    "},{"location":"#block-structure","title":"Block Structure","text":"

    We divide a block in two parts: \u237a-blockspace and \u03b2-blockspace

    \u237a-blockspace is a very time sensitive kind of priority transactions. These transactions often come in last second.

    \u03b2-blockspace however can be considered non-priority sensitive, meaning it is not very time sensitive, hence can be priced differently.

    "},{"location":"#-blockspace","title":"\u237a-blockspace","text":"
    • \u237a-blockspace - represents the top part of the blockspace. Economically, this is where competitive searchers want to place their transactions (e.g. for arbitrages etc.).1
    "},{"location":"#-blockspace_1","title":"\u03b2-blockspace","text":"
    • \u03b2-blockspace - represents the rest of the blockspace. Economically, this is where low-priority transactions - direct transfers, low volume swaps, some kind of intents, etc. - would go. The rationale for this is simple: above and below represent two very different markets: The first serves strategic actors, whereas the second serves 'everyone else' - people not interested in speculation that just want to transact, e.g., to pay for stuff.2
    gantt\n    title Future auction for `below`\n    dateFormat YY-MM\n    axisFormat %m\n    tickInterval 1month\n    section Epoch i\n        We know slots for Epoch i+2 are 03,08 and 11 : crit, done, milestone, 00-01, 1m\n        Auction for `below`, slots 03,08,11 : 00-01, 6M\n        Futures awarded : milestone, 00-07, 1m\n        Users can transact: active, 00-07, 6M\n    section Epoch i+1\n        Users can transact: active, 01-01, 12M\n    section Epoch i+2\n        Slot 03, future can be used : crit, active, milestone, 02-03, 1\n        Slot 08, future can be used : crit, active, milestone, 02-08, 1\n        Slot 11, future can be used : crit, active, milestone, 02-11, 1

    The Auction platform uses the SecureRPC.com relay, in which permissioned validator sets use exclusively3. As such, we will know 2 epochs in advance in which slots we will mint a block. Therefore, we can sell a proportion of blockspace 2 epochs in advance, enabling a forward call market for \u03b2-blockspace.

    "},{"location":"#elastic-supply-schedule","title":"Elastic Supply Schedule","text":"

    Elastic Supply Schedule: Breaking away from the rigidness of a fixed supply, we're introducing elasticity. When prices dip low, we'll strategically limit the availability of options. This dynamic approach ensures a balance between supply and demand, maintaining value and interest.

    Revamped Tie-Breaking Rule: In the world of auctions, ties are inevitable. Our approach is different. We're moving away from the conventional method that prioritizes higher marginal bids. Instead, we're implementing a novel rule that intensifies competition, particularly for those crucial marginal quantities.

    "},{"location":"#why-these-changes-matter","title":"Why These Changes Matter","text":""},{"location":"#shortcomings-of-the-standard-uniform-price-auction","title":"Shortcomings of the standard uniform price auction","text":"

    Traditionally, with a fixed supply, there's a looming risk of plummeting prices. This phenomenon, identified by Wilson4, highlights a bidder's tendency to underbid. In multi-unit auctions, this is a critical challenge. In a uniform price auction, underbidding on the marginal unit doesn't just lower the price for that unit; it slashes the overall price you pay.

    The real danger of severe under-pricing hinges on demand factors, which are often unpredictable and not easily deduced from existing data. The debate over whether discriminatory or uniform price auctions yield higher revenue remains unresolved, both theoretically (as discussed by Ausubel et al. 2011) and empirically.

    "},{"location":"#tie-breaking-rule","title":"Tie Breaking Rule","text":"

    The traditional tie-breaking rule, which prioritizes higher marginal bids, is inherently flawed. It doesn't account for the strategic value of the marginal unit. This is particularly problematic in multi-unit auctions, where the marginal unit is often the most valuable. The current rule fails to capture the true value of the marginal unit, leading to suboptimal outcomes. This is due to the discrete nature of bids, it can happen that there is market-clearing price (where demand=supply). The typical rule applied in many auctions favors high marginal bids first. We will consider an alternative that introduces more pressure at the quantity at the margin.

    "},{"location":"#elastic-supply-curve-detail","title":"Elastic Supply Curve Detail","text":"

    Maximum capacity is fixed, but the supply curve varies with price,

    \\(S:P\u2192Q\\)

    Thus we have different offering quantities of options.

    The supply function is designed to be initially concave, then constant at maximum capacity. This approach, theoretically supported by Licalzi (2005)5, aims to mitigate dramatic underpricing.

    "},{"location":"#footnotes","title":"Footnotes","text":"
    1. Previously this was called 'above'\u00a0\u21a9

    2. Previously this was called 'below'\u00a0\u21a9

    3. Exclusivity is only needed in v1, v2 eliminates this requirement.\u00a0\u21a9

    4. Robert Wilson, 1979. \"Auctions of Shares,\" The Quarterly Journal of Economics, President and Fellows of Harvard College, vol. 93(4), pages 675-689.\u00a0\u21a9

    5. Marco LiCalzi, 2005. \"Tilting the supply schedule to enhance competition in uniform-price auctions\" European Economic Review, Volume 49, Issue 1, 2005, Pages 227-250\u00a0\u21a9

    "},{"location":"Clients/","title":"Validators","text":""},{"location":"Clients/#requirements","title":"Requirements","text":"
    • Operate as a self-reporting node operator
    • Operating using MEV-Boost
    "},{"location":"Clients/#protections","title":"Protections","text":"

    Node Operators are being provided with a tailored risk management solution that addresses the unique challenges and risks of participating through the relay.

    Read more at Relay: Captive Insurance

    This is a block diagram of all the parts of the system and will be updated as needed.

    graph LR\nsubgraph \"Consensus Node\"\n  engine[Engine API Client]\n  BAPI[Beacon API]\n  TICK[Slot processor]\n  blk_db[Block DB]\n  BS_db[Beacon State DB]\n  brod[Broadway]\n  FCTree[Fork choice store - Genserver]\n  BAPI -->|Beacon state queries| BS_db\n  brod -->|Save blocks| blk_db\n  brod -->|Blocks and attestations| FCTree\n  TICK -->|New ticks| FCTree\n  BAPI --> engine\n  BAPI --> |head/slot requests| FCTree\n  brod --> |Save new states|BS_db\nend\nGOS[Gossip Protocols]\nexec[Execution Client]\nVALIDATOR[Validator]\nengine <--> |payload validation, execution| exec\nGOS -->|blocks, attestations| brod\nVALIDATOR --> BAPI
    "},{"location":"Clients/#networking","title":"Networking","text":"

    The main entry for new events is the gossip protocol, which is how consensus nodes communicates with other consensus nodes.

    1. Discovery: our node has a series of known bootnodes hardcoded. We request a list of the nodes they know about and add them to our list. We save them locally and now can use those too to request new nodes.

    2. Message propagation. When a proposer sends a new block, or validators attest for a new block, they send those to other known nodes. Those, in turn, propagate the messages sent to other nodes. This process is repeated until, ideally, the whole network receives the messages.

    "},{"location":"Clients/#gossipsub","title":"Gossipsub","text":"

    One of the main communication protocols is GossipSub. This allows us to tell peers which topics we're interested in and receive events for them. The main external events we react to are blocks and attestations.

    "},{"location":"Clients/#receiving-an-attestation","title":"Receiving an attestation","text":"
    sequenceDiagram\n    participant prod as Topic Producer (GenStage)\n    participant proc as Topic Processor (Broadway)\n    participant FC as Fork-choice store\n\n    prod ->> proc: Produce demand\n    proc ->> proc: Decompress and deserialize message\n    proc ->>+ proc: on_attestation()\n    proc ->> FC: request latest message by the same validator\n    FC -->> proc: return\n    proc ->> proc: Validate attestation\n    proc ->>- FC: Update fork-choice store weights

    When receiving an attestation, it's processed by the on_attestation callback. We just validate it and send it to the fork choice store to update its weights and target checkpoints. The attestation is only processed if this attestation is the latest message by that validator. If there's a newer one, it should be discarded.

    The most relevant piece of the spec here is the get_weight function, which is the core of the fork-choice algorithm. In the specs, this function is called on demand, when calling get_head, works with the store's values, and recalculates them each time.

    Important

    It is a requirement that the validator cache the weights and the head root each time it adds a block or attestation: so it won't need to do the same calculations again. Additionally, it should save the latest messages in persistent storage as well so that if the node crashes it can recover the tree weights.

    "},{"location":"Clients/#receiving-a-block","title":"Receiving a block","text":"
    sequenceDiagram\n    participant prod as Topic Producer (GenStage)\n    participant proc as Topic Processor (Broadway)\n    participant block as Block DB\n    participant state as Beacon States DB\n    participant FC as Fork-choice store\n    participant exec as Execution Client\n\n    prod ->> proc: Produce demand\n    proc ->> proc: Decompress and deserialize message\n    proc ->>+ proc: on_block(block)\n    proc ->> exec: Validate execution payload\n    exec -->> proc: ok\n    proc ->> FC: request validation metadata\n    FC -->> proc: return\n    proc ->> proc: Validate block\n    proc ->> block: Save new block\n    proc ->> proc: Calculate state transition\n    proc ->> state: Save new beacon state metadata\n    proc ->> FC: Add a new block to the tree and update weights\n    loop\n        proc ->>- proc: process_operations\n    end\n    loop\n        proc ->> proc: on_attestation\n    end

    Receiving a block is more complex:

    • The block itself needs to be stored.
    • The state transition needs to be applied, a new beacon state calculated, and stored separately.
    • A new node needs to be added to the block tree aside from updating weights.
    • on_attestation needs to be called for each attestation.

    Also, there's a more complex case: we can only include a block in the fork tree if we know of its parents and their connection with our current finalized checkpoint. If we receive a disconnected node, we'll need to use Request-Response to ask peers for the missing blocks.

    "},{"location":"Clients/accounting/","title":"Accounting and Rewards","text":""},{"location":"Clients/accounting/#payment-processing-and-finalization","title":"Payment processing and finalization","text":"

    Builder payments are processed during the epoch finalization process (a two-epoch lag).

    • The builder ExecutionPayloadHeader is part of the canonical chain (i.e., the CL block for that slot is not missing). This includes two cases: The corresponding ExecutionPayload MUST also part of the canonical chain.

    • The builder ExecutionPayloadHeader is part of the canonical chain even if the corresponding ExecutionPayload is not.

    This means that there is consensus that the builder was not on time by virtue of having an empty block. However, this may be intentional in the mutli-block auction scenario so is subject to change

    "},{"location":"Clients/accounting/#proposer-equivocation","title":"Proposer equivocation","text":"

    There is no evidence of proposer equivocation.

    • A builder who sees an equivocation can get the validator slashed. Any slashed validator will not receive the unconditional builder payment.
    "},{"location":"Clients/accounting/#builder-payment-methods","title":"Builder Payment Methods","text":"

    Builder payment patterns in the context of MEV payments to the validators

    Read more at Learning: Payment Methods

    "},{"location":"Clients/accounting/#indirect-address-payment-iap-method","title":"Indirect Address Payment (IAP) Method","text":"

    This method involves the builder using a different address to pay the proposer through an end-of-block transaction. In this pattern, the builder first sets its own address to receive the block\u2019s transaction fees and then employs a different address to remunerate the proposer in the end-of-block transaction.

    "},{"location":"Clients/accounting/#intermediate-transfer-payment-itp-method","title":"Intermediate Transfer Payment (ITP) Method","text":"

    In this method, the builder pays the proposer through an end-of-block transaction, initially transferring the amount to an alternate address, which then initiates an internal transaction to send the funds to the proposer. This involves a two-step process where the payment is first sent to an intermediary address (like a smart contract) before reaching the proposer.

    "},{"location":"Clients/accounting/#proposer-payments-value-ppv","title":"Proposer Payments Value (PPV)","text":"

    The feeReceipent address is configured in the consensus layer client and is provided by the NO at the time of the block proposal. Because the eth1 address that is provided for the feeReceipent is under the complete control of the NO, there is an opportunity for a NO to steal all the PPV for themselves.

    "},{"location":"Clients/clients/","title":"Clients","text":""},{"location":"Clients/clients/#ethereum-network","title":"Ethereum Network","text":"

    What is the Etheruem network?1

    • A user of the network sends a transaction (e.g. an ETH transfer) to the network.
    • The network validates the transaction.
    • The network includes the transaction in a block.
    • The network includes the block in the chain, so the new state includes the transaction sent by the user. Any user can request this information and the change will be reflected.

    The problem here is: what does sending something to the network mean?

    "},{"location":"Clients/clients/#execution-and-consensus-clients","title":"Execution and Consensus clients","text":"

    A full node is split into two clients:

    • The execution client knows how to represent the EVM state and apply state changes (transactions) to generate new states. It represents the state machine.
    • The consensus client knows very little about the state machine, but knows how to choose between different worldviews and agree with other nodes. It enables the execution client to apply the correct state transitions.
    graph BT\nsubgraph consensus[Consensus Client]\n    bstate[Beacon State]\n    Validator\nend\n\nsubgraph \"Execution Client\"\n    mempool\n    state\nend\n\n\nex_gossip[Execution Gossip Protocol]\ncon_gossip[Consensus Gossip Protocol]\nex_gossip<-->|Transactions|mempool\n\ncon_gossip -->|Proposed blocks \\n attestations| bstate\nValidator -->|Propose a block|con_gossip\nmempool-->|Get a block to build a proposal|Validator\nbstate-->|Apply a block|state\nuser -->|Sends new transactions| mempool\nstate -->|State queries| user\n\nlinkStyle 2 stroke:#ff0000,stroke-width:2px;\nlinkStyle 3 stroke:#ff0000,stroke-width:2px;

    You might notice there's a section called \"validator\" in there, with red arrows. Your node is considered a validator if it has 32 ETH staked in the validator contract, which makes it capable of proposing new blocks and attesting to other proposals. That is: actively participating in the protocol and getting rewards for it.

    If you're not a validator you can still participate though! The block diagram is the same, without the red lines (and you won't receive rewards for it). You can still send transactions to your local node, propagate them to others, and receive updates.

    "},{"location":"Clients/clients/#lifecycle-of-a-transaction","title":"Lifecycle of a transaction","text":"

    Here's the full sequence from the perspective of a non-validator node:

    1. A user builds, signs, and sends a transaction to their execution client's JSON-RPC API. This is usually done with a wrapper library like ethers, hardhat, or foundry.

    2. The execution client receives the transaction and:

      1. Validates it (checks the user has enough ETH, the signature matches, etc).

      2. Adds it to its local mempool. The mempool is a local pool of transactions that are not yet executed.

      3. Broadcasts it through the execution gossip layer, to other execution nodes. Other execution nodes include it in their mempools.

    3. A validator node is selected as a block proposer. As a proposer:

      1. Their execution client bundles many transactions from its mempool into a block.

      2. All transactions in the bundle are executed locally and state change is calculated.

      3. Their consensus client gets this block (or as consensus calls it, \"execution payload\") and adds consensus layer information, like attestations, slashings, rewards, penalties, etc. The execution payload + consensus metadata forms a \"beacon block\".

      4. The beacon block is signed and sent over the consensus gossip layer to other nodes.
    4. A committee of validators validates that block and sends signed attestations for it over the consensus gossip protocol too.

    5. All nodes receive both the new proposed block and attestations. Then they:

      1. Include the new block in their local fork tree if it's valid.
      2. Save the attestations and update the weights of the blocks on the tree.
      3. Apply fork choice to recalculate, if necessary, what blocks are included in the canonical chain.
      4. The changes + the new block are propagated to the execution node so transactions are applied and the state is changed and up to date.

    The Ethereum network is not a networked database: It's a series of tubes. And if you don't understand, those tubes can be filled and if they are filled, when you put your message in, it gets in line and it's going to be delayed by anyone that puts into that tube enormous amounts of material, enormous amounts of material. Ted Stevens (2024) Wikipedia. Available at: https://en.wikipedia.org/wiki/Ted_Stevens (Accessed: 03 April 2024).

    "},{"location":"Clients/configuration/","title":"Configuration","text":""},{"location":"Clients/configuration/#mandatory-values-for-validator-and-beacon-clients","title":"Mandatory Values for Validator and Beacon clients","text":"

    LocalBlockValueBoost is the value boost for local block construction. This is used to prioritize local block construction over relay/builder block construction.

    LocalBlockValueBoost = 0\n

    The equation is as follows:

    "},{"location":"Clients/configuration/#prysm","title":"Prysm1","text":"\\[ builder_bid_value _ 100 > local_block_value _ (local-block-value-boost + 100) \\]"},{"location":"Clients/configuration/#teku","title":"Teku2","text":"\\[ exec_node_payload_value >= builder_boost_factor \\* (builder_payload_value // 100) \\]"},{"location":"Clients/configuration/#example-prysm","title":"Example: Prysm","text":"
    EthBurnAddressHex                string           // EthBurnAddressHex is the constant eth address written in hex format to burn fees in that network. the default is 0x0\nDefaultBuilderGasLimit           uint64           // DefaultBuilderGasLimit is the default used to set the gaslimit for the Builder APIs, typically at around 30M wei.\n\n// Mev-boost circuit breaker\nMaxBuilderConsecutiveMissedSlots primitives.Slot // MaxBuilderConsecutiveMissedSlots defines the number of consecutive skip slot to fallback from using relay/builder to local execution engine for block construction.\nMaxBuilderEpochMissedSlots       primitives.Slot // MaxBuilderEpochMissedSlots is defines the number of total skip slot (per epoch rolling windows) to fallback from using relay/builder to local execution engine for block construction.\nLocalBlockValueBoost             uint64          // LocalBlockValueBoost is the value boost for local block construction. This is used to prioritize local block construction over relay/builder block construction.\n\n// Execution engine timeout value\n
    "},{"location":"Clients/configuration/#example-teku","title":"Example: Teku","text":"
      private void logPayloadValueComparisonDetails(\n      final boolean localPayloadValueWon,\n      final UInt256 builderBidValue,\n      final UInt256 localPayloadValue,\n      final boolean isRequestedBuilderBoostFactor,\n      final UInt64 actualBuilderBoostFactor) {\n    final String actualComparisonFactorString;\n    final String comparisonFactorSource = isRequestedBuilderBoostFactor ? \"VC\" : \"BN\";\n\n    if (actualBuilderBoostFactor.equals(BUILDER_BOOST_FACTOR_MAX_PROFIT)) {\n      actualComparisonFactorString = \"MAX_PROFIT\";\n    } else if (actualBuilderBoostFactor.equals(BUILDER_BOOST_FACTOR_PREFER_EXECUTION)) {\n      actualComparisonFactorString = \"PREFER_EXECUTION\";\n    } else if (actualBuilderBoostFactor.equals(BUILDER_BOOST_FACTOR_PREFER_BUILDER)) {\n      actualComparisonFactorString = \"PREFER_BUILDER\";\n    } else {\n      actualComparisonFactorString = actualBuilderBoostFactor + \"%\";\n    }\n
    "},{"location":"Clients/configuration/#footnotes","title":"Footnotes","text":"
    1. Prysm\u00a0\u21a9

    2. Teku\u00a0\u21a9

    "},{"location":"Clients/relay/","title":"Relay","text":""},{"location":"Clients/relay/#relay","title":"Relay","text":"

    proposer payout: empty block, 0; non empty block, non-negative value < 0

    Once a proposer calls submitBlindedBlock to a relay (with a signed header), it depends on the relay to release the block to be able to propose anything (no fallback to a local block is possible at that point due to possible slashing).

    There's several relay error scenarios:

    1. payload withholding (relay doesn't release the payload and the proposer needs to forfeit the slot)

    2. incorrect payload a. incorrect value (the final amount paid by the builder to the proposer was different to the amount claimed in the BuilderBid) b. invalid block (invalid data / fields)

    "},{"location":"Clients/requirements/","title":"Requirements","text":"","tags":["Forward Contracts","gas auction","mechanism design"]},{"location":"Clients/requirements/#required-validator-endpoints","title":"Required Validator Endpoints","text":"
    • /eth/v1/validator/attestation_data
    • /eth/v1/beacon/headers/{block_id}
    • /eth/v1/beacon/states/{state_id}/finality_checkpoints
    • /eth/v1/beacon/states/{state_id}/fork
    • /eth/v1/beacon/headers
    • /eth/v1/validator/liveness
    • /eth/v1/node/syncing
    • /eth/v1/config/deposit_contract
    • /eth/v1/beacon/states/{state_id}/committees
    • /eth/v1/validator/duties/attester/{epoch}
    • /eth/v1/validator/duties/proposer/{epoch}
    • /eth/v1/validator/duties/sync/{epoch}
    • /eth/v1/beacon/genesis
    • /eth/v1/validator/prepare_beacon_proposer
    • /eth/v1/beacon/pool/attestations
    • /eth/v1/beacon/blinded_blocks
    • /eth/v1/beacon/blocks
    • /eth/v1/beacon/pool/voluntary_exits
    • /eth/v1/validator/register_validator
    • /eth/v1/beacon/states/{state_id}/validators
    • /eth/v1/validator/aggregate_attestation
    • /eth/v1/validator/aggregate_and_proofs
    • /eth/v1/validator/contribution_and_proofs
    • /eth/v1/validator/beacon_committee_subscriptions
    • /eth/v1/beacon/pool/sync_committees
    • /eth/v1/beacon/blocks/{block_id}/root
    • /eth/v1/validator/sync_committee_contribution
    ","tags":["Forward Contracts","gas auction","mechanism design"]},{"location":"Clients/validators/","title":"Validators","text":"

    This is a block diagram of all the parts of the system and will be updated as needed.

    graph LR\nsubgraph \"Consensus Node\"\n  engine[Engine API Client]\n  BAPI[Beacon API]\n  TICK[Slot processor]\n  blk_db[Block DB]\n  BS_db[Beacon State DB]\n  brod[Broadway]\n  FCTree[Fork choice store - Genserver]\n  BAPI -->|Beacon state queries| BS_db\n  brod -->|Save blocks| blk_db\n  brod -->|Blocks and attestations| FCTree\n  TICK -->|New ticks| FCTree\n  BAPI --> engine\n  BAPI --> |head/slot requests| FCTree\n  brod --> |Save new states|BS_db\nend\nGOS[Gossip Protocols]\nexec[Execution Client]\nVALIDATOR[Validator]\nengine <--> |payload validation, execution| exec\nGOS -->|blocks, attestations| brod\nVALIDATOR --> BAPI
    "},{"location":"Clients/validators/#networking","title":"Networking","text":"

    The main entry for new events is the gossip protocol, which is how consensus nodes communicates with other consensus nodes.

    1. Discovery: our node has a series of known bootnodes hardcoded. We request a list of the nodes they know about and add them to our list. We save them locally and now can use those too to request new nodes.

    2. Message propagation. When a proposer sends a new block, or validators attest for a new block, they send those to other known nodes. Those, in turn, propagate the messages sent to other nodes. This process is repeated until, ideally, the whole network receives the messages.

    "},{"location":"Clients/validators/#gossipsub","title":"Gossipsub","text":"

    One of the main communication protocols is GossipSub. This allows us to tell peers which topics we're interested in and receive events for them. The main external events we react to are blocks and attestations.

    "},{"location":"Clients/validators/#receiving-an-attestation","title":"Receiving an attestation","text":"
    sequenceDiagram\n    participant prod as Topic Producer (GenStage)\n    participant proc as Topic Processor (Broadway)\n    participant FC as Fork-choice store\n\n    prod ->> proc: Produce demand\n    proc ->> proc: Decompress and deserialize message\n    proc ->>+ proc: on_attestation()\n    proc ->> FC: request latest message by the same validator\n    FC -->> proc: return\n    proc ->> proc: Validate attestation\n    proc ->>- FC: Update fork-choice store weights

    When receiving an attestation, it's processed by the on_attestation callback. We just validate it and send it to the fork choice store to update its weights and target checkpoints. The attestation is only processed if this attestation is the latest message by that validator. If there's a newer one, it should be discarded.

    The most relevant piece of the spec here is the get_weight function, which is the core of the fork-choice algorithm. In the specs, this function is called on demand, when calling get_head, works with the store's values, and recalculates them each time.

    Important

    It is a requirement that the validator cache the weights and the head root each time it adds a block or attestation: so it won't need to do the same calculations again. Additionally, it should save the latest messages in persistent storage as well so that if the node crashes it can recover the tree weights.

    "},{"location":"Clients/validators/#receiving-a-block","title":"Receiving a block","text":"
    sequenceDiagram\n    participant prod as Topic Producer (GenStage)\n    participant proc as Topic Processor (Broadway)\n    participant block as Block DB\n    participant state as Beacon States DB\n    participant FC as Fork-choice store\n    participant exec as Execution Client\n\n    prod ->> proc: Produce demand\n    proc ->> proc: Decompress and deserialize message\n    proc ->>+ proc: on_block(block)\n    proc ->> exec: Validate execution payload\n    exec -->> proc: ok\n    proc ->> FC: request validation metadata\n    FC -->> proc: return\n    proc ->> proc: Validate block\n    proc ->> block: Save new block\n    proc ->> proc: Calculate state transition\n    proc ->> state: Save new beacon state metadata\n    proc ->> FC: Add a new block to the tree and update weights\n    loop\n        proc ->>- proc: process_operations\n    end\n    loop\n        proc ->> proc: on_attestation\n    end

    Receiving a block is more complex:

    • The block itself needs to be stored.
    • The state transition needs to be applied, a new beacon state calculated, and stored separately.
    • A new node needs to be added to the block tree aside from updating weights.
    • on_attestation needs to be called for each attestation.

    Also, there's a more complex case: we can only include a block in the fork tree if we know of its parents and their connection with our current finalized checkpoint. If we receive a disconnected node, we'll need to use Request-Response to ask peers for the missing blocks.

    "},{"location":"Developers/","title":"Developer overview","text":""},{"location":"Developers/#general","title":"General","text":"
    • SDK

    • Mainnet

    • Holesky Testnet

    "},{"location":"Developers/#auction-contracts-v10","title":"Auction Contracts v1.0","text":"
    • Interface
    "},{"location":"Developers/#builder-and-searcher-specific","title":"Builder and Searcher specific","text":"

    Requirements

    Payment Methods

    "},{"location":"Developers/builders/","title":"Builder overview","text":""},{"location":"Developers/builders/#block-properties","title":"Block Properties","text":"

    Builders need the following data:

    Field Where it comes from Notes feeRecipient validator (builder_registerValidator) Address to receive fees from the block. gasLimit validator (builder_registerValidator) preferred gas limit of validator timestamp relay (BN) value for the timestamp field of the new payload prevRandao relay (BN) from previous slot extraData builder graffiti from builder, not proposer"},{"location":"Developers/builders/#builder-api","title":"Builder Api","text":"

    All URIs are relative to http://localhost:18550

    Method HTTP request Description getValidators GET /relay/v1/builder/validators Get a list of validator registrations for validators scheduled to propose in the current and next epoch. submitBlock POST /relay/v1/builder/blocks Submit a new block to the relay.

    "},{"location":"Developers/builders/#getvalidators","title":"getValidators","text":"

    List getValidators()

    Get a list of validator registrations for validators scheduled to propose in the current and next epoch.

    • Used by builders to know when to submit bids for an upcoming proposal.
    • Returns an array of validator registrations for the current and next epoch.
    • Each entry includes a slot and the validator with assigned duty.
    • Slots without a registered validator are omitted.
    "},{"location":"Developers/builders/#parameters","title":"Parameters","text":"

    This endpoint does not need any parameter.

    "},{"location":"Developers/builders/#return-type","title":"Return type","text":"

    List

    Name Type Description Notes fee_recipient String Address to receive fees from the block. [default to null] gas_limit String Preferred gas limit of validator. [default to null] timestamp String Unix timestamp of registration. [default to null] pubkey String BLS public key of validator. [default to null]"},{"location":"Developers/builders/#authorization","title":"Authorization","text":"

    No authorization required

    "},{"location":"Developers/builders/#http-request-headers","title":"HTTP request headers","text":"
    • Content-Type: Not defined
    • Accept: application/json
    "},{"location":"Developers/builders/#submitblock","title":"submitBlock","text":"

    submitBlock(submitBlock_request, cancellations)

    Submit a new block to the relay.

    • Blocks can be submitted as JSON or SSZ, and optionally GZIP encoded. To be clear, there are four options: JSON, JSON+GZIP, SSZ, SSZ+GZIP. If JSON, the content type should be `application/json`. If SSZ, the content type should be `application/octet-stream`.
    • To enable GZIP compression for the request body, the HTTP content encoding should be `gzip`. Compression is optional.
    • The relay will simulate the block to verify properties and proposer payment in the payment transaction from builder to proposer `fee_recipient` at the end of block.
    • For accountability, builder signature is over the SSZ encoded `message`.
    • The `message`, which does not include the transactions, will be made public via the data API, allowing anyone to verify the builder signature.
    • Any new submission by a builder will overwrite a previous one by the same `builder_pubkey`, even if it is less profitable.
    "},{"location":"Developers/builders/#parameters_1","title":"Parameters","text":"Name Type Description Notes submitBlock_request submitBlock_request A signed bid with an execution payload. cancellations String If set to 1, opt into bid cancellations. [optional] [default to null]"},{"location":"Developers/builders/#return-type_1","title":"Return type","text":"

    null (empty response body)

    "},{"location":"Developers/builders/#authorization_1","title":"Authorization","text":"

    No authorization required

    "},{"location":"Developers/builders/#http-request-headers_1","title":"HTTP request headers","text":"
    • Content-Type: application/json, application/octet-stream
    • Accept: application/json
    "},{"location":"Developers/builders/#submitblock_request","title":"submitBlock_request","text":""},{"location":"Developers/builders/#properties","title":"Properties","text":"Name Type Description Notes slot String [optional] [default to null] parent_hash String [optional] [default to null] block_hash String [optional] [default to null] builder_pubkey String The validator's BLS public key, uniquely identifying them. 48-bytes, hex encoded with 0x prefix, case insensitive. [optional] [default to null] proposer_pubkey String The validator's BLS public key, uniquely identifying them. 48-bytes, hex encoded with 0x prefix, case insensitive. [optional] [default to null] proposer_fee_recipient String An address on the execution (Ethereum 1) network. [optional] [default to null] gas_limit String [optional] [default to null] gas_used String [optional] [default to null] value String [optional] [default to null]"},{"location":"Developers/interface/","title":"Summary Interfaces","text":"
    • Auctioneer
    • Settlement
    • Bidder
    "},{"location":"Developers/interface/#auctioneer-interface","title":"Auctioneer Interface","text":"

    Git Source

    Inherits: ERC6909, Ownable2Step

    Implements an auction mechanism for selling block space.

    "},{"location":"Developers/interface/#structs","title":"Structs","text":""},{"location":"Developers/interface/#auction","title":"Auction","text":"
    struct Auction {\n    uint120 itemsForSale;\n    bool isOpen;\n    bool isSettled;\n    bool isPaidOut;\n    bool isRefunded;\n    mapping(address => BidderInfo) biddersInfo;\n}\n
    "},{"location":"Developers/interface/#bidderinfo","title":"BidderInfo","text":"
    struct BidderInfo {\n    uint120 itemsBought;\n    uint128 amountOwed;\n}\n
    "},{"location":"Developers/interface/#state-variables","title":"State Variables","text":""},{"location":"Developers/interface/#maxbidder","title":"maxBidder","text":"
    uint8 public maxBidder;\n
    "},{"location":"Developers/interface/#weth9","title":"WETH9","text":"
    WETH public immutable WETH9;\n
    "},{"location":"Developers/interface/#accountant","title":"accountant","text":"
    address public accountant;\n
    "},{"location":"Developers/interface/#maxbids","title":"maxBids","text":"
    uint256 public maxBids = 50;\n
    "},{"location":"Developers/interface/#mingasamount","title":"minGasAmount","text":"
    uint120 public minGasAmount = 20000;\n
    "},{"location":"Developers/interface/#operator","title":"operator","text":"
    address public operator;\n
    "},{"location":"Developers/interface/#idmap","title":"IdMap","text":"
    mapping(address bidder => uint8 id) public IdMap;\n
    "},{"location":"Developers/interface/#biddermap","title":"bidderMap","text":"
    mapping(uint8 id => address bidder) public bidderMap;\n
    "},{"location":"Developers/interface/#auctions","title":"auctions","text":"
    mapping(uint256 slot => Auction) public auctions;\n
    "},{"location":"Developers/interface/#slotscount","title":"slotsCount","text":"
    uint256 public slotsCount;\n
    "},{"location":"Developers/interface/#slotsauctioned","title":"slotsAuctioned","text":"
    mapping(uint256 index => uint256 slot) public slotsAuctioned;\n
    "},{"location":"Developers/interface/#bidcount","title":"bidCount","text":"
    mapping(uint256 slot => uint256 count) public bidCount;\n
    "},{"location":"Developers/interface/#functions","title":"Functions","text":""},{"location":"Developers/interface/#bid","title":"bid","text":"

    Bid function for bidders to submit manual bids.

    function bid(uint256 slot, uint256[] memory packedBids) external;\n

    Parameters

    Name Type Description slot uint256 The auction slot. packedBids uint256[] Array of packed bids"},{"location":"Developers/interface/#getbidderinfo","title":"getBidderInfo","text":"

    Retrieve information about a bidder after auction settlement.

    function getBidderInfo(uint256 slot, address bidder) external view returns (uint120 itemsBought, uint128 amountOwed);\n

    Parameters

    Name Type Description slot uint256 The slot identifier of the auction. bidder address The address of the bidder for whom information is requested.

    Returns

    Name Type Description itemsBought uint120 The number of items bought by the bidder in the specified auction. amountOwed uint128 The amount owed by the bidder for the items bought in the specified auction. Requirements: - The auction must have been settled. - The provided bidder address must be valid and have participated in the auction."},{"location":"Developers/interface/#packbid","title":"packBid","text":"

    Packed Bid details into a uint256 for submission.

    function packBid(uint128 bidPrice, uint120 itemsToBuy, uint8 bidderId) external pure returns (uint256 packedBid);\n

    Parameters

    Name Type Description bidPrice uint128 Price per item. itemsToBuy uint120 Items to buy in the auction. bidderId uint8 Id for bidder

    Returns

    Name Type Description packedBid uint256 for auction submission"},{"location":"Developers/interface/#calcaveragebid","title":"calcAverageBid","text":"

    Calculate average bid price for the last n auctions

    function calcAverageBid(uint256 numAuctions) external view returns (uint128 avBidPrice);\n

    Parameters

    Name Type Description numAuctions uint256 Number of auctions to average for

    Returns

    Name Type Description avBidPrice uint128 for last n auctions"},{"location":"Developers/interface/#events","title":"Events","text":""},{"location":"Developers/interface/#auctionsettled","title":"AuctionSettled","text":"
    event AuctionSettled(uint256 indexed slot);\n
    "},{"location":"Developers/interface/#bidderadded","title":"BidderAdded","text":"
    event BidderAdded(address indexed bidder, uint8 indexed bidderId);\n
    "},{"location":"Developers/interface/#bidderremoved","title":"BidderRemoved","text":"
    event BidderRemoved(address indexed bidder, uint8 indexed bidderId);\n
    "},{"location":"Developers/interface/#auctionopened","title":"AuctionOpened","text":"
    event AuctionOpened(uint256 indexed slot, uint120 itemsForSale);\n
    "},{"location":"Developers/interface/#auctionpaidout","title":"AuctionPaidOut","text":"
    event AuctionPaidOut(uint256 indexed slot);\n
    "},{"location":"Developers/interface/#auctionrefund","title":"AuctionRefund","text":"
    event AuctionRefund(uint256 indexed slot);\n
    "},{"location":"Developers/interface/#errors","title":"Errors","text":""},{"location":"Developers/interface/#invalidid","title":"InvalidId","text":"
    error InvalidId();\n
    "},{"location":"Developers/interface/#unauthorized","title":"Unauthorized","text":"
    error Unauthorized();\n
    "},{"location":"Developers/interface/#invalidbiditems","title":"InvalidBidItems","text":"
    error InvalidBidItems();\n
    "},{"location":"Developers/interface/#insufficientfunds","title":"InsufficientFunds","text":"
    error InsufficientFunds();\n
    "},{"location":"Developers/interface/#auctionnotopen","title":"AuctionNotOpen","text":"
    error AuctionNotOpen(uint256 slot);\n
    "},{"location":"Developers/interface/#auctionnotclosed","title":"AuctionNotClosed","text":"
    error AuctionNotClosed(uint256 slot);\n
    "},{"location":"Developers/interface/#auctionalreadyopen","title":"AuctionAlreadyOpen","text":"
    error AuctionAlreadyOpen(uint256 slot);\n
    "},{"location":"Developers/interface/#auctionalreadysettled","title":"AuctionAlreadySettled","text":"
    error AuctionAlreadySettled(uint256 slot);\n
    "},{"location":"Developers/interface/#biddernotregistered","title":"BidderNotRegistered","text":"
    error BidderNotRegistered(address bidder);\n
    "},{"location":"Developers/interface/#bidderalreadyexists","title":"BidderAlreadyExists","text":"
    error BidderAlreadyExists(address bidder);\n
    "},{"location":"Developers/interface/#settlementhouse-interface","title":"SettlementHouse Interface","text":"

    Git Source

    A contract for managing bundles of transactions for a futures token.

    "},{"location":"Developers/interface/#structs_1","title":"Structs","text":""},{"location":"Developers/interface/#bundle","title":"Bundle","text":"
    struct Bundle {\n    address submitter;\n    uint256 amountOfGas;\n    bytes32[] bundleHashes;\n}\n
    "},{"location":"Developers/interface/#state-variables_1","title":"State Variables","text":""},{"location":"Developers/interface/#futurestoken","title":"futuresToken","text":"
    IERC6909 public immutable futuresToken;\n
    "},{"location":"Developers/interface/#functions_1","title":"Functions","text":""},{"location":"Developers/interface/#submitbundle","title":"submitBundle","text":"
    function submitBundle(uint256 slot, uint256 amountOfGas, bytes32[] calldata bundleHashes) external;\n
    "},{"location":"Developers/interface/#bidder-interface","title":"Bidder Interface","text":"

    Git Source

    "},{"location":"Developers/interface/#functions_2","title":"Functions","text":""},{"location":"Developers/interface/#getbid","title":"getBid","text":"

    Get the bid from a bidder for a specific slot and round.

    function getBid(uint256 slot) external view returns (uint256[] memory packedBids);\n

    Parameters

    Name Type Description slot uint256 The auction slot.

    Returns

    Name Type Description packedBids uint256[] Array of bids (in a packed format). uint256(uint128(bidPrice),uint120(itemsToBuy),uint8(bidderId))"},{"location":"Developers/mainnet/","title":"XGA L2 Mainnet","text":"
    • Live auction dashboard
    • L2 Blockchain explorer
    "},{"location":"Developers/mainnet/#node-operators","title":"Node Operators","text":"

    Please coordinate with us to register your validator set with our registry service. We will provide you with the necessary information to get started.

    "},{"location":"Developers/mainnet/#validators","title":"Validators","text":"

    Connecting to the relay without being registered will result in your validator operating correctly so long as MEV Boost is also running.

    "},{"location":"Developers/mainnet/#mainnet-information","title":"Mainnet Information","text":"
    • L2 RPC:

      • Description: L2 Node RPC
      • URL: https://xga-api.securerpc.com/v1
      • Methods: eth_*
      • ChainId: 7890785
      • Limits: 300 req per minute per IP
    • Beta bundle RPC:

      • Description: Beta bundle submission RPC
      • URL: https://mainnet-auction.securerpc.com/
      • Method: mev_sendBetaBundle
      • Parameters:
        • txs: List of txs as bundle e.g. [0x2323...,]
        • slot: slot number e.g. \"11282389\"
      • ChainId: 1
    "},{"location":"Developers/mainnet/#builders-and-searchers","title":"Builders and searchers","text":"

    Aquire some Holesky Testnet ETH through a faucet in the resources listed below. If you are unable to secure enough, please reach out to us.

    "},{"location":"Developers/mainnet/#contracts","title":"Contracts","text":"

    L2 Auctioneer: 0x86Bc75A43704E38f0FD94BdA423C50071fE17c99

    L2 SettlementHouse: 0x80C5FfF824d14c87C799D6F90b7D8e0a715bd33C

    L1StandardBridgeProxy: 0x490B959870889D5FA0B329431683B8B3e850DD95

    To monetize yourself on L2, send some ETH on L1 to 0x490B959870889D5FA0B329431683B8B3e850DD95

    "},{"location":"Developers/mainnet/#resources","title":"Resources","text":"
    • Block Explorers
      • etherscan.io
      • beaconcha.in
    "},{"location":"Developers/payment-methods/","title":"Builder and Searcher payment methods","text":"

    To further classify the payment methods, we can consider the broader context of Ethereum block building, including both traditional and MEV-Auction scenarios as it relates to payment mechanisms.

    This classification covers a range of payment methods from the simplest direct payments to more complex arrangements involving smart contracts and off-chain agreements.

    1. Direct Payment Method

    2. Description: The most straightforward method where the block proposer (validator) receives the transaction fees directly from the transactions included in the block.

    3. Use Case: Commonly used in standard Ethereum block building.

    4. Coinbase Transfer Payment Method

    5. Description: In this method, the transaction fees and MEV rewards are transferred directly to the block proposer's address via the coinbase transaction.

    6. Use Case: Utilized in both traditional and MEV-Auction scenarios.

    7. Indirect Address Payment (IAP) Method

    8. Description: The builder uses a different address to pay the proposer through an end-of-block transaction, separate from the address receiving the block\u2019s transaction fees.

    9. Use Case: Specific to MEV-Auction, where builders and proposers are distinct entities.

    10. Intermediate Transfer Payment (ITP) Methods

    11. Description: Involves a two-step process where the builder first transfers the payment to an intermediary address, which then sends it to the proposer.

    12. Use Case: Also specific to MEV-Auction, particularly when involving smart contracts or third-party addresses.

    13. Smart Contract-Based Payment Method

    14. Description: Payments are handled through a smart contract, which can programmatically distribute rewards based on predefined rules.

    15. Use Case: Useful in decentralized block building scenarios or when complex payment distributions are required.

    16. Off-Chain Payment Method

    17. Description: Payment occurs outside the Ethereum blockchain, possibly through other cryptocurrencies or traditional banking systems.

    18. Use Case: Might be used in private agreements between parties involved in block building.
    ","tags":["primary market","validators","builders","searchers","payment"]},{"location":"Developers/payment-methods/#builder-payment-methods","title":"Builder Payment Methods","text":"

    Builder payment patterns in the context of MEV payments to the validators

    ","tags":["primary market","validators","builders","searchers","payment"]},{"location":"Developers/payment-methods/#indirect-address-payment-iap-method","title":"Indirect Address Payment (IAP) Method","text":"

    This method involves the builder using a different address to pay the proposer through an end-of-block transaction. In this pattern, the builder first sets its own address to receive the block\u2019s transaction fees and then employs a different address to remunerate the proposer in the end-of-block transaction.

    ","tags":["primary market","validators","builders","searchers","payment"]},{"location":"Developers/payment-methods/#intermediate-transfer-payment-itp-method","title":"Intermediate Transfer Payment (ITP) Method","text":"

    In this method, the builder pays the proposer through an end-of-block transaction, initially transferring the amount to an alternate address, which then initiates an internal transaction to send the funds to the proposer. This involves a two-step process where the payment is first sent to an intermediary address (like a smart contract) before reaching the proposer.

    ","tags":["primary market","validators","builders","searchers","payment"]},{"location":"Developers/sdk/","title":"Auction SDK","text":"

    XGA auction winners are granted future block space via a token, which is used with submission of transactions for inclusion in the beta block. Budding bidders can register themselves with the protocol to participate in beta block auctions. Thereupon custom implementations will be required to bid and submit transactions. Technical details are provided herein.

    Technical Overview:

    • Bidding:
      • Connect to L2 RPC
      • Bridge eth to L2
      • Understand auction contracts
      • Deploy custom bidding strategy contract
    • Submitting bundles:
      • Beta Bundle RPC
      • Bundle JSON Requests and Responses

    Full working examples are available for:

    • Zero latency open bidder contract
    • Bundle submissions
    "},{"location":"Developers/sdk/#bidding","title":"Bidding","text":""},{"location":"Developers/sdk/#l2-rpc","title":"L2 RPC","text":"
    • L2 RPC:

      • Description: L2 Node RPC
      • URL: https://xga-api.securerpc.com/v1
      • Methods: eth_*
      • ChainId: 7890785
    • L2 RPC (TESTNET):

      • Description: L2 Node RPC (Testnet)
      • URL: https://holesky-api.securerpc.com/l2
      • Methods: eth_*
      • ChainId: 42169
    "},{"location":"Developers/sdk/#l1-bridge","title":"L1 Bridge","text":"

    Fund L2 address by sending ETH to the L1 bridge address.

    "},{"location":"Developers/sdk/#deployed-address","title":"Deployed Address","text":"
    L1_BRIDGE=\"0x490B959870889D5FA0B329431683B8B3e850DD95\"\n
    "},{"location":"Developers/sdk/#deployed-address-testnet","title":"Deployed Address (Testnet)","text":"
    L1_BRIDGE=\"0x3Ae5Ca0B05bE12d4FF9983Ed70D86de9C34e820C\"\n
    "},{"location":"Developers/sdk/#weth","title":"WETH","text":""},{"location":"Developers/sdk/#deployed-address-mainnet-and-testnet","title":"Deployed Address (Mainnet and Testnet)","text":"
    WETH=\"0x4200000000000000000000000000000000000006\"\n
    "},{"location":"Developers/sdk/#auction-contracts","title":"Auction Contracts","text":""},{"location":"Developers/sdk/#deployed-addresses","title":"Deployed Addresses","text":"
    AUCTIONEER=\"0x86Bc75A43704E38f0FD94BdA423C50071fE17c99\"\nSETTLEMENT=\"0x80C5FfF824d14c87C799D6F90b7D8e0a715bd33C\"\n
    "},{"location":"Developers/sdk/#deployed-addresses-testnet","title":"Deployed Addresses (Testnet)","text":"
    AUCTIONEER=\"0xD88e271AD39dAb4DEB0f7f9475d993ed4Bf5029b\"\nSETTLEMENT=\"0x7Ac1A452B59114Fb1E67470720343A2e9AE18297\"\n
    "},{"location":"Developers/sdk/#registering-a-bidder","title":"Registering a bidder","text":"

    Only registered bidders can participate in the auction. Operators can onboard new bidders through the contract.

    To check for bidderId when registered, call IdMap on the contract:

    function IdMap(address bidder) external view returns (uint8 id);\n
    "},{"location":"Developers/sdk/#packing-a-bid","title":"Packing a bid","text":"

    Bids are packed by price, amount, bidderId

        /**\n     * @dev Packed Bid details into a uint256 for submission.\n     *\n     * @param bidPrice Price per item.\n     * @param itemsToBuy Items to buy in the auction.\n     * @param bidderId Id for bidder\n     * @return packedBid for auction submission\n     */\n    function packBid(uint256 bidPrice, uint256 itemsToBuy, uint256 bidderId)\n        external\n        pure\n        returns (uint256 packedBid);\n
    "},{"location":"Developers/sdk/#winning-bid-info","title":"Winning bid info","text":"

    After an auction is closed, bidders can query their bid results:

        /**\n     * @dev Retrieve information about a bidder after auction settlement.\n     *\n     * @param slot The slot identifier of the auction.\n     * @param bidder The address of the bidder for whom information is requested.\n     * @return itemsBought The number of items bought by the bidder in the specified auction.\n     * @return amountOwed The amount owed by the bidder for the items bought in the specified auction.\n     *\n     * Requirements:\n     * - The auction must have been settled.\n     * - The provided `bidder` address must be valid and have participated in the auction.\n     *\n     */\n    function getBidderInfo(uint256 slot, address bidder)\n        external\n        view\n        returns (uint120 itemsBought, uint128 amountOwed);\n
    "},{"location":"Developers/sdk/#bidder-contracts","title":"Bidder Contracts","text":"

    A minimal viable bidder is provided below. A more sophisticated fill or kill open bidder contract is provided.

    /// SPDX-License-Identifier: UPL-1.0\npragma solidity ^0.8.25;\n\nimport {WETH} from \"solmate/tokens/WETH.sol\";\nimport {ERC6909} from \"solmate/tokens/ERC6909.sol\";\n\ninterface SettlementHouse {\n    function submitBundle(uint256 slot, uint256 amount, bytes32[] calldata hashes) external;\n}\n\n/// @title MockBidder\ncontract MockBidder {\n    uint256[] public bids;\n    ERC6909 auctioneer;\n    SettlementHouse house;\n    WETH weth;\n\n    constructor(WETH _weth, address _auctioneer, address settlement) {\n        weth = _weth;\n        auctioneer = ERC6909(_auctioneer);\n        house = SettlementHouse(settlement);\n        weth.approve(_auctioneer, type(uint256).max);\n    }\n\n    function setBids(uint256[] memory newBids) public {\n        bids = newBids;\n    }\n\n    function getBid(uint256) external view returns (uint256[] memory packedBids) {\n        return bids;\n    }\n\n    function submit(uint256 slot, uint256 amount, bytes32[] calldata hashes) external {\n        auctioneer.approve(address(house), slot, amount);\n        house.submitBundle(slot, amount, hashes);\n    }\n}\n
    "},{"location":"Developers/sdk/#submitting-bundles","title":"Submitting bundles","text":""},{"location":"Developers/sdk/#beta-bundle-rpc","title":"Beta Bundle RPC","text":"
    • Beta bundle RPC:

      • Description: Beta bundle submission RPC
      • URL: https://mainnet-auction.securerpc.com/
      • Method: mev_sendBetaBundle
      • Parameters:
        • txs: List of txs as bundle e.g. [0x2323...,]
        • slot: slot number e.g. \"11282389\"
      • ChainId: 1
    • Beta bundle RPC (Testnet):

      • Description: Beta bundle submission RPC
      • URL: https://holesky-api.securerpc.com/v2
      • Method: mev_sendBetaBundle
      • Parameters:
        • txs: List of txs as bundle e.g. [0x2323...,]
        • slot: slot number e.g. \"11282389\"
      • ChainId: 17000
    "},{"location":"Developers/sdk/#bundle-json-requests-and-responses","title":"Bundle JSON Requests and Responses","text":""},{"location":"Developers/sdk/#example-json-request","title":"Example JSON request","text":"
    {\n    \"jsonrpc\": \"2.0\",\n    \"method\": \"mev_sendBetaBundle\",\n    \"params\": [\n      {\n        \"txs\": [0x... ],\n        \"slot\": \"1001\"\n      }\n    ],\n    \"id\": 8\n}\n
    "},{"location":"Developers/sdk/#example-json-response","title":"Example JSON response","text":"
    {\n    \"jsonrpc\": \"2.0\",\n    \"id\": 1,\n    \"method\": \"mev_sendBetaBundle\",\n    \"result\": \"0x79e5cba7876f532218ac35a357209800be2362dd2e3f1e6dc5974698f0d7cee4\",\n}\n
    "},{"location":"Developers/sdk/#bundler-examples","title":"Bundler Examples","text":"
    • Python bundler - employs a deployed bidder contract for continuous automated bidding, while listening for auction close event, then submits the bundle
    "},{"location":"Developers/testnet/","title":"XGA L2 Testnet","text":"
    • Live auction dashboard
    • L2 Blockchain explorer
    "},{"location":"Developers/testnet/#node-operators","title":"Node Operators","text":"

    Please coordinate with us to register your validator set with our registry service. We will provide you with the necessary information to get started.

    "},{"location":"Developers/testnet/#validators","title":"Validators","text":"

    Connecting to the relay without being registered will result in your validator operating correctly so long as MEV Boost is also running.

    "},{"location":"Developers/testnet/#holesky-information","title":"Holesky Information","text":"
    • L2 RPC (TESTNET):

      • Description: L2 Node RPC (Testnet)
      • URL: https://holesky-api.securerpc.com/l2
      • Methods: eth_*
      • ChainId: 42169
    • Beta bundle RPC (Testnet):

      • Description: Beta bundle submission RPC
      • URL: https://holesky-api.securerpc.com/v2
      • Method: mev_sendBetaBundle
      • Parameters:
        • txs: List of txs as bundle e.g. [0x2323...,]
        • slot: slot number e.g. \"11282389\"
      • ChainId: 17000
    "},{"location":"Developers/testnet/#builders-and-searchers","title":"Builders and searchers","text":"

    Aquire some Holesky Testnet ETH through a faucet in the resources listed below. If you are unable to secure enough, please reach out to us.

    "},{"location":"Developers/testnet/#contracts","title":"Contracts","text":"

    L2 Auctioneer: 0xD88e271AD39dAb4DEB0f7f9475d993ed4Bf5029b

    L2 SettlementHouse: 0x7Ac1A452B59114Fb1E67470720343A2e9AE18297

    L1StandardBridgeProxy: 0x3Ae5Ca0B05bE12d4FF9983Ed70D86de9C34e820C

    To monetize yourself on L2, send some ETH on L1 (Holesky) to 0x3Ae5Ca0B05bE12d4FF9983Ed70D86de9C34e820C

    "},{"location":"Developers/testnet/#resources","title":"Resources","text":"
    • Block Explorers
      • holesky.etherscan.io
      • holesky.beaconcha.in
      • dora-holesky.pk910.de
    • Ethstats: ethstats.holesky.ethpandaops.io
    • Faucets:
      • holesky-faucet.pk910.de
      • QuickNode Faucet
      • Chainstack Faucet
      • Automata Holesky Faucet
    "},{"location":"Learning/Forward-Contracts/","title":"Forward Contracts","text":"","tags":["Forward Contracts","gas auction","mechanism design"]},{"location":"Learning/Forward-Contracts/#forward-contracts","title":"Forward Contracts","text":"","tags":["Forward Contracts","gas auction","mechanism design"]},{"location":"Learning/Forward-Contracts/#nature-of-the-forwards-to-be-sold","title":"Nature of the Forwards to be sold","text":"

    The embedded volumetric optionality is primarily intended, at the time that the parties enter into the agreement, contract, or transaction, to address constraint factors that influence demand for transaction inclusion rights (i.e. blockspace). This instrument addresses the potential variability in the supply of available blockspace available for usage by different actors.

    The options refer to slices of the overall gas size of \u03b2-blockspace. We aim to homogenize it, i.e. all slices of gas are equal and interchangeable. This is how the forward contract is exercised.

    The nature of the forwards we are selling under the \u03b2-blockspace market depends on the capacity restriction we impose. Most importantly, do we guarantee enough capacity that the calls get included or not? The problem with guaranteeing a fixed capacity for \u03b2-blockspace is that this means restricting the capacity for \u237a-blockspace. The problem with this is that \u237a-blockspace might be more lucrative for us. In particular, we know that lottery blocks come along that make up a large chunk of the overall remuneration we can achieve at all.

    Figure 1: Tradeoff of \u237a/\u03b2-blockspace

    If we fix \u237a-blockspace, we might be missing a significant amount of value. The tradeoff can be seen in the picture below.

    We make the assumption that top of the block gas space is more valuable. The main assumption is that at some point, the marginal value for a builder owning the whole block (green) goes below the marginal value of a \u03b2-blockspace buyer (typically someone who wants to be just included independently of the order).

    If we had perfect information, we could fix the capacity constraint at exactly the intersection point. But this information is not available. We can only approximate it. The question of lottery blocks can also be seen in the diagram, the question is whether for such a block both curves are shifted in the same way. If not, it would indicate the need to give \u237a-blockspace builders more space relative to \u03b2-blockspace builders.

    ","tags":["Forward Contracts","gas auction","mechanism design"]},{"location":"Learning/Forward-Contracts/#bidder-characteristics","title":"Bidder characteristics","text":"

    Assumption of Intrablock Position

    We operate under the assumption that position does not matter; if it does might affect the design significantly.

    • Bidders are possibly risk-averse: Standard revenue equivalence might go out of the window. Bidders are asymmetric; in particular if there is private orderflow.

    • Bidders valuations are not clear: If they draw from a public mempool or if there are global conditions affecting value of block space, their valuations will be interdependent. - There is also the danger of a further coordination issue; this might favor a winner-takes-all solution

    ","tags":["Forward Contracts","gas auction","mechanism design"]},{"location":"Learning/Forward-Contracts/#relation-to-the-secondary-market","title":"Relation to the secondary market","text":"

    Traditionally we would assume that a well-designed auction does not require a secondary market. If the result of the auction is in the core, no change in the allocation makes sense. This is different here as information comes in overtime. - Base fee - Transactions updates for \u237a-blockspace bidders We operate under the assumption that position does not matter; if it does might affect the design significantly.

    New bidders are active on the secondary market. The secondary market therefore is not just a reallocation of the primary auction but includes information updates.

    Secondary Market Effects

    This is in contrast to most work on auctions with resale (re: secondary) markets. The secondary market changes the rationale for bidding in the primary auction

    ","tags":["Forward Contracts","gas auction","mechanism design"]},{"location":"Learning/aup_auction/","title":"Augmented Uniform Price Auction","text":"","tags":["primary market","price auction","auction format","gas auction","mechanism design"]},{"location":"Learning/aup_auction/#specification-for-primary-market","title":"Specification for Primary Market","text":"

    We are augmenting the standard uniform price auction format with two features:

    1. Instead of providing a perfectly inelastic supply (also known as a fixed amount that we auction off), we offer an elastic supply schedule: If the price is very low, we will offer only limited amounts of options.

    2. We introduce a different tie-breaking rule for excess demand. Owing to the discrete nature of bids, situations can arise where no market-clearing price exists (where demand equals supply). While the typical rule in many auctions prioritizes high marginal bids first, we propose an alternative that exerts more pressure at the marginal quantity level.

    We explain the rationale behind these two features below.

    Before we delve into the details, let us address the issue with the standard uniform price auction. When the supply is fixed, or perfectly inelastic, there is a risk of resulting in very low prices. This concept, well understood since the work of Wilson (1979), highlights that bidders are incentivized to understate their bids, a common challenge in most multi-unit auctions. In the uniform price auction, the tradeoff is evident: if you lower your bid for the marginal unit, not only do you reduce your price for that unit, but if you win, you also decrease the overall price you pay.

    Now, the overall effect and danger of severe under-pricing is contingent on demand factors. It cannot be easily inferred from data. It is also well understood that there is no clear way to tell whether the discriminatory or uniform price auction provides more revenue, neither theoretically (Ausubel et al. 2011) nor empirically.

    ","tags":["primary market","price auction","auction format","gas auction","mechanism design"]},{"location":"Learning/aup_auction/#elastic-supply-curve","title":"Elastic supply curve","text":"
    • Fix the max capacity of beta, \\(q^{max}\\). We assume this is given for the auction. Obviously, it can be a parameter that we will optimize over time.

    • The supply curve, \\(S \\colon P \\to Q\\), where \\(P\\) is the set of allowed prices; and \\(Q\\) the set of available options. It gives for each price the amount of gas space we offer.

    • The set of options will be determined by the tick size we provide. \\(Q\\) will be further limited by the max capacity we offer. That is, typically,

    \\[ Q=0, t_q, 2 t_q, \\ldots, q^{\\max } \\text { where } t_q \\] \\[ t_q=q^{\\max } / k \\]

    for some \\(k \\in N\\).

    • The idea for the shape of the supply function is to have an initial segment of the supply curve which is concave and a second segment that then only provides a constant amount. This is the maximally available capacity. Below are pictures, that will make this clearer.

    • Concretely, one parameterized functional form is this:

    \\[ S(p) = \\begin{cases} s(p) & \\text{for } p < p' \\\\ s(p') & \\text{for } p >= p' \\end{cases} \\]

    where $ s(p) $

    \\[ s(p) = ap^n \\]

    where \\(a,n\\) are constants. The idea, again, is that the function is concave and thereby monotonically increasing until price \\(p'\\).

    This price is calculated by setting the max quantity, \\(q^{max} = ap^n\\), and then deriving

    \\[ p' \\equiv (q^{max} / a)^{1/n} \\]

    NOTE: It goes without saying that the functional form above is up for change if we want to.

    NOTE: It is theoretically well understood that an elastic supply curve can reduce the danger of dramatically underpricing. In practice, this is not so often used. One reason can be that the value of the good might be lower for the auctioneer.

    In our case, however, this can be different. The reason is that we possibly have use for the space ourselves. So, as remarked above, we might have a positive outside value and might not be willing to sell for any price.

    ","tags":["primary market","price auction","auction format","gas auction","mechanism design"]},{"location":"Learning/aup_auction/#bidders","title":"Bidders","text":"

    Each bidder can submit several (quantity,price) pairs. We thereby elicit his (partial) demand function \\(d_i(p) \\colon P \\to Q\\).

    ","tags":["primary market","price auction","auction format","gas auction","mechanism design"]},{"location":"Learning/aup_auction/#aggregation-of-demand","title":"Aggregation of demand","text":"

    The way that a uniform auction proceeds is by aggregating demand and matching it to supply. This allows to determine a market clearing price - if it exists. Reasons for non-existence can be increasing demand curves.

    Now, first, consider the aggregate demand:

    \\[ D(p) \\equiv \\sum_j d_j(p) \\]

    Fix the highest price at which the all the demand can be satisfied (if it exists). That is,

    \\[ p^{*}=max\\{p|D(p)=S(p)\\} \\]

    Note, in the case where there is excess demand for this price, i.e. \\(D(p^{*})>S(p^{*})\\), we need an allocation rule that determines who gets what.

    Note, if demand schedules \\(d_j(p)\\) were continuous, then excess demand would not be feasible.

    Lastly note, that the fact that actual bids are discontinuous might reduce the likelihood of a low price outcome (Kastl 2011).

    ","tags":["primary market","price auction","auction format","gas auction","mechanism design"]},{"location":"Learning/aup_auction/#allocation-rule","title":"Allocation rule","text":"

    In case of excess demand, how is the excess demand cleared?

    The standard rule is higher price, higher priority:

    \\[ q_j = d_{j,\\>}(p^{*}) + \\frac{d_{j}(p^{ *})- d_{j,>}(p^{*})}{D_{j}(p^{ *})- D_{j,>}(p^{*})} \\]

    where \\(d_{j,\\>}(p^{*})\\) is the individual demand of \\(j\\) for higher prices than \\(p^{*}\\) and \\(D_{j,>}(p^{*}\\) is the aggregate demand at prices higher than \\(p^{*}\\).

    So, an agent first gets his demand that he stated at higher prices. Then he will receive a relative share of the remaining excess demand at the market clearing price.

    There is an alternative allocation rule though:

    Give a share relative to individual demand at that point. That is,

    \\[ q_i = d_i(p^{**})/D(p^{**}) \\]

    Which means the larger the demand relative to overall demand at that price, the larger the share that a player will get. In contrast to the rule above, only the marginal demand matters; demand stated at higher demand levels are irrelevant.

    Reflection

    This creates stronger incentives to bid closer to true valuations; it reduces the tendency to end up

    in a low price equilibrium.

    ","tags":["primary market","price auction","auction format","gas auction","mechanism design"]},{"location":"Learning/flashbots-comparison/","title":"Flashbots Comparison","text":"","tags":["flashbots","sgx","auction format","suave","mev boost"]},{"location":"Learning/flashbots-comparison/#mev-boost","title":"MEV Boost","text":"
    sequenceDiagram\n    participant consensus\n    participant mev_boost\n    participant execution\n    participant relays\n    Title: Block Proposal\n    Note over consensus: wait for allocated slot\n    consensus->>mev_boost: engine_forkchoiceUpdatedV1\n    mev_boost->>execution: engine_forkchoiceUpdatedV1\n    mev_boost->>relays: engine_forkchoiceUpdatedV1\n    Note over mev_boost: begin polling\n    mev_boost->>relays: relay_getPayloadHeaderV1\n    consensus->>mev_boost: builder_getPayloadHeaderV1\n    mev_boost->>execution: engine_getPayloadV1\n    Note over mev_boost: select best payload\n    mev_boost-->>consensus: builder_getPayloadHeaderV1 response\n    Note over consensus: sign the block\n    consensus->>mev_boost: builder_proposeBlindedBlockV1\n    Note over mev_boost: identify payload source\n    mev_boost->>relays: relay_proposeBlindedBlockV1\n    Note over relays: validate signature\n    relays-->>mev_boost: relay_proposeBlindedBlockV1 response\n    mev_boost-->>consensus: builder_proposeBlindedBlockV1 response
    ","tags":["flashbots","sgx","auction format","suave","mev boost"]},{"location":"Learning/flashbots-comparison/#suave-sgx","title":"Suave SGX","text":"

    Suave specification is in development, so terms may not be finalized.

    sequenceDiagram\n    participant Discovery\n    participant Searcher\n    participant Kettle_SGX as \"Kettle SGX\"\n    participant Validators\n    participant Execution_Client_SGX as \"Execution Client SGX\"\n\n    Discovery->>Discovery: A registry exists\n    Discovery->>Discovery: Discover each other through a registry\n    Discovery->>Discovery: Perform handshake and verify attestations\n\n    Searcher->>Searcher: Finds MEV and crafts bundle\n    Searcher->>Searcher: Passes bundle to modified Ethereum node\n    Searcher->>Searcher: Node generates block with bundle\n    Searcher->>Searcher: Generates block witness and truncated header hash\n\n    Kettle_SGX->>Kettle_SGX: Inputs into SGX\n    Kettle_SGX->>Kettle_SGX: Uses block witness to verify block\n    Kettle_SGX->>Kettle_SGX: Verifies coinbase difference\n    Kettle_SGX->>Kettle_SGX: Encrypts block for validator\n\n    Validators->>Validators: Verifies block signed by searcher\n    Validators->>Validators: Chooses most profitable block\n    Validators->>Execution_Client_SGX: Proposes block with attestation\n\n    Execution_Client_SGX->>Execution_Client_SGX: Executes transactions and proposes block\n    Execution_Client_SGX->>Validators: Sends proposed block\n\n    Validators->>Validators: Attest to the proposed block\n    Validators->>Validators: Final
    ","tags":["flashbots","sgx","auction format","suave","mev boost"]},{"location":"Learning/secondary-market/","title":"Secondary Market","text":"","tags":["secondary market","gas auction","mechanism design"]},{"location":"Learning/secondary-market/#secondary-market","title":"Secondary Market","text":"

    The structure the secondary market so that a concentrated selling back is feasible

    The main purpose of this market is to account for information differences over time - builders might realize they cannot fill a block; or they might need more space The base fee is not known at the time of the primary market; so there should be updates regarding the base fee happening with before-strike-time blocks being minted. This also affects the initial pricing we offer.

    !!! info inline \"Allocation subject to change\" It is unclear what allocation we will have from the primary market, as a winner-takes all is possible

    ","tags":["secondary market","gas auction","mechanism design"]},{"location":"Legal/","title":"Legal","text":""},{"location":"Legal/#notices-and-compliance","title":"Notices and Compliance","text":""},{"location":"Legal/CDD/","title":"Market Participant Requirements","text":""},{"location":"Legal/CDD/#customer-due-diligence-cdd","title":"Customer Due Diligence (CDD)","text":"
    • Verification Procedures: We conduct thorough identity verification for new customers using government-issued documents, biometric verification, or third-party verification services.
    • Enhanced Due Diligence (EDD): For higher-risk clients, we perform enhanced due diligence, including the source of funds, to identify potential sanctions risks.
    • Automated Screening Tools: We screen transactions and parties against global sanctions lists (e.g., OFAC) in real-time to prevent unauthorized transactions.
    • Global IP Denylist: We block IP Addresses from Government affiliated entities, as well.
    • Regular List Updates: We ensure that our screening tool is updated regularly to reflect changes in sanctions lists. We maintain and monitor addresses from the Specially Designated Nationals (SDN) list\u00a0of the US Office of Foreign Asset Control. We maintain an open source tool that automates the update process for new addresses, which can be found here: sambacha/ofac-list
    "},{"location":"Legal/Content-Disclaimer/","title":"Content Disclaimer","text":""},{"location":"Legal/Content-Disclaimer/#disclaimer","title":"Disclaimer","text":"

    Full Copyright Statement

    Copyright (C) Manifold Finance, Incorporated (2024). All Rights Reserved.

    This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Manifold Finance, Inc. or other relevant organizations, except as needed for the purpose of developing EIP/ERC standards within the Ethereum ecosystem, in which case the procedures for copyrights defined in the development process must be followed, or as required.

    This document and the information contained herein is provided on an \"AS IS\" basis and MANIFOLD FINANCE, INCORPORATED AND ITS CONTRIBUTORS DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

    "},{"location":"Legal/Disclosure-Statement/","title":"Disclosue Statement","text":""},{"location":"Legal/Disclosure-Statement/#nfa-disclosure-statement","title":"NFA Disclosure Statement","text":"

    Although the material contained in this website was prepared based on information from public and private sources that and/or Manifold Finance, Inc believes to be reliable, no representation, warranty or undertaking, stated or implied, is given as to the accuracy of the information contained herein, CommodityStream LLC and/or Manifold Finance, Inc expressly disclaims any liability for the accuracy and completeness of information contained in this website and/or social media posting.

    This website is distributed for general informational and educational purposes only and is not intended to constitute legal, tax, accounting or investment advice. The information, opinions and views contained herein have not been tailored to the investment objectives of any one individual, are current only as of the date hereof and may be subject to change at any time without prior notice. CommodityStream LLC and/or Manifold Finance, Inc and/or Manifold Finance, Inc does not have any obligation to provide revised opinions in the event of changed circumstances. All investment strategies and investments involve risk of loss. Nothing contained in this website should be construed as investment advice. Any reference to an investment\u2019s past or potential performance is not, and should not be construed as, a recommendation or as a guarantee of any specific outcome or profit.

    Any ideas or strategies discussed herein should not be undertaken by any individual without prior consultation with a financial professional for the purpose of assessing whether the ideas or strategies that are discussed are suitable to you based on your own personal financial objectives, needs and risk tolerance. CommodityStream LLC and/or Manifold Finance, Inc expressly disclaims any liability or loss incurred by any person who acts on the information, ideas or strategies discussed herein.

    The information contained herein is not, and shall not constitute an offer to sell, a solicitation of an offer to buy or an offer to purchase any securities, nor should it be deemed to be an offer, or a solicitation of an offer, to purchase or sell any investment product or service.

    "},{"location":"Reference/constants/","title":"Constants","text":""},{"location":"Reference/constants/#gwei-values","title":"Gwei values","text":"Name Value MIN_DEPOSIT_AMOUNT Gwei(2**0 * 10**9) (= 1,000,000,000) MAX_EFFECTIVE_BALANCE Gwei(2**5 * 10**9) (= 32,000,000,000) EFFECTIVE_BALANCE_INCREMENT Gwei(2**0 * 10**9) (= 1,000,000,000)"},{"location":"Reference/constants/#time-parameters","title":"Time parameters","text":"Name Value Unit Duration MIN_ATTESTATION_INCLUSION_DELAY uint64(2**0) (= 1) slots 12 seconds SLOTS_PER_EPOCH uint64(2**5) (= 32) slots 6.4 minutes MIN_SEED_LOOKAHEAD uint64(2**0) (= 1) epochs 6.4 minutes MAX_SEED_LOOKAHEAD uint64(2**2) (= 4) epochs 25.6 minutes MIN_EPOCHS_TO_INACTIVITY_PENALTY uint64(2**2) (= 4) epochs 25.6 minutes EPOCHS_PER_ETH1_VOTING_PERIOD uint64(2**6) (= 64) epochs ~6.8 hours SLOTS_PER_HISTORICAL_ROOT uint64(2**13) (= 8,192) slots ~27 hours"},{"location":"Reference/constants/#time-parameters_1","title":"Time parameters","text":"Name Value Unit Duration SECONDS_PER_SLOT uint64(12) seconds 12 seconds SECONDS_PER_ETH1_BLOCK uint64(14) seconds 14 seconds MIN_VALIDATOR_WITHDRAWABILITY_DELAY uint64(2**8) (= 256) epochs ~27 hours SHARD_COMMITTEE_PERIOD uint64(2**8) (= 256) epochs ~27 hours ETH1_FOLLOW_DISTANCE uint64(2**11) (= 2,048) Eth1 blocks ~8 hours
    # https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/beacon-chain.md#misc\nFAR_FUTURE_EPOCH = 2 ** 64 - 1\n# https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/beacon-chain.md#time-parameters-1\nMIN_VALIDATOR_WITHDRAWABILITY_DELAY = 2**8\nSHARD_COMMITTEE_PERIOD = 256\nMAX_SEED_LOOKAHEAD = 4\n# https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/beacon-chain.md#state-list-lengths\nEPOCHS_PER_SLASHINGS_VECTOR = 2**13\n# https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/beacon-chain.md#rewards-and-penalties\nPROPORTIONAL_SLASHING_MULTIPLIER_BELLATRIX = 3\n# https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/beacon-chain.md#gwei-values\nEFFECTIVE_BALANCE_INCREMENT = 2 ** 0 * 10 ** 9\nMAX_EFFECTIVE_BALANCE = 32 * 10 ** 9\n# https://github.com/ethereum/consensus-specs/blob/dev/specs/capella/beacon-chain.md#execution\nMAX_WITHDRAWALS_PER_PAYLOAD = 2 ** 4\n# https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/beacon-chain.md#withdrawal-prefixes\nETH1_ADDRESS_WITHDRAWAL_PREFIX = '0x01'\n# https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/beacon-chain.md#validator-cycle\nMIN_PER_EPOCH_CHURN_LIMIT = 2 ** 2\nCHURN_LIMIT_QUOTIENT = 2 ** 16\n\n# Local constants\nGWEI_TO_WEI = 10 ** 9\nSHARE_RATE_PRECISION_E27 = 10**27\nTOTAL_BASIS_POINTS = 10000\n\nMAX_BLOCK_GAS_LIMIT = 30_000_000\n
    "},{"location":"Reference/contract_design/","title":"Auction and Market Designs","text":""},{"location":"Reference/contract_design/#market-and-auction-design-and-structure","title":"Market and Auction Design and Structure","text":""},{"location":"Reference/contract_design/#alpha","title":"Alpha","text":"

    We will keep the alpha part as is for now. We do not want to impose a new format on bidders as given our small size might mean being ignored. The only change is the restriction of gas to 25MM. (The rest goes to the beta market).

    Tip

    This means that the auction is backwards compatible with MEV Boost

    "},{"location":"Reference/contract_design/#beta","title":"Beta","text":"

    We will go with a discriminatory auction first.

    Warning

    It is understood though that we adapt the auction format depending on: (i) feedback by potential bidders (ii) actual behavior in the market.

    We will restrict the residual claim only to full bids for now.

    This is to avoid too small of token allocations that are then practically of no use.

    The main reasons are:

    • Simple and familiar format
    • In principle compatible with a secondary market
    • But first and foremost: Want to get feedback from bidders how they bid.
    "},{"location":"Reference/contract_design/#contingencies","title":"Contingencies","text":"
    1. Depending on the step bidding, we increase the token size.
    2. If we observe bidding on whole blocks only (or close to it), we can simplify the whole setup dramatically.
    3. If we observe upward sloping demand curves, we might need to change the format completely.
    "},{"location":"Reference/contract_design/#secondary-market","title":"Secondary market","text":"
    • Market running after primary allocation took place
    • Need to think whether we should provide the marketplace ourselves

      • In principle could be handled by external parties
      • But the interlocking of different markets (that the timing of spot market and secondary market is making sense) is probably relevant and easier to orchestrate by us.
    • The main purpose of this market is to account for information differences over time - e.g. builders might realize they cannot fill a block; or they might need more space.

    • The base fee is not known at the time of the primary market;so there should be updates regarding the base fee happening with before-strike-time blocks being minted. This also affects the initial pricing we offer.

    "},{"location":"Reference/contract_summary/","title":"Contract Protocol summary","text":""},{"location":"Reference/contract_summary/#primary-market","title":"Primary Market","text":"

    The Auctioneer Contract is a Solidity smart contract that implements an auction mechanism for selling block space. This contract allows bidders to participate in auctions, submit manual bids, and settle the auctions. It supports multiple bidders, each with a unique ID.

    "},{"location":"Reference/contract_summary/#key-features","title":"Key Features","text":"
    • Bidders: Add and remove bidders dynamically.
    • Auctions: Open and run auctions for selling block space.
    • Manual Bids: Bidders can submit manual bids with specific quantities and prices.
    • Settlement: After the auction, settle with successful bidders, transferring owed amounts.
    "},{"location":"Reference/contract_summary/#contract-structure","title":"Contract Structure","text":"
    • The contract is based on the ERC6909 standard.
    • It uses the SafeTransferLib for safe WETH (Wrapped Ether) transfers.
    • Bidders can participate through the getBid function.
    • Manual bids are supported via the bid function.
    "},{"location":"Reference/contract_summary/#events","title":"Events","text":"
    • BidderAdded and BidderRemoved for dynamic management of bidders.
    • AuctionOpened signals the start of a new auction.
    • ManualBidSubmitted is emitted when a bidder submits a manual bid.
    • AuctionSettled indicates the successful settlement of an auction.
    "},{"location":"Reference/contract_summary/#errors","title":"Errors","text":"
    • Various error messages to handle exceptional cases, such as invalid bids or insufficient funds.
    "},{"location":"Reference/contract_summary/#functions","title":"Functions","text":"
    • newBidder: Add a new bidder to the auction.
    • removeBidder: Remove a bidder from the auction.
    • openAuction: Open a new auction for a specific slot.
    • bid: Submit a bid for a specific auction slot.
    • run: Execute the auction for a specific slot, considering manual and contract bids.
    • settle: Settle the auction by transferring owed amounts to successful bidders.
    • getBidderInfo: Retrieve information about a bidder after auction settlement.
    • packBid: Pack bid details into a uint256 for submission.
    • decodeBid: Decode packed bid information for analysis.
    • checkBid: Check the validity of a bid before execution.
    "},{"location":"Reference/erc6909/","title":"ERC6909 Interface","text":""},{"location":"Reference/erc6909/#functions","title":"Functions","text":""},{"location":"Reference/erc6909/#balanceof","title":"balanceOf","text":"

    Owner balance of an id.

    function balanceOf(address owner, uint256 id) external view returns (uint256 amount);\n

    Parameters

    Name Type Description owner address The address of the owner. id uint256 The id of the token.

    Returns

    Name Type Description amount uint256 The balance of the token."},{"location":"Reference/erc6909/#allowance","title":"allowance","text":"

    Spender allowance of an id.

    function allowance(address owner, address spender, uint256 id) external view returns (uint256 amount);\n

    Parameters

    Name Type Description owner address The address of the owner. spender address The address of the spender. id uint256 The id of the token.

    Returns

    Name Type Description amount uint256 The allowance of the token."},{"location":"Reference/erc6909/#isoperator","title":"isOperator","text":"

    Checks if a spender is approved by an owner as an operator

    function isOperator(address owner, address spender) external view returns (bool approved);\n

    Parameters

    Name Type Description owner address The address of the owner. spender address The address of the spender.

    Returns

    Name Type Description approved bool The approval status."},{"location":"Reference/erc6909/#transfer","title":"transfer","text":"

    Transfers an amount of an id from the caller to a receiver.

    function transfer(address receiver, uint256 id, uint256 amount) external returns (bool);\n

    Parameters

    Name Type Description receiver address The address of the receiver. id uint256 The id of the token. amount uint256 The amount of the token."},{"location":"Reference/erc6909/#transferfrom","title":"transferFrom","text":"

    Transfers an amount of an id from a sender to a receiver.

    function transferFrom(address sender, address receiver, uint256 id, uint256 amount) external returns (bool);\n

    Parameters

    Name Type Description sender address The address of the sender. receiver address The address of the receiver. id uint256 The id of the token. amount uint256 The amount of the token."},{"location":"Reference/erc6909/#approve","title":"approve","text":"

    Approves an amount of an id to a spender.

    function approve(address spender, uint256 id, uint256 amount) external returns (bool);\n

    Parameters

    Name Type Description spender address The address of the spender. id uint256 The id of the token. amount uint256 The amount of the token."},{"location":"Reference/erc6909/#setoperator","title":"setOperator","text":"

    Sets or removes a spender as an operator for the caller.

    function setOperator(address spender, bool approved) external returns (bool);\n

    Parameters

    Name Type Description spender address The address of the spender. approved bool The approval status."},{"location":"Reference/erc6909/#events","title":"Events","text":""},{"location":"Reference/erc6909/#transfer_1","title":"Transfer","text":"

    The event emitted when a transfer occurs.

    event Transfer(address caller, address indexed sender, address indexed receiver, uint256 indexed id, uint256 amount);\n

    Parameters

    Name Type Description caller address The caller of the transfer. sender address The address of the sender. receiver address The address of the receiver. id uint256 The id of the token. amount uint256 The amount of the token."},{"location":"Reference/erc6909/#operatorset","title":"OperatorSet","text":"

    The event emitted when an operator is set.

    event OperatorSet(address indexed owner, address indexed spender, bool approved);\n

    Parameters

    Name Type Description owner address The address of the owner. spender address The address of the spender. approved bool The approval status."},{"location":"Reference/erc6909/#approval","title":"Approval","text":"

    The event emitted when an approval occurs.

    event Approval(address indexed owner, address indexed spender, uint256 indexed id, uint256 amount);\n

    Parameters

    Name Type Description owner address The address of the owner. spender address The address of the spender. id uint256 The id of the token. amount uint256 The amount of the token."},{"location":"Reference/glossary/","title":"Glossary","text":""},{"location":"Reference/glossary/#platform-terms","title":"Platform Terms","text":"Term Description Auctioneer Contract A smart contract designed for auctioning Ethereum block space, enabling dynamic participation and settlement. ERC6909 Standard A specification for managing auction-related functionalities within smart contracts. SafeTransferLib A library ensuring the safe transfer of WETH (Wrapped Ether) within smart contract operations. Bidders Entities that participate in auctions by submitting bids for block space. Manual Bids Bids placed by bidders manually for specific quantities and prices in an auction. Settlement The process of concluding an auction, involving transferring owed amounts to successful bidders. SDK (Software Development Kit) Tools and libraries provided to developers for building applications on a specific platform. Testnet A testing network where developers can deploy and test their applications in a simulated environment without using real assets. Direct Payment Method A straightforward payment approach where transaction fees are paid directly by the transactions included in a block. Coinbase Transfer Payment Method A method where transaction fees and rewards are transferred to the block proposer's address via the coinbase transaction. Indirect Address Payment Method A payment method involving the use of a different address by the builder to pay the proposer through an end-of-block transaction. Intermediate Transfer Payment Method A two-step payment process involving an intermediary address for transferring payments to the proposer. Smart Contract-Based Payment Method Payment processing through a smart contract, allowing for programmable distributions based on predefined rules. Off-Chain Payment Method Payments made outside the blockchain network, possibly through other cryptocurrencies or banking systems. Validator A network participant responsible for validating transactions and blocks on the Ethereum blockchain. MEV (Miner Extractable Value) Value extracted by miners (or validators) through their ability to include, exclude, or reorder transactions within blocks. Slashing A penalty mechanism where a validator's stake is reduced due to malicious actions or failure to comply with network rules. Primary Market The initial auction market where block space is auctioned to bidders. Secondary Market A market that operates after the primary allocation, allowing for reallocation and adjustment based on new information. Uniform Price Auction An auction format where all winning bidders pay the same price. Discriminatory Price Auction An auction format where winning bidders pay according to their bid prices. Augmented Uniform Price Auction A modified uniform price auction designed to address underpricing by introducing features like elastic supply and alternative tie-breaking rules. WETH (Wrapped Ether) A token that represents Ether 1:1, allowing for easier integration with ERC-20 compatible services. Gas A measure of computational effort required to execute operations on the Ethereum network. Gas Price The cost per unit of gas, paid by users to compensate for the computational energy required to process and validate transactions. Gwei A denomination of Ether, where 1 Gwei equals 10^-9 ETH. Block Proposal The process by which validators or miners propose a set of transactions to be included in a new block. Staking The act of locking up cryptocurrency holdings to support the operation of a blockchain network, often in exchange for rewards. Epoch A division of time used in blockchain networks, referring to a set period during which certain processes or updates occur."},{"location":"Reference/rpc-payload/","title":"RPC Payload","text":""},{"location":"Reference/rpc-payload/#execution-layer-encoding","title":"Execution Layer Encoding","text":"field type description network_id string The network on which you want the simulate the transaction. One of: block_number number Block height. If left out the pending block will be used transaction_index number The index of the transaction inside the block. Note: This parameter must be omitted or 0 when the block_number property is left out from string The originating address for the simulated transaction to string The destination address for the simulated transaction input string ABI encoded input for the transaction gas number The gas limit for the transaction gas_price string The gas price for the transcation value string The ETH value sent in the transcation simulation_type string Either full or quick. full simulations use the contracts source code to generate a full trace, while the quick simulation will only use the contracts bytecode. If omitted, the default value is full. raw is available as well as the fastest one, which skips some steps save boolean Whether or not to save this simulation for later inspection save_if_fails boolean Save the simulation if the simulated transaction failed state_objects map[address]StateObject Use provided state objects to overwrite current state objects at address contracts []Contract Array of contract deployment info (exactly like contract upload requests). Will use the source field to overwrite the contracts source at a given address. block_header BlockHeader BlockHeader override. Used to change the timestamp or block number inside the EVM. Consists of timestamp and number both of which are optional. timestamp and number are hexadecimal values starting with 0x."},{"location":"Relay/","title":"ValidatorRegistration","text":""},{"location":"Relay/#properties","title":"Properties","text":"Name Type Description Notes fee_recipient String Address to receive fees from the block. [default to null] gas_limit String Preferred gas limit of validator. [default to null] timestamp String Unix timestamp of registration. [default to null] pubkey String BLS public key of validator. [default to null]"},{"location":"Relay/#validatorsresponseentry","title":"ValidatorsResponseEntry","text":""},{"location":"Relay/#properties_1","title":"Properties","text":"Name Type Description Notes slot String [optional] [default to null] validator_index String [optional] [default to null] entry getValidators_200_response_inner_entry [optional] [default to null]"},{"location":"Relay/captive-insurance/","title":"Captive Insurance","text":""},{"location":"Relay/captive-insurance/#captive-market-infrastructure-insurance","title":"Captive Market Infrastructure Insurance","text":"

    The proposed forward contract market for captive insurance is designed to provide a platform for the efficient transfer of risk between participating validators and other market participants with the operation of the platform by the Relay.

    The Relay manages validator connectivity and provides the validator with block proposals for the validator to use when creating a block. The captive insurance is used to provide a service level agreement between the relay and the validators connecting to the relay.

    "},{"location":"Relay/captive-insurance/#relay-insurance","title":"Relay Insurance","text":"

    XGA establishes the necessary infrastructure for trading, including contract execution, record-keeping, and dispute resolution mechanisms. Additionally it will implement systems for monitoring contract performance and ensuring compliance with the terms.

    "},{"location":"Relay/captive-insurance/#coverage-scope","title":"Coverage Scope","text":"

    In addition to traditional sorts of slashing protection mechanisms, the captive insurance model covers:

    • Service Downtime: Compensation for periods when the relay is not operational or accessible.
    • Incorrect or Malicious Proposals: Protection against losses due to incorrect or malicious block proposals provided by the relay.
    • Performance Degradation: Coverage for scenarios where the relay's performance significantly degrades, impacting validator operations.
    "},{"location":"Relay/captive-insurance/#premium-calculation","title":"Premium Calculation","text":"

    Based on the validator's stake size and the level of dependency on the relay service. Adjusted for the historical performance and reliability metrics of the relay.

    "},{"location":"Relay/captive-insurance/#claim-process","title":"Claim Process","text":"

    Validators submit claims with evidence of the relay service issue (e.g., logs, performance metrics). Claims are verified against relay service logs and performance data. Payouts are made based on the validated impact and the terms of the insurance policy.

    "},{"location":"Relay/captive-insurance/#understanding-validator-slashing","title":"Understanding Validator Slashing","text":"

    Validator slashing occurs when a validator on the Ethereum network acts maliciously or fails to comply with network consensus rules. This can result in the validator's stake being \"slashed\" or reduced as a penalty. Insurance against slashing would compensate the validator for a portion of their lost stake.

    "},{"location":"Relay/captive-insurance/#captive-insurance-smart-contract-design","title":"Captive Insurance Smart Contract Design","text":"

    This contract would act as the \"captive insurer,\" managing the insurance pool and claims.

    Stake Pooling: Validators would contribute to an insurance pool, held in the smart contract. This pool would collect premiums from validators who wish to insure their stake against slashing.

    Premium Calculation: The smart contract would calculate premiums based on the risk of slashing, which could be determined by past behavior, the amount of stake, and other risk factors.

    Claim Conditions: The smart contract would define the conditions under which a claim can be made, such as the type of slashing event and the evidence required to prove the slashing occurred.

    Claim Process: In the event of slashing, the affected validator would submit a claim to the smart contract along with evidence of the slashing event.

    Verification: The smart contract would include or interact with an oracle or a set of oracles to verify the slashing event. This requires manual verification by Manifold Finance as the underwriter.

    Payouts: Upon successful claim verification, the smart contract would automatically execute a payout to the slashed validator from the insurance pool, according to the terms of the policy.

    "},{"location":"Relay/captive-insurance/#api","title":"API","text":"

    This specification includes endpoints for retrieving the total accumulated premiums and claims, which would be useful for reporting and auditing purposes. The claims queue endpoint allows for managing and viewing the list of claims that are pending action. Lastly, the health check endpoint provides a simple way to monitor the API's status, which is crucial for maintenance and uptime monitoring.

    /premiums/accumulated:\n    get:\n        summary: Get total accumulated premiums\n        operationId: getAccumulatedPremiums\n        tags:\n            - Premiums\n        responses:\n            \"200\":\n                description: Total accumulated premiums retrieved successfully\n                content:\n                    application/json:\n                        schema:\n                            $ref: \"#/components/schemas/AccumulatedPremiums\"\n\n/claims/accumulated:\n    get:\n        summary: Get total accumulated claims\n        operationId: getAccumulatedClaims\n        tags:\n            - Claims\n        responses:\n            \"200\":\n                description: Total accumulated claims retrieved successfully\n                content:\n                    application/json:\n                        schema:\n                            $ref: \"#/components/schemas/AccumulatedClaims\"\n\n/claims/queue:\n    get:\n        summary: Get the queue of claims awaiting processing\n        operationId: getClaimsQueue\n        tags:\n            - Claims\n        responses:\n            \"200\":\n                description: Claims queue retrieved successfully\n                content:\n                    application/json:\n                        schema:\n                            $ref: \"#/components/schemas/ClaimsQueue\"\n
    "},{"location":"Rulebook/bylaws/","title":"Reference, Bylaws","text":""},{"location":"Rulebook/definitions/","title":"Definitions","text":""},{"location":"Rulebook/delivery-and-settlement/","title":"Submission of Trades","text":""},{"location":"Rulebook/general/","title":"General","text":""},{"location":"Rulebook/governance/","title":"200 Governance","text":""},{"location":"Rulebook/network-clearing-participants/","title":"300 General Eligibility Requirements of Network and Clearing Participants","text":""},{"location":"Rulebook/obligations/","title":"500 Obligations","text":""},{"location":"Rulebook/suspension/","title":"600 Suspension and Disciplinary Proceedings","text":""},{"location":"Rulebook/contracts/","title":"Contents","text":"
    • auth
    • interfaces
    • Accountant
    • Bidder
    • IAccountant
    • Auctioneer
    • L1Holding
    • SettlementHouse
    • LibSort
    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/","title":"Accountant","text":"

    Git Source

    Inherits: Ownable2Step

    Author: MEV Protocol

    Pays out validators, protocol fees and L2 infrastructure from auction and coinbase revenue

    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#state-variables","title":"State Variables","text":""},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#mingaslimit","title":"minGasLimit","text":"

    min gas limit for L2 bridge tx

    uint32 public minGasLimit = 200_000;\n
    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#bridge","title":"bridge","text":"

    L2 => L1 bridge

    IL2Bridge public bridge;\n
    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#weth","title":"weth","text":"

    L2 Weth

    WETH public immutable weth;\n
    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#auctioneer","title":"auctioneer","text":"
    address public auctioneer;\n
    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#legacy_erc20_eth","title":"LEGACY_ERC20_ETH","text":"

    Address of the LegacyERC20ETH predeploy

    address internal constant LEGACY_ERC20_ETH = 0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000;\n
    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#adminfeepertenthousand","title":"adminFeePerTenThousand","text":"

    per 10,000 of revenue to allocate for protocol

    uint256 public constant adminFeePerTenThousand = 1;\n
    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#isvalidatorregistered","title":"isValidatorRegistered","text":"

    registered validator payout addresses

    mapping(address => bool) public isValidatorRegistered;\n
    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#activevalidators","title":"activeValidators","text":"

    List of active validators

    mapping(uint256 => address) public activeValidators;\n
    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#numvalidatorsregistered","title":"numValidatorsRegistered","text":"

    number of validators registered to reward address

    mapping(address => uint256) public numValidatorsRegistered;\n
    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#validatorcount","title":"validatorCount","text":"

    Number of active validator reward addresses

    uint256 public validatorCount;\n
    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#totalvalidatorcount","title":"totalValidatorCount","text":"

    Cumulative total of registered validators

    uint256 public totalValidatorCount;\n
    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#payoutrecord","title":"payoutRecord","text":"
    mapping(address validator => uint256 cumulativeAmount) public payoutRecord;\n
    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#minpayout","title":"minPayout","text":"

    threshold payout amount to make make L1 fees worthwhile

    uint256 public minPayout;\n
    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#functions","title":"Functions","text":""},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#constructor","title":"constructor","text":"

    Initializes the Accountant contract.

    constructor(address _bridge, address _weth, uint256 _minPayout) Ownable2Step(msg.sender);\n

    Parameters

    Name Type Description _bridge address Address of the L2 bridge contract. _weth address Address of the WETH contract. _minPayout uint256"},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#receive","title":"receive","text":"

    Fallback function to receive Ether.

    receive() external payable;\n
    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#onlyauctioneer","title":"onlyAuctioneer","text":"

    Modifier to only allow Auctioneer contract as caller

    modifier onlyAuctioneer();\n
    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#getvalidatorlist","title":"getValidatorList","text":"

    Get validator list

    function getValidatorList() external view returns (address[] memory validators);\n

    Returns

    Name Type Description validators address[] list"},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#gettotalpayout","title":"getTotalPayout","text":"

    Get total payouts

    function getTotalPayout() external view returns (uint256 total);\n

    Returns

    Name Type Description total uint256 payout amount"},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#getpayoutbalance","title":"getPayoutBalance","text":"

    gets current aggregated balance for validator payouts

    function getPayoutBalance() external view returns (uint256 payoutBalance);\n
    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#payout","title":"payout","text":"

    Distributes funds to various addresses based on predefined shares.

    function payout() external onlyAuctioneer;\n
    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#updatebridge","title":"updateBridge","text":"

    Updates the address of the L2 bridge contract.

    function updateBridge(address _bridge) external onlyOwner;\n

    Parameters

    Name Type Description _bridge address New address of the L2 bridge contract."},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#updatemingaslimit","title":"updateMinGasLimit","text":"

    Updates the minimum gas limit for L2 bridge transactions.

    function updateMinGasLimit(uint32 _minGasLimit) external onlyOwner;\n

    Parameters

    Name Type Description _minGasLimit uint32 New minimum gas limit."},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#updateminpayout","title":"updateMinPayout","text":"

    Updates the minimum threshold balance for L1 validator payouts.

    function updateMinPayout(uint256 _minPayout) external onlyOwner;\n

    Parameters

    Name Type Description _minPayout uint256 New minimum payout threshold."},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#registervalidator","title":"registerValidator","text":"

    Registers a validator.

    function registerValidator(address validator, uint256 numValidators) public onlyOwner;\n

    Parameters

    Name Type Description validator address Address of the validator to register. numValidators uint256 Number of validators registered for above address."},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#updatenumvalidators","title":"updateNumValidators","text":"

    Updates a number of registered a validators.

    function updateNumValidators(address validator, uint256 numValidators) external onlyOwner;\n

    Parameters

    Name Type Description validator address Address of the validator. numValidators uint256 Number of validators registered for above address."},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#unregistervalidator","title":"unregisterValidator","text":"

    Unregisters a validator.

    function unregisterValidator(address validator) public onlyOwner;\n

    Parameters

    Name Type Description validator address Address of the validator to unregister."},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#registerbatchvalidators","title":"registerBatchValidators","text":"

    Registers a batch of validators.

    function registerBatchValidators(address[] calldata validators, uint256[] calldata numValidators) external onlyOwner;\n

    Parameters

    Name Type Description validators address[] Address list of the validators to register. numValidators uint256[] Number of validators registered for each above address."},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#unregisterbatchvalidators","title":"unregisterBatchValidators","text":"

    Unregisters a batch of validators.

    function unregisterBatchValidators(address[] calldata validators) external onlyOwner;\n

    Parameters

    Name Type Description validators address[] Address list of the validators to unregister."},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#updateauctioneer","title":"updateAuctioneer","text":"

    Updates auctioneer address

    function updateAuctioneer(address _auctioneer) external onlyOwner;\n

    Parameters

    Name Type Description _auctioneer address address of Auctioneer contract"},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#removevalidatorfromarray","title":"removeValidatorFromArray","text":"

    Removes a validator address from the activeValidators array.

    function removeValidatorFromArray(address validator) internal;\n

    Parameters

    Name Type Description validator address Address of the validator to remove."},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#events","title":"Events","text":""},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#paymentreceived","title":"PaymentReceived","text":"
    event PaymentReceived(address indexed sender, uint256 amount);\n
    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#paymentsplit","title":"PaymentSplit","text":"
    event PaymentSplit(address indexed sender, uint256 adminFee, uint256 validatorsShare);\n
    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#auctioneerupdated","title":"AuctioneerUpdated","text":"
    event AuctioneerUpdated(address indexed _auctioneer);\n
    "},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#errors","title":"Errors","text":""},{"location":"Rulebook/contracts/Accountant.sol/contract.Accountant/#thresholdbalancenotmet","title":"ThresholdBalanceNotMet","text":"
    error ThresholdBalanceNotMet();\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/","title":"Auctioneer","text":"

    Git Source

    Inherits: ERC6909, Ownable2Step

    Implements an auction mechanism for selling block space.

    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#state-variables","title":"State Variables","text":""},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#maxbidder","title":"maxBidder","text":"
    uint8 public maxBidder;\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#weth9","title":"WETH9","text":"
    WETH public immutable WETH9;\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#accountant","title":"accountant","text":"
    address public accountant;\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#maxbids","title":"maxBids","text":"
    uint256 public maxBids = 50;\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#mingasamount","title":"minGasAmount","text":"
    uint120 public minGasAmount = 20_000;\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#operator","title":"operator","text":"
    address public operator;\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#idmap","title":"IdMap","text":"
    mapping(address bidder => uint8 id) public IdMap;\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#biddermap","title":"bidderMap","text":"
    mapping(uint8 id => address bidder) public bidderMap;\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#auctions","title":"auctions","text":"
    mapping(uint256 slot => Auction) public auctions;\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#slotscount","title":"slotsCount","text":"
    uint256 public slotsCount;\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#slotsauctioned","title":"slotsAuctioned","text":"
    mapping(uint256 index => uint256 slot) public slotsAuctioned;\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#bidcount","title":"bidCount","text":"
    mapping(uint256 slot => uint256 count) public bidCount;\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#bids","title":"bids","text":"
    mapping(uint256 slot => mapping(uint256 index => uint256 bid)) internal bids;\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#functions","title":"Functions","text":""},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#constructor","title":"constructor","text":"
    constructor(WETH _weth, address _accountant) Ownable2Step(msg.sender);\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#onlyoperator","title":"onlyOperator","text":"
    modifier onlyOperator();\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#newbidder","title":"newBidder","text":"

    Add a new bidder to the auction.

    function newBidder(address additionalBidder) external onlyOwner returns (uint8 newId);\n

    Parameters

    Name Type Description additionalBidder address The address of the additional bidder."},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#removebidder","title":"removeBidder","text":"

    Remove a bidder from the auction.

    function removeBidder(uint8 bidderId) external onlyOwner;\n

    Parameters

    Name Type Description bidderId uint8 The index of the bidder to be removed."},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#changeoperator","title":"changeOperator","text":"

    Change operator of the auction.

    function changeOperator(address newOperator) external onlyOwner;\n

    Parameters

    Name Type Description newOperator address The address of the new operator"},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#openauction","title":"openAuction","text":"

    Open a new auction for a specific slot.

    function openAuction(uint256 slot, uint120 itemsForSale) external onlyOperator;\n

    Parameters

    Name Type Description slot uint256 The auction slot. itemsForSale uint120 The number of items available for sale in the auction."},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#bid","title":"bid","text":"

    Bid function for bidders to submit manual bids.

    function bid(uint256 slot, uint256[] memory packedBids) external;\n

    Parameters

    Name Type Description slot uint256 The auction slot. packedBids uint256[] Array of packed bids"},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#runandsettle","title":"runAndSettle","text":"

    Execute the auction for a specific slot.

    function runAndSettle(uint256 slot) public onlyOperator;\n

    Parameters

    Name Type Description slot uint256 The auction slot."},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#payout","title":"payout","text":"

    Payout revenue from auction to validators

    function payout(uint256 slot) external onlyOperator;\n

    Parameters

    Name Type Description slot uint256 The auction slot."},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#refund","title":"refund","text":"

    Refund revenue from auction to bidders

    function refund(uint256 slot) external onlyOperator;\n

    Parameters

    Name Type Description slot uint256 The auction slot."},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#getbidderinfo","title":"getBidderInfo","text":"

    Retrieve information about a bidder after auction settlement.

    function getBidderInfo(uint256 slot, address bidder) external view returns (uint120 itemsBought, uint128 amountOwed);\n

    Parameters

    Name Type Description slot uint256 The slot identifier of the auction. bidder address The address of the bidder for whom information is requested.

    Returns

    Name Type Description itemsBought uint120 The number of items bought by the bidder in the specified auction. amountOwed uint128 The amount owed by the bidder for the items bought in the specified auction. Requirements: - The auction must have been settled. - The provided bidder address must be valid and have participated in the auction."},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#packbid","title":"packBid","text":"

    Packed Bid details into a uint256 for submission.

    function packBid(uint128 bidPrice, uint120 itemsToBuy, uint8 bidderId) external pure returns (uint256 packedBid);\n

    Parameters

    Name Type Description bidPrice uint128 Price per item. itemsToBuy uint120 Items to buy in the auction. bidderId uint8 Id for bidder

    Returns

    Name Type Description packedBid uint256 for auction submission"},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#decodebid","title":"decodeBid","text":"

    Decode the packed bid information.

    function decodeBid(uint256 packedBid) internal pure returns (uint8 bidderId, uint120 itemsToBuy, uint128 bidPrice);\n

    Parameters

    Name Type Description packedBid uint256 The packed bid information.

    Returns

    Name Type Description bidderId uint8 The bidder's ID. itemsToBuy uint120 The number of items the bidder wants to buy. bidPrice uint128 The price per item in the bid."},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#calcaveragebid","title":"calcAverageBid","text":"

    Calculate average bid price for the last n auctions

    function calcAverageBid(uint256 numAuctions) external view returns (uint128 avBidPrice);\n

    Parameters

    Name Type Description numAuctions uint256 Number of auctions to average for

    Returns

    Name Type Description avBidPrice uint128 for last n auctions"},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#checkandstorebid","title":"checkAndStoreBid","text":"

    Check the validity of a bid.

    function checkAndStoreBid(\n    bool revertInvalid,\n    address bidder,\n    uint256 slot,\n    uint256 itemsForSale,\n    uint256[] memory packedBids\n) internal;\n

    Parameters

    Name Type Description revertInvalid bool true for manual bids causing reverts for invalid data bidder address Address of bidder. slot uint256 The auction slot. itemsForSale uint256 Total items for sale for the slot. packedBids uint256[] Array of packed bids Requirements: - The number of items in the bid must not exceed the available items for sale in the auction. - The bidder must have enough funds to cover the bid amount."},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#updateaccountant","title":"updateAccountant","text":"

    update accountant address

    function updateAccountant(address newAccountant) external onlyOwner;\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#updatemaxbids","title":"updateMaxBids","text":"

    update max num of bids per bidder

    function updateMaxBids(uint256 newMaxBids) external onlyOwner;\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#updatemingasamount","title":"updateMinGasAmount","text":"

    update minGasAmount

    function updateMinGasAmount(uint120 newAmount) external onlyOwner;\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#events","title":"Events","text":""},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#operatorupdated","title":"OperatorUpdated","text":"
    event OperatorUpdated(address indexed oldOperator, address indexed newOperator);\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#auctionsettled","title":"AuctionSettled","text":"
    event AuctionSettled(uint256 indexed slot);\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#bidderadded","title":"BidderAdded","text":"
    event BidderAdded(address indexed bidder, uint8 indexed bidderId);\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#bidderremoved","title":"BidderRemoved","text":"
    event BidderRemoved(address indexed bidder, uint8 indexed bidderId);\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#auctionopened","title":"AuctionOpened","text":"
    event AuctionOpened(uint256 indexed slot, uint120 itemsForSale);\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#auctionpaidout","title":"AuctionPaidOut","text":"
    event AuctionPaidOut(uint256 indexed slot);\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#auctionrefund","title":"AuctionRefund","text":"
    event AuctionRefund(uint256 indexed slot);\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#errors","title":"Errors","text":""},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#invalidid","title":"InvalidId","text":"
    error InvalidId();\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#unauthorized","title":"Unauthorized","text":"
    error Unauthorized();\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#invalidbiditems","title":"InvalidBidItems","text":"
    error InvalidBidItems();\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#insufficientfunds","title":"InsufficientFunds","text":"
    error InsufficientFunds();\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#auctionnotopen","title":"AuctionNotOpen","text":"
    error AuctionNotOpen(uint256 slot);\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#auctionnotclosed","title":"AuctionNotClosed","text":"
    error AuctionNotClosed(uint256 slot);\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#auctionalreadyopen","title":"AuctionAlreadyOpen","text":"
    error AuctionAlreadyOpen(uint256 slot);\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#auctionalreadysettled","title":"AuctionAlreadySettled","text":"
    error AuctionAlreadySettled(uint256 slot);\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#biddernotregistered","title":"BidderNotRegistered","text":"
    error BidderNotRegistered(address bidder);\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#bidderalreadyexists","title":"BidderAlreadyExists","text":"
    error BidderAlreadyExists(address bidder);\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#structs","title":"Structs","text":""},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#auction","title":"Auction","text":"
    struct Auction {\n    uint120 itemsForSale;\n    bool isOpen;\n    bool isSettled;\n    bool isPaidOut;\n    bool isRefunded;\n    mapping(address => BidderInfo) biddersInfo;\n}\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/#bidderinfo","title":"BidderInfo","text":"
    struct BidderInfo {\n    uint120 itemsBought;\n    uint128 amountOwed;\n}\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/interface.Bidder/","title":"Bidder","text":"

    Git Source

    "},{"location":"Rulebook/contracts/Auctioneer.sol/interface.Bidder/#functions","title":"Functions","text":""},{"location":"Rulebook/contracts/Auctioneer.sol/interface.Bidder/#getbid","title":"getBid","text":"

    Get the bid from a bidder for a specific slot and round.

    function getBid(uint256 slot) external view returns (uint256[] memory packedBids);\n

    Parameters

    Name Type Description slot uint256 The auction slot.

    Returns

    Name Type Description packedBids uint256[] Array of bids (in a packed format). uint256(uint128(bidPrice),uint120(itemsToBuy),uint8(bidderId))"},{"location":"Rulebook/contracts/Auctioneer.sol/interface.IAccountant/","title":"IAccountant","text":"

    Git Source

    "},{"location":"Rulebook/contracts/Auctioneer.sol/interface.IAccountant/#functions","title":"Functions","text":""},{"location":"Rulebook/contracts/Auctioneer.sol/interface.IAccountant/#payout","title":"payout","text":"
    function payout() external;\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/interface.IAccountant/#getpayoutbalance","title":"getPayoutBalance","text":"
    function getPayoutBalance() external view returns (uint256 payoutBalance);\n
    "},{"location":"Rulebook/contracts/Auctioneer.sol/interface.IAccountant/#minpayout","title":"minPayout","text":"
    function minPayout() external view returns (uint256 amount);\n
    "},{"location":"Rulebook/contracts/L1Holding.sol/contract.L1Holding/","title":"L1Holding","text":"

    Git Source

    Inherits: Ownable2Step

    Author: MEV Protocol

    Pays out L1 builder payments to L2 Accountant

    "},{"location":"Rulebook/contracts/L1Holding.sol/contract.L1Holding/#state-variables","title":"State Variables","text":""},{"location":"Rulebook/contracts/L1Holding.sol/contract.L1Holding/#mingaslimit","title":"minGasLimit","text":"

    min gas limit for L2 bridge tx

    uint32 public minGasLimit = 200_000;\n
    "},{"location":"Rulebook/contracts/L1Holding.sol/contract.L1Holding/#accountant","title":"accountant","text":"

    L2 accountant

    address public accountant;\n
    "},{"location":"Rulebook/contracts/L1Holding.sol/contract.L1Holding/#bridge","title":"bridge","text":"

    L1 => L2 bridge

    IL1Bridge public bridge;\n
    "},{"location":"Rulebook/contracts/L1Holding.sol/contract.L1Holding/#functions","title":"Functions","text":""},{"location":"Rulebook/contracts/L1Holding.sol/contract.L1Holding/#constructor","title":"constructor","text":"

    Initializes the L1Holding contract.

    constructor(address _accountant, address _bridge) Ownable2Step(msg.sender);\n

    Parameters

    Name Type Description _accountant address Address of the protocol treasury. _bridge address Address of the L2 bridge contract."},{"location":"Rulebook/contracts/L1Holding.sol/contract.L1Holding/#receive","title":"receive","text":"

    Fallback function to receive Ether.

    receive() external payable;\n
    "},{"location":"Rulebook/contracts/L1Holding.sol/contract.L1Holding/#payaccounatnt","title":"payAccounatnt","text":"

    Pays accountant.

    function payAccounatnt() external;\n
    "},{"location":"Rulebook/contracts/L1Holding.sol/contract.L1Holding/#updateaccountant","title":"updateAccountant","text":"

    Updates the L2 accountant address.

    function updateAccountant(address _accountant) external onlyOwner;\n

    Parameters

    Name Type Description _accountant address New address of the L2 accountant"},{"location":"Rulebook/contracts/L1Holding.sol/contract.L1Holding/#updatebridge","title":"updateBridge","text":"

    Updates the address of the L2 bridge contract.

    function updateBridge(address _bridge) external onlyOwner;\n

    Parameters

    Name Type Description _bridge address New address of the L2 bridge contract."},{"location":"Rulebook/contracts/L1Holding.sol/contract.L1Holding/#updatemingaslimit","title":"updateMinGasLimit","text":"

    Updates the minimum gas limit for L2 bridge transactions.

    function updateMinGasLimit(uint32 _minGasLimit) external onlyOwner;\n

    Parameters

    Name Type Description _minGasLimit uint32 New minimum gas limit."},{"location":"Rulebook/contracts/L1Holding.sol/contract.L1Holding/#events","title":"Events","text":""},{"location":"Rulebook/contracts/L1Holding.sol/contract.L1Holding/#paymentreceived","title":"PaymentReceived","text":"
    event PaymentReceived(address indexed sender, uint256 amount);\n
    "},{"location":"Rulebook/contracts/L1Holding.sol/contract.L1Holding/#paymentsent","title":"PaymentSent","text":"
    event PaymentSent(address indexed recipient, uint256 amount);\n
    "},{"location":"Rulebook/contracts/SettlementHouse.sol/contract.SettlementHouse/","title":"SettlementHouse","text":"

    Git Source

    A contract for managing bundles of transactions for a futures token.

    "},{"location":"Rulebook/contracts/SettlementHouse.sol/contract.SettlementHouse/#state-variables","title":"State Variables","text":""},{"location":"Rulebook/contracts/SettlementHouse.sol/contract.SettlementHouse/#futurestoken","title":"futuresToken","text":"
    IERC6909 public immutable futuresToken;\n
    "},{"location":"Rulebook/contracts/SettlementHouse.sol/contract.SettlementHouse/#bundlecounter","title":"bundleCounter","text":"
    mapping(uint256 => uint256) internal bundleCounter;\n
    "},{"location":"Rulebook/contracts/SettlementHouse.sol/contract.SettlementHouse/#bundles","title":"bundles","text":"
    mapping(uint256 => mapping(uint256 => Bundle)) internal bundles;\n
    "},{"location":"Rulebook/contracts/SettlementHouse.sol/contract.SettlementHouse/#functions","title":"Functions","text":""},{"location":"Rulebook/contracts/SettlementHouse.sol/contract.SettlementHouse/#constructor","title":"constructor","text":"

    Constructor to initialize the contract with the futures token contract address.

    constructor(IERC6909 _futuresToken);\n

    Parameters

    Name Type Description _futuresToken IERC6909 Address of the futures token contract."},{"location":"Rulebook/contracts/SettlementHouse.sol/contract.SettlementHouse/#submitbundle","title":"submitBundle","text":"
    function submitBundle(uint256 slot, uint256 amountOfGas, bytes32[] calldata bundleHashes) external;\n
    "},{"location":"Rulebook/contracts/SettlementHouse.sol/contract.SettlementHouse/#querybundles","title":"queryBundles","text":"
    function queryBundles(uint256 slot) external view returns (Bundle[] memory slotBundles);\n
    "},{"location":"Rulebook/contracts/SettlementHouse.sol/contract.SettlementHouse/#events","title":"Events","text":""},{"location":"Rulebook/contracts/SettlementHouse.sol/contract.SettlementHouse/#bundlesubmitted","title":"BundleSubmitted","text":"
    event BundleSubmitted(address indexed sender, uint256 indexed slot, uint256 indexed index, uint256 amountOfGas);\n
    "},{"location":"Rulebook/contracts/SettlementHouse.sol/contract.SettlementHouse/#errors","title":"Errors","text":""},{"location":"Rulebook/contracts/SettlementHouse.sol/contract.SettlementHouse/#unauthorized","title":"Unauthorized","text":"
    error Unauthorized();\n
    "},{"location":"Rulebook/contracts/SettlementHouse.sol/contract.SettlementHouse/#structs","title":"Structs","text":""},{"location":"Rulebook/contracts/SettlementHouse.sol/contract.SettlementHouse/#bundle","title":"Bundle","text":"
    struct Bundle {\n    address submitter;\n    uint256 amountOfGas;\n    bytes32[] bundleHashes;\n}\n
    "},{"location":"Rulebook/contracts/interfaces/","title":"Contents","text":"
    • IERC6909
    • IL1Bridge
    • IL2Bridge
    • IWETH
    "},{"location":"Rulebook/contracts/interfaces/IERC6909.sol/interface.IERC6909/","title":"IERC6909","text":"

    Git Source

    Author: jtriley.eth

    "},{"location":"Rulebook/contracts/interfaces/IERC6909.sol/interface.IERC6909/#functions","title":"Functions","text":""},{"location":"Rulebook/contracts/interfaces/IERC6909.sol/interface.IERC6909/#balanceof","title":"balanceOf","text":"

    Owner balance of an id.

    function balanceOf(address owner, uint256 id) external view returns (uint256 amount);\n

    Parameters

    Name Type Description owner address The address of the owner. id uint256 The id of the token.

    Returns

    Name Type Description amount uint256 The balance of the token."},{"location":"Rulebook/contracts/interfaces/IERC6909.sol/interface.IERC6909/#allowance","title":"allowance","text":"

    Spender allowance of an id.

    function allowance(address owner, address spender, uint256 id) external view returns (uint256 amount);\n

    Parameters

    Name Type Description owner address The address of the owner. spender address The address of the spender. id uint256 The id of the token.

    Returns

    Name Type Description amount uint256 The allowance of the token."},{"location":"Rulebook/contracts/interfaces/IERC6909.sol/interface.IERC6909/#isoperator","title":"isOperator","text":"

    Checks if a spender is approved by an owner as an operator

    function isOperator(address owner, address spender) external view returns (bool approved);\n

    Parameters

    Name Type Description owner address The address of the owner. spender address The address of the spender.

    Returns

    Name Type Description approved bool The approval status."},{"location":"Rulebook/contracts/interfaces/IERC6909.sol/interface.IERC6909/#transfer","title":"transfer","text":"

    Transfers an amount of an id from the caller to a receiver.

    function transfer(address receiver, uint256 id, uint256 amount) external returns (bool);\n

    Parameters

    Name Type Description receiver address The address of the receiver. id uint256 The id of the token. amount uint256 The amount of the token."},{"location":"Rulebook/contracts/interfaces/IERC6909.sol/interface.IERC6909/#transferfrom","title":"transferFrom","text":"

    Transfers an amount of an id from a sender to a receiver.

    function transferFrom(address sender, address receiver, uint256 id, uint256 amount) external returns (bool);\n

    Parameters

    Name Type Description sender address The address of the sender. receiver address The address of the receiver. id uint256 The id of the token. amount uint256 The amount of the token."},{"location":"Rulebook/contracts/interfaces/IERC6909.sol/interface.IERC6909/#approve","title":"approve","text":"

    Approves an amount of an id to a spender.

    function approve(address spender, uint256 id, uint256 amount) external returns (bool);\n

    Parameters

    Name Type Description spender address The address of the spender. id uint256 The id of the token. amount uint256 The amount of the token."},{"location":"Rulebook/contracts/interfaces/IERC6909.sol/interface.IERC6909/#setoperator","title":"setOperator","text":"

    Sets or removes a spender as an operator for the caller.

    function setOperator(address spender, bool approved) external returns (bool);\n

    Parameters

    Name Type Description spender address The address of the spender. approved bool The approval status."},{"location":"Rulebook/contracts/interfaces/IERC6909.sol/interface.IERC6909/#events","title":"Events","text":""},{"location":"Rulebook/contracts/interfaces/IERC6909.sol/interface.IERC6909/#transfer_1","title":"Transfer","text":"

    The event emitted when a transfer occurs.

    event Transfer(address caller, address indexed sender, address indexed receiver, uint256 indexed id, uint256 amount);\n

    Parameters

    Name Type Description caller address The caller of the transfer. sender address The address of the sender. receiver address The address of the receiver. id uint256 The id of the token. amount uint256 The amount of the token."},{"location":"Rulebook/contracts/interfaces/IERC6909.sol/interface.IERC6909/#operatorset","title":"OperatorSet","text":"

    The event emitted when an operator is set.

    event OperatorSet(address indexed owner, address indexed spender, bool approved);\n

    Parameters

    Name Type Description owner address The address of the owner. spender address The address of the spender. approved bool The approval status."},{"location":"Rulebook/contracts/interfaces/IERC6909.sol/interface.IERC6909/#approval","title":"Approval","text":"

    The event emitted when an approval occurs.

    event Approval(address indexed owner, address indexed spender, uint256 indexed id, uint256 amount);\n

    Parameters

    Name Type Description owner address The address of the owner. spender address The address of the spender. id uint256 The id of the token. amount uint256 The amount of the token."},{"location":"Rulebook/contracts/interfaces/IL1Bridge.sol/interface.IL1Bridge/","title":"IL1Bridge","text":"

    Git Source

    "},{"location":"Rulebook/contracts/interfaces/IL1Bridge.sol/interface.IL1Bridge/#functions","title":"Functions","text":""},{"location":"Rulebook/contracts/interfaces/IL1Bridge.sol/interface.IL1Bridge/#depositethto","title":"depositETHTo","text":"

    Deposits some amount of ETH into a target account on L2. Note that if ETH is sent to a contract on L2 and the call fails, then that ETH will be locked in the L2StandardBridge. ETH may be recoverable if the call can be successfully replayed by increasing the amount of gas supplied to the call. If the call will fail for any amount of gas, then the ETH will be locked permanently.

    function depositETHTo(address _to, uint32 _minGasLimit, bytes calldata _extraData) external payable;\n

    Parameters

    Name Type Description _to address Address of the recipient on L2. _minGasLimit uint32 Minimum gas limit for the deposit message on L2. _extraData bytes Optional data to forward to L2. Data supplied here will not be used to execute any code on L2 and is only emitted as extra data for the convenience of off-chain tooling."},{"location":"Rulebook/contracts/interfaces/IL2Bridge.sol/interface.IL2Bridge/","title":"IL2Bridge","text":"

    Git Source

    "},{"location":"Rulebook/contracts/interfaces/IL2Bridge.sol/interface.IL2Bridge/#functions","title":"Functions","text":""},{"location":"Rulebook/contracts/interfaces/IL2Bridge.sol/interface.IL2Bridge/#withdrawto","title":"withdrawTo","text":"

    Initiates a withdrawal from L2 to L1 to a target account on L1. Note that if ETH is sent to a contract on L1 and the call fails, then that ETH will be locked in the L1StandardBridge. ETH may be recoverable if the call can be successfully replayed by increasing the amount of gas supplied to the call. If the call will fail for any amount of gas, then the ETH will be locked permanently. This function only works with OptimismMintableERC20 tokens or ether. Use the bridgeERC20To function to bridge native L2 tokens to L1.

    function withdrawTo(address _l2Token, address _to, uint256 _amount, uint32 _minGasLimit, bytes calldata _extraData)\n    external\n    payable;\n

    Parameters

    Name Type Description _l2Token address Address of the L2 token to withdraw. _to address Recipient account on L1. _amount uint256 Amount of the L2 token to withdraw. _minGasLimit uint32 Minimum gas limit to use for the transaction. _extraData bytes Extra data attached to the withdrawal."},{"location":"Rulebook/contracts/interfaces/IWETH.sol/interface.IWETH/","title":"IWETH","text":"

    Git Source

    "},{"location":"Rulebook/contracts/interfaces/IWETH.sol/interface.IWETH/#functions","title":"Functions","text":""},{"location":"Rulebook/contracts/interfaces/IWETH.sol/interface.IWETH/#deposit","title":"deposit","text":"
    function deposit() external payable;\n
    "},{"location":"Rulebook/contracts/interfaces/IWETH.sol/interface.IWETH/#withdraw","title":"withdraw","text":"
    function withdraw(uint256 amount) external;\n
    "},{"location":"api/","title":"API Reference","text":"

    API paths to resources are generally broken into multiple segments,

    {scheme}://{host}/{version}/{category}/[{pathSegment}][?{query}]:

    • version: can be v1.0 or beta.
    • category: is a logical grouping of APIs into top-level categories.
    • pathSegment: is one or many navigation segments that can address an entity, collection of entities, property, or operation available for an entity.
    • query: string must follow the OData standard for query representations
    "},{"location":"api/#rpc-methods-available","title":"RPC Methods Available","text":"RPC Method Description eth_blockNumber Returns the number of the most recent block. eth_call Executes a new message call immediately without creating a transaction on the block chain. eth_estimateGas Estimates the amount of gas required to execute a transaction. eth_gasPrice Returns the current price per gas in wei. eth_getBalance Returns the balance of the account of given address. eth_getBlockByHash Returns information about a block by hash. eth_getBlockByNumber Returns information about a block by block number. eth_getBlockTransactionCountByHash Returns the number of transactions in a block from a block matching the given block hash. eth_getBlockTransactionCountByNumber Returns the number of transactions in a block matching the given block number. eth_getCode Returns the code at a given address. eth_getStorageAt Returns the value from a storage position at a given address. eth_getTransactionByBlockHashAndIndex Returns information about a transaction by block hash and transaction index position. eth_getTransactionByBlockNumberAndIndex Returns information about a transaction by block number and transaction index position. eth_getTransactionByHash Returns information about a transaction requested by transaction hash. eth_getTransactionCount Returns the number of transactions sent from an address. eth_getTransactionReceipt Returns the receipt of a transaction by transaction hash. eth_getUncleByBlockHashAndIndex Returns information about an uncle of a block by hash and uncle index position. eth_getUncleByBlockNumberAndIndex Returns information about an uncle of a block by block number and uncle index position. eth_getUncleCountByBlockHash Returns the number of uncles in a block from a block matching the given block hash. eth_getUncleCountByBlockNumber Returns the number of uncles in a block from a block matching the given block number. eth_sign Signs data with a given address. eth_signTypedData Signs typed data with a given address (EIP-712). eth_getLogs Returns an array of logs matching a specified filter condition. net_version Returns the current network protocol version."},{"location":"api/#api-rate-limiting","title":"API Rate Limiting","text":"

    If you receive a rate limit error, you should stop making requests temporarily according to these guidelines:

    Continuing to make requests while you are rate limited may result in the banning of you, your family, and possibly your entire country.

    "},{"location":"api/#exceeding-the-rate-limit","title":"Exceeding the rate limit","text":""},{"location":"api/#80-requests-per-minute-is-the-public-default","title":"80 requests per minute is the public default","text":"

    Warning

    Reach out to us via Telegram or Email to get a rate limit increase if needed.

    If you exceed your primary rate limit, you will receive a 403 or 429 response, and the x-ratelimit-remaining header will be 0. You should not retry your request until after the time specified by the x-ratelimit-reset header.

    If you exceed a secondary rate limit, you will receive a 403 or 429 response and an error message that indicates that you exceeded a secondary rate limit.

    If the retry-after response header is present, you should not retry your request until after that many seconds has elapsed. If the x-ratelimit-remaining header is 0, you should not retry your request until after the time, in UTC epoch seconds, specified by the x-ratelimit-reset header.1

    1. Response header for retry/rate limit is not yet available.\u00a0\u21a9

    "},{"location":"api/beta-auction/","title":"Auction RPC API","text":""},{"location":"api/beta-auction/#beta-block","title":"Beta Block","text":"

    !!swagger openapi.yml!!

    "},{"location":"api/bundle/","title":"Ethereum Bundle API","text":""},{"location":"api/bundle/#bundle-api","title":"Bundle API","text":"

    !!swagger eth-bundle.yml!!

    "},{"location":"api/relay/","title":"Relay API","text":""},{"location":"api/relay/#relay-rest-api","title":"Relay REST API","text":"

    Extended from the Relay spec

    "},{"location":"api/relay/#relay-api-dev","title":"Relay API dev","text":"

    API specification for MEV-Boost PBS relays.

    Contact: GitHub Repository License: CC0-1.0"},{"location":"api/relay/#servers","title":"Servers","text":"Description URL {server_url} {server_url}"},{"location":"api/relay/#builder","title":"Builder","text":""},{"location":"api/relay/#get-relayv1buildervalidators","title":"GET /relay/v1/builder/validators","text":"

    Get a list of validator registrations for validators scheduled to propose in the current and next epoch.

    Description
    • Used by builders to know when to submit bids for an upcoming proposal.

    • Returns an array of validator registrations for the current and next epoch.

    • Each entry includes a slot and the validator with assigned duty.

    • Slots without a registered validator are omitted.

    Response 200 OK

    application/json

    [\n    {\n        \"slot\": \"1\",\n        \"validator_index\": \"1\",\n        \"entry\": {\n            \"message\": {\n                \"fee_recipient\": \"0xAbcF8e0d4e9587369b2301D0790347320302cc09\",\n                \"gas_limit\": \"1\",\n                \"timestamp\": \"1\",\n                \"pubkey\": \"0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a\"\n            },\n            \"signature\": \"0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505\"\n        }\n    }\n]\n
    \u26a0\ufe0f This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

    Schema of the response body
    {\n    \"type\": \"array\",\n    \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n            \"slot\": {\n                \"type\": \"string\",\n                \"example\": \"1\"\n            },\n            \"validator_index\": {\n                \"type\": \"string\",\n                \"example\": \"1\"\n            },\n            \"entry\": {\n                \"type\": \"object\",\n                \"description\": \"The `SignedValidatorRegistration` object from the Builder API specification.\",\n                \"required\": [\n                    \"message\",\n                    \"signature\"\n                ],\n                \"properties\": {\n                    \"message\": {\n                        \"type\": \"object\",\n                        \"description\": \"The `ValidatorRegistration` object from the Builder API specification.\",\n                        \"required\": [\n                            \"fee_recipient\",\n                            \"gas_limit\",\n                            \"timestamp\",\n                            \"pubkey\"\n                        ],\n                        \"properties\": {\n                            \"fee_recipient\": {\n                                \"description\": \"Address to receive fees from the block.\",\n                                \"type\": \"string\",\n                                \"format\": \"hex\",\n                                \"example\": \"0xAbcF8e0d4e9587369b2301D0790347320302cc09\",\n                                \"pattern\": \"^0x[a-fA-F0-9]{40}$\"\n                            },\n                            \"gas_limit\": {\n                                \"description\": \"Preferred gas limit of validator.\",\n                                \"type\": \"string\",\n                                \"example\": \"1\"\n                            },\n                            \"timestamp\": {\n                                \"description\": \"Unix timestamp of registration.\",\n                                \"type\": \"string\",\n                                \"example\": \"1\"\n                            },\n                            \"pubkey\": {\n                                \"description\": \"BLS public key of validator.\",\n                                \"type\": \"string\",\n                                \"format\": \"hex\",\n                                \"pattern\": \"^0x[a-fA-F0-9]{96}$\",\n                                \"example\": \"0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a\"\n                            }\n                        }\n                    },\n                    \"signature\": {\n                        \"type\": \"string\",\n                        \"format\": \"hex\",\n                        \"pattern\": \"^0x[a-fA-F0-9]{192}$\",\n                        \"example\": \"0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505\"\n                    }\n                }\n            }\n        }\n    }\n}\n
    "},{"location":"api/relay/#post-relayv1builderblocks","title":"POST /relay/v1/builder/blocks","text":"

    Submit a new block to the relay.

    Description
    • Blocks can be submitted as JSON or SSZ, and optionally GZIP encoded. To be clear, there are four options: JSON, JSON+GZIP, SSZ, SSZ+GZIP. If JSON, the content type should be application/json. If SSZ, the content type should be application/octet-stream.

    • To enable GZIP compression for the request body, the HTTP content encoding should be gzip. Compression is optional.

    • The relay will simulate the block to verify properties and proposer payment in the payment transaction from builder to proposer fee_recipient at the end of block.

    • For accountability, builder signature is over the SSZ encoded message.

    • The message, which does not include the transactions, will be made public via the data API, allowing anyone to verify the builder signature.

    • Any new submission by a builder will overwrite a previous one by the same builder_pubkey, even if it is less profitable.

    Input parameters

    Parameter In Type Default Nullable Description cancellations query string No If set to 1, opt into bid cancellations.

    Request body

    application/jsonapplication/octet-stream
    {\n    \"message\": {\n        \"slot\": \"1\",\n        \"parent_hash\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n        \"block_hash\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n        \"builder_pubkey\": \"0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a\",\n        \"proposer_fee_recipient\": \"0xabcf8e0d4e9587369b2301d0790347320302cc09\",\n        \"gas_limit\": \"1\",\n        \"gas_used\": \"1\",\n        \"value\": \"1\"\n    },\n    \"execution_payload\": {\n        \"parent_hash\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n        \"fee_recipient\": \"0xabcf8e0d4e9587369b2301d0790347320302cc09\",\n        \"state_root\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n        \"receipts_root\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n        \"logs_bloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n        \"prev_randao\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n        \"block_number\": \"1\",\n        \"gas_limit\": \"1\",\n        \"gas_used\": \"1\",\n        \"timestamp\": \"1\",\n        \"extra_data\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n        \"base_fee_per_gas\": \"1\",\n        \"block_hash\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n        \"transactions\": [\n            \"0x02f878831469668303f51d843b9ac9f9843b9aca0082520894c93269b73096998db66be0441e836d873535cb9c8894a19041886f000080c001a031cc29234036afbf9a1fb9476b463367cb1f957ac0b919b69bbc798436e604aaa018c4e9c3914eb27aadd0b91e10b18655739fcf8c1fc398763a9f1beecb8ddc86\"\n        ]\n    },\n    \"signature\": \"0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505\"\n}\n
    {\n    \"message\": {\n        \"slot\": \"1\",\n        \"parent_hash\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n        \"block_hash\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n        \"builder_pubkey\": \"0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a\",\n        \"proposer_fee_recipient\": \"0xabcf8e0d4e9587369b2301d0790347320302cc09\",\n        \"gas_limit\": \"1\",\n        \"gas_used\": \"1\",\n        \"value\": \"1\"\n    },\n    \"execution_payload\": {\n        \"parent_hash\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n        \"fee_recipient\": \"0xabcf8e0d4e9587369b2301d0790347320302cc09\",\n        \"state_root\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n        \"receipts_root\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n        \"logs_bloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n        \"prev_randao\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n        \"block_number\": \"1\",\n        \"gas_limit\": \"1\",\n        \"gas_used\": \"1\",\n        \"timestamp\": \"1\",\n        \"extra_data\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n        \"base_fee_per_gas\": \"1\",\n        \"block_hash\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n        \"transactions\": [\n            \"0x02f878831469668303f51d843b9ac9f9843b9aca0082520894c93269b73096998db66be0441e836d873535cb9c8894a19041886f000080c001a031cc29234036afbf9a1fb9476b463367cb1f957ac0b919b69bbc798436e604aaa018c4e9c3914eb27aadd0b91e10b18655739fcf8c1fc398763a9f1beecb8ddc86\"\n        ],\n        \"withdrawals\": [\n            {\n                \"index\": \"1\",\n                \"validator_index\": \"1\",\n                \"address\": \"0xabcf8e0d4e9587369b2301d0790347320302cc09\",\n                \"amount\": \"32000000000\"\n            }\n        ]\n    },\n    \"signature\": \"0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505\"\n}\n
    {\n    \"message\": {\n        \"slot\": \"1\",\n        \"parent_hash\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n        \"block_hash\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n        \"builder_pubkey\": \"0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a\",\n        \"proposer_fee_recipient\": \"0xabcf8e0d4e9587369b2301d0790347320302cc09\",\n        \"gas_limit\": \"1\",\n        \"gas_used\": \"1\",\n        \"value\": \"1\"\n    },\n    \"execution_payload\": {\n        \"parent_hash\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n        \"fee_recipient\": \"0xabcf8e0d4e9587369b2301d0790347320302cc09\",\n        \"state_root\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n        \"receipts_root\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n        \"logs_bloom\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n        \"prev_randao\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n        \"block_number\": \"1\",\n        \"gas_limit\": \"1\",\n        \"gas_used\": \"1\",\n        \"timestamp\": \"1\",\n        \"extra_data\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n        \"base_fee_per_gas\": \"1\",\n        \"block_hash\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n        \"transactions\": [\n            \"0x02f878831469668303f51d843b9ac9f9843b9aca0082520894c93269b73096998db66be0441e836d873535cb9c8894a19041886f000080c001a031cc29234036afbf9a1fb9476b463367cb1f957ac0b919b69bbc798436e604aaa018c4e9c3914eb27aadd0b91e10b18655739fcf8c1fc398763a9f1beecb8ddc86\"\n        ],\n        \"withdrawals\": [\n            {\n                \"index\": \"1\",\n                \"validator_index\": \"1\",\n                \"address\": \"0xabcf8e0d4e9587369b2301d0790347320302cc09\",\n                \"amount\": \"32000000000\"\n            }\n        ]\n    },\n    \"blobs_bundle\": {\n        \"commitments\": [\n            \"0x8dab030c51e16e84be9caab84ee3d0b8bbec1db4a0e4de76439da8424d9b957370a10a78851f97e4b54d2ce1ab0d686f\"\n        ],\n        \"proofs\": [\n            \"0xb4021b0de10f743893d4f71e1bf830c019e832958efd6795baf2f83b8699a9eccc5dc99015d8d4d8ec370d0cc333c06a\"\n        ],\n        \"blobs\": [\n            \"0x24564723180fcb3d994104538d351c8dcbde12d541676bb736cf678018ca4739\"\n        ]\n    },\n    \"signature\": \"0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505\"\n}\n
    Schema of the request body
    {\n    \"oneOf\": [\n        {\n            \"allOf\": [\n                {\n                    \"type\": \"object\",\n                    \"properties\": {\n                        \"message\": {\n                            \"type\": \"object\",\n                            \"properties\": {\n                                \"slot\": {\n                                    \"type\": \"string\",\n                                    \"example\": \"1\"\n                                },\n                                \"parent_hash\": {\n                                    \"type\": \"string\",\n                                    \"format\": \"hex\",\n                                    \"example\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n                                    \"pattern\": \"^0x[a-fA-F0-9]{64}$\"\n                                },\n                                \"block_hash\": {\n                                    \"type\": \"string\",\n                                    \"format\": \"hex\",\n                                    \"example\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n                                    \"pattern\": \"^0x[a-fA-F0-9]{64}$\"\n                                },\n                                \"builder_pubkey\": {\n                                    \"type\": \"string\",\n                                    \"format\": \"hex\",\n                                    \"pattern\": \"^0x[a-fA-F0-9]{96}$\",\n                                    \"description\": \"The validator's BLS public key, uniquely identifying them. _48-bytes, hex encoded with 0x prefix, case insensitive._\",\n                                    \"example\": \"0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a\"\n                                },\n                                \"proposer_pubkey\": {\n                                    \"type\": \"string\",\n                                    \"format\": \"hex\",\n                                    \"pattern\": \"^0x[a-fA-F0-9]{96}$\",\n                                    \"description\": \"The validator's BLS public key, uniquely identifying them. _48-bytes, hex encoded with 0x prefix, case insensitive._\",\n                                    \"example\": \"0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a\"\n                                },\n                                \"proposer_fee_recipient\": {\n                                    \"type\": \"string\",\n                                    \"format\": \"hex\",\n                                    \"description\": \"An address on the execution (Ethereum 1) network.\",\n                                    \"example\": \"0xAbcF8e0d4e9587369b2301D0790347320302cc09\",\n                                    \"pattern\": \"^0x[a-fA-F0-9]{40}$\"\n                                },\n                                \"gas_limit\": {\n                                    \"type\": \"string\",\n                                    \"example\": \"1\"\n                                },\n                                \"gas_used\": {\n                                    \"type\": \"string\",\n                                    \"example\": \"1\"\n                                },\n                                \"value\": {\n                                    \"type\": \"string\",\n                                    \"example\": \"1\"\n                                }\n                            }\n                        },\n                        \"signature\": {\n                            \"type\": \"string\",\n                            \"format\": \"hex\",\n                            \"pattern\": \"^0x[a-fA-F0-9]{192}$\",\n                            \"example\": \"0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505\"\n                        }\n                    }\n                },\n                {\n                    \"type\": \"object\",\n                    \"properties\": {\n                        \"execution_payload\": {\n                            \"allOf\": [\n                                {\n                                    \"type\": \"object\",\n                                    \"description\": \"The [`ExecutionPayload`](https://github.com/ethereum/consensus-specs/blob/v1.3.0/specs/bellatrix/beacon-chain.md#executionpayload) object from the CL Bellatrix spec.\",\n                                    \"required\": [\n                                        \"parent_hash\",\n                                        \"fee_recipient\",\n                                        \"state_root\",\n                                        \"receipts_root\",\n                                        \"logs_bloom\",\n                                        \"prev_randao\",\n                                        \"block_number\",\n                                        \"gas_limit\",\n                                        \"gas_used\",\n                                        \"timestamp\",\n                                        \"extra_data\",\n                                        \"base_fee_per_gas\",\n                                        \"block_hash\"\n                                    ],\n                                    \"properties\": {\n                                        \"parent_hash\": {\n                                            \"type\": \"string\",\n                                            \"format\": \"hex\",\n                                            \"example\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n                                            \"pattern\": \"^0x[a-fA-F0-9]{64}$\"\n                                        },\n                                        \"fee_recipient\": {\n                                            \"type\": \"string\",\n                                            \"format\": \"hex\",\n                                            \"description\": \"An address on the execution (Ethereum 1) network.\",\n                                            \"example\": \"0xAbcF8e0d4e9587369b2301D0790347320302cc09\",\n                                            \"pattern\": \"^0x[a-fA-F0-9]{40}$\"\n                                        },\n                                        \"state_root\": {\n                                            \"type\": \"string\",\n                                            \"format\": \"hex\",\n                                            \"example\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n                                            \"pattern\": \"^0x[a-fA-F0-9]{64}$\"\n                                        },\n                                        \"receipts_root\": {\n                                            \"type\": \"string\",\n                                            \"format\": \"hex\",\n                                            \"example\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n                                            \"pattern\": \"^0x[a-fA-F0-9]{64}$\"\n                                        },\n                                        \"logs_bloom\": {\n                                            \"type\": \"string\",\n                                            \"format\": \"hex\",\n                                            \"example\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n                                            \"pattern\": \"^0x[a-fA-F0-9]{512}$\"\n                                        },\n                                        \"prev_randao\": {\n                                            \"type\": \"string\",\n                                            \"format\": \"hex\",\n                                            \"example\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n                                            \"pattern\": \"^0x[a-fA-F0-9]{64}$\"\n                                        },\n                                        \"block_number\": {\n                                            \"type\": \"string\",\n                                            \"example\": \"1\"\n                                        },\n                                        \"gas_limit\": {\n                                            \"type\": \"string\",\n                                            \"example\": \"1\"\n                                        },\n                                        \"gas_used\": {\n                                            \"type\": \"string\",\n                                            \"example\": \"1\"\n                                        },\n                                        \"timestamp\": {\n                                            \"type\": \"string\",\n                                            \"example\": \"1\"\n                                        },\n                                        \"extra_data\": {\n                                            \"type\": \"string\",\n                                            \"format\": \"hex\",\n                                            \"description\": \"Extra data on the execution (Ethereum 1) network.\",\n                                            \"example\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n                                            \"pattern\": \"^0x[a-fA-F0-9]{0,64}$\"\n                                        },\n                                        \"base_fee_per_gas\": {\n                                            \"type\": \"string\",\n                                            \"example\": \"1\"\n                                        },\n                                        \"block_hash\": {\n                                            \"type\": \"string\",\n                                            \"format\": \"hex\",\n                                            \"example\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n                                            \"pattern\": \"^0x[a-fA-F0-9]{64}$\"\n                                        }\n                                    }\n                                },\n                                {\n                                    \"type\": \"object\",\n                                    \"required\": [\n                                        \"transactions\"\n                                    ],\n                                    \"properties\": {\n                                        \"transactions\": {\n                                            \"type\": \"array\",\n                                            \"items\": {\n                                                \"type\": \"string\",\n                                                \"format\": \"hex\",\n                                                \"description\": \"A transaction on the execution (Ethereum 1) network.\",\n                                                \"example\": \"0x02f878831469668303f51d843b9ac9f9843b9aca0082520894c93269b73096998db66be0441e836d873535cb9c8894a19041886f000080c001a031cc29234036afbf9a1fb9476b463367cb1f957ac0b919b69bbc798436e604aaa018c4e9c3914eb27aadd0b91e10b18655739fcf8c1fc398763a9f1beecb8ddc86\",\n                                                \"pattern\": \"^0x[a-fA-F0-9]{0,2147483648}$\"\n                                            },\n                                            \"maxItems\": 1048576\n                                        }\n                                    }\n                                }\n                            ]\n                        }\n                    }\n                }\n            ]\n        },\n        {\n            \"allOf\": [\n                {\n                    \"type\": \"object\",\n                    \"properties\": {\n                        \"message\": {\n                            \"type\": \"object\",\n                            \"properties\": {\n                                \"slot\": {\n                                    \"type\": \"string\",\n                                    \"example\": \"1\"\n                                },\n                                \"parent_hash\": {\n                                    \"type\": \"string\",\n                                    \"format\": \"hex\",\n                                    \"example\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n                                    \"pattern\": \"^0x[a-fA-F0-9]{64}$\"\n                                },\n                                \"block_hash\": {\n                                    \"type\": \"string\",\n                                    \"format\": \"hex\",\n                                    \"example\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n                                    \"pattern\": \"^0x[a-fA-F0-9]{64}$\"\n                                },\n                                \"builder_pubkey\": {\n                                    \"type\": \"string\",\n                                    \"format\": \"hex\",\n                                    \"pattern\": \"^0x[a-fA-F0-9]{96}$\",\n                                    \"description\": \"The validator's BLS public key, uniquely identifying them. _48-bytes, hex encoded with 0x prefix, case insensitive._\",\n                                    \"example\": \"0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a\"\n                                },\n                                \"proposer_pubkey\": {\n                                    \"type\": \"string\",\n                                    \"format\": \"hex\",\n                                    \"pattern\": \"^0x[a-fA-F0-9]{96}$\",\n                                    \"description\": \"The validator's BLS public key, uniquely identifying them. _48-bytes, hex encoded with 0x prefix, case insensitive._\",\n                                    \"example\": \"0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a\"\n                                },\n                                \"proposer_fee_recipient\": {\n                                    \"type\": \"string\",\n                                    \"format\": \"hex\",\n                                    \"description\": \"An address on the execution (Ethereum 1) network.\",\n                                    \"example\": \"0xAbcF8e0d4e9587369b2301D0790347320302cc09\",\n                                    \"pattern\": \"^0x[a-fA-F0-9]{40}$\"\n                                },\n                                \"gas_limit\": {\n                                    \"type\": \"string\",\n                                    \"example\": \"1\"\n                                },\n                                \"gas_used\": {\n                                    \"type\": \"string\",\n                                    \"example\": \"1\"\n                                },\n                                \"value\": {\n                                    \"type\": \"string\",\n                                    \"example\": \"1\"\n                                }\n                            }\n                        },\n                        \"signature\": {\n                            \"type\": \"string\",\n                            \"format\": \"hex\",\n                            \"pattern\": \"^0x[a-fA-F0-9]{192}$\",\n                            \"example\": \"0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505\"\n                        }\n                    }\n                },\n                {\n                    \"type\": \"object\",\n                    \"properties\": {\n                        \"execution_payload\": {\n                            \"allOf\": [\n                                {\n                                    \"type\": \"object\",\n                                    \"description\": \"The [`ExecutionPayload`](https://github.com/ethereum/consensus-specs/blob/v1.3.0/specs/capella/beacon-chain.md#executionpayload) object from the CL Capella spec.\",\n                                    \"required\": [\n                                        \"parent_hash\",\n                                        \"fee_recipient\",\n                                        \"state_root\",\n                                        \"receipts_root\",\n                                        \"logs_bloom\",\n                                        \"prev_randao\",\n                                        \"block_number\",\n                                        \"gas_limit\",\n                                        \"gas_used\",\n                                        \"timestamp\",\n                                        \"extra_data\",\n                                        \"base_fee_per_gas\",\n                                        \"block_hash\"\n                                    ],\n                                    \"properties\": {\n                                        \"parent_hash\": {\n                                            \"type\": \"string\",\n                                            \"format\": \"hex\",\n                                            \"example\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n                                            \"pattern\": \"^0x[a-fA-F0-9]{64}$\"\n                                        },\n                                        \"fee_recipient\": {\n                                            \"type\": \"string\",\n                                            \"format\": \"hex\",\n                                            \"description\": \"An address on the execution (Ethereum 1) network.\",\n                                            \"example\": \"0xAbcF8e0d4e9587369b2301D0790347320302cc09\",\n                                            \"pattern\": \"^0x[a-fA-F0-9]{40}$\"\n                                        },\n                                        \"state_root\": {\n                                            \"type\": \"string\",\n                                            \"format\": \"hex\",\n                                            \"example\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n                                            \"pattern\": \"^0x[a-fA-F0-9]{64}$\"\n                                        },\n                                        \"receipts_root\": {\n                                            \"type\": \"string\",\n                                            \"format\": \"hex\",\n                                            \"example\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n                                            \"pattern\": \"^0x[a-fA-F0-9]{64}$\"\n                                        },\n                                        \"logs_bloom\": {\n                                            \"type\": \"string\",\n                                            \"format\": \"hex\",\n                                            \"example\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n                                            \"pattern\": \"^0x[a-fA-F0-9]{512}$\"\n                                        },\n                                        \"prev_randao\": {\n                                            \"type\": \"string\",\n                                            \"format\": \"hex\",\n                                            \"example\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n                                            \"pattern\": \"^0x[a-fA-F0-9]{64}$\"\n                                        },\n                                        \"block_number\": {\n                                            \"type\": \"string\",\n                                            \"example\": \"1\"\n                                        },\n                                        \"gas_limit\": {\n                                            \"type\": \"string\",\n                                            \"example\": \"1\"\n                                        },\n                                        \"gas_used\": {\n                                            \"type\": \"string\",\n                                            \"example\": \"1\"\n                                        },\n                                        \"timestamp\": {\n                                            \"type\": \"string\",\n                                            \"example\": \"1\"\n                                        },\n                                        \"extra_data\": {\n                                            \"type\": \"string\",\n                                            \"format\": \"hex\",\n                                            \"description\": \"Extra data on the execution (Ethereum 1) network.\",\n                                            \"example\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n                                            \"pattern\": \"^0x[a-fA-F0-9]{0,64}$\"\n                                        },\n                                        \"base_fee_per_gas\": {\n                                            \"type\": \"string\",\n                                            \"example\": \"1\"\n                                        },\n                                        \"block_hash\": {\n                                            \"type\": \"string\",\n                                            \"format\": \"hex\",\n                                            \"example\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n                                            \"pattern\": \"^0x[a-fA-F0-9]{64}$\"\n                                        }\n                                    }\n                                },\n                                {\n                                    \"type\": \"object\",\n                                    \"required\": [\n                                        \"transactions\",\n                                        \"withdrawals\"\n                                    ],\n                                    \"properties\": {\n                                        \"transactions\": {\n                                            \"type\": \"array\",\n                                            \"items\": {\n                                                \"type\": \"string\",\n                                                \"format\": \"hex\",\n                                                \"description\": \"A transaction on the execution (Ethereum 1) network.\",\n                                                \"example\": \"0x02f878831469668303f51d843b9ac9f9843b9aca0082520894c93269b73096998db66be0441e836d873535cb9c8894a19041886f000080c001a031cc29234036afbf9a1fb9476b463367cb1f957ac0b919b69bbc798436e604aaa018c4e9c3914eb27aadd0b91e10b18655739fcf8c1fc398763a9f1beecb8ddc86\",\n                                                \"pattern\": \"^0x[a-fA-F0-9]{0,2147483648}$\"\n                                            },\n                                            \"maxItems\": 1048576\n                                        },\n                                        \"withdrawals\": {\n                                            \"type\": \"array\",\n                                            \"items\": {\n                                                \"type\": \"object\",\n                                                \"required\": [\n                                                    \"index\",\n                                                    \"validator_index\",\n                                                    \"address\",\n                                                    \"amount\"\n                                                ],\n                                                \"properties\": {\n                                                    \"index\": {\n                                                        \"description\": \"The index of the withdrawal.\",\n                                                        \"type\": \"string\",\n                                                        \"example\": \"1\"\n                                                    },\n                                                    \"validator_index\": {\n                                                        \"description\": \"The index of the withdrawing validator.\",\n                                                        \"type\": \"string\",\n                                                        \"example\": \"1\"\n                                                    },\n                                                    \"address\": {\n                                                        \"description\": \"The address to which the withdrawal is credited.\",\n                                                        \"type\": \"string\",\n                                                        \"format\": \"hex\",\n                                                        \"example\": \"0xAbcF8e0d4e9587369b2301D0790347320302cc09\",\n                                                        \"pattern\": \"^0x[a-fA-F0-9]{40}$\"\n                                                    },\n                                                    \"amount\": {\n                                                        \"description\": \"The value withdrawn (gwei).\",\n                                                        \"type\": \"string\",\n                                                        \"example\": \"1\"\n                                                    }\n                                                }\n                                            },\n                                            \"maxItems\": 16\n                                        }\n                                    }\n                                }\n                            ]\n                        }\n                    }\n                }\n            ]\n        },\n        {\n            \"allOf\": [\n                {\n                    \"type\": \"object\",\n                    \"properties\": {\n                        \"message\": {\n                            \"type\": \"object\",\n                            \"properties\": {\n                                \"slot\": {\n                                    \"type\": \"string\",\n                                    \"example\": \"1\"\n                                },\n                                \"parent_hash\": {\n                                    \"type\": \"string\",\n                                    \"format\": \"hex\",\n                                    \"example\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n                                    \"pattern\": \"^0x[a-fA-F0-9]{64}$\"\n                                },\n                                \"block_hash\": {\n                                    \"type\": \"string\",\n                                    \"format\": \"hex\",\n                                    \"example\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n                                    \"pattern\": \"^0x[a-fA-F0-9]{64}$\"\n                                },\n                                \"builder_pubkey\": {\n                                    \"type\": \"string\",\n                                    \"format\": \"hex\",\n                                    \"pattern\": \"^0x[a-fA-F0-9]{96}$\",\n                                    \"description\": \"The validator's BLS public key, uniquely identifying them. _48-bytes, hex encoded with 0x prefix, case insensitive._\",\n                                    \"example\": \"0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a\"\n                                },\n                                \"proposer_pubkey\": {\n                                    \"type\": \"string\",\n                                    \"format\": \"hex\",\n                                    \"pattern\": \"^0x[a-fA-F0-9]{96}$\",\n                                    \"description\": \"The validator's BLS public key, uniquely identifying them. _48-bytes, hex encoded with 0x prefix, case insensitive._\",\n                                    \"example\": \"0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a\"\n                                },\n                                \"proposer_fee_recipient\": {\n                                    \"type\": \"string\",\n                                    \"format\": \"hex\",\n                                    \"description\": \"An address on the execution (Ethereum 1) network.\",\n                                    \"example\": \"0xAbcF8e0d4e9587369b2301D0790347320302cc09\",\n                                    \"pattern\": \"^0x[a-fA-F0-9]{40}$\"\n                                },\n                                \"gas_limit\": {\n                                    \"type\": \"string\",\n                                    \"example\": \"1\"\n                                },\n                                \"gas_used\": {\n                                    \"type\": \"string\",\n                                    \"example\": \"1\"\n                                },\n                                \"value\": {\n                                    \"type\": \"string\",\n                                    \"example\": \"1\"\n                                }\n                            }\n                        },\n                        \"signature\": {\n                            \"type\": \"string\",\n                            \"format\": \"hex\",\n                            \"pattern\": \"^0x[a-fA-F0-9]{192}$\",\n                            \"example\": \"0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505\"\n                        }\n                    }\n                },\n                {\n                    \"type\": \"object\",\n                    \"description\": \"A wrapper object containing the ExecutionPayload and the BlobsBundle\",\n                    \"required\": [\n                        \"execution_payload\",\n                        \"blobs_bundle\"\n                    ],\n                    \"properties\": {\n                        \"execution_payload\": {\n                            \"allOf\": [\n                                {\n                                    \"type\": \"object\",\n                                    \"description\": \"The [`ExecutionPayload`](https://github.com/ethereum/consensus-specs/blob/master/specs/deneb/beacon-chain.md#executionpayload) object from the CL Deneb spec.\",\n                                    \"properties\": {\n                                        \"parent_hash\": {\n                                            \"type\": \"string\",\n                                            \"format\": \"hex\",\n                                            \"example\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n                                            \"pattern\": \"^0x[a-fA-F0-9]{64}$\"\n                                        },\n                                        \"fee_recipient\": {\n                                            \"type\": \"string\",\n                                            \"format\": \"hex\",\n                                            \"description\": \"An address on the execution (Ethereum 1) network.\",\n                                            \"example\": \"0xabcf8e0d4e9587369b2301d0790347320302cc09\",\n                                            \"pattern\": \"^0x[a-fA-F0-9]{40}$\"\n                                        },\n                                        \"state_root\": {\n                                            \"type\": \"string\",\n                                            \"format\": \"hex\",\n                                            \"example\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n                                            \"pattern\": \"^0x[a-fA-F0-9]{64}$\"\n                                        },\n                                        \"receipts_root\": {\n                                            \"type\": \"string\",\n                                            \"format\": \"hex\",\n                                            \"example\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n                                            \"pattern\": \"^0x[a-fA-F0-9]{64}$\"\n                                        },\n                                        \"logs_bloom\": {\n                                            \"type\": \"string\",\n                                            \"format\": \"hex\",\n                                            \"example\": \"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\n                                            \"pattern\": \"^0x[a-fA-F0-9]{512}$\"\n                                        },\n                                        \"prev_randao\": {\n                                            \"type\": \"string\",\n                                            \"format\": \"hex\",\n                                            \"example\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n                                            \"pattern\": \"^0x[a-fA-F0-9]{64}$\"\n                                        },\n                                        \"block_number\": {\n                                            \"type\": \"string\",\n                                            \"example\": \"1\"\n                                        },\n                                        \"gas_limit\": {\n                                            \"type\": \"string\",\n                                            \"example\": \"1\"\n                                        },\n                                        \"gas_used\": {\n                                            \"type\": \"string\",\n                                            \"example\": \"1\"\n                                        },\n                                        \"timestamp\": {\n                                            \"type\": \"string\",\n                                            \"example\": \"1\"\n                                        },\n                                        \"extra_data\": {\n                                            \"type\": \"string\",\n                                            \"format\": \"hex\",\n                                            \"description\": \"Extra data on the execution (Ethereum 1) network.\",\n                                            \"example\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n                                            \"pattern\": \"^0x[a-fA-F0-9]{0,64}$\"\n                                        },\n                                        \"base_fee_per_gas\": {\n                                            \"type\": \"string\",\n                                            \"example\": \"1\"\n                                        },\n                                        \"excess_data_gas\": {\n                                            \"type\": \"string\",\n                                            \"example\": \"1\"\n                                        },\n                                        \"block_hash\": {\n                                            \"type\": \"string\",\n                                            \"format\": \"hex\",\n                                            \"example\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n                                            \"pattern\": \"^0x[a-fA-F0-9]{64}$\"\n                                        }\n                                    }\n                                },\n                                {\n                                    \"type\": \"object\",\n                                    \"properties\": {\n                                        \"transactions\": {\n                                            \"type\": \"array\",\n                                            \"items\": {\n                                                \"type\": \"string\",\n                                                \"format\": \"hex\",\n                                                \"description\": \"A transaction on the execution (Ethereum 1) network.\",\n                                                \"example\": \"0x02f878831469668303f51d843b9ac9f9843b9aca0082520894c93269b73096998db66be0441e836d873535cb9c8894a19041886f000080c001a031cc29234036afbf9a1fb9476b463367cb1f957ac0b919b69bbc798436e604aaa018c4e9c3914eb27aadd0b91e10b18655739fcf8c1fc398763a9f1beecb8ddc86\",\n                                                \"pattern\": \"^0x[a-fA-F0-9]{0,2147483648}$\"\n                                            },\n                                            \"maxItems\": 1048576\n                                        },\n                                        \"withdrawals\": {\n                                            \"type\": \"array\",\n                                            \"items\": {\n                                                \"type\": \"object\",\n                                                \"properties\": {\n                                                    \"index\": {\n                                                        \"description\": \"The index of the withdrawal.\",\n                                                        \"type\": \"string\",\n                                                        \"example\": \"1\"\n                                                    },\n                                                    \"validator_index\": {\n                                                        \"description\": \"The index of the withdrawing validator.\",\n                                                        \"type\": \"string\",\n                                                        \"example\": \"1\"\n                                                    },\n                                                    \"address\": {\n                                                        \"description\": \"The address to which the withdrawal is credited.\",\n                                                        \"type\": \"string\",\n                                                        \"format\": \"hex\",\n                                                        \"example\": \"0xabcf8e0d4e9587369b2301d0790347320302cc09\",\n                                                        \"pattern\": \"^0x[a-fA-F0-9]{40}$\"\n                                                    },\n                                                    \"amount\": {\n                                                        \"description\": \"The value withdrawn (gwei).\",\n                                                        \"type\": \"string\",\n                                                        \"example\": \"1\"\n                                                    }\n                                                }\n                                            },\n                                            \"maxItems\": 16\n                                        }\n                                    }\n                                }\n                            ]\n                        },\n                        \"blobs_bundle\": {\n                            \"type\": \"object\",\n                            \"description\": \"The `BlobsBundle` object from the CL Deneb spec\",\n                            \"required\": [\n                                \"blobs\",\n                                \"commitments\",\n                                \"proofs\"\n                            ],\n                            \"properties\": {\n                                \"blobs\": {\n                                    \"type\": \"array\",\n                                    \"items\": {\n                                        \"type\": \"string\",\n                                        \"format\": \"hex\",\n                                        \"pattern\": \"^0x[a-fA-F0-9]{262144}$\",\n                                        \"description\": \"A blob is `FIELD_ELEMENTS_PER_BLOB * size_of(BLSFieldElement) = 4096 * 32 = 131072` bytes (`DATA`) representing a SSZ-encoded Blob as defined in Deneb\"\n                                    },\n                                    \"minItems\": 0,\n                                    \"maxItems\": 4096\n                                },\n                                \"commitments\": {\n                                    \"type\": \"array\",\n                                    \"items\": {\n                                        \"type\": \"string\",\n                                        \"format\": \"hex\",\n                                        \"pattern\": \"^0x[a-fA-F0-9]{96}$\",\n                                        \"description\": \"A G1 curve point. Same as BLS standard \\\"is valid pubkey\\\" check but also allows `0x00..00` for point-at-infinity\",\n                                        \"example\": \"0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a\"\n                                    },\n                                    \"minItems\": 0,\n                                    \"maxItems\": 4096\n                                },\n                                \"proofs\": {\n                                    \"type\": \"array\",\n                                    \"items\": {\n                                        \"type\": \"string\",\n                                        \"format\": \"hex\",\n                                        \"pattern\": \"^0x[a-fA-F0-9]{96}$\",\n                                        \"description\": \"A G1 curve point. Used for verifying that the `KZGCommitment` for a given `Blob` is correct.\"\n                                    },\n                                    \"minItems\": 0,\n                                    \"maxItems\": 4096\n                                }\n                            }\n                        }\n                    }\n                }\n            ]\n        }\n    ]\n}\n
    Schema of the request body
    {\n    \"description\": \"SSZ serialized request. Use content type header to indicate that SSZ data is contained in the request body.\"\n}\n

    Response 200 OK

    Response 400 Bad Request

    application/json Schema of the response body
    {\n    \"allOf\": [\n        {\n            \"type\": \"object\",\n            \"required\": [\n                \"code\",\n                \"message\"\n            ],\n            \"properties\": {\n                \"code\": {\n                    \"description\": \"Either specific error code in case of invalid request or http status code\",\n                    \"type\": \"number\",\n                    \"example\": 404\n                },\n                \"message\": {\n                    \"description\": \"Message describing error\",\n                    \"type\": \"string\"\n                },\n                \"stacktraces\": {\n                    \"description\": \"Optional stacktraces, sent when node is in debug mode\",\n                    \"type\": \"array\",\n                    \"items\": {\n                        \"type\": \"string\"\n                    }\n                }\n            }\n        },\n        {\n            \"example\": {\n                \"code\": 400,\n                \"message\": \"payload for this slot was already delivered\"\n            }\n        }\n    ]\n}\n

    Response 500 Internal Server Error

    application/json
    {\n    \"code\": 500,\n    \"message\": \"internal server error\"\n}\n
    Schema of the response body
    {\n    \"type\": \"object\",\n    \"properties\": {\n        \"code\": {\n            \"description\": \"Either specific error code in case of invalid request or http status code\",\n            \"type\": \"number\",\n            \"example\": 404\n        },\n        \"message\": {\n            \"description\": \"Message describing error\",\n            \"type\": \"string\"\n        },\n        \"stacktraces\": {\n            \"description\": \"Optional stacktraces, sent when node is in debug mode\",\n            \"type\": \"array\",\n            \"items\": {\n                \"type\": \"string\"\n            }\n        }\n    }\n}\n
    "},{"location":"api/relay/#data","title":"Data","text":""},{"location":"api/relay/#get-relayv1databidtracesproposer_payload_delivered","title":"GET /relay/v1/data/bidtraces/proposer_payload_delivered","text":"

    Get payloads that were delivered to proposers.

    Description
    • Payloads become available after the relay responds to a getPayload request from the proposer.

    • Query arguments are used as filters.

    Input parameters

    Parameter In Type Default Nullable Description block_hash query string No A specific block hash. block_number query string No A specific block number. builder_pubkey query string No A specific builder public key. cursor query string No A starting slot for multiple results. limit query string No The number of results. order_by query string No Sort results in order of... proposer_pubkey query string No A specific proposer public key. slot query string No A specific slot.

    Response 200 OK

    application/json

    [\n    null\n]\n
    \u26a0\ufe0f This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

    Schema of the response body
    {\n    \"type\": \"array\",\n    \"items\": {\n        \"allOf\": [\n            {\n                \"type\": \"object\",\n                \"properties\": {\n                    \"slot\": {\n                        \"type\": \"string\",\n                        \"example\": \"1\"\n                    },\n                    \"parent_hash\": {\n                        \"type\": \"string\",\n                        \"format\": \"hex\",\n                        \"example\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n                        \"pattern\": \"^0x[a-fA-F0-9]{64}$\"\n                    },\n                    \"block_hash\": {\n                        \"type\": \"string\",\n                        \"format\": \"hex\",\n                        \"example\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n                        \"pattern\": \"^0x[a-fA-F0-9]{64}$\"\n                    },\n                    \"builder_pubkey\": {\n                        \"type\": \"string\",\n                        \"format\": \"hex\",\n                        \"pattern\": \"^0x[a-fA-F0-9]{96}$\",\n                        \"description\": \"The validator's BLS public key, uniquely identifying them. _48-bytes, hex encoded with 0x prefix, case insensitive._\",\n                        \"example\": \"0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a\"\n                    },\n                    \"proposer_pubkey\": {\n                        \"type\": \"string\",\n                        \"format\": \"hex\",\n                        \"pattern\": \"^0x[a-fA-F0-9]{96}$\",\n                        \"description\": \"The validator's BLS public key, uniquely identifying them. _48-bytes, hex encoded with 0x prefix, case insensitive._\",\n                        \"example\": \"0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a\"\n                    },\n                    \"proposer_fee_recipient\": {\n                        \"type\": \"string\",\n                        \"format\": \"hex\",\n                        \"description\": \"An address on the execution (Ethereum 1) network.\",\n                        \"example\": \"0xAbcF8e0d4e9587369b2301D0790347320302cc09\",\n                        \"pattern\": \"^0x[a-fA-F0-9]{40}$\"\n                    },\n                    \"gas_limit\": {\n                        \"type\": \"string\",\n                        \"example\": \"1\"\n                    },\n                    \"gas_used\": {\n                        \"type\": \"string\",\n                        \"example\": \"1\"\n                    },\n                    \"value\": {\n                        \"type\": \"string\",\n                        \"example\": \"1\"\n                    }\n                }\n            },\n            {\n                \"type\": \"object\",\n                \"properties\": {\n                    \"block_number\": {\n                        \"type\": \"string\",\n                        \"example\": \"1\"\n                    },\n                    \"num_tx\": {\n                        \"type\": \"string\",\n                        \"example\": \"1\"\n                    }\n                }\n            }\n        ]\n    }\n}\n

    Response 400 Bad Request

    application/json Schema of the response body
    {\n    \"allOf\": [\n        {\n            \"type\": \"object\",\n            \"required\": [\n                \"code\",\n                \"message\"\n            ],\n            \"properties\": {\n                \"code\": {\n                    \"description\": \"Either specific error code in case of invalid request or http status code\",\n                    \"type\": \"number\",\n                    \"example\": 404\n                },\n                \"message\": {\n                    \"description\": \"Message describing error\",\n                    \"type\": \"string\"\n                },\n                \"stacktraces\": {\n                    \"description\": \"Optional stacktraces, sent when node is in debug mode\",\n                    \"type\": \"array\",\n                    \"items\": {\n                        \"type\": \"string\"\n                    }\n                }\n            }\n        },\n        {\n            \"example\": {\n                \"code\": 400,\n                \"message\": \"invalid block_hash argument\"\n            }\n        }\n    ]\n}\n

    Response 500 Internal Server Error

    application/json
    {\n    \"code\": 500,\n    \"message\": \"internal server error\"\n}\n
    Schema of the response body
    {\n    \"type\": \"object\",\n    \"properties\": {\n        \"code\": {\n            \"description\": \"Either specific error code in case of invalid request or http status code\",\n            \"type\": \"number\",\n            \"example\": 404\n        },\n        \"message\": {\n            \"description\": \"Message describing error\",\n            \"type\": \"string\"\n        },\n        \"stacktraces\": {\n            \"description\": \"Optional stacktraces, sent when node is in debug mode\",\n            \"type\": \"array\",\n            \"items\": {\n                \"type\": \"string\"\n            }\n        }\n    }\n}\n
    "},{"location":"api/relay/#get-relayv1databidtracesbuilder_blocks_received","title":"GET /relay/v1/data/bidtraces/builder_blocks_received","text":"

    Get builder bid submissions.

    Description
    • Returns a list of builder bids without execution payloads.

    • Only submissions that were successfully verified.

    Input parameters

    Parameter In Type Default Nullable Description block_hash query string No A specific block hash. block_number query string No A specific block number. builder_pubkey query string No A specific builder public key. limit query string No The number of results. slot query string No A specific slot.

    Response 200 OK

    application/json

    [\n    null\n]\n
    \u26a0\ufe0f This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

    Schema of the response body
    {\n    \"type\": \"array\",\n    \"items\": {\n        \"allOf\": [\n            {\n                \"allOf\": [\n                    {\n                        \"type\": \"object\",\n                        \"properties\": {\n                            \"slot\": {\n                                \"type\": \"string\",\n                                \"example\": \"1\"\n                            },\n                            \"parent_hash\": {\n                                \"type\": \"string\",\n                                \"format\": \"hex\",\n                                \"example\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n                                \"pattern\": \"^0x[a-fA-F0-9]{64}$\"\n                            },\n                            \"block_hash\": {\n                                \"type\": \"string\",\n                                \"format\": \"hex\",\n                                \"example\": \"0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2\",\n                                \"pattern\": \"^0x[a-fA-F0-9]{64}$\"\n                            },\n                            \"builder_pubkey\": {\n                                \"type\": \"string\",\n                                \"format\": \"hex\",\n                                \"pattern\": \"^0x[a-fA-F0-9]{96}$\",\n                                \"description\": \"The validator's BLS public key, uniquely identifying them. _48-bytes, hex encoded with 0x prefix, case insensitive._\",\n                                \"example\": \"0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a\"\n                            },\n                            \"proposer_pubkey\": {\n                                \"type\": \"string\",\n                                \"format\": \"hex\",\n                                \"pattern\": \"^0x[a-fA-F0-9]{96}$\",\n                                \"description\": \"The validator's BLS public key, uniquely identifying them. _48-bytes, hex encoded with 0x prefix, case insensitive._\",\n                                \"example\": \"0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a\"\n                            },\n                            \"proposer_fee_recipient\": {\n                                \"type\": \"string\",\n                                \"format\": \"hex\",\n                                \"description\": \"An address on the execution (Ethereum 1) network.\",\n                                \"example\": \"0xAbcF8e0d4e9587369b2301D0790347320302cc09\",\n                                \"pattern\": \"^0x[a-fA-F0-9]{40}$\"\n                            },\n                            \"gas_limit\": {\n                                \"type\": \"string\",\n                                \"example\": \"1\"\n                            },\n                            \"gas_used\": {\n                                \"type\": \"string\",\n                                \"example\": \"1\"\n                            },\n                            \"value\": {\n                                \"type\": \"string\",\n                                \"example\": \"1\"\n                            }\n                        }\n                    },\n                    {\n                        \"type\": \"object\",\n                        \"properties\": {\n                            \"block_number\": {\n                                \"type\": \"string\",\n                                \"example\": \"1\"\n                            },\n                            \"num_tx\": {\n                                \"type\": \"string\",\n                                \"example\": \"1\"\n                            }\n                        }\n                    }\n                ]\n            },\n            {\n                \"type\": \"object\",\n                \"properties\": {\n                    \"timestamp\": {\n                        \"type\": \"string\",\n                        \"example\": \"1\"\n                    },\n                    \"timestamp_ms\": {\n                        \"type\": \"string\",\n                        \"example\": \"1\"\n                    }\n                }\n            }\n        ]\n    }\n}\n

    Response 400 Bad Request

    application/json Schema of the response body
    {\n    \"allOf\": [\n        {\n            \"type\": \"object\",\n            \"required\": [\n                \"code\",\n                \"message\"\n            ],\n            \"properties\": {\n                \"code\": {\n                    \"description\": \"Either specific error code in case of invalid request or http status code\",\n                    \"type\": \"number\",\n                    \"example\": 404\n                },\n                \"message\": {\n                    \"description\": \"Message describing error\",\n                    \"type\": \"string\"\n                },\n                \"stacktraces\": {\n                    \"description\": \"Optional stacktraces, sent when node is in debug mode\",\n                    \"type\": \"array\",\n                    \"items\": {\n                        \"type\": \"string\"\n                    }\n                }\n            }\n        },\n        {\n            \"example\": {\n                \"code\": 400,\n                \"message\": \"cannot specify both slot and cursor\"\n            }\n        }\n    ]\n}\n

    Response 500 Internal Server Error

    application/json
    {\n    \"code\": 500,\n    \"message\": \"internal server error\"\n}\n
    Schema of the response body
    {\n    \"type\": \"object\",\n    \"properties\": {\n        \"code\": {\n            \"description\": \"Either specific error code in case of invalid request or http status code\",\n            \"type\": \"number\",\n            \"example\": 404\n        },\n        \"message\": {\n            \"description\": \"Message describing error\",\n            \"type\": \"string\"\n        },\n        \"stacktraces\": {\n            \"description\": \"Optional stacktraces, sent when node is in debug mode\",\n            \"type\": \"array\",\n            \"items\": {\n                \"type\": \"string\"\n            }\n        }\n    }\n}\n
    "},{"location":"api/relay/#get-relayv1datavalidator_registration","title":"GET /relay/v1/data/validator_registration","text":"

    Check that a validator is registered with the relay.

    Description
    • Returns the latest validator registration for a given pubkey.

    • Useful to check whether your own registration was successful.

    Input parameters

    Parameter In Type Default Nullable Description pubkey query string No The validator's public key.

    Response 200 OK

    application/json

    {\n    \"message\": {\n        \"fee_recipient\": \"0xAbcF8e0d4e9587369b2301D0790347320302cc09\",\n        \"gas_limit\": \"1\",\n        \"timestamp\": \"1\",\n        \"pubkey\": \"0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a\"\n    },\n    \"signature\": \"0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505\"\n}\n
    \u26a0\ufe0f This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

    Schema of the response body
    {\n    \"type\": \"object\",\n    \"description\": \"The `SignedValidatorRegistration` object from the Builder API specification.\",\n    \"required\": [\n        \"message\",\n        \"signature\"\n    ],\n    \"properties\": {\n        \"message\": {\n            \"type\": \"object\",\n            \"description\": \"The `ValidatorRegistration` object from the Builder API specification.\",\n            \"required\": [\n                \"fee_recipient\",\n                \"gas_limit\",\n                \"timestamp\",\n                \"pubkey\"\n            ],\n            \"properties\": {\n                \"fee_recipient\": {\n                    \"description\": \"Address to receive fees from the block.\",\n                    \"type\": \"string\",\n                    \"format\": \"hex\",\n                    \"example\": \"0xAbcF8e0d4e9587369b2301D0790347320302cc09\",\n                    \"pattern\": \"^0x[a-fA-F0-9]{40}$\"\n                },\n                \"gas_limit\": {\n                    \"description\": \"Preferred gas limit of validator.\",\n                    \"type\": \"string\",\n                    \"example\": \"1\"\n                },\n                \"timestamp\": {\n                    \"description\": \"Unix timestamp of registration.\",\n                    \"type\": \"string\",\n                    \"example\": \"1\"\n                },\n                \"pubkey\": {\n                    \"description\": \"BLS public key of validator.\",\n                    \"type\": \"string\",\n                    \"format\": \"hex\",\n                    \"pattern\": \"^0x[a-fA-F0-9]{96}$\",\n                    \"example\": \"0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a\"\n                }\n            }\n        },\n        \"signature\": {\n            \"type\": \"string\",\n            \"format\": \"hex\",\n            \"pattern\": \"^0x[a-fA-F0-9]{192}$\",\n            \"example\": \"0x1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505cc411d61252fb6cb3fa0017b679f8bb2305b26a285fa2737f175668d0dff91cc1b66ac1fb663c9bc59509846d6ec05345bd908eda73e670af888da41af171505\"\n        }\n    }\n}\n

    Response 400 Bad Request

    application/json Schema of the response body
    {\n    \"allOf\": [\n        {\n            \"type\": \"object\",\n            \"required\": [\n                \"code\",\n                \"message\"\n            ],\n            \"properties\": {\n                \"code\": {\n                    \"description\": \"Either specific error code in case of invalid request or http status code\",\n                    \"type\": \"number\",\n                    \"example\": 404\n                },\n                \"message\": {\n                    \"description\": \"Message describing error\",\n                    \"type\": \"string\"\n                },\n                \"stacktraces\": {\n                    \"description\": \"Optional stacktraces, sent when node is in debug mode\",\n                    \"type\": \"array\",\n                    \"items\": {\n                        \"type\": \"string\"\n                    }\n                }\n            }\n        },\n        {\n            \"example\": {\n                \"code\": 400,\n                \"message\": \"missing pubkey argument\"\n            }\n        }\n    ]\n}\n

    Response 500 Internal Server Error

    application/json
    {\n    \"code\": 500,\n    \"message\": \"internal server error\"\n}\n
    Schema of the response body
    {\n    \"type\": \"object\",\n    \"properties\": {\n        \"code\": {\n            \"description\": \"Either specific error code in case of invalid request or http status code\",\n            \"type\": \"number\",\n            \"example\": 404\n        },\n        \"message\": {\n            \"description\": \"Message describing error\",\n            \"type\": \"string\"\n        },\n        \"stacktraces\": {\n            \"description\": \"Optional stacktraces, sent when node is in debug mode\",\n            \"type\": \"array\",\n            \"items\": {\n                \"type\": \"string\"\n            }\n        }\n    }\n}\n
    "},{"location":"api/relay/#schemas","title":"Schemas","text":""},{"location":"api/relay/#bellatrixsubmitblockrequest","title":"Bellatrix.SubmitBlockRequest","text":"

    Type:

    "},{"location":"api/relay/#bidtracev2","title":"BidTraceV2","text":"

    Type:

    "},{"location":"api/relay/#bidtracev2withtimestamp","title":"BidTraceV2WithTimestamp","text":"

    Type:

    "},{"location":"api/relay/#capella-executionpayload","title":"Capella-ExecutionPayload","text":"

    Type:

    "},{"location":"api/relay/#capella-submitblockrequest","title":"Capella-SubmitBlockRequest","text":"

    Type:

    "},{"location":"api/relay/#capellasubmitblockrequest","title":"Capella.SubmitBlockRequest","text":"

    Type:

    "},{"location":"api/relay/#deneb-executionpayload","title":"Deneb-ExecutionPayload","text":"

    Type:

    "},{"location":"api/relay/#deneb-submitblockrequest","title":"Deneb-SubmitBlockRequest","text":"

    Type:

    "},{"location":"api/relay/#denebsubmitblockrequest","title":"Deneb.SubmitBlockRequest","text":"

    Type:

    "},{"location":"api/relay/#executionpayload","title":"ExecutionPayload","text":"

    Type:

    "},{"location":"api/relay/#submitblockrequest","title":"SubmitBlockRequest","text":"

    Type:

    "},{"location":"api/relay/#tags","title":"Tags","text":"Name Description Builder Set of endpoints to interact with an external block builder. Data Set of endpoints to provide data about the relay."},{"location":"api/self-report/","title":"Validator Reporting API","text":""},{"location":"api/self-report/#validator-reporting-rest-api","title":"Validator Reporting REST API","text":"

    !!swagger rated.selfreport.ymll!!

    "},{"location":"api/signature-scheme/","title":"Authenticated JSON RPC Service Access","text":""},{"location":"api/signature-scheme/#custom-payload-signature-scheme-for-authenticated-json-rpc-service-access","title":"Custom Payload Signature Scheme for Authenticated JSON RPC Service Access","text":"

    This document specifies a method for authenticating requests to a JSON RPC service endpoint using a custom payload signature scheme. The scheme involves signing the request payload with an Ethereum key and including this signature in the request headers.

    Note

    This method is based off of Flashbot's X-Flashbots-Signature schema, and is compatible with it.

    "},{"location":"api/signature-scheme/#introduction","title":"Introduction","text":"

    This specification defines a method for authenticating requests made to a JSON RPC service endpoint. The authentication is achieved by signing the request payload using an Ethereum key and including this signature in the request's HTTP headers. This method ensures that the requests are authenticated and can be tracked over time for user statistics.

    "},{"location":"api/signature-scheme/#terminology","title":"Terminology:","text":"
    • JSON RPC: A remote procedure call protocol encoded in JSON.
    • Ethereum Key: A cryptographic key used for signing transactions in the Ethereum blockchain.
    • Payload Signature: A digital signature generated by signing the request payload.
    • X-Ethereum-Signature: HTTP header used to include the payload signature for auction requests.
    "},{"location":"api/signature-scheme/#specification","title":"Specification:","text":""},{"location":"api/signature-scheme/#signature-generation","title":"Signature Generation:","text":"
    • The client MUST generate a digital signature by signing the hash of the JSON body of the request. The JSON body MUST be encoded as UTF-8 bytes before hashing.
    • Any valid Ethereum key CAN be used for signing the payload.
    • The Ethereum address associated with the key used for signing WILL be utilized by the service to track requests and provide user statistics.
    "},{"location":"api/signature-scheme/#request-headers","title":"Request Headers:","text":"
    • The client MUST include the generated signature in the request headers.
    • For auction requests, the signature MUST be included in the X-Ethereum-Signature header.
    • The headers X-Ethereum-Signature are CASE-INSENSITIVE.
    "},{"location":"api/signature-scheme/#example-usage-with-curl","title":"Example Usage with cURL:","text":"
    • For auction requests:
    curl -X POST -H \"Content-Type: application/json\" -H \"X-Ethereum-Signature: 0x1234:0xabcd\" --data '{\"jsonrpc\":\"2.0\",\"method\":\"eth_sendBundle\",\"params\":[...],\"id\":1}' <https://api.securerpc.com/v1/auction>\n
    "},{"location":"api/signature-scheme/#example-data","title":"Example Data","text":"
    {\n    \"jsonrpc\": \"2.0\",\n    \"method\": \"eth_sendBundle\",\n    \"params\": [...],\n    \"id\": 1\n}\n
    "},{"location":"blog/","title":"Blog","text":""},{"location":"blog/announcements/changelog/timeline-for-v0-to-v1/","title":"Timeline for v0 to v1","text":"

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.

    timeline\n    title Timeline of Key Events\n    dateFormat MM-DD\n    section Deployment and Governance\n    May 14th : Rollup Deployment\n    May 17th : v1 Main Net Enabled\n    May 20th : Governance Proposal Submitted\n    May 24th : First Week of Data Available\n\n    section Meetings and Voting\n    May 30th : Ethereum ACD Meeting\n    May 30th : Lido DAO Snapshot Voting Period Starts\n    June 6th : Lido DAO Snapshot Voting Period Ends

    Read the forum post here

    "},{"location":"blog/archive/2024/","title":"2024","text":""},{"location":"blog/category/announcements/","title":"announcements","text":""},{"location":"blog/category/changelog/","title":"changelog","text":""}]} \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml index 61ddb2a..f244479 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -2,332 +2,312 @@ https://docs.xga.com/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Clients/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Clients/accounting/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Clients/clients/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Clients/configuration/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Clients/relay/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Clients/requirements/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Clients/validators/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Developers/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Developers/builders/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Developers/interface/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Developers/mainnet/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Developers/payment-methods/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Developers/sdk/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Developers/testnet/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Learning/Forward-Contracts/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Learning/aup_auction/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Learning/flashbots-comparison/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Learning/secondary-market/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Legal/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Legal/CDD/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Legal/Content-Disclaimer/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Legal/Disclosure-Statement/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Reference/constants/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Reference/contract_design/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Reference/contract_summary/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Reference/erc6909/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Reference/glossary/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Reference/rpc-payload/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Relay/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Relay/captive-insurance/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Rulebook/bylaws/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Rulebook/definitions/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Rulebook/delivery-and-settlement/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Rulebook/general/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Rulebook/governance/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Rulebook/network-clearing-participants/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Rulebook/obligations/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Rulebook/suspension/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Rulebook/contracts/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Rulebook/contracts/Accountant.sol/contract.Accountant/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Rulebook/contracts/Auctioneer.sol/contract.Auctioneer/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Rulebook/contracts/Auctioneer.sol/interface.Bidder/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Rulebook/contracts/Auctioneer.sol/interface.IAccountant/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Rulebook/contracts/L1Holding.sol/contract.L1Holding/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Rulebook/contracts/SettlementHouse.sol/contract.SettlementHouse/ - 2024-05-23 - daily - - - https://docs.xga.com/Rulebook/contracts/auth/ - 2024-05-23 - daily - - - https://docs.xga.com/Rulebook/contracts/auth/Ownable2Step.sol/abstract.Ownable2Step/ - 2024-05-23 - daily - - - https://docs.xga.com/Rulebook/contracts/auth/solady.auth.sol/abstract.Owned/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Rulebook/contracts/interfaces/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Rulebook/contracts/interfaces/IERC6909.sol/interface.IERC6909/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Rulebook/contracts/interfaces/IL1Bridge.sol/interface.IL1Bridge/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Rulebook/contracts/interfaces/IL2Bridge.sol/interface.IL2Bridge/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/Rulebook/contracts/interfaces/IWETH.sol/interface.IWETH/ - 2024-05-23 - daily - - - https://docs.xga.com/Rulebook/contracts/solady.libsort.sol/library.LibSort/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/api/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/api/beta-auction/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/api/bundle/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/api/relay/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/api/self-report/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/api/signature-scheme/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/blog/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/blog/announcements/changelog/timeline-for-v0-to-v1/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/blog/archive/2024/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/blog/category/announcements/ - 2024-05-23 + 2024-05-24 daily https://docs.xga.com/blog/category/changelog/ - 2024-05-23 + 2024-05-24 daily \ No newline at end of file diff --git a/sitemap.xml.gz b/sitemap.xml.gz index 193558c93f55f830d94b4db1ae7f6b604ac6932f..f407f0802504b41f61d74556d98616ef802992df 100644 GIT binary patch literal 803 zcmV+;1Kj){iwFqtI#6Z;|8r?{Wo=<_E_iKh0M(jNPunmM$KUxBRo|Vo6`RIXibe|p zi6>y%Bf8p`)T(2LJEx`JeohMks!iIYsUt&S{JTqY3Zkm6H91!x3;h$;d&Z3VjlnS&CjgM)ngaT^O!>5BUY}pXRl>0&% z2_5XjvOPDJuo67Q8*tV@3?vP3fg5z8M#*5y#yTUK(E5l}fJV896L+Nlz$2sWc#Ss>1%gR@{h;MybcG_U14W5+ zw)7C&o8S8vqNGji(uGnY5_q57qkes%|8r?{Wo=<_E_iKh0M(jJZ`&{ohVT6qMeefG>;vnNX4u*l zEl^-UyJ5$HmKaBcHBU|l~ipILSY<-qXIH0REuk1Ui5v<{t*X{m$)YSGiDgJ0UZBZ$fO zg)$O4=*6=A>?~m;c!}5GtbrIv8sG)4(S;TzgH@e%Ml_-I5ork;=NA_;xzYyC(fY!&c3>MMk(gV&z#XBwix9Ut zqA<`~Tq31X7jqrJ5#%MYF9^3``-efcwU^JyU6TS%FBTL@zdfCvish@*=3&VbNUc^W zb94cWI7WFD^NvYF8|@mE^(iod7gx31b`Gl$?#rrouwkim2A9^`oFNKEbZMbe)&<@u z#u%N*JK!U3jUGu{BKCwA(p-AU8zxnLn?UzUyOemRygP+PidNfJVpj189V%yQ5WSDM z;}$*3D+UKbEwrHi1K`KqX+d(yf`c0xiYNOBH0&M?Aku+`!9F?-!!yj{lQm}40OV diff --git a/stylesheets/neoteroi-mkdocs.css b/stylesheets/neoteroi-mkdocs.css new file mode 100644 index 0000000..4ec140f --- /dev/null +++ b/stylesheets/neoteroi-mkdocs.css @@ -0,0 +1,1670 @@ +/** + * All CSS for the neoteroi-mkdocs extensions. + * + * https://github.com/Neoteroi/mkdocs-plugins +**/ +:root { + --nt-color-0: #cd853f; + --nt-color-1: #b22222; + --nt-color-2: #000080; + --nt-color-3: #4b0082; + --nt-color-4: #3cb371; + --nt-color-5: #d2b48c; + --nt-color-6: #ff00ff; + --nt-color-7: #98fb98; + --nt-color-8: #ffebcd; + --nt-color-9: #2e8b57; + --nt-color-10: #6a5acd; + --nt-color-11: #48d1cc; + --nt-color-12: #ffa500; + --nt-color-13: #f4a460; + --nt-color-14: #a52a2a; + --nt-color-15: #ffe4c4; + --nt-color-16: #ff4500; + --nt-color-17: #afeeee; + --nt-color-18: #fa8072; + --nt-color-19: #2f4f4f; + --nt-color-20: #ffdab9; + --nt-color-21: #bc8f8f; + --nt-color-22: #ffc0cb; + --nt-color-23: #00fa9a; + --nt-color-24: #f0fff0; + --nt-color-25: #fffacd; + --nt-color-26: #f5f5f5; + --nt-color-27: #ff6347; + --nt-color-28: #fffff0; + --nt-color-29: #7fffd4; + --nt-color-30: #e9967a; + --nt-color-31: #7b68ee; + --nt-color-32: #fff8dc; + --nt-color-33: #0000cd; + --nt-color-34: #d2691e; + --nt-color-35: #708090; + --nt-color-36: #5f9ea0; + --nt-color-37: #008080; + --nt-color-38: #008000; + --nt-color-39: #ffe4e1; + --nt-color-40: #ffff00; + --nt-color-41: #fffaf0; + --nt-color-42: #dcdcdc; + --nt-color-43: #adff2f; + --nt-color-44: #add8e6; + --nt-color-45: #8b008b; + --nt-color-46: #7fff00; + --nt-color-47: #800000; + --nt-color-48: #20b2aa; + --nt-color-49: #556b2f; + --nt-color-50: #778899; + --nt-color-51: #e6e6fa; + --nt-color-52: #fffafa; + --nt-color-53: #ff7f50; + --nt-color-54: #ff0000; + --nt-color-55: #f5deb3; + --nt-color-56: #008b8b; + --nt-color-57: #66cdaa; + --nt-color-58: #808000; + --nt-color-59: #faf0e6; + --nt-color-60: #00bfff; + --nt-color-61: #c71585; + --nt-color-62: #00ffff; + --nt-color-63: #8b4513; + --nt-color-64: #f0f8ff; + --nt-color-65: #faebd7; + --nt-color-66: #8b0000; + --nt-color-67: #4682b4; + --nt-color-68: #f0e68c; + --nt-color-69: #bdb76b; + --nt-color-70: #a0522d; + --nt-color-71: #fafad2; + --nt-color-72: #ffd700; + --nt-color-73: #deb887; + --nt-color-74: #e0ffff; + --nt-color-75: #8a2be2; + --nt-color-76: #32cd32; + --nt-color-77: #87cefa; + --nt-color-78: #00ced1; + --nt-color-79: #696969; + --nt-color-80: #dda0dd; + --nt-color-81: #ee82ee; + --nt-color-82: #ffb6c1; + --nt-color-83: #8fbc8f; + --nt-color-84: #d8bfd8; + --nt-color-85: #9400d3; + --nt-color-86: #a9a9a9; + --nt-color-87: #ffffe0; + --nt-color-88: #fff5ee; + --nt-color-89: #fff0f5; + --nt-color-90: #ffdead; + --nt-color-91: #800080; + --nt-color-92: #b0e0e6; + --nt-color-93: #9932cc; + --nt-color-94: #daa520; + --nt-color-95: #f0ffff; + --nt-color-96: #40e0d0; + --nt-color-97: #00ff7f; + --nt-color-98: #006400; + --nt-color-99: #808080; + --nt-color-100: #87ceeb; + --nt-color-101: #0000ff; + --nt-color-102: #6495ed; + --nt-color-103: #fdf5e6; + --nt-color-104: #b8860b; + --nt-color-105: #ba55d3; + --nt-color-106: #c0c0c0; + --nt-color-107: #000000; + --nt-color-108: #f08080; + --nt-color-109: #b0c4de; + --nt-color-110: #00008b; + --nt-color-111: #6b8e23; + --nt-color-112: #ffe4b5; + --nt-color-113: #ffa07a; + --nt-color-114: #9acd32; + --nt-color-115: #ffffff; + --nt-color-116: #f5f5dc; + --nt-color-117: #90ee90; + --nt-color-118: #1e90ff; + --nt-color-119: #7cfc00; + --nt-color-120: #ff69b4; + --nt-color-121: #f8f8ff; + --nt-color-122: #f5fffa; + --nt-color-123: #00ff00; + --nt-color-124: #d3d3d3; + --nt-color-125: #db7093; + --nt-color-126: #da70d6; + --nt-color-127: #ff1493; + --nt-color-128: #228b22; + --nt-color-129: #ffefd5; + --nt-color-130: #4169e1; + --nt-color-131: #191970; + --nt-color-132: #9370db; + --nt-color-133: #483d8b; + --nt-color-134: #ff8c00; + --nt-color-135: #eee8aa; + --nt-color-136: #cd5c5c; + --nt-color-137: #dc143c; +} + +:root { + --nt-group-0-main: #000000; + --nt-group-0-dark: #ffffff; + --nt-group-0-light: #000000; + --nt-group-0-main-bg: #f44336; + --nt-group-0-dark-bg: #ba000d; + --nt-group-0-light-bg: #ff7961; + --nt-group-1-main: #000000; + --nt-group-1-dark: #ffffff; + --nt-group-1-light: #000000; + --nt-group-1-main-bg: #e91e63; + --nt-group-1-dark-bg: #b0003a; + --nt-group-1-light-bg: #ff6090; + --nt-group-2-main: #ffffff; + --nt-group-2-dark: #ffffff; + --nt-group-2-light: #000000; + --nt-group-2-main-bg: #9c27b0; + --nt-group-2-dark-bg: #6a0080; + --nt-group-2-light-bg: #d05ce3; + --nt-group-3-main: #ffffff; + --nt-group-3-dark: #ffffff; + --nt-group-3-light: #000000; + --nt-group-3-main-bg: #673ab7; + --nt-group-3-dark-bg: #320b86; + --nt-group-3-light-bg: #9a67ea; + --nt-group-4-main: #ffffff; + --nt-group-4-dark: #ffffff; + --nt-group-4-light: #000000; + --nt-group-4-main-bg: #3f51b5; + --nt-group-4-dark-bg: #002984; + --nt-group-4-light-bg: #757de8; + --nt-group-5-main: #000000; + --nt-group-5-dark: #ffffff; + --nt-group-5-light: #000000; + --nt-group-5-main-bg: #2196f3; + --nt-group-5-dark-bg: #0069c0; + --nt-group-5-light-bg: #6ec6ff; + --nt-group-6-main: #000000; + --nt-group-6-dark: #ffffff; + --nt-group-6-light: #000000; + --nt-group-6-main-bg: #03a9f4; + --nt-group-6-dark-bg: #007ac1; + --nt-group-6-light-bg: #67daff; + --nt-group-7-main: #000000; + --nt-group-7-dark: #000000; + --nt-group-7-light: #000000; + --nt-group-7-main-bg: #00bcd4; + --nt-group-7-dark-bg: #008ba3; + --nt-group-7-light-bg: #62efff; + --nt-group-8-main: #000000; + --nt-group-8-dark: #ffffff; + --nt-group-8-light: #000000; + --nt-group-8-main-bg: #009688; + --nt-group-8-dark-bg: #00675b; + --nt-group-8-light-bg: #52c7b8; + --nt-group-9-main: #000000; + --nt-group-9-dark: #ffffff; + --nt-group-9-light: #000000; + --nt-group-9-main-bg: #4caf50; + --nt-group-9-dark-bg: #087f23; + --nt-group-9-light-bg: #80e27e; + --nt-group-10-main: #000000; + --nt-group-10-dark: #000000; + --nt-group-10-light: #000000; + --nt-group-10-main-bg: #8bc34a; + --nt-group-10-dark-bg: #5a9216; + --nt-group-10-light-bg: #bef67a; + --nt-group-11-main: #000000; + --nt-group-11-dark: #000000; + --nt-group-11-light: #000000; + --nt-group-11-main-bg: #cddc39; + --nt-group-11-dark-bg: #99aa00; + --nt-group-11-light-bg: #ffff6e; + --nt-group-12-main: #000000; + --nt-group-12-dark: #000000; + --nt-group-12-light: #000000; + --nt-group-12-main-bg: #ffeb3b; + --nt-group-12-dark-bg: #c8b900; + --nt-group-12-light-bg: #ffff72; + --nt-group-13-main: #000000; + --nt-group-13-dark: #000000; + --nt-group-13-light: #000000; + --nt-group-13-main-bg: #ffc107; + --nt-group-13-dark-bg: #c79100; + --nt-group-13-light-bg: #fff350; + --nt-group-14-main: #000000; + --nt-group-14-dark: #000000; + --nt-group-14-light: #000000; + --nt-group-14-main-bg: #ff9800; + --nt-group-14-dark-bg: #c66900; + --nt-group-14-light-bg: #ffc947; + --nt-group-15-main: #000000; + --nt-group-15-dark: #ffffff; + --nt-group-15-light: #000000; + --nt-group-15-main-bg: #ff5722; + --nt-group-15-dark-bg: #c41c00; + --nt-group-15-light-bg: #ff8a50; + --nt-group-16-main: #ffffff; + --nt-group-16-dark: #ffffff; + --nt-group-16-light: #000000; + --nt-group-16-main-bg: #795548; + --nt-group-16-dark-bg: #4b2c20; + --nt-group-16-light-bg: #a98274; + --nt-group-17-main: #000000; + --nt-group-17-dark: #ffffff; + --nt-group-17-light: #000000; + --nt-group-17-main-bg: #9e9e9e; + --nt-group-17-dark-bg: #707070; + --nt-group-17-light-bg: #cfcfcf; + --nt-group-18-main: #000000; + --nt-group-18-dark: #ffffff; + --nt-group-18-light: #000000; + --nt-group-18-main-bg: #607d8b; + --nt-group-18-dark-bg: #34515e; + --nt-group-18-light-bg: #8eacbb; +} + +.nt-pastello { + --nt-group-0-main: #000000; + --nt-group-0-dark: #000000; + --nt-group-0-light: #000000; + --nt-group-0-main-bg: #ef9a9a; + --nt-group-0-dark-bg: #ba6b6c; + --nt-group-0-light-bg: #ffcccb; + --nt-group-1-main: #000000; + --nt-group-1-dark: #000000; + --nt-group-1-light: #000000; + --nt-group-1-main-bg: #f48fb1; + --nt-group-1-dark-bg: #bf5f82; + --nt-group-1-light-bg: #ffc1e3; + --nt-group-2-main: #000000; + --nt-group-2-dark: #000000; + --nt-group-2-light: #000000; + --nt-group-2-main-bg: #ce93d8; + --nt-group-2-dark-bg: #9c64a6; + --nt-group-2-light-bg: #ffc4ff; + --nt-group-3-main: #000000; + --nt-group-3-dark: #000000; + --nt-group-3-light: #000000; + --nt-group-3-main-bg: #b39ddb; + --nt-group-3-dark-bg: #836fa9; + --nt-group-3-light-bg: #e6ceff; + --nt-group-4-main: #000000; + --nt-group-4-dark: #000000; + --nt-group-4-light: #000000; + --nt-group-4-main-bg: #9fa8da; + --nt-group-4-dark-bg: #6f79a8; + --nt-group-4-light-bg: #d1d9ff; + --nt-group-5-main: #000000; + --nt-group-5-dark: #000000; + --nt-group-5-light: #000000; + --nt-group-5-main-bg: #90caf9; + --nt-group-5-dark-bg: #5d99c6; + --nt-group-5-light-bg: #c3fdff; + --nt-group-6-main: #000000; + --nt-group-6-dark: #000000; + --nt-group-6-light: #000000; + --nt-group-6-main-bg: #81d4fa; + --nt-group-6-dark-bg: #4ba3c7; + --nt-group-6-light-bg: #b6ffff; + --nt-group-7-main: #000000; + --nt-group-7-dark: #000000; + --nt-group-7-light: #000000; + --nt-group-7-main-bg: #80deea; + --nt-group-7-dark-bg: #4bacb8; + --nt-group-7-light-bg: #b4ffff; + --nt-group-8-main: #000000; + --nt-group-8-dark: #000000; + --nt-group-8-light: #000000; + --nt-group-8-main-bg: #80cbc4; + --nt-group-8-dark-bg: #4f9a94; + --nt-group-8-light-bg: #b2fef7; + --nt-group-9-main: #000000; + --nt-group-9-dark: #000000; + --nt-group-9-light: #000000; + --nt-group-9-main-bg: #a5d6a7; + --nt-group-9-dark-bg: #75a478; + --nt-group-9-light-bg: #d7ffd9; + --nt-group-10-main: #000000; + --nt-group-10-dark: #000000; + --nt-group-10-light: #000000; + --nt-group-10-main-bg: #c5e1a5; + --nt-group-10-dark-bg: #94af76; + --nt-group-10-light-bg: #f8ffd7; + --nt-group-11-main: #000000; + --nt-group-11-dark: #000000; + --nt-group-11-light: #000000; + --nt-group-11-main-bg: #e6ee9c; + --nt-group-11-dark-bg: #b3bc6d; + --nt-group-11-light-bg: #ffffce; + --nt-group-12-main: #000000; + --nt-group-12-dark: #000000; + --nt-group-12-light: #000000; + --nt-group-12-main-bg: #fff59d; + --nt-group-12-dark-bg: #cbc26d; + --nt-group-12-light-bg: #ffffcf; + --nt-group-13-main: #000000; + --nt-group-13-dark: #000000; + --nt-group-13-light: #000000; + --nt-group-13-main-bg: #ffe082; + --nt-group-13-dark-bg: #caae53; + --nt-group-13-light-bg: #ffffb3; + --nt-group-14-main: #000000; + --nt-group-14-dark: #000000; + --nt-group-14-light: #000000; + --nt-group-14-main-bg: #ffcc80; + --nt-group-14-dark-bg: #ca9b52; + --nt-group-14-light-bg: #ffffb0; + --nt-group-15-main: #000000; + --nt-group-15-dark: #000000; + --nt-group-15-light: #000000; + --nt-group-15-main-bg: #ffab91; + --nt-group-15-dark-bg: #c97b63; + --nt-group-15-light-bg: #ffddc1; + --nt-group-16-main: #000000; + --nt-group-16-dark: #000000; + --nt-group-16-light: #000000; + --nt-group-16-main-bg: #bcaaa4; + --nt-group-16-dark-bg: #8c7b75; + --nt-group-16-light-bg: #efdcd5; + --nt-group-17-main: #000000; + --nt-group-17-dark: #000000; + --nt-group-17-light: #000000; + --nt-group-17-main-bg: #eeeeee; + --nt-group-17-dark-bg: #bcbcbc; + --nt-group-17-light-bg: #ffffff; + --nt-group-18-main: #000000; + --nt-group-18-dark: #000000; + --nt-group-18-light: #000000; + --nt-group-18-main-bg: #b0bec5; + --nt-group-18-dark-bg: #808e95; + --nt-group-18-light-bg: #e2f1f8; +} + +.nt-group-0 .nt-plan-group-summary, +.nt-group-0 .nt-timeline-dot { + color: var(--nt-group-0-dark); + background-color: var(--nt-group-0-dark-bg); +} +.nt-group-0 .period { + color: var(--nt-group-0-main); + background-color: var(--nt-group-0-main-bg); +} + +.nt-group-1 .nt-plan-group-summary, +.nt-group-1 .nt-timeline-dot { + color: var(--nt-group-1-dark); + background-color: var(--nt-group-1-dark-bg); +} +.nt-group-1 .period { + color: var(--nt-group-1-main); + background-color: var(--nt-group-1-main-bg); +} + +.nt-group-2 .nt-plan-group-summary, +.nt-group-2 .nt-timeline-dot { + color: var(--nt-group-2-dark); + background-color: var(--nt-group-2-dark-bg); +} +.nt-group-2 .period { + color: var(--nt-group-2-main); + background-color: var(--nt-group-2-main-bg); +} + +.nt-group-3 .nt-plan-group-summary, +.nt-group-3 .nt-timeline-dot { + color: var(--nt-group-3-dark); + background-color: var(--nt-group-3-dark-bg); +} +.nt-group-3 .period { + color: var(--nt-group-3-main); + background-color: var(--nt-group-3-main-bg); +} + +.nt-group-4 .nt-plan-group-summary, +.nt-group-4 .nt-timeline-dot { + color: var(--nt-group-4-dark); + background-color: var(--nt-group-4-dark-bg); +} +.nt-group-4 .period { + color: var(--nt-group-4-main); + background-color: var(--nt-group-4-main-bg); +} + +.nt-group-5 .nt-plan-group-summary, +.nt-group-5 .nt-timeline-dot { + color: var(--nt-group-5-dark); + background-color: var(--nt-group-5-dark-bg); +} +.nt-group-5 .period { + color: var(--nt-group-5-main); + background-color: var(--nt-group-5-main-bg); +} + +.nt-group-6 .nt-plan-group-summary, +.nt-group-6 .nt-timeline-dot { + color: var(--nt-group-6-dark); + background-color: var(--nt-group-6-dark-bg); +} +.nt-group-6 .period { + color: var(--nt-group-6-main); + background-color: var(--nt-group-6-main-bg); +} + +.nt-group-7 .nt-plan-group-summary, +.nt-group-7 .nt-timeline-dot { + color: var(--nt-group-7-dark); + background-color: var(--nt-group-7-dark-bg); +} +.nt-group-7 .period { + color: var(--nt-group-7-main); + background-color: var(--nt-group-7-main-bg); +} + +.nt-group-8 .nt-plan-group-summary, +.nt-group-8 .nt-timeline-dot { + color: var(--nt-group-8-dark); + background-color: var(--nt-group-8-dark-bg); +} +.nt-group-8 .period { + color: var(--nt-group-8-main); + background-color: var(--nt-group-8-main-bg); +} + +.nt-group-9 .nt-plan-group-summary, +.nt-group-9 .nt-timeline-dot { + color: var(--nt-group-9-dark); + background-color: var(--nt-group-9-dark-bg); +} +.nt-group-9 .period { + color: var(--nt-group-9-main); + background-color: var(--nt-group-9-main-bg); +} + +.nt-group-10 .nt-plan-group-summary, +.nt-group-10 .nt-timeline-dot { + color: var(--nt-group-10-dark); + background-color: var(--nt-group-10-dark-bg); +} +.nt-group-10 .period { + color: var(--nt-group-10-main); + background-color: var(--nt-group-10-main-bg); +} + +.nt-group-11 .nt-plan-group-summary, +.nt-group-11 .nt-timeline-dot { + color: var(--nt-group-11-dark); + background-color: var(--nt-group-11-dark-bg); +} +.nt-group-11 .period { + color: var(--nt-group-11-main); + background-color: var(--nt-group-11-main-bg); +} + +.nt-group-12 .nt-plan-group-summary, +.nt-group-12 .nt-timeline-dot { + color: var(--nt-group-12-dark); + background-color: var(--nt-group-12-dark-bg); +} +.nt-group-12 .period { + color: var(--nt-group-12-main); + background-color: var(--nt-group-12-main-bg); +} + +.nt-group-13 .nt-plan-group-summary, +.nt-group-13 .nt-timeline-dot { + color: var(--nt-group-13-dark); + background-color: var(--nt-group-13-dark-bg); +} +.nt-group-13 .period { + color: var(--nt-group-13-main); + background-color: var(--nt-group-13-main-bg); +} + +.nt-group-14 .nt-plan-group-summary, +.nt-group-14 .nt-timeline-dot { + color: var(--nt-group-14-dark); + background-color: var(--nt-group-14-dark-bg); +} +.nt-group-14 .period { + color: var(--nt-group-14-main); + background-color: var(--nt-group-14-main-bg); +} + +.nt-group-15 .nt-plan-group-summary, +.nt-group-15 .nt-timeline-dot { + color: var(--nt-group-15-dark); + background-color: var(--nt-group-15-dark-bg); +} +.nt-group-15 .period { + color: var(--nt-group-15-main); + background-color: var(--nt-group-15-main-bg); +} + +.nt-group-16 .nt-plan-group-summary, +.nt-group-16 .nt-timeline-dot { + color: var(--nt-group-16-dark); + background-color: var(--nt-group-16-dark-bg); +} +.nt-group-16 .period { + color: var(--nt-group-16-main); + background-color: var(--nt-group-16-main-bg); +} + +.nt-group-17 .nt-plan-group-summary, +.nt-group-17 .nt-timeline-dot { + color: var(--nt-group-17-dark); + background-color: var(--nt-group-17-dark-bg); +} +.nt-group-17 .period { + color: var(--nt-group-17-main); + background-color: var(--nt-group-17-main-bg); +} + +.nt-group-18 .nt-plan-group-summary, +.nt-group-18 .nt-timeline-dot { + color: var(--nt-group-18-dark); + background-color: var(--nt-group-18-dark-bg); +} +.nt-group-18 .period { + color: var(--nt-group-18-main); + background-color: var(--nt-group-18-main-bg); +} + +/** + * Extra CSS file for MkDocs and the neoteroi.timeline extension. + * + * https://github.com/Neoteroi/mkdocs-plugins +**/ +.nt-error { + border: 2px dashed darkred; + padding: 0 1rem; + background: #faf9ba; + color: darkred; +} + +.nt-timeline { + margin-top: 30px; +} +.nt-timeline .nt-timeline-title { + font-size: 1.1rem; + margin-top: 0; +} +.nt-timeline .nt-timeline-sub-title { + margin-top: 0; +} +.nt-timeline .nt-timeline-content { + font-size: 0.8rem; + border-bottom: 2px dashed #ccc; + padding-bottom: 1.2rem; +} +.nt-timeline.horizontal .nt-timeline-items { + flex-direction: row; + overflow-x: scroll; +} +.nt-timeline.horizontal .nt-timeline-items > div { + min-width: 400px; + margin-right: 50px; +} +.nt-timeline.horizontal.reverse .nt-timeline-items { + flex-direction: row-reverse; +} +.nt-timeline.horizontal.center .nt-timeline-before { + background-image: linear-gradient( + rgba(252, 70, 107, 0) 0%, + rgb(252, 70, 107) 100% + ); + background-repeat: no-repeat; + background-size: 100% 2px; + background-position: 0 center; +} +.nt-timeline.horizontal.center .nt-timeline-after { + background-image: linear-gradient( + 180deg, + rgb(252, 70, 107) 0%, + rgba(252, 70, 107, 0) 100% + ); + background-repeat: no-repeat; + background-size: 100% 2px; + background-position: 0 center; +} +.nt-timeline.horizontal.center .nt-timeline-items { + background-image: radial-gradient( + circle, + rgb(63, 94, 251) 0%, + rgb(252, 70, 107) 100% + ); + background-repeat: no-repeat; + background-size: 100% 2px; + background-position: 0 center; +} +.nt-timeline.horizontal .nt-timeline-dot { + left: 50%; +} +.nt-timeline.horizontal .nt-timeline-dot:not(.bigger) { + top: calc(50% - 4px); +} +.nt-timeline.horizontal .nt-timeline-dot.bigger { + top: calc(50% - 15px); +} +.nt-timeline.vertical .nt-timeline-items { + flex-direction: column; +} +.nt-timeline.vertical.reverse .nt-timeline-items { + flex-direction: column-reverse; +} +.nt-timeline.vertical.center .nt-timeline-before { + background: linear-gradient(rgba(252, 70, 107, 0) 0%, rgb(252, 70, 107) 100%) + no-repeat center/2px 100%; +} +.nt-timeline.vertical.center .nt-timeline-after { + background: linear-gradient(rgb(252, 70, 107) 0%, rgba(252, 70, 107, 0) 100%) + no-repeat center/2px 100%; +} +.nt-timeline.vertical.center .nt-timeline-items { + background: radial-gradient( + circle, + rgb(63, 94, 251) 0%, + rgb(252, 70, 107) 100% + ) + no-repeat center/2px 100%; +} +.nt-timeline.vertical.center .nt-timeline-dot { + left: calc(50% - 10px); +} +.nt-timeline.vertical.center .nt-timeline-dot:not(.bigger) { + top: 10px; +} +.nt-timeline.vertical.center .nt-timeline-dot.bigger { + left: calc(50% - 20px); +} +.nt-timeline.vertical.left { + padding-left: 100px; +} +.nt-timeline.vertical.left .nt-timeline-item { + padding-left: 70px; +} +.nt-timeline.vertical.left .nt-timeline-sub-title { + left: -100px; + width: 100px; +} +.nt-timeline.vertical.left .nt-timeline-before { + background: linear-gradient(rgba(252, 70, 107, 0) 0%, rgb(252, 70, 107) 100%) + no-repeat 30px/2px 100%; +} +.nt-timeline.vertical.left .nt-timeline-after { + background: linear-gradient(rgb(252, 70, 107) 0%, rgba(252, 70, 107, 0) 100%) + no-repeat 30px/2px 100%; +} +.nt-timeline.vertical.left .nt-timeline-items { + background: radial-gradient( + circle, + rgb(63, 94, 251) 0%, + rgb(252, 70, 107) 100% + ) + no-repeat 30px/2px 100%; +} +.nt-timeline.vertical.left .nt-timeline-dot { + left: 21px; + top: 8px; +} +.nt-timeline.vertical.left .nt-timeline-dot.bigger { + top: 0px; + left: 10px; +} +.nt-timeline.vertical.right { + padding-right: 100px; +} +.nt-timeline.vertical.right .nt-timeline-sub-title { + right: -100px; + text-align: left; + width: 100px; +} +.nt-timeline.vertical.right .nt-timeline-item { + padding-right: 70px; +} +.nt-timeline.vertical.right .nt-timeline-before { + background: linear-gradient(rgba(252, 70, 107, 0) 0%, rgb(252, 70, 107) 100%) + no-repeat calc(100% - 30px) / 2px 100%; +} +.nt-timeline.vertical.right .nt-timeline-after { + background: linear-gradient(rgb(252, 70, 107) 0%, rgba(252, 70, 107, 0) 100%) + no-repeat calc(100% - 30px) / 2px 100%; +} +.nt-timeline.vertical.right .nt-timeline-items { + background: radial-gradient( + circle, + rgb(63, 94, 251) 0%, + rgb(252, 70, 107) 100% + ) + no-repeat calc(100% - 30px) / 2px 100%; +} +.nt-timeline.vertical.right .nt-timeline-dot { + right: 21px; + top: 8px; +} +.nt-timeline.vertical.right .nt-timeline-dot.bigger { + top: 10px; + right: 10px; +} + +.nt-timeline-items { + display: flex; + position: relative; +} +.nt-timeline-items > div { + min-height: 100px; + padding-top: 2px; + padding-bottom: 20px; +} + +.nt-timeline-before { + content: ""; + height: 15px; +} + +.nt-timeline-after { + content: ""; + height: 60px; + margin-bottom: 20px; +} + +.nt-timeline-sub-title { + position: absolute; + width: 50%; + top: 4px; + font-size: 18px; + color: var(--nt-color-50); +} + +[data-md-color-scheme="slate"] .nt-timeline-sub-title { + color: var(--nt-color-51); +} + +.nt-timeline-item { + position: relative; +} + +.nt-timeline.vertical.center:not(.alternate) .nt-timeline-item { + padding-left: calc(50% + 40px); +} +.nt-timeline.vertical.center:not(.alternate) + .nt-timeline-item + .nt-timeline-sub-title { + left: 0; + padding-right: 40px; + text-align: right; +} +.nt-timeline.vertical.center.alternate .nt-timeline-item:nth-child(odd) { + padding-left: calc(50% + 40px); +} +.nt-timeline.vertical.center.alternate + .nt-timeline-item:nth-child(odd) + .nt-timeline-sub-title { + left: 0; + padding-right: 40px; + text-align: right; +} +.nt-timeline.vertical.center.alternate .nt-timeline-item:nth-child(even) { + text-align: right; + padding-right: calc(50% + 40px); +} +.nt-timeline.vertical.center.alternate + .nt-timeline-item:nth-child(even) + .nt-timeline-sub-title { + right: 0; + padding-left: 40px; + text-align: left; +} + +.nt-timeline-dot { + position: relative; + width: 20px; + height: 20px; + border-radius: 100%; + background-color: #fc5b5b; + position: absolute; + top: 0px; + z-index: 2; + display: flex; + justify-content: center; + align-items: center; + box-shadow: 0 2px 1px -1px rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14), + 0 1px 3px 0 rgba(0, 0, 0, 0.12); + border: 3px solid white; +} +.nt-timeline-dot:not(.bigger) .icon { + font-size: 10px; +} +.nt-timeline-dot.bigger { + width: 40px; + height: 40px; + padding: 3px; +} +.nt-timeline-dot .icon { + color: white; + position: relative; + top: 1px; +} + +/* Fix for webkit (Chrome, Safari) */ +@supports not (-moz-appearance: none) { + /* + This fix is necessary, for some reason, to render the timeline properly + inside `details` elements used by pymdownx. Firefox doesn't need this fix, + it renders elements properly. + */ + details + .nt-timeline.vertical.center.alternate + .nt-timeline-item:nth-child(odd) + .nt-timeline-sub-title, + details + .nt-timeline.vertical.center:not(.alternate) + .nt-timeline-item + .nt-timeline-sub-title { + left: -40px; + } + details + .nt-timeline.vertical.center.alternate + .nt-timeline-item:nth-child(even) + .nt-timeline-sub-title { + right: -40px; + } + details .nt-timeline.vertical.center .nt-timeline-dot { + left: calc(50% - 12px); + } + details .nt-timeline-dot.bigger { + font-size: 1rem !important; + } +} +/* default colors */ +.nt-timeline-item:nth-child(0) .nt-timeline-dot { + background-color: var(--nt-color-0); +} + +.nt-timeline-item:nth-child(1) .nt-timeline-dot { + background-color: var(--nt-color-1); +} + +.nt-timeline-item:nth-child(2) .nt-timeline-dot { + background-color: var(--nt-color-2); +} + +.nt-timeline-item:nth-child(3) .nt-timeline-dot { + background-color: var(--nt-color-3); +} + +.nt-timeline-item:nth-child(4) .nt-timeline-dot { + background-color: var(--nt-color-4); +} + +.nt-timeline-item:nth-child(5) .nt-timeline-dot { + background-color: var(--nt-color-5); +} + +.nt-timeline-item:nth-child(6) .nt-timeline-dot { + background-color: var(--nt-color-6); +} + +.nt-timeline-item:nth-child(7) .nt-timeline-dot { + background-color: var(--nt-color-7); +} + +.nt-timeline-item:nth-child(8) .nt-timeline-dot { + background-color: var(--nt-color-8); +} + +.nt-timeline-item:nth-child(9) .nt-timeline-dot { + background-color: var(--nt-color-9); +} + +.nt-timeline-item:nth-child(10) .nt-timeline-dot { + background-color: var(--nt-color-10); +} + +.nt-timeline-item:nth-child(11) .nt-timeline-dot { + background-color: var(--nt-color-11); +} + +.nt-timeline-item:nth-child(12) .nt-timeline-dot { + background-color: var(--nt-color-12); +} + +.nt-timeline-item:nth-child(13) .nt-timeline-dot { + background-color: var(--nt-color-13); +} + +.nt-timeline-item:nth-child(14) .nt-timeline-dot { + background-color: var(--nt-color-14); +} + +.nt-timeline-item:nth-child(15) .nt-timeline-dot { + background-color: var(--nt-color-15); +} + +.nt-timeline-item:nth-child(16) .nt-timeline-dot { + background-color: var(--nt-color-16); +} + +.nt-timeline-item:nth-child(17) .nt-timeline-dot { + background-color: var(--nt-color-17); +} + +.nt-timeline-item:nth-child(18) .nt-timeline-dot { + background-color: var(--nt-color-18); +} + +.nt-timeline-item:nth-child(19) .nt-timeline-dot { + background-color: var(--nt-color-19); +} + +.nt-timeline-item:nth-child(20) .nt-timeline-dot { + background-color: var(--nt-color-20); +} + +/** + * Extra CSS for the neoteroi.projects.gantt extension. + * + * https://github.com/Neoteroi/mkdocs-plugins +**/ +:root { + --nt-scrollbar-color: #2751b0; + --nt-plan-actions-height: 24px; + --nt-units-background: #ff9800; + --nt-months-background: #2751b0; + --nt-plan-vertical-line-color: #a3a3a3ad; +} + +.nt-pastello { + --nt-scrollbar-color: #9fb8f4; + --nt-units-background: #f5dc82; + --nt-months-background: #5b7fd1; +} + +[data-md-color-scheme="slate"] { + --nt-units-background: #003773; +} +[data-md-color-scheme="slate"] .nt-pastello { + --nt-units-background: #3f4997; +} + +.nt-plan-root { + min-height: 200px; + scrollbar-width: 20px; + scrollbar-color: var(--nt-scrollbar-color); + display: flex; +} +.nt-plan-root ::-webkit-scrollbar { + width: 20px; +} +.nt-plan-root ::-webkit-scrollbar-track { + box-shadow: inset 0 0 5px grey; + border-radius: 10px; +} +.nt-plan-root ::-webkit-scrollbar-thumb { + background: var(--nt-scrollbar-color); + border-radius: 10px; +} +.nt-plan-root .nt-plan { + flex: 80%; +} +.nt-plan-root.no-groups .nt-plan-periods { + padding-left: 0; +} +.nt-plan-root.no-groups .nt-plan-group-summary { + display: none; +} +.nt-plan-root .nt-timeline-dot.bigger { + top: -10px; +} +.nt-plan-root .nt-timeline-dot.bigger[title] { + cursor: help; +} + +.nt-plan { + white-space: nowrap; + overflow-x: auto; + display: flex; +} +.nt-plan .ug-timeline-dot { + left: 368px; + top: -8px; + cursor: help; +} + +.months { + display: flex; +} + +.month { + flex: auto; + display: inline-block; + box-shadow: rgba(0, 0, 0, 0.2) 0px 3px 1px -2px, + rgba(0, 0, 0, 0.14) 0px 2px 2px 0px, + rgba(0, 0, 0, 0.12) 0px 1px 5px 0px inset; + background-color: var(--nt-months-background); + color: white; + text-transform: uppercase; + font-family: Roboto, Helvetica, Arial, sans-serif; + padding: 2px 5px; + font-size: 12px; + border: 1px solid #000; + width: 150px; + border-radius: 8px; +} + +.nt-plan-group-activities { + flex: auto; + position: relative; +} + +.nt-vline { + border-left: 1px dashed var(--nt-plan-vertical-line-color); + height: 100%; + left: 0; + position: absolute; + margin-left: -0.5px; + top: 0; + -webkit-transition: all 0.5s linear !important; + -moz-transition: all 0.5s linear !important; + -ms-transition: all 0.5s linear !important; + -o-transition: all 0.5s linear !important; + transition: all 0.5s linear !important; + z-index: -2; +} + +.nt-plan-activity { + display: flex; + margin: 2px 0; + background-color: rgba(187, 187, 187, 0.2509803922); +} + +.actions { + height: var(--nt-plan-actions-height); +} + +.actions { + position: relative; +} + +.period { + display: inline-block; + height: var(--nt-plan-actions-height); + width: 120px; + position: absolute; + left: 0px; + background: #1da1f2; + border-radius: 5px; + transition: all 0.5s; + cursor: help; + -webkit-transition: width 1s ease-in-out; + -moz-transition: width 1s ease-in-out; + -o-transition: width 1s ease-in-out; + transition: width 1s ease-in-out; +} +.period .nt-tooltip { + display: none; + top: 30px; + position: relative; + padding: 1rem; + text-align: center; + font-size: 12px; +} +.period:hover .nt-tooltip { + display: inline-block; +} + +.period-0 { + left: 340px; + visibility: visible; + background-color: rgb(69, 97, 101); +} + +.period-1 { + left: 40px; + visibility: visible; + background-color: green; +} + +.period-2 { + left: 120px; + visibility: visible; + background-color: pink; + width: 80px; +} + +.period-3 { + left: 190px; + visibility: visible; + background-color: darkred; + width: 150px; +} + +.weeks > span, +.days > span { + height: 25px; +} + +.weeks > span { + display: inline-block; + margin: 0; + padding: 0; + font-weight: bold; +} +.weeks > span .week-text { + font-size: 10px; + position: absolute; + display: inline-block; + padding: 3px 4px; +} + +.days { + z-index: -2; + position: relative; +} + +.day-text { + font-size: 10px; + position: absolute; + display: inline-block; + padding: 3px 4px; +} + +.period span { + font-size: 12px; + vertical-align: top; + margin-left: 4px; + color: black; + background: rgba(255, 255, 255, 0.6588235294); + border-radius: 6px; + padding: 0 4px; +} + +.weeks, +.days { + height: 20px; + display: flex; + box-sizing: content-box; +} + +.months { + display: flex; +} + +.week, +.day { + height: 20px; + position: relative; + border: 1; + flex: auto; + border: 2px solid white; + border-radius: 4px; + background-color: var(--nt-units-background); + cursor: help; +} + +.years { + display: flex; +} + +.year { + text-align: center; + border-right: 1px solid var(--nt-plan-vertical-line-color); + font-weight: bold; +} +.year:first-child { + border-left: 1px solid var(--nt-plan-vertical-line-color); +} +.year:first-child:last-child { + width: 100%; +} + +.quarters { + display: flex; +} + +.quarter { + width: 12.5%; + text-align: center; + border-right: 1px solid var(--nt-plan-vertical-line-color); + font-weight: bold; +} +.quarter:first-child { + border-left: 1px solid var(--nt-plan-vertical-line-color); +} + +.nt-plan-group { + margin: 20px 0; + position: relative; +} + +.nt-plan-group { + display: flex; +} + +.nt-plan-group-summary { + background: #2751b0; + width: 150px; + white-space: normal; + padding: 0.1rem 0.5rem; + border-radius: 5px; + color: #fff; + z-index: 3; +} +.nt-plan-group-summary p { + margin: 0; + padding: 0; + font-size: 0.6rem; + color: #fff; +} + +.nt-plan-group-summary, +.month, +.period, +.week, +.day, +.nt-tooltip { + border: 3px solid white; + box-shadow: 0 2px 3px -1px rgba(0, 0, 0, 0.2), 0 3px 3px 0 rgba(0, 0, 0, 0.14), + 0 1px 5px 0 rgba(0, 0, 0, 0.12); +} + +.nt-plan-periods { + padding-left: 150px; +} + +.months { + z-index: 2; + position: relative; +} + +.weeks { + position: relative; + top: -2px; + z-index: 0; +} + +.month, +.quarter, +.year, +.week, +.day, +.nt-tooltip { + font-family: Roboto, Helvetica, Arial, sans-serif; + box-sizing: border-box; +} + +.nt-cards.nt-grid { + display: grid; + grid-auto-columns: 1fr; + gap: 0.5rem; + max-width: 100vw; + overflow-x: auto; + padding: 1px; +} +.nt-cards.nt-grid.cols-1 { + grid-template-columns: repeat(1, 1fr); +} +.nt-cards.nt-grid.cols-2 { + grid-template-columns: repeat(2, 1fr); +} +.nt-cards.nt-grid.cols-3 { + grid-template-columns: repeat(3, 1fr); +} +.nt-cards.nt-grid.cols-4 { + grid-template-columns: repeat(4, 1fr); +} +.nt-cards.nt-grid.cols-5 { + grid-template-columns: repeat(5, 1fr); +} +.nt-cards.nt-grid.cols-6 { + grid-template-columns: repeat(6, 1fr); +} + +@media only screen and (max-width: 400px) { + .nt-cards.nt-grid { + grid-template-columns: repeat(1, 1fr) !important; + } +} +.nt-card { + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), + 0 1px 5px 0 rgba(0, 0, 0, 0.12); +} +.nt-card:hover { + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.24), 0 3px 1px -2px rgba(0, 0, 0, 0.3), + 0 1px 5px 0 rgba(0, 0, 0, 0.22); +} + +[data-md-color-scheme="slate"] .nt-card { + box-shadow: 0 2px 2px 0 rgba(4, 40, 33, 0.14), + 0 3px 1px -2px rgba(40, 86, 94, 0.47), 0 1px 5px 0 rgba(139, 252, 255, 0.64); +} +[data-md-color-scheme="slate"] .nt-card:hover { + box-shadow: 0 2px 2px 0 rgba(0, 255, 206, 0.14), + 0 3px 1px -2px rgba(33, 156, 177, 0.47), + 0 1px 5px 0 rgba(96, 251, 255, 0.64); +} + +.nt-card > a { + color: var(--md-default-fg-color); +} + +.nt-card > a > div { + cursor: pointer; +} + +.nt-card { + padding: 5px; + margin-bottom: 0.5rem; +} + +.nt-card-title { + font-size: 1rem; + font-weight: bold; + margin: 4px 0 8px 0; + line-height: 22px; +} + +.nt-card-content { + padding: 0.4rem 0.8rem 0.8rem 0.8rem; +} + +.nt-card-text { + font-size: 14px; + padding: 0; + margin: 0; +} + +.nt-card .nt-card-image { + text-align: center; + border-radius: 2px; + background-position: center center; + background-size: cover; + background-repeat: no-repeat; + min-height: 120px; +} + +.nt-card .nt-card-image.tags img { + margin-top: 12px; +} + +.nt-card .nt-card-image img { + height: 105px; + margin-top: 5px; +} + +.nt-card a:hover, +.nt-card a:focus { + color: var(--md-accent-fg-color); +} + +.nt-card h2 { + margin: 0; +} + +/** + * Extra CSS file recommended for MkDocs and neoteroi.spantable extension. + * + * https://github.com/Neoteroi/mkdocs-plugins +**/ +.span-table-wrapper table { + border-collapse: collapse; + margin-bottom: 2rem; + border-radius: 0.1rem; +} + +.span-table td, +.span-table th { + padding: 0.2rem; + background-color: var(--md-default-bg-color); + font-size: 0.64rem; + max-width: 100%; + overflow: auto; + touch-action: auto; + border-top: 0.05rem solid var(--md-typeset-table-color); + padding: 0.9375em 1.25em; + vertical-align: top; +} + +.span-table tr:first-child td { + font-weight: 700; + min-width: 5rem; + padding: 0.9375em 1.25em; + vertical-align: top; +} + +.span-table td:first-child { + border-left: 0.05rem solid var(--md-typeset-table-color); +} + +.span-table td:last-child { + border-right: 0.05rem solid var(--md-typeset-table-color); +} + +.span-table tr:last-child { + border-bottom: 0.05rem solid var(--md-typeset-table-color); +} + +.span-table [colspan], +.span-table [rowspan] { + font-weight: bold; + border: 0.05rem solid var(--md-typeset-table-color); +} + +.span-table tr:not(:first-child):hover td:not([colspan]):not([rowspan]), +.span-table td[colspan]:hover, +.span-table td[rowspan]:hover { + background-color: rgba(0, 0, 0, 0.035); + box-shadow: 0 0.05rem 0 var(--md-default-bg-color) inset; + transition: background-color 125ms; +} + +.nt-contribs { + margin-top: 2rem; + font-size: small; + border-top: 1px dotted lightgray; + padding-top: 0.5rem; +} +.nt-contribs .nt-contributors { + padding-top: 0.5rem; + display: flex; + flex-wrap: wrap; +} +.nt-contribs .nt-contributor { + background: lightgrey; + background-size: cover; + width: 40px; + height: 40px; + border-radius: 100%; + margin: 0 6px 6px 0; + cursor: help; + opacity: 0.7; +} +.nt-contribs .nt-contributor:hover { + opacity: 1; +} +.nt-contribs .nt-contributors-title { + font-style: italic; + margin-bottom: 0; +} +.nt-contribs .nt-initials { + text-transform: uppercase; + font-size: 20px; + text-align: center; + width: 40px; + height: 40px; + display: inline-block; + vertical-align: middle; + position: relative; + top: 4px; + color: inherit; + font-weight: bold; +} +.nt-contribs .nt-group-0 { + background-color: var(--nt-color-0); +} +.nt-contribs .nt-group-1 { + background-color: var(--nt-color-1); +} +.nt-contribs .nt-group-2 { + background-color: var(--nt-color-2); +} +.nt-contribs .nt-group-3 { + background-color: var(--nt-color-3); +} +.nt-contribs .nt-group-4 { + background-color: var(--nt-color-4); +} +.nt-contribs .nt-group-5 { + background-color: var(--nt-color-5); +} +.nt-contribs .nt-group-6 { + background-color: var(--nt-color-6); +} +.nt-contribs .nt-group-7 { + color: #000; + background-color: var(--nt-color-7); +} +.nt-contribs .nt-group-8 { + color: #000; + background-color: var(--nt-color-8); +} +.nt-contribs .nt-group-9 { + background-color: var(--nt-color-9); +} +.nt-contribs .nt-group-10 { + background-color: var(--nt-color-10); +} +.nt-contribs .nt-group-11 { + background-color: var(--nt-color-11); +} +.nt-contribs .nt-group-12 { + background-color: var(--nt-color-12); +} +.nt-contribs .nt-group-13 { + background-color: var(--nt-color-13); +} +.nt-contribs .nt-group-14 { + background-color: var(--nt-color-14); +} +.nt-contribs .nt-group-15 { + color: #000; + background-color: var(--nt-color-15); +} +.nt-contribs .nt-group-16 { + background-color: var(--nt-color-16); +} +.nt-contribs .nt-group-17 { + color: #000; + background-color: var(--nt-color-17); +} +.nt-contribs .nt-group-18 { + background-color: var(--nt-color-18); +} +.nt-contribs .nt-group-19 { + background-color: var(--nt-color-19); +} +.nt-contribs .nt-group-20 { + color: #000; + background-color: var(--nt-color-20); +} +.nt-contribs .nt-group-21 { + color: #000; + background-color: var(--nt-color-21); +} +.nt-contribs .nt-group-22 { + color: #000; + background-color: var(--nt-color-22); +} +.nt-contribs .nt-group-23 { + color: #000; + background-color: var(--nt-color-23); +} +.nt-contribs .nt-group-24 { + color: #000; + background-color: var(--nt-color-24); +} +.nt-contribs .nt-group-25 { + color: #000; + background-color: var(--nt-color-25); +} +.nt-contribs .nt-group-26 { + color: #000; + background-color: var(--nt-color-26); +} +.nt-contribs .nt-group-27 { + background-color: var(--nt-color-27); +} +.nt-contribs .nt-group-28 { + color: #000; + background-color: var(--nt-color-28); +} +.nt-contribs .nt-group-29 { + color: #000; + background-color: var(--nt-color-29); +} +.nt-contribs .nt-group-30 { + background-color: var(--nt-color-30); +} +.nt-contribs .nt-group-31 { + background-color: var(--nt-color-31); +} +.nt-contribs .nt-group-32 { + color: #000; + background-color: var(--nt-color-32); +} +.nt-contribs .nt-group-33 { + background-color: var(--nt-color-33); +} +.nt-contribs .nt-group-34 { + background-color: var(--nt-color-34); +} +.nt-contribs .nt-group-35 { + background-color: var(--nt-color-35); +} +.nt-contribs .nt-group-36 { + background-color: var(--nt-color-36); +} +.nt-contribs .nt-group-37 { + background-color: var(--nt-color-37); +} +.nt-contribs .nt-group-38 { + background-color: var(--nt-color-38); +} +.nt-contribs .nt-group-39 { + color: #000; + background-color: var(--nt-color-39); +} +.nt-contribs .nt-group-40 { + color: #000; + background-color: var(--nt-color-40); +} +.nt-contribs .nt-group-41 { + color: #000; + background-color: var(--nt-color-41); +} +.nt-contribs .nt-group-42 { + color: #000; + background-color: var(--nt-color-42); +} +.nt-contribs .nt-group-43 { + color: #000; + background-color: var(--nt-color-43); +} +.nt-contribs .nt-group-44 { + color: #000; + background-color: var(--nt-color-44); +} +.nt-contribs .nt-group-45 { + background-color: var(--nt-color-45); +} +.nt-contribs .nt-group-46 { + color: #000; + background-color: var(--nt-color-46); +} +.nt-contribs .nt-group-47 { + background-color: var(--nt-color-47); +} +.nt-contribs .nt-group-48 { + background-color: var(--nt-color-48); +} +.nt-contribs .nt-group-49 { + background-color: var(--nt-color-49); +}