<span><svgxmlns="http://www.w3.org/2000/svg"aria-hidden="true"focusable="false"x="0px"y="0px"viewBox="0 0 100 100"width="15"height="15"class="icon outbound"><pathfill="currentColor"d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygonfill="currentColor"points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><spanclass="sr-only">(opens new window)</span></span></a></div><!----></nav><ulclass="sidebar-links"><li><sectionclass="sidebar-group depth-0"><pclass="sidebar-heading"><span>Getting Started</span><!----></p><ulclass="sidebar-links sidebar-group-items"><li><ahref="/anchor/getting-started/introduction.html"class="sidebar-link">Introduction</a></li><li><ahref="/anchor/getting-started/installation.html"class="sidebar-link">Installing Dependencies</a></li></ul></section></li><li><sectionclass="sidebar-group depth-0"><pclass="sidebar-heading"><span>Teams</span><!----></p><ulclass="sidebar-links sidebar-group-items"><li><ahref="/anchor/getting-started/projects.html"class="sidebar-link">Projects</a></li></ul></section></li><li><sectionclass="sidebar-group depth-0"><pclass="sidebar-heading"><span>Tutorials</span><!----></p><ulclass="sidebar-links sidebar-group-items"><li><ahref="/anchor/tutorials/tutorial-0.html"class="sidebar-link">A Minimal Example</a></li><li><ahref="/anchor/tutorials/tutorial-1.html"class="sidebar-link">Arguments and Accounts</a></li><li><ahref="/anchor/tutorials/tutorial-2.html"class="sidebar-link">Account Constraints and Access Control</a></li><li><ahref="/anchor/tutorials/tutorial-3.html"class="sidebar-link">Cross Program Invocations (CPI)</a></li><li><ahref="/anchor/tutorials/tutorial-4.html"class="sidebar-link">Errors</a></li></ul></section></li><li><sectionclass="sidebar-group depth-0"><pclass="sidebar-heading"><span>CLI</span><!----></p><ulclass="sidebar-links sidebar-group-items"><li><ahref="/anchor/cli/commands.html"class="sidebar-link">Commands</a></li></ul></section></li><li><sectionclass="sidebar-group depth-0"><pclass="sidebar-heading open"><span>Source Verification</span><!----></p><ulclass="sidebar-links sidebar-group-items"><li><ahref="/anchor/getting-started/verification.html"aria-current="page"class="active sidebar-link">Verifiable Builds</a><ulclass="sidebar-sub-headers"><liclass="sidebar-sub-header"><ahref="/anchor/getting-started/verification.html#building"class="sidebar-link">Building</a></li><liclass="sidebar-sub-header"><ahref="/anchor/getting-started/verification.html#verifying"class="sidebar-link">Verifying</a></li><liclass="sidebar-sub-header"><ahref="/anchor/getting-started/verification.html#images"class="sidebar-link">Images</a></li><liclass="sidebar-sub-header"><ahref="/anchor/getting-started/verification.html#removing-an-image"class="sidebar-link">Removing an Image</a></li></ul></li><li><ahref="/anchor/getting-started/publishing.html"class="sidebar-link">Publishing Source</a></li></ul></section></li></ul></aside><mainclass="page"><divclass="theme-default-content content__default"><h1id="verifiable-builds"><ahref="#verifiable-builds"class="header-anchor">#</a> Verifiable Builds</h1><p>Building programs with the Solana CLI may embed machine specfic
code into the resulting binary. As a result, building the same program
on different machines may produce different executables. To get around this
problem, one can build inside a docker image with pinned dependencies to produce
a verifiable build.</p><p>Anchor makes this easy by providing CLI commands to build and take care of
docker for you. To get started, first make sure you
<ahref="https://docs.docker.com/get-docker/"target="_blank"rel="noopener noreferrer">install<span><svgxmlns="http://www.w3.org/2000/svg"aria-hidden="true"focusable="false"x="0px"y="0px"viewBox="0 0 100 100"width="15"height="15"class="icon outbound"><pathfill="currentColor"d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygonfill="currentColor"points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><spanclass="sr-only">(opens new window)</span></span></a> docker on your local machine.</p><h2id="building"><ahref="#building"class="header-anchor">#</a> Building</h2><p>To produce a verifiable build, run</p><divclass="language-bash extra-class"><preclass="language-bash"><code>anchor build --verifiable
</code></pre></div><h2id="verifying"><ahref="#verifying"class="header-anchor">#</a> Verifying</h2><p>To verify a build against a program deployed on mainnet, run</p><divclass="language-bash extra-class"><preclass="language-bash"><code>anchor verify -p <spanclass="token operator"><</span>lib-name<spanclass="token operator">></span><spanclass="token operator"><</span>program-id<spanclass="token operator">></span>
</code></pre></div><p>where the <code><lib-name></code> is defined by your program's Cargo.toml.</p><p>If the program has an IDL, it will also check the IDL deployed on chain matches.</p><h2id="images"><ahref="#images"class="header-anchor">#</a> Images</h2><p>A docker image for each version of Anchor is published on <ahref="https://hub.docker.com/r/projectserum/build"target="_blank"rel="noopener noreferrer">Docker Hub<span><svgxmlns="http://www.w3.org/2000/svg"aria-hidden="true"focusable="false"x="0px"y="0px"viewBox="0 0 100 100"width="15"height="15"class="icon outbound"><pathfill="currentColor"d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygonfill="currentColor"points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><spanclass="sr-only">(opens new window)</span></span></a>. They are tagged in the form <code>projectserum/build:<version></code>. For example, to get the image for Anchor <code>v0.23.0</code> one can run</p><divclass="language- extra-class"><preclass="language-text"><code>docker pull projectserum/build:v0.23.0
</code></pre></div><h2id="removing-an-image"><ahref="#removing-an-image"class="header-anchor">#</a> Removing an Image</h2><p>In the event you run a verifiable build from the CLI and exit prematurely,
it's possible the docker image may still be building in the background.</p><p>To remove, run</p><divclass="language- extra-class"><preclass="language-text"><code>docker rm -f anchor-program
</code></pre></div><p>where <code>anchor-program</code> is the name of the image created by default from within
the Anchor CLI.</p></div><footerclass="page-edit"><!----><!----></footer><divclass="page-nav"><pclass="inner"><spanclass="prev">