<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Customizing a builder on Signet</title><link>https://test.signet.sh/docs/block-builders/customizing-a-builder/</link><description>Recent content in Customizing a builder on Signet</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://test.signet.sh/docs/block-builders/customizing-a-builder/index.xml" rel="self" type="application/rss+xml"/><item><title>Getting transactions and bundles</title><link>https://test.signet.sh/docs/block-builders/customizing-a-builder/getting-transactions-and-bundles-for-a-block/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://test.signet.sh/docs/block-builders/customizing-a-builder/getting-transactions-and-bundles-for-a-block/</guid><description>&lt;h1 id="getting-transactions-and-bundles"&gt;Getting Transactions and Bundles&lt;/h1&gt;&lt;p&gt;The transaction cache offers endpoints for getting simple transactions and Flashbots-style transaction bundles.&lt;/p&gt;
&lt;p&gt;Fetching bundles requires authentication. This is because Builders are only allowed to build blocks for their assigned slots. See &lt;a href="https://test.signet.sh/docs/block-builders/run-a-builder/authentication/"&gt;Authentication&lt;/a&gt; for details.&lt;/p&gt;
&lt;h2 id="transaction-cache-basics"&gt;Transaction cache basics:&lt;a href="#transaction-cache-basics" class="heading-anchor" data-heading-anchor aria-label="Link to Transaction cache basics:"&gt;
 &lt;svg class="heading-anchor-icon" data-icon width="12" height="12" aria-hidden="true"&gt;
 &lt;use xlink:href="#icon-link"&gt;&lt;/use&gt;
 &lt;/svg&gt;
 &lt;/a&gt;
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;API Endpoint&lt;/strong&gt;: &lt;code&gt;transactions.api.signet.sh&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cache Duration&lt;/strong&gt;: 10 minutes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Authentication:&lt;/strong&gt; Authentication is required to retrieve bundles, but not to retrieve transactions.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="api-endpoints"&gt;API Endpoints&lt;a href="#api-endpoints" class="heading-anchor" data-heading-anchor aria-label="Link to API Endpoints"&gt;
 &lt;svg class="heading-anchor-icon" data-icon width="12" height="12" aria-hidden="true"&gt;
 &lt;use xlink:href="#icon-link"&gt;&lt;/use&gt;
 &lt;/svg&gt;
 &lt;/a&gt;
&lt;/h2&gt;&lt;h3 id="get-transactions"&gt;Get Transactions&lt;a href="#get-transactions" class="heading-anchor" data-heading-anchor aria-label="Link to Get Transactions"&gt;
 &lt;svg class="heading-anchor-icon" data-icon width="12" height="12" aria-hidden="true"&gt;
 &lt;use xlink:href="#icon-link"&gt;&lt;/use&gt;
 &lt;/svg&gt;
 &lt;/a&gt;
&lt;/h3&gt;&lt;div class="code-block" data-code-block&gt;
 &lt;div class="code-header"&gt;
 &lt;span class="code-lang"&gt;http&lt;/span&gt;
 &lt;button class="code-copy" data-copy-button aria-label="Copy code" type="button"&gt;Copy&lt;/button&gt;
 &lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-http" data-lang="http"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;GET /transactions&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Returns a list of transactions available for inclusion in a block.&lt;/p&gt;</description></item><item><title>Bundle guarantees</title><link>https://test.signet.sh/docs/block-builders/customizing-a-builder/bundle-guarantees/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://test.signet.sh/docs/block-builders/customizing-a-builder/bundle-guarantees/</guid><description>&lt;h1 id="bundle-guarantees"&gt;Bundle Guarantees&lt;/h1&gt;&lt;p&gt;Signet bundles are &lt;a href="https://docs.flashbots.net/flashbots-protect/additional-documentation/bundle-cache" rel="noopener noreferrer" target="_blank"&gt;Flashbots-style&lt;/a&gt; bundles of transactions wrapped with a &lt;code&gt;host_fills&lt;/code&gt; field.&lt;/p&gt;
&lt;p&gt;When building blocks containing Signet orders, the atomicity constraints apply to &lt;code&gt;host_fills&lt;/code&gt; as well, meaning that if a &lt;code&gt;host_fill&lt;/code&gt; is included and no corresponding rollup transaction is included, it would be considered invalid.&lt;/p&gt;
&lt;h2 id="bundle-guarantees-1"&gt;Bundle Guarantees&lt;a href="#bundle-guarantees-1" class="heading-anchor" data-heading-anchor aria-label="Link to Bundle Guarantees"&gt;
 &lt;svg class="heading-anchor-icon" data-icon width="12" height="12" aria-hidden="true"&gt;
 &lt;use xlink:href="#icon-link"&gt;&lt;/use&gt;
 &lt;/svg&gt;
 &lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;Block Builders should respect the following guarantees around bundles when building blocks.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ordering&lt;/strong&gt;: The transaction ordering in a bundle must be preserved.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Atomicity&lt;/strong&gt;: Bundles won&amp;rsquo;t be split up and will be applied as a contiguous block of transactions or won&amp;rsquo;t be applied at all.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Revertibility&lt;/strong&gt;: Transactions in a bundle won&amp;rsquo;t revert unless explicitly marked as revertible.&lt;/li&gt;
