<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="rss.xsl"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>IOST Docs Blog</title>
        <link>https://developers.iost.io/ja/blog</link>
        <description>IOST Docs Blog</description>
        <lastBuildDate>Fri, 21 Sep 2018 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>ja</language>
        <item>
            <title><![CDATA[IOST V8VM の設計]]></title>
            <link>https://developers.iost.io/ja/blog/iost-v8vm-design</link>
            <guid>https://developers.iost.io/ja/blog/iost-v8vm-design</guid>
            <pubDate>Fri, 21 Sep 2018 00:00:00 GMT</pubDate>
            <description><![CDATA[Ethereum Virtual Machine（EVM）は「準チューリング完全」な 256bit 仮想マシンで、Ethereum ネットワークの最も重要な構成要素のひとつです。Ethereum の登場以降、EVM ベースのスマートコントラクト開発は徐々に成熟し、CryptoKitties や最近話題の Fomo3D など多くの DApp が登場しました。スマートコントラクトと仮想マシンの重要性はほぼすべてのブロックチェーン開発者の共通認識となり、VM の使いやすさと開発体験は各パブリックチェーンが競い合う主戦場となり、最終的にチェーンが到達できる高さを大きく左右します。]]></description>
            <content:encoded><![CDATA[<p>Ethereum Virtual Machine（EVM）は「準チューリング完全」な 256bit 仮想マシンで、Ethereum ネットワークの最も重要な構成要素のひとつです。Ethereum の登場以降、EVM ベースのスマートコントラクト開発は徐々に成熟し、CryptoKitties や最近話題の Fomo3D など多くの DApp が登場しました。スマートコントラクトと仮想マシンの重要性はほぼすべてのブロックチェーン開発者の共通認識となり、VM の使いやすさと開発体験は各パブリックチェーンが競い合う主戦場となり、最終的にチェーンが到達できる高さを大きく左右します。</p>
<h3 class="anchor anchorTargetStickyNavbar_eptP" id="1-evm-はチューリング完全ではない">1. EVM はチューリング完全ではない<a href="https://developers.iost.io/ja/blog/iost-v8vm-design#1-evm-%E3%81%AF%E3%83%81%E3%83%A5%E3%83%BC%E3%83%AA%E3%83%B3%E3%82%B0%E5%AE%8C%E5%85%A8%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%84" class="hash-link" aria-label="1. EVM はチューリング完全ではない への直接リンク" title="1. EVM はチューリング完全ではない への直接リンク" translate="no">​</a></h3>
<p>「EVM はチューリング完全である」という誤解がネット上には広く見られますが、実際にはそうではありません。</p>
<p>チューリングマシンは 1936 年にアラン・チューリングが提案した数学モデルで、無限長のテープ、有限のアルファベット、読み書きヘッド、状態レジスタ、有限の命令セットからなります。初期構成から始まり、ヘッドは命令セットに従って一歩ずつ動作と書き込みを行い、状態が「停止」に達するまで計算を続けます。計算分野で扱うあらゆる問題は計算問題であり、チューリング完全であるということは任意の計算可能問題が解けることを意味します。プログラミング言語や仮想マシンは本質的にチューリングマシンであり、チューリング完全であればチューリングマシンが行えることをすべて行える、つまりあらゆる計算可能問題を解くことができます。</p>
<p>ところが EVM の設計では、命令の実行は gas によって制約されており、実行可能な計算回数が制限されています。これはチューリング不完全になる代表的な原因のひとつで、ループ・再帰・計算がすべて有界になることでプログラムの終了が保証されます。したがって EVM 上で動かせるプログラムは多くの制約を受け、EVM はチューリング完全ではありません。</p>
<h3 class="anchor anchorTargetStickyNavbar_eptP" id="2-evm-の不合理な設計">2. EVM の不合理な設計<a href="https://developers.iost.io/ja/blog/iost-v8vm-design#2-evm-%E3%81%AE%E4%B8%8D%E5%90%88%E7%90%86%E3%81%AA%E8%A8%AD%E8%A8%88" class="hash-link" aria-label="2. EVM の不合理な設計 への直接リンク" title="2. EVM の不合理な設計 への直接リンク" translate="no">​</a></h3>
<p>EVM は最初期の準チューリング完全な仮想マシンとして、スマートコントラクト指向の DApp 開発を切り開きました。一方でブロックチェーン応用の広がりとともに、EVM 初期の不合理な設計が徐々に表面化し、深刻なセキュリティ問題を引き起こす設計まで含まれていました。VM レイヤだけを見ても、設計面・セキュリティ面に次の課題があります:</p>
<h4 class="anchor anchorTargetStickyNavbar_eptP" id="21-スマートコントラクトの設計面">2.1 スマートコントラクトの設計面<a href="https://developers.iost.io/ja/blog/iost-v8vm-design#21-%E3%82%B9%E3%83%9E%E3%83%BC%E3%83%88%E3%82%B3%E3%83%B3%E3%83%88%E3%83%A9%E3%82%AF%E3%83%88%E3%81%AE%E8%A8%AD%E8%A8%88%E9%9D%A2" class="hash-link" aria-label="2.1 スマートコントラクトの設計面 への直接リンク" title="2.1 スマートコントラクトの設計面 への直接リンク" translate="no">​</a></h4>
<ul>
<li class=""><font color="#0092ff">標準ライブラリの不足：</font>EVM には十分な標準ライブラリ支援がなく、もっとも基本的な string 型まわりですら扱いにくく、文字列の連結・分割・検索などはすべて開発者自身で実装する必要があります。結果として、開発者は本来のビジネスロジック以外の細部に手を取られ、本業に集中できません。自前のライブラリは時間計算量・空間計算量が過大になり無駄な gas を消費しがちで、オープンソースから借用すれば今度はセキュリティ上の懸念を抱え込み、コントラクト監査の手間が増えるなど、得失が見合いません。</li>
<li class=""><font color="#0092ff">デバッグ・テストが困難：</font>EVM はデバッグもテストも難しく、OutOfGas 例外を投げる以外に開発者へ情報を返してくれません。ログ出力もなく、ブレークポイントもステップ実行もありません。event 機構はある程度の代替になりますが、そもそもデバッグツールとして設計されたものではなく、優雅で使いやすいとは言いがたいです。</li>
<li class=""><font color="#0092ff">浮動小数点の非サポート：</font>EVM は浮動小数点をサポートせず、Ethereum は Wei を最小単位とし整数しか扱いません。これにより浮動小数の精度問題は避けられますが、実際の開発では eth 量を表すのに変数の後ろに 0 を大量に並べることになり、コードが極めて保守しづらくなります。特定の場面では浮動小数は依然として有用であり、一律に切り捨てて良いものではありません。</li>
<li class=""><font color="#0092ff">コントラクトをアップグレードできない：</font>EVM はコントラクトのアップグレードに対応しておらず、アップグレード可能性はスマートコントラクト開発における必須要件のひとつです。セキュリティパッチ適用や機能拡張に必要となりますが、EVM は一切これをサポートせず、開発者は新しいコントラクトを再デプロイするほかなく、時間と労力を浪費します。</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_eptP" id="22-スマートコントラクトのセキュリティ面">2.2 スマートコントラクトのセキュリティ面<a href="https://developers.iost.io/ja/blog/iost-v8vm-design#22-%E3%82%B9%E3%83%9E%E3%83%BC%E3%83%88%E3%82%B3%E3%83%B3%E3%83%88%E3%83%A9%E3%82%AF%E3%83%88%E3%81%AE%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E9%9D%A2" class="hash-link" aria-label="2.2 スマートコントラクトのセキュリティ面 への直接リンク" title="2.2 スマートコントラクトのセキュリティ面 への直接リンク" translate="no">​</a></h4>
<ul>
<li class=""><font color="#0092ff">オーバーフロー攻撃：</font>EVM の safeMath ライブラリはデフォルトで使われません。Solidity で uint256 を計算した際、結果が uint256 の最大値を超えるとオーバーフローして極端に小さな値に化け、脆弱性が生じます。BEC や SMT といったトークンはいずれもオーバーフロー攻撃を受け、深刻な被害が出ました。BEC のオーバーフロー脆弱性は次のような形でした:</li>
</ul>
<div class="language-javascript codeBlockContainer_NSky theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_Thz8"><pre tabindex="0" class="prism-code language-javascript codeBlock_ohrZ thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_rlL9"><div class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">batchTransfer</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token parameter">address</span><span class="token parameter punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token parameter punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token parameter"> _receivers</span><span class="token parameter punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token parameter"> uint256 _value</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">public</span><span class="token plain"> whenNotPaused </span><span class="token function" style="color:rgb(80, 250, 123)">returns</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token parameter">bool</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    uint cnt </span><span class="token operator">=</span><span class="token plain"> _receivers</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">length</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    uint256 amount </span><span class="token operator">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">uint256</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">cnt</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token operator">*</span><span class="token plain"> _value</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)">// ここでオーバーフローが発生</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token function" style="color:rgb(80, 250, 123)">require</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">cnt </span><span class="token operator">&gt;</span><span class="token plain"> </span><span class="token number">0</span><span class="token plain"> </span><span class="token operator">&amp;&amp;</span><span class="token plain"> cnt </span><span class="token operator">&lt;=</span><span class="token plain"> </span><span class="token number">20</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token function" style="color:rgb(80, 250, 123)">require</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">_value </span><span class="token operator">&gt;</span><span class="token plain"> </span><span class="token number">0</span><span class="token plain"> </span><span class="token operator">&amp;&amp;</span><span class="token plain"> balances</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain">msg</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">sender</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> </span><span class="token operator">&gt;=</span><span class="token plain"> amount</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)">// オーバーフロー後 require が常に成立し、脆弱性が成立する</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    balances</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain">msg</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">sender</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> balances</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain">msg</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">sender</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">sub</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">amount</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">for</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">uint i </span><span class="token operator">=</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> i </span><span class="token operator">&lt;</span><span class="token plain"> cnt</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> i</span><span class="token operator">++</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">        balances</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain">_receivers</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain">i</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> balances</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain">_receivers</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain">i</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">add</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">_value</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token function" style="color:rgb(80, 250, 123)">Transfer</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">msg</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">sender</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> _receivers</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain">i</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> _value</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></div></code></pre></div></div>
<ul>
<li class=""><font color="#0092ff">再入攻撃：</font>Solidity の大きな特徴は外部コントラクトを呼び出せる点ですが、ETH を外部アドレスに送るときや外部コントラクトを呼ぶときには外部呼び出しが必要です。送金先が悪意あるコントラクトの場合、fallback 関数に悪意あるコードを仕込んでおけば、送金時に fallback が呼ばれて悪意あるコードが脆弱な関数を再度呼び、送金処理を二重に実行できてしまいます。最も有名な再入攻撃が Ethereum 初期の DAO 事件です。以下のスニペットがその構造を示しています:</li>
</ul>
<div class="language-javascript codeBlockContainer_NSky theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_Thz8"><pre tabindex="0" class="prism-code language-javascript codeBlock_ohrZ thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_rlL9"><div class="token-line" style="color:#F8F8F2"><span class="token plain">contract weakContract </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token function" style="color:rgb(80, 250, 123)">mapping</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token parameter">address</span><span class="token plain"> </span><span class="token operator">=&gt;</span><span class="token plain"> uint</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">public</span><span class="token plain"> balances</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token operator">...</span><span class="token operator">...</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)">// その他のコントラクトコード</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">withdraw</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token comment" style="color:rgb(98, 114, 164)">// 呼び出し元の残高を送金し、その後 balance マップを 0 にする。</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token comment" style="color:rgb(98, 114, 164)">// !!! 0 にする処理が走るまで、msg.sender を何度でも呼べてしまい、ここで再入が発生する。</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token operator">!</span><span class="token plain">msg</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">sender</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">call</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">value</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">balances</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain">msg</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">sender</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">throw</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">        balances</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain">msg</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">sender</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token operator">...</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)">// その他のコントラクトコード</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">contract attack</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    weakContract </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">public</span><span class="token plain"> weak</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token operator">...</span><span class="token operator">...</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)">// その他のコード</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token comment" style="color:rgb(98, 114, 164)">// 以下の関数は fallback。外部送金時に呼ばれ、weakContract.withdraw を繰り返し呼び出して再入攻撃を行う。</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">function</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> payable </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">weak</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">balance </span><span class="token operator">&gt;=</span><span class="token plain"> msg</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">value</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">            weak</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">withdraw</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token operator">...</span><span class="token operator">...</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)">// その他のコード</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></div></code></pre></div></div>
<ul>
<li class=""><font color="#0092ff">想定外の関数実行：</font>EVM は関数呼び出しを厳密にはチェックしません。コントラクトアドレスを引数として受け取り、かつそれを呼び出し側が操作できる場合、想定外の挙動を招くことがあります:</li>
</ul>
<div class="language-javascript codeBlockContainer_NSky theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_Thz8"><pre tabindex="0" class="prism-code language-javascript codeBlock_ohrZ thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_rlL9"><div class="token-line" style="color:#F8F8F2"><span class="token plain">contract </span><span class="token constant" style="color:rgb(189, 147, 249)">A</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">     </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">withdraw</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token parameter">uint</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">returns</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">uint</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">// B を実行する際、A コントラクトに withdraw メソッドがあるかだけを確認し、あれば呼び出す。</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">// 渡された a に withdraw が無ければ、a の fallback 関数が呼ばれ、想定外の挙動が起きる。</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">contract </span><span class="token constant" style="color:rgb(189, 147, 249)">B</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">put</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token parameter constant" style="color:rgb(189, 147, 249)">A</span><span class="token parameter"> a</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> a</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">withdraw</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token number">42</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_eptP" id="3-もうひとつの注目チェーン-eos-が抱える課題">3. もうひとつの注目チェーン EOS が抱える課題<a href="https://developers.iost.io/ja/blog/iost-v8vm-design#3-%E3%82%82%E3%81%86%E3%81%B2%E3%81%A8%E3%81%A4%E3%81%AE%E6%B3%A8%E7%9B%AE%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3-eos-%E3%81%8C%E6%8A%B1%E3%81%88%E3%82%8B%E8%AA%B2%E9%A1%8C" class="hash-link" aria-label="3. もうひとつの注目チェーン EOS が抱える課題 への直接リンク" title="3. もうひとつの注目チェーン EOS が抱える課題 への直接リンク" translate="no">​</a></h3>
<p>EOS は Ethereum に続くもうひとつの注目パブリックチェーンで、WebAssembly ベースの独自スマートコントラクトエンジンを持ちます。しかし EOS のコントラクト開発には次のような目立つ問題があります:</p>
<ul>
<li class=""><font color="#0092ff">アカウントシステムが扱いにくい：</font>アカウント作成の難易度が高く、コントラクトを公開するにはアカウントが必要です。EOS では既存アカウントから新規アカウントを作る必要があり、すでに EOS アカウントを持っている知人や第三者を見つけるのは誰にとっても容易ではありません。アカウント作成には RAM の購入も必要、つまり実費がかかり、第三者経由だと資金の取扱リスクも生まれます。アカウントを作っても、その後 EOS をステーキングして CPU 時間とネットワーク帯域を確保しなければ何もできません。開発者にとっては手間が多すぎます。</li>
<li class=""><font color="#0092ff">RAM 価格：</font>RAM は高額です。コントラクト実行に RAM が必要で、EOS は RAM 売買市場を開きましたが、投機的売買により価格が高騰しています。</li>
<li class=""><font color="#0092ff">開発難易度が高い：</font>契約言語が C++ であることが開発のハードルを大きく押し上げています。C++ 自体が複雑なうえに EOS.IO の C++ API も使いこなす必要があり、開発者個々のスキル要求が極めて高いです。</li>
</ul>
<p>これらの理由から、EOS のスマートコントラクト開発は開発者にとって魅力が薄く、むしろ EOS を見限る理由にすらなり得ます。</p>
<h3 class="anchor anchorTargetStickyNavbar_eptP" id="4-iost-仮想マシンの誕生">4. IOST 仮想マシンの誕生<a href="https://developers.iost.io/ja/blog/iost-v8vm-design#4-iost-%E4%BB%AE%E6%83%B3%E3%83%9E%E3%82%B7%E3%83%B3%E3%81%AE%E8%AA%95%E7%94%9F" class="hash-link" aria-label="4. IOST 仮想マシンの誕生 への直接リンク" title="4. IOST 仮想マシンの誕生 への直接リンク" translate="no">​</a></h3>
<p>良い仮想マシンとは、設計が優雅であると同時に使いやすさと安全性を満たす必要があると考えています。EVM、EOS、C Lua、V8 など各種 VM の長所と短所を比較したうえで、EVM や EOS に存在した不合理な設計を根本から見直し、Node.js と Chrome において優れた実績を持つ V8 をベースに IOST 仮想マシンを構築しました。</p>
<h4 class="anchor anchorTargetStickyNavbar_eptP" id="41-iost-v8vm-のアーキテクチャと設計">4.1 IOST V8VM のアーキテクチャと設計<a href="https://developers.iost.io/ja/blog/iost-v8vm-design#41-iost-v8vm-%E3%81%AE%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3%E3%81%A8%E8%A8%AD%E8%A8%88" class="hash-link" aria-label="4.1 IOST V8VM のアーキテクチャと設計 への直接リンク" title="4.1 IOST V8VM のアーキテクチャと設計 への直接リンク" translate="no">​</a></h4>
<p>V8VM アーキテクチャの中核は <font color="#0092ff">VMManager</font> で、主に次の三つの機能を担います:</p>
<p><img decoding="async" loading="lazy" src="https://developers.iost.io/ja/assets/images/V8VM-2ae89b7ed5cca36ca71119ab10b4989a.png" width="1079" height="537" class="img_HURO"></p>
<ul>
<li class=""><font color="#0092ff">VM エントリ：</font>他モジュールからのリクエスト（RPC リクエスト、ブロック検証、Tx 検証など）を受け取り、前処理・整形を行ったうえで VMWorker に実行を委譲します。</li>
<li class=""><font color="#0092ff">VMWorker のライフサイクル管理：</font>現在のシステム負荷に応じて worker 数を柔軟に調整し、worker を再利用します。さらに worker 内部で JavaScript コードのホットスタートとホット Sandbox スナップショットの永続化を実装することで、VM の頻繁な作成や同一コードの再ロードによる高負荷・メモリ膨張を回避し、システム消費を抑えつつスループットを大きく引き上げました。Fomo3D のように単一コントラクトに大量のユーザーアクセスが集中する典型的なワークロードでも、IOST V8VM は余裕を持って処理できます。</li>
<li class=""><font color="#0092ff">State データベースとの相互作用：</font>IOST のすべてのトランザクションに対して原子性を保証し、コントラクト実行失敗時や gas 不足時にはトランザクション全体をロールバックします。State データベース側では二段階のメモリキャッシュを実装したうえで RocksDB へ flush します。</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_eptP" id="42-sandbox-のコア設計">4.2 Sandbox のコア設計<a href="https://developers.iost.io/ja/blog/iost-v8vm-design#42-sandbox-%E3%81%AE%E3%82%B3%E3%82%A2%E8%A8%AD%E8%A8%88" class="hash-link" aria-label="4.2 Sandbox のコア設計 への直接リンク" title="4.2 Sandbox のコア設計 への直接リンク" translate="no">​</a></h4>
<p><img decoding="async" loading="lazy" src="https://developers.iost.io/ja/assets/images/sandbox-4ebb96b78b8974d795690953001afb51.png" width="1299" height="456" class="img_HURO"></p>
<p>Sandbox は JavaScript スマートコントラクトを実際に実行する場で、上位の V8VM を受け、下位の Chrome V8 をラップして呼び出します。Compile 段階と Execute 段階に分かれます:</p>
<blockquote>
<p>Compile 段階</p>
</blockquote>
<p>主にコントラクト開発とオンチェーン公開向けの段階で、次の二つの主要機能があります:</p>
<ul>
<li class=""><font color="#0092ff">Contract Pack：</font>スマートコントラクトのバンドル。webpack を用いて実装され、対象プロジェクト下のすべての JavaScript コードをパッケージ化し、依存関係の自動インストールも行います。これにより IOST V8VM 上で大規模なコントラクトプロジェクトを構築できます。IOST V8VM は Node.js のモジュールシステムと完全互換で、<code>require</code> / <code>module.exports</code> / <code>exports</code> をそのまま利用でき、ネイティブな JavaScript 開発体験を提供します。</li>
<li class=""><font color="#0092ff">Contract Snapshot：</font>V8 のスナップショット機能を使い、JavaScript コードを事前にコンパイルします。コンパイル済みコードによって Chrome V8 の isolate と context の生成効率が向上し、実行時にはスナップショットを deserialize するだけで済むため、ロード速度・実行速度ともに大幅に改善します。</li>
</ul>
<blockquote>
<p>Execute 段階</p>
</blockquote>
<p>実際にオンチェーンでコントラクトを実行する段階で、次の二つの主要機能があります:</p>
<ul>
<li class=""><font color="#0092ff">LoadVM：</font>VM の初期化を行います。Chrome V8 オブジェクトの生成、システム実行パラメータの設定、関連 JavaScript ライブラリのインポートなど、コントラクト実行までの準備をすべて整えます。主な JavaScript ライブラリ:</li>
</ul>

























