evmc/mocked__host_8hpp_source.html
Documentation Bot 9b3a656372 Update docs
2020-01-07 15:35:10 +00:00

135 lines
72 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>EVMC: include/evmc/mocked_host.hpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">EVMC
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',false,false,'search.php','Search');
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('mocked__host_8hpp_source.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="headertitle">
<div class="title">mocked_host.hpp</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">// EVMC: Ethereum Client-VM Connector API.</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">// Copyright 2019 The EVMC Authors.</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// Licensed under the Apache License, Version 2.0.</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="preprocessor">#pragma once</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="evmc_8hpp.html">evmc/evmc.hpp</a>&gt;</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="preprocessor">#include &lt;algorithm&gt;</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#include &lt;unordered_map&gt;</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;</div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceevmc.html">evmc</a></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;{</div><div class="line"><a name="l00015"></a><span class="lineno"><a class="line" href="namespaceevmc.html#a1d1fb7e5ab2dd58ca3e15947bc54d15a"> 15</a></span>&#160;<span class="keyword">using</span> <a class="code" href="namespaceevmc.html#a1d1fb7e5ab2dd58ca3e15947bc54d15a">bytes</a> = std::basic_string&lt;uint8_t&gt;;</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"><a class="line" href="structevmc_1_1storage__value.html"> 18</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structevmc_1_1storage__value.html">storage_value</a></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div><div class="line"><a name="l00021"></a><span class="lineno"><a class="line" href="structevmc_1_1storage__value.html#a1d0d184e83df0d134fc9353f3cd7ced2"> 21</a></span>&#160; <a class="code" href="structevmc_1_1bytes32.html">bytes32</a> <a class="code" href="structevmc_1_1storage__value.html#a1d0d184e83df0d134fc9353f3cd7ced2">value</a>;</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"><a class="line" href="structevmc_1_1storage__value.html#addde518355892c58bdbbf6383b6a6993"> 24</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="structevmc_1_1storage__value.html#addde518355892c58bdbbf6383b6a6993">dirty</a>{<span class="keyword">false</span>};</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <a class="code" href="structevmc_1_1storage__value.html#a30176a848e7fbe3a6fd362af8de8d335">storage_value</a>() noexcept = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="structevmc_1_1storage__value.html#a792d042c12bd60330a86035a2f35e1eb"> 30</a></span>&#160; <a class="code" href="structevmc_1_1storage__value.html#a792d042c12bd60330a86035a2f35e1eb">storage_value</a>(<span class="keyword">const</span> <a class="code" href="structevmc_1_1bytes32.html">bytes32</a>&amp; _value, <span class="keywordtype">bool</span> _dirty = <span class="keyword">false</span>) noexcept <span class="comment">// NOLINT</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; : value{_value}, <a class="code" href="structevmc_1_1storage__value.html#addde518355892c58bdbbf6383b6a6993">dirty</a>{_dirty}</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; {}</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;};</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="structevmc_1_1MockedAccount.html"> 36</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structevmc_1_1MockedAccount.html">MockedAccount</a></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;{</div><div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="structevmc_1_1MockedAccount.html#a64c2a2707e01eed3806881e385b182ed"> 39</a></span>&#160; <span class="keywordtype">int</span> nonce = 0;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="structevmc_1_1MockedAccount.html#a6da53c27a9106c49a59582494f8ef37a"> 42</a></span>&#160; <a class="code" href="namespaceevmc.html#a1d1fb7e5ab2dd58ca3e15947bc54d15a">bytes</a> <a class="code" href="structevmc_1_1MockedAccount.html#a6da53c27a9106c49a59582494f8ef37a">code</a>;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="structevmc_1_1MockedAccount.html#a4702798be7eb84d982ad66dd335d56a6"> 45</a></span>&#160; <a class="code" href="structevmc_1_1bytes32.html">bytes32</a> <a class="code" href="structevmc_1_1MockedAccount.html#a4702798be7eb84d982ad66dd335d56a6">codehash</a>;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div><div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="structevmc_1_1MockedAccount.html#a70a90d4df3e2a1b3f37a670835f5179a"> 48</a></span>&#160; <a class="code" href="structevmc_1_1bytes32.html">uint256be</a> <a class="code" href="structevmc_1_1MockedAccount.html#a70a90d4df3e2a1b3f37a670835f5179a">balance</a>;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="structevmc_1_1MockedAccount.html#a969a6e55a2748908a48dd9f35c51e932"> 51</a></span>&#160; std::unordered_map&lt;bytes32, storage_value&gt; <a class="code" href="structevmc_1_1MockedAccount.html#a969a6e55a2748908a48dd9f35c51e932">storage</a>;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="structevmc_1_1MockedAccount.html#ac757b616c2622fcf5a361a8a08ba2bde"> 54</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="structevmc_1_1MockedAccount.html#ac757b616c2622fcf5a361a8a08ba2bde">set_balance</a>(uint64_t x) noexcept</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; {</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; balance = <a class="code" href="structevmc_1_1bytes32.html">uint256be</a>{};</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">for</span> (std::size_t i = 0; i &lt; <span class="keyword">sizeof</span>(x); ++i)</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; balance.<a class="code" href="structevmc__bytes32.html#a695eaf3c428daee54ce15c8252edc133">bytes</a>[<span class="keyword">sizeof</span>(balance) - 1 - i] = <span class="keyword">static_cast&lt;</span>uint8_t<span class="keyword">&gt;</span>(x &gt;&gt; (8 * i));</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; }</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;};</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;</div><div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="classevmc_1_1MockedHost.html"> 63</a></span>&#160;<span class="keyword">class </span><a class="code" href="classevmc_1_1MockedHost.html">MockedHost</a> : <span class="keyword">public</span> <a class="code" href="classevmc_1_1Host.html">Host</a></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;{</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="structevmc_1_1MockedHost_1_1log__record.html"> 67</a></span>&#160; <span class="keyword">struct </span><a class="code" href="structevmc_1_1MockedHost_1_1log__record.html">log_record</a></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; {</div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="structevmc_1_1MockedHost_1_1log__record.html#a968c68ed59820fcb7d3cfc2d9f18edaa"> 70</a></span>&#160; <a class="code" href="structevmc_1_1address.html">address</a> <a class="code" href="structevmc_1_1MockedHost_1_1log__record.html#a968c68ed59820fcb7d3cfc2d9f18edaa">creator</a>;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;</div><div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="structevmc_1_1MockedHost_1_1log__record.html#af14109822fc0d0cbc98da01a4474ad3d"> 73</a></span>&#160; <a class="code" href="namespaceevmc.html#a1d1fb7e5ab2dd58ca3e15947bc54d15a">bytes</a> <a class="code" href="structevmc_1_1MockedHost_1_1log__record.html#af14109822fc0d0cbc98da01a4474ad3d">data</a>;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;</div><div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="structevmc_1_1MockedHost_1_1log__record.html#ad25378459fe50c4f317aeff51ebb30c0"> 76</a></span>&#160; std::vector&lt;bytes32&gt; <a class="code" href="structevmc_1_1MockedHost_1_1log__record.html#ad25378459fe50c4f317aeff51ebb30c0">topics</a>;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;</div><div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="structevmc_1_1MockedHost_1_1log__record.html#ab83bb9261867dde22d6079e5ce31c334"> 79</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="structevmc_1_1MockedHost_1_1log__record.html#ab83bb9261867dde22d6079e5ce31c334">operator==</a>(<span class="keyword">const</span> <a class="code" href="structevmc_1_1MockedHost_1_1log__record.html">log_record</a>&amp; other) <span class="keyword">const</span> noexcept</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; {</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordflow">return</span> creator == other.creator &amp;&amp; data == other.data &amp;&amp; topics == other.topics;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; }</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; };</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;</div><div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="structevmc_1_1MockedHost_1_1selfdestuct__record.html"> 86</a></span>&#160; <span class="keyword">struct </span><a class="code" href="structevmc_1_1MockedHost_1_1selfdestuct__record.html">selfdestuct_record</a></div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; {</div><div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="structevmc_1_1MockedHost_1_1selfdestuct__record.html#acdf3236c988346b5ebeb73e3a697c584"> 89</a></span>&#160; <a class="code" href="structevmc_1_1address.html">address</a> <a class="code" href="structevmc_1_1MockedHost_1_1selfdestuct__record.html#acdf3236c988346b5ebeb73e3a697c584">selfdestructed</a>;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;</div><div class="line"><a name="l00092"></a><span class="lineno"><a class="line" href="structevmc_1_1MockedHost_1_1selfdestuct__record.html#a372a89807996b0649628cb3cea7467f4"> 92</a></span>&#160; <a class="code" href="structevmc_1_1address.html">address</a> <a class="code" href="structevmc_1_1MockedHost_1_1selfdestuct__record.html#a372a89807996b0649628cb3cea7467f4">beneficiary</a>;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;</div><div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="structevmc_1_1MockedHost_1_1selfdestuct__record.html#a905f75404c989b440bd2ab76567222a5"> 95</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="structevmc_1_1MockedHost_1_1selfdestuct__record.html#a905f75404c989b440bd2ab76567222a5">operator==</a>(<span class="keyword">const</span> <a class="code" href="structevmc_1_1MockedHost_1_1selfdestuct__record.html">selfdestuct_record</a>&amp; other) <span class="keyword">const</span> noexcept</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; {</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">return</span> selfdestructed == other.selfdestructed &amp;&amp; beneficiary == other.beneficiary;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; };</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;</div><div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="classevmc_1_1MockedHost.html#a5bc5bfc2b23104dc5554f87c51383b47"> 102</a></span>&#160; std::unordered_map&lt;address, MockedAccount&gt; <a class="code" href="classevmc_1_1MockedHost.html#a5bc5bfc2b23104dc5554f87c51383b47">accounts</a>;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;</div><div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="classevmc_1_1MockedHost.html#addf01838d4c15228e746caa0a645a3b1"> 105</a></span>&#160; <a class="code" href="structevmc__tx__context.html">evmc_tx_context</a> tx_context = {};</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;</div><div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="classevmc_1_1MockedHost.html#a4cdb6de6b81f9845eb6079f5729e0805"> 108</a></span>&#160; <a class="code" href="structevmc_1_1bytes32.html">bytes32</a> block_hash = {};</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;</div><div class="line"><a name="l00111"></a><span class="lineno"><a class="line" href="classevmc_1_1MockedHost.html#a473ec63bcb8b786c5fb1b097cfcfb8c0"> 111</a></span>&#160; <a class="code" href="structevmc__result.html">evmc_result</a> call_result = {};</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;</div><div class="line"><a name="l00114"></a><span class="lineno"><a class="line" href="classevmc_1_1MockedHost.html#ac4acf299c63beb5134fede0d0a5f7c1f"> 114</a></span>&#160; <span class="keyword">mutable</span> std::vector&lt;int64_t&gt; <a class="code" href="classevmc_1_1MockedHost.html#ac4acf299c63beb5134fede0d0a5f7c1f">recorded_blockhashes</a>;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;</div><div class="line"><a name="l00117"></a><span class="lineno"><a class="line" href="classevmc_1_1MockedHost.html#aee945d218d656a7788d4fce5f30db3ca"> 117</a></span>&#160; <span class="keyword">mutable</span> std::vector&lt;address&gt; <a class="code" href="classevmc_1_1MockedHost.html#aee945d218d656a7788d4fce5f30db3ca">recorded_account_accesses</a>;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;</div><div class="line"><a name="l00121"></a><span class="lineno"><a class="line" href="classevmc_1_1MockedHost.html#a5ab49cfd8bc76f9dab117946a5c12efa"> 121</a></span>&#160; <span class="keyword">static</span> constexpr <span class="keyword">auto</span> max_recorded_account_accesses = 200;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;</div><div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="classevmc_1_1MockedHost.html#af4487c7cb827ef8ce54da187d109189a"> 124</a></span>&#160; std::vector&lt;evmc_message&gt; <a class="code" href="classevmc_1_1MockedHost.html#af4487c7cb827ef8ce54da187d109189a">recorded_calls</a>;</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;</div><div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="classevmc_1_1MockedHost.html#a78ad202959aa8d416faf715ab6f7f687"> 128</a></span>&#160; <span class="keyword">static</span> constexpr <span class="keyword">auto</span> max_recorded_calls = 100;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;</div><div class="line"><a name="l00131"></a><span class="lineno"><a class="line" href="classevmc_1_1MockedHost.html#a6f6b51ddda349341a158456a180f7d9e"> 131</a></span>&#160; std::vector&lt;log_record&gt; <a class="code" href="classevmc_1_1MockedHost.html#a6f6b51ddda349341a158456a180f7d9e">recorded_logs</a>;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;</div><div class="line"><a name="l00134"></a><span class="lineno"><a class="line" href="classevmc_1_1MockedHost.html#a1a4459aaa09db4be160085ac49a5c782"> 134</a></span>&#160; std::vector&lt;selfdestuct_record&gt; <a class="code" href="classevmc_1_1MockedHost.html#a1a4459aaa09db4be160085ac49a5c782">recorded_selfdestructs</a>;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; std::vector&lt;bytes&gt; m_recorded_calls_inputs;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00143"></a><span class="lineno"><a class="line" href="classevmc_1_1MockedHost.html#a0c00a74cb2326e57a3a6a844432d72e1"> 143</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classevmc_1_1MockedHost.html#a0c00a74cb2326e57a3a6a844432d72e1">record_account_access</a>(<span class="keyword">const</span> <a class="code" href="structevmc_1_1address.html">address</a>&amp; addr)<span class="keyword"> const</span></div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordflow">if</span> (recorded_account_accesses.empty())</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; recorded_account_accesses.reserve(max_recorded_account_accesses);</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">if</span> (recorded_account_accesses.size() &lt; max_recorded_account_accesses)</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; recorded_account_accesses.emplace_back(addr);</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; }</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;</div><div class="line"><a name="l00153"></a><span class="lineno"><a class="line" href="classevmc_1_1MockedHost.html#a53a463e19e4908022137ce53715c2dce"> 153</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classevmc_1_1MockedHost.html#a53a463e19e4908022137ce53715c2dce">account_exists</a>(<span class="keyword">const</span> <a class="code" href="structevmc_1_1address.html">address</a>&amp; addr) <span class="keyword">const</span> noexcept <span class="keyword">override</span></div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; {</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; record_account_access(addr);</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">return</span> accounts.count(addr) != 0;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; }</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;</div><div class="line"><a name="l00160"></a><span class="lineno"><a class="line" href="classevmc_1_1MockedHost.html#a6336919efaf07ad1e9e4f725a86ebdca"> 160</a></span>&#160; <a class="code" href="structevmc_1_1bytes32.html">bytes32</a> <a class="code" href="classevmc_1_1MockedHost.html#a6336919efaf07ad1e9e4f725a86ebdca">get_storage</a>(<span class="keyword">const</span> <a class="code" href="structevmc_1_1address.html">address</a>&amp; addr, <span class="keyword">const</span> <a class="code" href="structevmc_1_1bytes32.html">bytes32</a>&amp; key) <span class="keyword">const</span> noexcept <span class="keyword">override</span></div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; {</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; record_account_access(addr);</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> account_iter = accounts.find(addr);</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keywordflow">if</span> (account_iter == accounts.end())</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordflow">return</span> {};</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> storage_iter = account_iter-&gt;second.storage.find(key);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordflow">if</span> (storage_iter != account_iter-&gt;second.storage.end())</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keywordflow">return</span> storage_iter-&gt;second.value;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keywordflow">return</span> {};</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; }</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;</div><div class="line"><a name="l00175"></a><span class="lineno"><a class="line" href="classevmc_1_1MockedHost.html#aad63cd61357052ab1fa87e6ff372b3d7"> 175</a></span>&#160; <a class="code" href="group__EVMC.html#gae012fd6b8e5c23806b507c2d3e9fb1aa">evmc_storage_status</a> <a class="code" href="classevmc_1_1MockedHost.html#aad63cd61357052ab1fa87e6ff372b3d7">set_storage</a>(<span class="keyword">const</span> <a class="code" href="structevmc_1_1address.html">address</a>&amp; addr,</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keyword">const</span> <a class="code" href="structevmc_1_1bytes32.html">bytes32</a>&amp; key,</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keyword">const</span> <a class="code" href="structevmc_1_1bytes32.html">bytes32</a>&amp; <a class="code" href="structevmc_1_1storage__value.html#a1d0d184e83df0d134fc9353f3cd7ced2">value</a>) noexcept <span class="keyword">override</span></div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; {</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; record_account_access(addr);</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> it = accounts.find(addr);</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordflow">if</span> (it == accounts.end())</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordflow">return</span> <a class="code" href="group__EVMC.html#ggae012fd6b8e5c23806b507c2d3e9fb1aaad6d527edcbe8a63edad5be80f252330c">EVMC_STORAGE_UNCHANGED</a>;</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keyword">auto</span>&amp; old = it-&gt;second.storage[key];</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="comment">// Follow https://eips.ethereum.org/EIPS/eip-1283 specification.</span></div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="comment">// WARNING! This is not complete implementation as refund is not handled here.</span></div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keywordflow">if</span> (old.value == <a class="code" href="structevmc_1_1storage__value.html#a1d0d184e83df0d134fc9353f3cd7ced2">value</a>)</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordflow">return</span> <a class="code" href="group__EVMC.html#ggae012fd6b8e5c23806b507c2d3e9fb1aaad6d527edcbe8a63edad5be80f252330c">EVMC_STORAGE_UNCHANGED</a>;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <a class="code" href="group__EVMC.html#gae012fd6b8e5c23806b507c2d3e9fb1aa">evmc_storage_status</a> status{};</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordflow">if</span> (!old.dirty)</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; {</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; old.dirty = <span class="keyword">true</span>;</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordflow">if</span> (!old.value)</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; status = <a class="code" href="group__EVMC.html#ggae012fd6b8e5c23806b507c2d3e9fb1aaa8afd1741edf799d44264654d9f04a5a9">EVMC_STORAGE_ADDED</a>;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="structevmc_1_1storage__value.html#a1d0d184e83df0d134fc9353f3cd7ced2">value</a>)</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; status = <a class="code" href="group__EVMC.html#ggae012fd6b8e5c23806b507c2d3e9fb1aaaf102ce749767d5277923c221089da2c6">EVMC_STORAGE_MODIFIED</a>;</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; status = <a class="code" href="group__EVMC.html#ggae012fd6b8e5c23806b507c2d3e9fb1aaae5b6ea5ec988f3b3ceb323ce3c0fa53f">EVMC_STORAGE_DELETED</a>;</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; }</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; status = <a class="code" href="group__EVMC.html#ggae012fd6b8e5c23806b507c2d3e9fb1aaa072394aca7925f8de8facf8f8a5e477c">EVMC_STORAGE_MODIFIED_AGAIN</a>;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; old.value = <a class="code" href="structevmc_1_1storage__value.html#a1d0d184e83df0d134fc9353f3cd7ced2">value</a>;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordflow">return</span> status;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; }</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;</div><div class="line"><a name="l00211"></a><span class="lineno"><a class="line" href="classevmc_1_1MockedHost.html#a401e74178baba9772638e6b4309e9bee"> 211</a></span>&#160; <a class="code" href="structevmc_1_1bytes32.html">uint256be</a> <a class="code" href="classevmc_1_1MockedHost.html#a401e74178baba9772638e6b4309e9bee">get_balance</a>(<span class="keyword">const</span> <a class="code" href="structevmc_1_1address.html">address</a>&amp; addr) <span class="keyword">const</span> noexcept <span class="keyword">override</span></div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; {</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; record_account_access(addr);</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> it = accounts.find(addr);</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keywordflow">if</span> (it == accounts.end())</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keywordflow">return</span> {};</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keywordflow">return</span> it-&gt;second.balance;</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; }</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;</div><div class="line"><a name="l00222"></a><span class="lineno"><a class="line" href="classevmc_1_1MockedHost.html#a0ecf2503e3af4ed98cce8eff45385a33"> 222</a></span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="classevmc_1_1MockedHost.html#a0ecf2503e3af4ed98cce8eff45385a33">get_code_size</a>(<span class="keyword">const</span> <a class="code" href="structevmc_1_1address.html">address</a>&amp; addr) <span class="keyword">const</span> noexcept <span class="keyword">override</span></div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; {</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; record_account_access(addr);</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> it = accounts.find(addr);</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordflow">if</span> (it == accounts.end())</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">return</span> it-&gt;second.code.size();</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; }</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160;</div><div class="line"><a name="l00232"></a><span class="lineno"><a class="line" href="classevmc_1_1MockedHost.html#a776687379553c67540c8c16df9e8f226"> 232</a></span>&#160; <a class="code" href="structevmc_1_1bytes32.html">bytes32</a> <a class="code" href="classevmc_1_1MockedHost.html#a776687379553c67540c8c16df9e8f226">get_code_hash</a>(<span class="keyword">const</span> <a class="code" href="structevmc_1_1address.html">address</a>&amp; addr) <span class="keyword">const</span> noexcept <span class="keyword">override</span></div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; {</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; record_account_access(addr);</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> it = accounts.find(addr);</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keywordflow">if</span> (it == accounts.end())</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">return</span> {};</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordflow">return</span> it-&gt;second.codehash;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; }</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;</div><div class="line"><a name="l00242"></a><span class="lineno"><a class="line" href="classevmc_1_1MockedHost.html#a2679f00109fab1c027fb789b83a25d20"> 242</a></span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="classevmc_1_1MockedHost.html#a2679f00109fab1c027fb789b83a25d20">copy_code</a>(<span class="keyword">const</span> <a class="code" href="structevmc_1_1address.html">address</a>&amp; addr,</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordtype">size_t</span> code_offset,</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; uint8_t* buffer_data,</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordtype">size_t</span> buffer_size) <span class="keyword">const</span> noexcept <span class="keyword">override</span></div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; {</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; record_account_access(addr);</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> it = accounts.find(addr);</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="keywordflow">if</span> (it == accounts.end())</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span>&amp; code = it-&gt;second.code;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keywordflow">if</span> (code_offset &gt;= code.size())</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> n = std::min(buffer_size, code.size() - code_offset);</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordflow">if</span> (n &gt; 0)</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; std::copy_n(&amp;code[code_offset], n, buffer_data);</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keywordflow">return</span> n;</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; }</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160;</div><div class="line"><a name="l00265"></a><span class="lineno"><a class="line" href="classevmc_1_1MockedHost.html#aa0b0cfd19450eaf220cde06ab1d96858"> 265</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classevmc_1_1MockedHost.html#aa0b0cfd19450eaf220cde06ab1d96858">selfdestruct</a>(<span class="keyword">const</span> <a class="code" href="structevmc_1_1address.html">address</a>&amp; addr, <span class="keyword">const</span> <a class="code" href="structevmc_1_1address.html">address</a>&amp; beneficiary) noexcept <span class="keyword">override</span></div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; {</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; record_account_access(addr);</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; recorded_selfdestructs.push_back({addr, beneficiary});</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; }</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;</div><div class="line"><a name="l00272"></a><span class="lineno"><a class="line" href="classevmc_1_1MockedHost.html#ad7f341e9bc49fe73286c65bfc3d56ec3"> 272</a></span>&#160; <a class="code" href="classevmc_1_1result.html">result</a> <a class="code" href="classevmc_1_1MockedHost.html#ad7f341e9bc49fe73286c65bfc3d56ec3">call</a>(<span class="keyword">const</span> <a class="code" href="structevmc__message.html">evmc_message</a>&amp; msg) noexcept <span class="keyword">override</span></div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; {</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; record_account_access(msg.destination);</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keywordflow">if</span> (recorded_calls.empty())</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; {</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; recorded_calls.reserve(max_recorded_calls);</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; m_recorded_calls_inputs.reserve(max_recorded_calls); <span class="comment">// Iterators will not invalidate.</span></div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; }</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">if</span> (recorded_calls.size() &lt; max_recorded_calls)</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; {</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; recorded_calls.emplace_back(msg);</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keyword">auto</span>&amp; call_msg = recorded_calls.back();</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="keywordflow">if</span> (call_msg.input_size &gt; 0)</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; {</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; m_recorded_calls_inputs.emplace_back(call_msg.input_data, call_msg.input_size);</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span>&amp; input_copy = m_recorded_calls_inputs.back();</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; call_msg.input_data = input_copy.data();</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; }</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; }</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classevmc_1_1result.html">result</a>{call_result};</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; }</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;</div><div class="line"><a name="l00297"></a><span class="lineno"><a class="line" href="classevmc_1_1MockedHost.html#a45187586bde530ca7beb157467c12733"> 297</a></span>&#160; <a class="code" href="structevmc__tx__context.html">evmc_tx_context</a> <a class="code" href="classevmc_1_1MockedHost.html#a45187586bde530ca7beb157467c12733">get_tx_context</a>() const noexcept<span class="keyword"> override </span>{ <span class="keywordflow">return</span> tx_context; }</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160;</div><div class="line"><a name="l00300"></a><span class="lineno"><a class="line" href="classevmc_1_1MockedHost.html#ace3ba78141acc06849d3b34382466e36"> 300</a></span>&#160; <a class="code" href="structevmc_1_1bytes32.html">bytes32</a> <a class="code" href="classevmc_1_1MockedHost.html#ace3ba78141acc06849d3b34382466e36">get_block_hash</a>(int64_t block_number) <span class="keyword">const</span> noexcept <span class="keyword">override</span></div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; {</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; recorded_blockhashes.emplace_back(block_number);</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keywordflow">return</span> block_hash;</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; }</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160;</div><div class="line"><a name="l00307"></a><span class="lineno"><a class="line" href="classevmc_1_1MockedHost.html#a4263c29b321dbecfcbb4357a469a3bee"> 307</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classevmc_1_1MockedHost.html#a4263c29b321dbecfcbb4357a469a3bee">emit_log</a>(<span class="keyword">const</span> <a class="code" href="structevmc_1_1address.html">address</a>&amp; addr,</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="keyword">const</span> uint8_t* data,</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keywordtype">size_t</span> data_size,</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <span class="keyword">const</span> <a class="code" href="structevmc_1_1bytes32.html">bytes32</a> topics[],</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keywordtype">size_t</span> topics_count) noexcept <span class="keyword">override</span></div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; {</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; recorded_logs.push_back({addr, {data, data_size}, {topics, topics + topics_count}});</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; }</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160;};</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;} <span class="comment">// namespace evmc</span></div><div class="ttc" id="structevmc_1_1MockedHost_1_1selfdestuct__record_html"><div class="ttname"><a href="structevmc_1_1MockedHost_1_1selfdestuct__record.html">evmc::MockedHost::selfdestuct_record</a></div><div class="ttdoc">SELFDESTRUCT record. </div><div class="ttdef"><b>Definition:</b> <a href="mocked__host_8hpp_source.html#l00086">mocked_host.hpp:86</a></div></div>
<div class="ttc" id="structevmc_1_1storage__value_html_addde518355892c58bdbbf6383b6a6993"><div class="ttname"><a href="structevmc_1_1storage__value.html#addde518355892c58bdbbf6383b6a6993">evmc::storage_value::dirty</a></div><div class="ttdeci">bool dirty</div><div class="ttdoc">True means this value has been modified already by the current transaction. </div><div class="ttdef"><b>Definition:</b> <a href="mocked__host_8hpp_source.html#l00024">mocked_host.hpp:24</a></div></div>
<div class="ttc" id="structevmc_1_1MockedAccount_html_a4702798be7eb84d982ad66dd335d56a6"><div class="ttname"><a href="structevmc_1_1MockedAccount.html#a4702798be7eb84d982ad66dd335d56a6">evmc::MockedAccount::codehash</a></div><div class="ttdeci">bytes32 codehash</div><div class="ttdoc">The code hash. Can be a value not related to the actual code. </div><div class="ttdef"><b>Definition:</b> <a href="mocked__host_8hpp_source.html#l00045">mocked_host.hpp:45</a></div></div>
<div class="ttc" id="namespaceevmc_html_a1d1fb7e5ab2dd58ca3e15947bc54d15a"><div class="ttname"><a href="namespaceevmc.html#a1d1fb7e5ab2dd58ca3e15947bc54d15a">evmc::bytes</a></div><div class="ttdeci">std::basic_string&lt; uint8_t &gt; bytes</div><div class="ttdoc">The string of bytes. </div><div class="ttdef"><b>Definition:</b> <a href="mocked__host_8hpp_source.html#l00015">mocked_host.hpp:15</a></div></div>
<div class="ttc" id="group__EVMC_html_ggae012fd6b8e5c23806b507c2d3e9fb1aaae5b6ea5ec988f3b3ceb323ce3c0fa53f"><div class="ttname"><a href="group__EVMC.html#ggae012fd6b8e5c23806b507c2d3e9fb1aaae5b6ea5ec988f3b3ceb323ce3c0fa53f">EVMC_STORAGE_DELETED</a></div><div class="ttdoc">A storage item has been deleted: X -&gt; 0. </div><div class="ttdef"><b>Definition:</b> <a href="evmc_8h_source.html#l00484">evmc.h:484</a></div></div>
<div class="ttc" id="classevmc_1_1MockedHost_html_ace3ba78141acc06849d3b34382466e36"><div class="ttname"><a href="classevmc_1_1MockedHost.html#ace3ba78141acc06849d3b34382466e36">evmc::MockedHost::get_block_hash</a></div><div class="ttdeci">bytes32 get_block_hash(int64_t block_number) const noexcept override</div><div class="ttdoc">Get the block header hash (EVMC host method). </div><div class="ttdef"><b>Definition:</b> <a href="mocked__host_8hpp_source.html#l00300">mocked_host.hpp:300</a></div></div>
<div class="ttc" id="structevmc_1_1MockedHost_1_1selfdestuct__record_html_a372a89807996b0649628cb3cea7467f4"><div class="ttname"><a href="structevmc_1_1MockedHost_1_1selfdestuct__record.html#a372a89807996b0649628cb3cea7467f4">evmc::MockedHost::selfdestuct_record::beneficiary</a></div><div class="ttdeci">address beneficiary</div><div class="ttdoc">The address of the beneficiary account. </div><div class="ttdef"><b>Definition:</b> <a href="mocked__host_8hpp_source.html#l00092">mocked_host.hpp:92</a></div></div>
<div class="ttc" id="classevmc_1_1MockedHost_html_a5bc5bfc2b23104dc5554f87c51383b47"><div class="ttname"><a href="classevmc_1_1MockedHost.html#a5bc5bfc2b23104dc5554f87c51383b47">evmc::MockedHost::accounts</a></div><div class="ttdeci">std::unordered_map&lt; address, MockedAccount &gt; accounts</div><div class="ttdoc">The set of all accounts in the Host, organized by their addresses. </div><div class="ttdef"><b>Definition:</b> <a href="mocked__host_8hpp_source.html#l00102">mocked_host.hpp:102</a></div></div>
<div class="ttc" id="classevmc_1_1MockedHost_html"><div class="ttname"><a href="classevmc_1_1MockedHost.html">evmc::MockedHost</a></div><div class="ttdoc">Mocked EVMC Host implementation. </div><div class="ttdef"><b>Definition:</b> <a href="mocked__host_8hpp_source.html#l00063">mocked_host.hpp:63</a></div></div>
<div class="ttc" id="classevmc_1_1MockedHost_html_a6f6b51ddda349341a158456a180f7d9e"><div class="ttname"><a href="classevmc_1_1MockedHost.html#a6f6b51ddda349341a158456a180f7d9e">evmc::MockedHost::recorded_logs</a></div><div class="ttdeci">std::vector&lt; log_record &gt; recorded_logs</div><div class="ttdoc">The record of all LOGs passed to the emit_log() method. </div><div class="ttdef"><b>Definition:</b> <a href="mocked__host_8hpp_source.html#l00131">mocked_host.hpp:131</a></div></div>
<div class="ttc" id="group__EVMC_html_gae012fd6b8e5c23806b507c2d3e9fb1aa"><div class="ttname"><a href="group__EVMC.html#gae012fd6b8e5c23806b507c2d3e9fb1aa">evmc_storage_status</a></div><div class="ttdeci">evmc_storage_status</div><div class="ttdoc">The effect of an attempt to modify a contract storage item. </div><div class="ttdef"><b>Definition:</b> <a href="evmc_8h_source.html#l00459">evmc.h:459</a></div></div>
<div class="ttc" id="structevmc_1_1MockedHost_1_1log__record_html_ad25378459fe50c4f317aeff51ebb30c0"><div class="ttname"><a href="structevmc_1_1MockedHost_1_1log__record.html#ad25378459fe50c4f317aeff51ebb30c0">evmc::MockedHost::log_record::topics</a></div><div class="ttdeci">std::vector&lt; bytes32 &gt; topics</div><div class="ttdoc">The log topics. </div><div class="ttdef"><b>Definition:</b> <a href="mocked__host_8hpp_source.html#l00076">mocked_host.hpp:76</a></div></div>
<div class="ttc" id="classevmc_1_1result_html"><div class="ttname"><a href="classevmc_1_1result.html">evmc::result</a></div><div class="ttdoc">The EVM code execution result. </div><div class="ttdef"><b>Definition:</b> <a href="evmc_8hpp_source.html#l00331">evmc.hpp:331</a></div></div>
<div class="ttc" id="structevmc_1_1MockedAccount_html_a70a90d4df3e2a1b3f37a670835f5179a"><div class="ttname"><a href="structevmc_1_1MockedAccount.html#a70a90d4df3e2a1b3f37a670835f5179a">evmc::MockedAccount::balance</a></div><div class="ttdeci">uint256be balance</div><div class="ttdoc">The account balance. </div><div class="ttdef"><b>Definition:</b> <a href="mocked__host_8hpp_source.html#l00048">mocked_host.hpp:48</a></div></div>
<div class="ttc" id="structevmc_1_1bytes32_html"><div class="ttname"><a href="structevmc_1_1bytes32.html">evmc::bytes32</a></div><div class="ttdoc">The fixed size array of 32 bytes for storing 256-bit EVM values. </div><div class="ttdef"><b>Definition:</b> <a href="evmc_8hpp_source.html#l00062">evmc.hpp:62</a></div></div>
<div class="ttc" id="classevmc_1_1MockedHost_html_a53a463e19e4908022137ce53715c2dce"><div class="ttname"><a href="classevmc_1_1MockedHost.html#a53a463e19e4908022137ce53715c2dce">evmc::MockedHost::account_exists</a></div><div class="ttdeci">bool account_exists(const address &amp;addr) const noexcept override</div><div class="ttdoc">Returns true if an account exists (EVMC Host method). </div><div class="ttdef"><b>Definition:</b> <a href="mocked__host_8hpp_source.html#l00153">mocked_host.hpp:153</a></div></div>
<div class="ttc" id="structevmc_1_1MockedHost_1_1log__record_html_ab83bb9261867dde22d6079e5ce31c334"><div class="ttname"><a href="structevmc_1_1MockedHost_1_1log__record.html#ab83bb9261867dde22d6079e5ce31c334">evmc::MockedHost::log_record::operator==</a></div><div class="ttdeci">bool operator==(const log_record &amp;other) const noexcept</div><div class="ttdoc">Equal operator. </div><div class="ttdef"><b>Definition:</b> <a href="mocked__host_8hpp_source.html#l00079">mocked_host.hpp:79</a></div></div>
<div class="ttc" id="structevmc_1_1MockedHost_1_1log__record_html_af14109822fc0d0cbc98da01a4474ad3d"><div class="ttname"><a href="structevmc_1_1MockedHost_1_1log__record.html#af14109822fc0d0cbc98da01a4474ad3d">evmc::MockedHost::log_record::data</a></div><div class="ttdeci">bytes data</div><div class="ttdoc">The data attached to the log. </div><div class="ttdef"><b>Definition:</b> <a href="mocked__host_8hpp_source.html#l00073">mocked_host.hpp:73</a></div></div>
<div class="ttc" id="classevmc_1_1MockedHost_html_a4263c29b321dbecfcbb4357a469a3bee"><div class="ttname"><a href="classevmc_1_1MockedHost.html#a4263c29b321dbecfcbb4357a469a3bee">evmc::MockedHost::emit_log</a></div><div class="ttdeci">void emit_log(const address &amp;addr, const uint8_t *data, size_t data_size, const bytes32 topics[], size_t topics_count) noexcept override</div><div class="ttdoc">Emit LOG (EVMC host method). </div><div class="ttdef"><b>Definition:</b> <a href="mocked__host_8hpp_source.html#l00307">mocked_host.hpp:307</a></div></div>
<div class="ttc" id="structevmc_1_1storage__value_html_a792d042c12bd60330a86035a2f35e1eb"><div class="ttname"><a href="structevmc_1_1storage__value.html#a792d042c12bd60330a86035a2f35e1eb">evmc::storage_value::storage_value</a></div><div class="ttdeci">storage_value(const bytes32 &amp;_value, bool _dirty=false) noexcept</div><div class="ttdoc">Constructor. </div><div class="ttdef"><b>Definition:</b> <a href="mocked__host_8hpp_source.html#l00030">mocked_host.hpp:30</a></div></div>
<div class="ttc" id="classevmc_1_1MockedHost_html_a45187586bde530ca7beb157467c12733"><div class="ttname"><a href="classevmc_1_1MockedHost.html#a45187586bde530ca7beb157467c12733">evmc::MockedHost::get_tx_context</a></div><div class="ttdeci">evmc_tx_context get_tx_context() const noexcept override</div><div class="ttdoc">Get transaction context (EVMC host method). </div><div class="ttdef"><b>Definition:</b> <a href="mocked__host_8hpp_source.html#l00297">mocked_host.hpp:297</a></div></div>
<div class="ttc" id="classevmc_1_1MockedHost_html_a1a4459aaa09db4be160085ac49a5c782"><div class="ttname"><a href="classevmc_1_1MockedHost.html#a1a4459aaa09db4be160085ac49a5c782">evmc::MockedHost::recorded_selfdestructs</a></div><div class="ttdeci">std::vector&lt; selfdestuct_record &gt; recorded_selfdestructs</div><div class="ttdoc">The record of all SELFDESTRUCTs from the selfdestruct() method. </div><div class="ttdef"><b>Definition:</b> <a href="mocked__host_8hpp_source.html#l00134">mocked_host.hpp:134</a></div></div>
<div class="ttc" id="classevmc_1_1MockedHost_html_a6336919efaf07ad1e9e4f725a86ebdca"><div class="ttname"><a href="classevmc_1_1MockedHost.html#a6336919efaf07ad1e9e4f725a86ebdca">evmc::MockedHost::get_storage</a></div><div class="ttdeci">bytes32 get_storage(const address &amp;addr, const bytes32 &amp;key) const noexcept override</div><div class="ttdoc">Get the account&amp;#39;s storage value at the given key (EVMC Host method). </div><div class="ttdef"><b>Definition:</b> <a href="mocked__host_8hpp_source.html#l00160">mocked_host.hpp:160</a></div></div>
<div class="ttc" id="classevmc_1_1MockedHost_html_a776687379553c67540c8c16df9e8f226"><div class="ttname"><a href="classevmc_1_1MockedHost.html#a776687379553c67540c8c16df9e8f226">evmc::MockedHost::get_code_hash</a></div><div class="ttdeci">bytes32 get_code_hash(const address &amp;addr) const noexcept override</div><div class="ttdoc">Get the account&amp;#39;s code hash (EVMC host method). </div><div class="ttdef"><b>Definition:</b> <a href="mocked__host_8hpp_source.html#l00232">mocked_host.hpp:232</a></div></div>
<div class="ttc" id="group__EVMC_html_ggae012fd6b8e5c23806b507c2d3e9fb1aaaf102ce749767d5277923c221089da2c6"><div class="ttname"><a href="group__EVMC.html#ggae012fd6b8e5c23806b507c2d3e9fb1aaaf102ce749767d5277923c221089da2c6">EVMC_STORAGE_MODIFIED</a></div><div class="ttdoc">The value of a storage item has been modified: X -&gt; Y. </div><div class="ttdef"><b>Definition:</b> <a href="evmc_8h_source.html#l00469">evmc.h:469</a></div></div>
<div class="ttc" id="classevmc_1_1MockedHost_html_af4487c7cb827ef8ce54da187d109189a"><div class="ttname"><a href="classevmc_1_1MockedHost.html#af4487c7cb827ef8ce54da187d109189a">evmc::MockedHost::recorded_calls</a></div><div class="ttdeci">std::vector&lt; evmc_message &gt; recorded_calls</div><div class="ttdoc">The record of all call messages requested in the call() method. </div><div class="ttdef"><b>Definition:</b> <a href="mocked__host_8hpp_source.html#l00124">mocked_host.hpp:124</a></div></div>
<div class="ttc" id="structevmc__bytes32_html_a695eaf3c428daee54ce15c8252edc133"><div class="ttname"><a href="structevmc__bytes32.html#a695eaf3c428daee54ce15c8252edc133">evmc_bytes32::bytes</a></div><div class="ttdeci">uint8_t bytes[32]</div><div class="ttdoc">The 32 bytes. </div><div class="ttdef"><b>Definition:</b> <a href="evmc_8h_source.html#l00059">evmc.h:59</a></div></div>
<div class="ttc" id="classevmc_1_1MockedHost_html_a0c00a74cb2326e57a3a6a844432d72e1"><div class="ttname"><a href="classevmc_1_1MockedHost.html#a0c00a74cb2326e57a3a6a844432d72e1">evmc::MockedHost::record_account_access</a></div><div class="ttdeci">void record_account_access(const address &amp;addr) const</div><div class="ttdoc">Record an account access. </div><div class="ttdef"><b>Definition:</b> <a href="mocked__host_8hpp_source.html#l00143">mocked_host.hpp:143</a></div></div>
<div class="ttc" id="structevmc_1_1MockedHost_1_1log__record_html"><div class="ttname"><a href="structevmc_1_1MockedHost_1_1log__record.html">evmc::MockedHost::log_record</a></div><div class="ttdoc">LOG record. </div><div class="ttdef"><b>Definition:</b> <a href="mocked__host_8hpp_source.html#l00067">mocked_host.hpp:67</a></div></div>
<div class="ttc" id="structevmc_1_1MockedAccount_html_a6da53c27a9106c49a59582494f8ef37a"><div class="ttname"><a href="structevmc_1_1MockedAccount.html#a6da53c27a9106c49a59582494f8ef37a">evmc::MockedAccount::code</a></div><div class="ttdeci">bytes code</div><div class="ttdoc">The account code. </div><div class="ttdef"><b>Definition:</b> <a href="mocked__host_8hpp_source.html#l00042">mocked_host.hpp:42</a></div></div>
<div class="ttc" id="classevmc_1_1MockedHost_html_a401e74178baba9772638e6b4309e9bee"><div class="ttname"><a href="classevmc_1_1MockedHost.html#a401e74178baba9772638e6b4309e9bee">evmc::MockedHost::get_balance</a></div><div class="ttdeci">uint256be get_balance(const address &amp;addr) const noexcept override</div><div class="ttdoc">Get the account&amp;#39;s balance (EVMC Host method). </div><div class="ttdef"><b>Definition:</b> <a href="mocked__host_8hpp_source.html#l00211">mocked_host.hpp:211</a></div></div>
<div class="ttc" id="classevmc_1_1MockedHost_html_ac4acf299c63beb5134fede0d0a5f7c1f"><div class="ttname"><a href="classevmc_1_1MockedHost.html#ac4acf299c63beb5134fede0d0a5f7c1f">evmc::MockedHost::recorded_blockhashes</a></div><div class="ttdeci">std::vector&lt; int64_t &gt; recorded_blockhashes</div><div class="ttdoc">The record of all block numbers for which get_block_hash() was called. </div><div class="ttdef"><b>Definition:</b> <a href="mocked__host_8hpp_source.html#l00114">mocked_host.hpp:114</a></div></div>
<div class="ttc" id="classevmc_1_1MockedHost_html_ad7f341e9bc49fe73286c65bfc3d56ec3"><div class="ttname"><a href="classevmc_1_1MockedHost.html#ad7f341e9bc49fe73286c65bfc3d56ec3">evmc::MockedHost::call</a></div><div class="ttdeci">result call(const evmc_message &amp;msg) noexcept override</div><div class="ttdoc">Call/create other contract (EVMC host method). </div><div class="ttdef"><b>Definition:</b> <a href="mocked__host_8hpp_source.html#l00272">mocked_host.hpp:272</a></div></div>
<div class="ttc" id="structevmc__message_html"><div class="ttname"><a href="structevmc__message.html">evmc_message</a></div><div class="ttdoc">The message describing an EVM call, including a zero-depth calls from a transaction origin...</div><div class="ttdef"><b>Definition:</b> <a href="evmc_8h_source.html#l00095">evmc.h:95</a></div></div>
<div class="ttc" id="structevmc_1_1MockedHost_1_1selfdestuct__record_html_acdf3236c988346b5ebeb73e3a697c584"><div class="ttname"><a href="structevmc_1_1MockedHost_1_1selfdestuct__record.html#acdf3236c988346b5ebeb73e3a697c584">evmc::MockedHost::selfdestuct_record::selfdestructed</a></div><div class="ttdeci">address selfdestructed</div><div class="ttdoc">The address of the account which has self-destructed. </div><div class="ttdef"><b>Definition:</b> <a href="mocked__host_8hpp_source.html#l00089">mocked_host.hpp:89</a></div></div>
<div class="ttc" id="structevmc_1_1storage__value_html_a1d0d184e83df0d134fc9353f3cd7ced2"><div class="ttname"><a href="structevmc_1_1storage__value.html#a1d0d184e83df0d134fc9353f3cd7ced2">evmc::storage_value::value</a></div><div class="ttdeci">bytes32 value</div><div class="ttdoc">The storage value. </div><div class="ttdef"><b>Definition:</b> <a href="mocked__host_8hpp_source.html#l00021">mocked_host.hpp:21</a></div></div>
<div class="ttc" id="classevmc_1_1MockedHost_html_aa0b0cfd19450eaf220cde06ab1d96858"><div class="ttname"><a href="classevmc_1_1MockedHost.html#aa0b0cfd19450eaf220cde06ab1d96858">evmc::MockedHost::selfdestruct</a></div><div class="ttdeci">void selfdestruct(const address &amp;addr, const address &amp;beneficiary) noexcept override</div><div class="ttdoc">Selfdestruct the account (EVMC host method). </div><div class="ttdef"><b>Definition:</b> <a href="mocked__host_8hpp_source.html#l00265">mocked_host.hpp:265</a></div></div>
<div class="ttc" id="structevmc_1_1storage__value_html_a30176a848e7fbe3a6fd362af8de8d335"><div class="ttname"><a href="structevmc_1_1storage__value.html#a30176a848e7fbe3a6fd362af8de8d335">evmc::storage_value::storage_value</a></div><div class="ttdeci">storage_value() noexcept=default</div><div class="ttdoc">Default constructor. </div></div>
<div class="ttc" id="structevmc_1_1MockedHost_1_1log__record_html_a968c68ed59820fcb7d3cfc2d9f18edaa"><div class="ttname"><a href="structevmc_1_1MockedHost_1_1log__record.html#a968c68ed59820fcb7d3cfc2d9f18edaa">evmc::MockedHost::log_record::creator</a></div><div class="ttdeci">address creator</div><div class="ttdoc">The address of the account which created the log. </div><div class="ttdef"><b>Definition:</b> <a href="mocked__host_8hpp_source.html#l00070">mocked_host.hpp:70</a></div></div>
<div class="ttc" id="structevmc_1_1MockedAccount_html_a969a6e55a2748908a48dd9f35c51e932"><div class="ttname"><a href="structevmc_1_1MockedAccount.html#a969a6e55a2748908a48dd9f35c51e932">evmc::MockedAccount::storage</a></div><div class="ttdeci">std::unordered_map&lt; bytes32, storage_value &gt; storage</div><div class="ttdoc">The account storage map. </div><div class="ttdef"><b>Definition:</b> <a href="mocked__host_8hpp_source.html#l00051">mocked_host.hpp:51</a></div></div>
<div class="ttc" id="group__EVMC_html_ggae012fd6b8e5c23806b507c2d3e9fb1aaa072394aca7925f8de8facf8f8a5e477c"><div class="ttname"><a href="group__EVMC.html#ggae012fd6b8e5c23806b507c2d3e9fb1aaa072394aca7925f8de8facf8f8a5e477c">EVMC_STORAGE_MODIFIED_AGAIN</a></div><div class="ttdoc">A storage item has been modified after being modified before: X -&gt; Y -&gt; Z. </div><div class="ttdef"><b>Definition:</b> <a href="evmc_8h_source.html#l00474">evmc.h:474</a></div></div>
<div class="ttc" id="structevmc_1_1MockedHost_1_1selfdestuct__record_html_a905f75404c989b440bd2ab76567222a5"><div class="ttname"><a href="structevmc_1_1MockedHost_1_1selfdestuct__record.html#a905f75404c989b440bd2ab76567222a5">evmc::MockedHost::selfdestuct_record::operator==</a></div><div class="ttdeci">bool operator==(const selfdestuct_record &amp;other) const noexcept</div><div class="ttdoc">Equal operator. </div><div class="ttdef"><b>Definition:</b> <a href="mocked__host_8hpp_source.html#l00095">mocked_host.hpp:95</a></div></div>
<div class="ttc" id="structevmc__result_html"><div class="ttname"><a href="structevmc__result.html">evmc_result</a></div><div class="ttdoc">The EVM code execution result. </div><div class="ttdef"><b>Definition:</b> <a href="evmc_8h_source.html#l00340">evmc.h:340</a></div></div>
<div class="ttc" id="structevmc_1_1address_html"><div class="ttname"><a href="structevmc_1_1address.html">evmc::address</a></div><div class="ttdoc">The big-endian 160-bit hash suitable for keeping an Ethereum address. </div><div class="ttdef"><b>Definition:</b> <a href="evmc_8hpp_source.html#l00021">evmc.hpp:21</a></div></div>
<div class="ttc" id="classevmc_1_1MockedHost_html_a2679f00109fab1c027fb789b83a25d20"><div class="ttname"><a href="classevmc_1_1MockedHost.html#a2679f00109fab1c027fb789b83a25d20">evmc::MockedHost::copy_code</a></div><div class="ttdeci">size_t copy_code(const address &amp;addr, size_t code_offset, uint8_t *buffer_data, size_t buffer_size) const noexcept override</div><div class="ttdoc">Copy the account&amp;#39;s code to the given buffer (EVMC host method). </div><div class="ttdef"><b>Definition:</b> <a href="mocked__host_8hpp_source.html#l00242">mocked_host.hpp:242</a></div></div>
<div class="ttc" id="classevmc_1_1MockedHost_html_aad63cd61357052ab1fa87e6ff372b3d7"><div class="ttname"><a href="classevmc_1_1MockedHost.html#aad63cd61357052ab1fa87e6ff372b3d7">evmc::MockedHost::set_storage</a></div><div class="ttdeci">evmc_storage_status set_storage(const address &amp;addr, const bytes32 &amp;key, const bytes32 &amp;value) noexcept override</div><div class="ttdoc">Set the account&amp;#39;s storage value (EVMC Host method). </div><div class="ttdef"><b>Definition:</b> <a href="mocked__host_8hpp_source.html#l00175">mocked_host.hpp:175</a></div></div>
<div class="ttc" id="group__EVMC_html_ggae012fd6b8e5c23806b507c2d3e9fb1aaad6d527edcbe8a63edad5be80f252330c"><div class="ttname"><a href="group__EVMC.html#ggae012fd6b8e5c23806b507c2d3e9fb1aaad6d527edcbe8a63edad5be80f252330c">EVMC_STORAGE_UNCHANGED</a></div><div class="ttdoc">The value of a storage item has been left unchanged: 0 -&gt; 0 and X -&gt; X. </div><div class="ttdef"><b>Definition:</b> <a href="evmc_8h_source.html#l00464">evmc.h:464</a></div></div>
<div class="ttc" id="classevmc_1_1Host_html"><div class="ttname"><a href="classevmc_1_1Host.html">evmc::Host</a></div><div class="ttdoc">Abstract class to be used by Host implementations. </div><div class="ttdef"><b>Definition:</b> <a href="evmc_8hpp_source.html#l00560">evmc.hpp:560</a></div></div>
<div class="ttc" id="namespaceevmc_html"><div class="ttname"><a href="namespaceevmc.html">evmc</a></div><div class="ttdoc">EVMC C++ API - wrappers and bindings for C++. </div><div class="ttdef"><b>Definition:</b> <a href="evmc_8hpp_source.html#l00016">evmc.hpp:16</a></div></div>
<div class="ttc" id="structevmc_1_1MockedAccount_html_ac757b616c2622fcf5a361a8a08ba2bde"><div class="ttname"><a href="structevmc_1_1MockedAccount.html#ac757b616c2622fcf5a361a8a08ba2bde">evmc::MockedAccount::set_balance</a></div><div class="ttdeci">void set_balance(uint64_t x) noexcept</div><div class="ttdoc">Helper method for setting balance by numeric type. </div><div class="ttdef"><b>Definition:</b> <a href="mocked__host_8hpp_source.html#l00054">mocked_host.hpp:54</a></div></div>
<div class="ttc" id="classevmc_1_1MockedHost_html_a0ecf2503e3af4ed98cce8eff45385a33"><div class="ttname"><a href="classevmc_1_1MockedHost.html#a0ecf2503e3af4ed98cce8eff45385a33">evmc::MockedHost::get_code_size</a></div><div class="ttdeci">size_t get_code_size(const address &amp;addr) const noexcept override</div><div class="ttdoc">Get the account&amp;#39;s code size (EVMC host method). </div><div class="ttdef"><b>Definition:</b> <a href="mocked__host_8hpp_source.html#l00222">mocked_host.hpp:222</a></div></div>
<div class="ttc" id="group__EVMC_html_ggae012fd6b8e5c23806b507c2d3e9fb1aaa8afd1741edf799d44264654d9f04a5a9"><div class="ttname"><a href="group__EVMC.html#ggae012fd6b8e5c23806b507c2d3e9fb1aaa8afd1741edf799d44264654d9f04a5a9">EVMC_STORAGE_ADDED</a></div><div class="ttdoc">A new storage item has been added: 0 -&gt; X. </div><div class="ttdef"><b>Definition:</b> <a href="evmc_8h_source.html#l00479">evmc.h:479</a></div></div>
<div class="ttc" id="structevmc_1_1storage__value_html"><div class="ttname"><a href="structevmc_1_1storage__value.html">evmc::storage_value</a></div><div class="ttdoc">Extended value (by dirty flag) for account storage. </div><div class="ttdef"><b>Definition:</b> <a href="mocked__host_8hpp_source.html#l00018">mocked_host.hpp:18</a></div></div>
<div class="ttc" id="evmc_8hpp_html"><div class="ttname"><a href="evmc_8hpp.html">evmc.hpp</a></div><div class="ttdoc">EVMC C++ API - wrappers and bindings for C++. </div></div>
<div class="ttc" id="structevmc__tx__context_html"><div class="ttname"><a href="structevmc__tx__context.html">evmc_tx_context</a></div><div class="ttdoc">The transaction and block data for execution. </div><div class="ttdef"><b>Definition:</b> <a href="evmc_8h_source.html#l00147">evmc.h:147</a></div></div>
<div class="ttc" id="classevmc_1_1MockedHost_html_aee945d218d656a7788d4fce5f30db3ca"><div class="ttname"><a href="classevmc_1_1MockedHost.html#aee945d218d656a7788d4fce5f30db3ca">evmc::MockedHost::recorded_account_accesses</a></div><div class="ttdeci">std::vector&lt; address &gt; recorded_account_accesses</div><div class="ttdoc">The record of all account accesses. </div><div class="ttdef"><b>Definition:</b> <a href="mocked__host_8hpp_source.html#l00117">mocked_host.hpp:117</a></div></div>
<div class="ttc" id="structevmc_1_1MockedAccount_html"><div class="ttname"><a href="structevmc_1_1MockedAccount.html">evmc::MockedAccount</a></div><div class="ttdoc">Mocked account. </div><div class="ttdef"><b>Definition:</b> <a href="mocked__host_8hpp_source.html#l00036">mocked_host.hpp:36</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_5298d49f5985e350bcac49a99c9a871c.html">evmc</a></li><li class="navelem"><b>mocked_host.hpp</b></li>
<li class="footer">Generated on Tue Jan 7 2020 15:35:10 for EVMC by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>