&lt;/ul&gt;
&lt;aside class="callout callout--info"&gt;
 Transactions from the cache can be treated normally and included as seen fit.
&lt;/aside&gt;</description></item><item><title>Getting a sequencer signature</title><link>https://test.signet.sh/docs/block-builders/customizing-a-builder/getting-a-sequencer-signature/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://test.signet.sh/docs/block-builders/customizing-a-builder/getting-a-sequencer-signature/</guid><description>&lt;h1 id="getting-a-sequencer-signature"&gt;Getting a Sequencer Signature&lt;/h1&gt;&lt;p&gt;Blocks must be cosigned by the Sequencer. The Sequencer blindly signs any number of candidate blocks for the current Builder via a simple API.&lt;/p&gt;
&lt;p&gt;The Sequencer API accepts a &lt;a href="https://docs.rs/zenith-types/latest/zenith_types/struct.SignRequest.html" rel="noopener noreferrer" target="_blank"&gt;&lt;code&gt;SignRequest&lt;/code&gt;&lt;/a&gt; via a &lt;code&gt;POST&lt;/code&gt; call to the &lt;code&gt;/signBlock&lt;/code&gt; endpoint, and returns a &lt;a href="https://docs.rs/zenith-types/latest/zenith_types/struct.SignResponse.html" rel="noopener noreferrer" target="_blank"&gt;&lt;code&gt;SignResponse&lt;/code&gt;&lt;/a&gt;. For details on calculating the &lt;code&gt;contents&lt;/code&gt; hash, see the &lt;a href="https://github.com/init4tech/builder/blob/main/src/quincey.rs" rel="noopener noreferrer" target="_blank"&gt;rust builder example&lt;/a&gt;.&lt;/p&gt;
&lt;aside class="callout callout--danger"&gt;
 The sequencer is allowed to modify the returned copy of the &lt;code&gt;SignRequest&lt;/code&gt;. This is to allow the sequencer to set a specific &lt;code&gt;gas_limit&lt;/code&gt;. It currently does not modify the request before returning it, but may do so in the future.
&lt;/aside&gt;
&lt;h2 id="slot-timing"&gt;Slot Timing&lt;a href="#slot-timing" class="heading-anchor" data-heading-anchor aria-label="Link to Slot Timing"&gt;
 &lt;svg class="heading-anchor-icon" data-icon width="12" height="12" aria-hidden="true"&gt;
 &lt;use xlink:href="#icon-link"&gt;&lt;/use&gt;
 &lt;/svg&gt;
 &lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;Quincey follows a round-robin sequencing approach, allowing builders to request block signatures according to their spot in the rotation.&lt;/p&gt;</description></item><item><title>Submitting a block to Ethereum</title><link>https://test.signet.sh/docs/block-builders/customizing-a-builder/submitting-a-block-to-ethereum/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://test.signet.sh/docs/block-builders/customizing-a-builder/submitting-a-block-to-ethereum/</guid><description>&lt;h1 id="submitting-a-block-to-ethereum"&gt;Submitting a Block to Ethereum&lt;/h1&gt;&lt;p&gt;Rollup blocks are submitted to the host chain by calling the Zenith &lt;a href="https://github.com/init4tech/zenith/blob/37f386a8465d97f40e3233971c7a7868bbd4e4d9/src/Zenith.sol#L105" rel="noopener noreferrer" target="_blank"&gt;&lt;code&gt;submitBlock&lt;/code&gt;&lt;/a&gt; function, attaching transaction data in a 4844 blob.&lt;/p&gt;
&lt;h2 id="code-flows"&gt;Code Flows&lt;a href="#code-flows" class="heading-anchor" data-heading-anchor aria-label="Link to Code Flows"&gt;
 &lt;svg class="heading-anchor-icon" data-icon width="12" height="12" aria-hidden="true"&gt;
 &lt;use xlink:href="#icon-link"&gt;&lt;/use&gt;
 &lt;/svg&gt;
 &lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;These examples assume one has already &lt;a href="https://test.signet.sh/docs/block-builders/customizing-a-builder/getting-transactions-and-bundles-for-a-block/"&gt;chosen a set of transactions and bundles&lt;/a&gt;, and &lt;a href="https://test.signet.sh/docs/block-builders/customizing-a-builder/getting-a-sequencer-signature/"&gt;gotten a co-signature from the Sequencer API&lt;/a&gt;.&lt;/p&gt;
&lt;aside class="callout callout--info"&gt;
 &lt;p&gt;The &lt;a href="https://github.com/init4tech/builder/tree/main/src/tasks/submit" rel="noopener noreferrer" target="_blank"&gt;builder example&lt;/a&gt; has a submission process without host fills that can be referenced for blob construction.&lt;/p&gt;</description></item></channel></rss>