<table><thead><tr><th>ライブラリ</th><th>役割</th></tr></thead><tbody><tr><td>Blockchain</td><td>Node.js 風のモジュールシステム。モジュールキャッシュ、事前コンパイル、循環参照の取り扱いなど。</td></tr><tr><td>Event</td><td>JavaScript から State データベースへの読み書きと、失敗・例外時のロールバック。</td></tr><tr><td>NativeModule</td><td>ブロックチェーン関連のプリミティブ。<code>transfer</code>、<code>withdraw</code>、現在のブロック・トランザクション情報取得など。</td></tr><tr><td>Storage</td><td>イベント実装。JavaScript コントラクト内で発火したイベントは、オンチェーン確定後にコールバックとして配送されます。</td></tr></tbody></table>
<ul>
<li class=""><font color="#0092ff">Execute：</font>最終的な実行ステップ。IOST V8VM は専用スレッドでコントラクトを実行し、現在の実行状況を監視します。例外発生・リソース超過・実行時間超過のいずれかが起きた場合は <code>Terminate</code> を呼び出して実行を打ち切り、エラー結果を返します。</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_eptP" id="43-iost-v8vm-のパフォーマンス">4.3 IOST V8VM のパフォーマンス<a href="https://developers.iost.io/ja/blog/iost-v8vm-design#43-iost-v8vm-%E3%81%AE%E3%83%91%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%B9" class="hash-link" aria-label="4.3 IOST V8VM のパフォーマンス への直接リンク" title="4.3 IOST V8VM のパフォーマンス への直接リンク" translate="no">​</a></h4>
<p>仮想マシンはパブリックチェーンの最重要インフラのひとつであり、パフォーマンスが優れていなければなりません。IOST では設計段階・VM 選定段階から、パフォーマンスを最重要指標のひとつに位置付けてきました。</p>
<p>Chrome V8 は JIT、インラインキャッシュ、遅延ロードなどによって JavaScript の解釈実行を高速化しています。Chrome V8 の高性能のおかげで、IOST V8VM の JavaScript 実行速度は劇的に向上しました。<font color="#0092ff">再帰 fibonacci、メモリコピー、複雑な CPU 演算</font>の三方面で <font color="#0092ff">EVM、EOS、C Lua、V8VM</font> を比較した結果は次のとおりです:</p>
<ul>
<li class="">テスト環境</li>
</ul>





















<table><thead><tr><th>項目</th><th>設定</th></tr></thead><tbody><tr><td>System</td><td>AWS EC2</td></tr><tr><td>CPU</td><td>2 CPU</td></tr><tr><td>Memory</td><td>8 GB</td></tr></tbody></table>
<ul>
<li class="">結果</li>
</ul>





































<table><thead><tr><th></th><th>evm</th><th>lua c</th><th>eos.binaryen</th><th>eos.wavm</th><th>IOST V8VM</th></tr></thead><tbody><tr><td>cpu calculate (8000)</td><td>92 ms</td><td>6.34 ms</td><td>3.34 ms</td><td>10.28 ms</td><td>6.26 ms</td></tr><tr><td>fibonacci (32)</td><td>8.25 s</td><td>470 ms</td><td>5.5 s</td><td>541 ms</td><td>45 ms</td></tr><tr><td>string concat (10000)</td><td>2.18 s</td><td>370 ms</td><td>316 ms</td><td>96.3 ms</td><td>9.3 ms</td></tr></tbody></table>
<p>実測の結果、IOST V8VM は主要 VM 実装の中でも優れたパフォーマンスを示しました。上の数値には VM 起動と設定ロードの時間も含まれており、コールドスタートの段階で既に有利であることが分かります。今後は VM オブジェクトプールや LRU キャッシュなどを導入し、CPU・メモリ使用率をさらに改善して、IOST のスマートコントラクト処理能力を一段引き上げる予定です。</p>
<h4 class="anchor anchorTargetStickyNavbar_eptP" id="44-まとめ">4.4 まとめ<a href="https://developers.iost.io/ja/blog/iost-v8vm-design#44-%E3%81%BE%E3%81%A8%E3%82%81" class="hash-link" aria-label="4.4 まとめ への直接リンク" title="4.4 まとめ への直接リンク" translate="no">​</a></h4>
<p>現時点で IOST V8VM の第一版を完成させ、当初予定したすべての機能を実装しました。今後の反復では <font color="#0092ff">安全性と使いやすさ</font> を最優先に、次の三方向で改善を続けます:</p>
<ul>
<li class="">高性能。コントラクトをより高速に実行できるように。</li>
<li class="">開発体験の向上。標準ライブラリを拡充・整備。</li>
<li class="">大規模プロジェクトのビルドとデバッグを完全にサポートする充実したツールチェーン。</li>
</ul>
<p>第一版の IOST V8VM 開発では <font color="#0092ff">投票、コントラクト名、トークン</font> など多くのアイデアを初期検証できました。新機能・新特性は今後のテストネット更新で順次提供していきます。</p>
<h3 class="anchor anchorTargetStickyNavbar_eptP" id="付録-vm-ベンチマークプログラム">付録: VM ベンチマークプログラム<a href="https://developers.iost.io/ja/blog/iost-v8vm-design#%E4%BB%98%E9%8C%B2-vm-%E3%83%99%E3%83%B3%E3%83%81%E3%83%9E%E3%83%BC%E3%82%AF%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0" class="hash-link" aria-label="付録: VM ベンチマークプログラム への直接リンク" title="付録: VM ベンチマークプログラム への直接リンク" translate="no">​</a></h3>
<ul>
<li class="">
<ol>
<li class="">EVM コード</li>
</ol>
</li>
</ul>
<div class="language-go codeBlockContainer_NSky theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_Thz8"><pre tabindex="0" class="prism-code language-go codeBlock_ohrZ thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_rlL9"><div class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">package</span><span class="token plain"> evm</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token string" style="color:rgb(255, 121, 198)">"math/big"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token string" style="color:rgb(255, 121, 198)">"testing"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token string" style="color:rgb(255, 121, 198)">"github.com/ethereum/go-ethereum/accounts/abi/bind"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token string" style="color:rgb(255, 121, 198)">"github.com/ethereum/go-ethereum/accounts/abi/bind/backends"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token string" style="color:rgb(255, 121, 198)">"github.com/ethereum/go-ethereum/common"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token string" style="color:rgb(255, 121, 198)">"github.com/ethereum/go-ethereum/core"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token string" style="color:rgb(255, 121, 198)">"github.com/ethereum/go-ethereum/crypto"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">var</span><span class="token plain"> bm </span><span class="token operator">*</span><span class="token plain">Benchmark</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">func</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">init</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   key</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> err </span><span class="token operator">:=</span><span class="token plain"> crypto</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">GenerateKey</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   auth </span><span class="token operator">:=</span><span class="token plain"> bind</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">NewKeyedTransactor</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">key</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   gAlloc </span><span class="token operator">:=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">map</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain">common</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">Address</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain">core</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">GenesisAccount</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      auth</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">From</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain">Balance</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> big</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">NewInt</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token number">1000000</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   sim </span><span class="token operator">:=</span><span class="token plain"> backends</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">NewSimulatedBackend</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">gAlloc</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token boolean">_</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token boolean">_</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> bm</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> err </span><span class="token operator">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">DeployBenchmark</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">auth</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> sim</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> err </span><span class="token operator">!=</span><span class="token plain"> </span><span class="token boolean">nil</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token function" style="color:rgb(80, 250, 123)">panic</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">err</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   sim</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">Commit</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">func</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">BenchmarkFibonacci</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">b </span><span class="token operator">*</span><span class="token plain">testing</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">B</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">for</span><span class="token plain"> i </span><span class="token operator">:=</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> i </span><span class="token operator">&lt;</span><span class="token plain"> b</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">N</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> i</span><span class="token operator">++</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token boolean">_</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> err </span><span class="token operator">:=</span><span class="token plain"> bm</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">Fibonacci</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token boolean">nil</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> big</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">NewInt</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token number">32</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> err </span><span class="token operator">!=</span><span class="token plain"> </span><span class="token boolean">nil</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">         b</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">Fatalf</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"fibonacci run error: %v\n"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> err</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">func</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">BenchmarkStrConcat</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">b </span><span class="token operator">*</span><span class="token plain">testing</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">B</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">for</span><span class="token plain"> i </span><span class="token operator">:=</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> i </span><span class="token operator">&lt;</span><span class="token plain"> b</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">N</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> i</span><span class="token operator">++</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token boolean">_</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> err </span><span class="token operator">:=</span><span class="token plain"> bm</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">StrConcat</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token boolean">nil</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"This is vm benchmark, tell me who is slower"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> big</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">NewInt</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token number">10000</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> err </span><span class="token operator">!=</span><span class="token plain"> </span><span class="token boolean">nil</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">         b</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">Fatal</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">err</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">func</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">BenchmarkCalculate</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">b </span><span class="token operator">*</span><span class="token plain">testing</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">B</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">for</span><span class="token plain"> i </span><span class="token operator">:=</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> i </span><span class="token operator">&lt;</span><span class="token plain"> b</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">N</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> i</span><span class="token operator">++</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token boolean">_</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> err </span><span class="token operator">:=</span><span class="token plain"> bm</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">Calculate</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token boolean">nil</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> big</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">NewInt</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token number">5000</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> err </span><span class="token operator">!=</span><span class="token plain"> </span><span class="token boolean">nil</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">         b</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">Fatal</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">err</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></div></code></pre></div></div>
<ul>
<li class="">
<ol start="2">
<li class="">Lua コード</li>
</ol>
</li>
</ul>
<div class="language-lua codeBlockContainer_NSky theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_Thz8"><pre tabindex="0" class="prism-code language-lua codeBlock_ohrZ thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_rlL9"><div class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">fibonacci</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">number</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> number </span><span class="token operator">==</span><span class="token plain"> </span><span class="token number">0</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">then</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token number">0</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">end</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> number </span><span class="token operator">==</span><span class="token plain"> </span><span class="token number">1</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">then</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token number">1</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">end</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">fibonacci</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">number </span><span class="token operator">-</span><span class="token plain"> </span><span class="token number">1</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token operator">+</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">fibonacci</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">number </span><span class="token operator">-</span><span class="token plain"> </span><span class="token number">2</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">end</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">strConcat</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">str</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> cycles</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">local</span><span class="token plain"> result </span><span class="token operator">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">""</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">for</span><span class="token plain"> i </span><span class="token operator">=</span><span class="token plain"> </span><span class="token number">1</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> cycles </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">do</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">        result </span><span class="token operator">=</span><span class="token plain"> result </span><span class="token operator">..</span><span class="token plain"> str</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">end</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> result</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">end</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">calculate</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">cycles</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">local</span><span class="token plain"> rs </span><span class="token operator">=</span><span class="token plain"> </span><span class="token number">0</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">for</span><span class="token plain"> i </span><span class="token operator">=</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> cycles</span><span class="token operator">-</span><span class="token number">1</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">do</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">        rs </span><span class="token operator">=</span><span class="token plain"> rs </span><span class="token operator">+</span><span class="token plain"> math</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">pow</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">i</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token number">5</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">end</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> rs</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">end</span><br></div></code></pre></div></div>
<ul>
<li class="">
<ol start="3">
<li class="">EOS コード</li>
</ol>
</li>
</ul>
<div class="language-cpp codeBlockContainer_NSky theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_Thz8"><pre tabindex="0" class="prism-code language-cpp codeBlock_ohrZ thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_rlL9"><div class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">class</span><span class="token plain"> </span><span class="token class-name">fibonacci</span><span class="token plain"> </span><span class="token operator">:</span><span class="token plain"> </span><span class="token base-clause keyword" style="color:rgb(189, 147, 249);font-style:italic">public</span><span class="token base-clause"> eosio</span><span class="token base-clause double-colon punctuation" style="color:rgb(248, 248, 242)">::</span><span class="token base-clause class-name">contract</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">public</span><span class="token operator">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">using</span><span class="token plain"> contract</span><span class="token double-colon punctuation" style="color:rgb(248, 248, 242)">::</span><span class="token plain">contract</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token comment" style="color:rgb(98, 114, 164)">/// @abi action</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">void</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">calcn</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">int64_t</span><span class="token plain"> n</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">int64_t</span><span class="token plain"> r </span><span class="token operator">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">calc</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">n</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token function" style="color:rgb(80, 250, 123)">print</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">r</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">int</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">calc</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">int64_t</span><span class="token plain"> n </span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">n </span><span class="token operator">&lt;</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">n </span><span class="token operator">==</span><span class="token plain"> </span><span class="token number">0</span><span class="token plain"> </span><span class="token operator">||</span><span class="token plain"> n </span><span class="token operator">==</span><span class="token plain"> </span><span class="token number">1</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">          </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> n</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">calc</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">n </span><span class="token operator">-</span><span class="token plain"> </span><span class="token number">1</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token operator">+</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">calc</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">n </span><span class="token operator">-</span><span class="token plain"> </span><span class="token number">2</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">EOSIO_ABI</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain"> fibonacci</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">calcn</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">class</span><span class="token plain"> </span><span class="token class-name">stringadd</span><span class="token plain"> </span><span class="token operator">:</span><span class="token plain"> </span><span class="token base-clause keyword" style="color:rgb(189, 147, 249);font-style:italic">public</span><span class="token base-clause"> eosio</span><span class="token base-clause double-colon punctuation" style="color:rgb(248, 248, 242)">::</span><span class="token base-clause class-name">contract</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">public</span><span class="token operator">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">using</span><span class="token plain"> contract</span><span class="token double-colon punctuation" style="color:rgb(248, 248, 242)">::</span><span class="token plain">contract</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token comment" style="color:rgb(98, 114, 164)">/// @abi action</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">void</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">calcn</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">std</span><span class="token double-colon punctuation" style="color:rgb(248, 248, 242)">::</span><span class="token plain">string s</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">int64_t</span><span class="token plain"> cycles</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      std</span><span class="token double-colon punctuation" style="color:rgb(248, 248, 242)">::</span><span class="token plain">string </span><span class="token function" style="color:rgb(80, 250, 123)">ss</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">s</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">size</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token operator">*</span><span class="token plain"> cycles</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token char" style="color:rgb(255, 121, 198)">'\0'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">int32_t</span><span class="token plain"> k </span><span class="token operator">=</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">for</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">int</span><span class="token plain"> i </span><span class="token operator">=</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> i </span><span class="token operator">&lt;</span><span class="token plain"> cycles</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> </span><span class="token operator">++</span><span class="token plain">i</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">         </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">for</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">int</span><span class="token plain"> j </span><span class="token operator">=</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> j </span><span class="token operator">&lt;</span><span class="token plain"> s</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">size</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> </span><span class="token operator">++</span><span class="token plain">j</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">         </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">            ss</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain">k</span><span class="token operator">++</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> s</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain">j</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">         </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token function" style="color:rgb(80, 250, 123)">print</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">ss</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">EOSIO_ABI</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain"> stringadd</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">calcn</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">class</span><span class="token plain"> </span><span class="token class-name">calculate</span><span class="token plain"> </span><span class="token operator">:</span><span class="token plain"> </span><span class="token base-clause keyword" style="color:rgb(189, 147, 249);font-style:italic">public</span><span class="token base-clause"> eosio</span><span class="token base-clause double-colon punctuation" style="color:rgb(248, 248, 242)">::</span><span class="token base-clause class-name">contract</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">public</span><span class="token operator">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">using</span><span class="token plain"> contract</span><span class="token double-colon punctuation" style="color:rgb(248, 248, 242)">::</span><span class="token plain">contract</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token comment" style="color:rgb(98, 114, 164)">/// @abi action</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">void</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">calcn</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">uint64_t</span><span class="token plain"> cycles</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">uint64_t</span><span class="token plain"> rs </span><span class="token operator">=</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">for</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">uint64_t</span><span class="token plain"> i </span><span class="token operator">=</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> i </span><span class="token operator">&lt;</span><span class="token plain"> cycles</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> </span><span class="token operator">++</span><span class="token plain">i</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">         rs </span><span class="token operator">=</span><span class="token plain"> rs </span><span class="token operator">+</span><span class="token plain"> i </span><span class="token operator">*</span><span class="token plain"> i </span><span class="token operator">*</span><span class="token plain"> i </span><span class="token operator">*</span><span class="token plain"> i </span><span class="token operator">*</span><span class="token plain"> i</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token function" style="color:rgb(80, 250, 123)">print</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">rs</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">EOSIO_ABI</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain"> calculate</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">calcn</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><br></div></code></pre></div></div>]]></content:encoded>
            <category>v8vm</category>
            <category>smart-contract</category>
        </item>
    </channel>
</rss>