ICOに飛び蟌む







この蚘事では、ICOの準備ず実斜の技術的偎面を怜蚎したす。 これは、同僚の蚘事「 ICOの技術的特城 」の続きです。 開始 」をご芧ください。ここでは、むヌサリアムのスマヌトコントラクトに関連する技術的な問題に぀いお詳しく説明したす。







技術プロゞェクトの開発



スマヌトコントラクトを開発する前に、技術プロゞェクトを䜜成しおおくずいいでしょう。 これは、䞻芁な技術的質問に答える契玄システムの抂略図であり、プロゞェクト経枈ずICOシナリオの実珟可胜性を瀺しおいたす。







通垞、技術プロゞェクトには䜕が含たれたすか これは、厚手の正匏な文曞である必芁はありたせん。4〜5ペヌゞのキヌポむントず2、3の図で十分です。 そしお、これらのペヌゞで、所有暩の仕組みを最初に芋おください。 最も簡単なオプション1぀のトヌクンホルダヌが販売され、ICO-すべおが連続しおいたす。 通垞はそうしたす。 より耇雑なオプションは、マルチ眲名を䜿甚する堎合です。 信頌できるりォレットコントラクトを基本ずしお、そこからマルチシグネチャを抜出し、りォレットに適甚しお゚ヌテルを保存するだけでなく、ICO自䜓ずトヌクンを管理するこずもできたす。 ここでは想像力に制限はなく、さたざたなシナリオを数孊的に簡単に実装できたす。







ICOが分解されるず、぀たり、レヌトをカりントしおトヌクンを発行し、゚ヌテルを受け取るのは1぀のコントラクトではなく、各コントラクトが仕事をするずきのスマヌトコントラクトのシステムになりたす。 ぀たり、ICOステヌゞで゚ヌテルを受け入れ、そのロゞックに応じお、発行する必芁があるトヌクンの数を理解したす。 トヌクンの所有者であるトヌクンコントラクトに適切なコマンドを䞎えるず同時に、むヌサヌを自分自身に保持せずに、特別なストレヌゞこれもコントラクトに転送したす。













攟送を契玄に保存するこずで犯眪を芋るこずはありたせん。 それどころか、契玄が䜕をするのかが明らかなので、それはさらに透明です。 ICOが終了するたで空気がそこに保管されおいるこずが簡単にわかりたす。お金を集めなければ、投資家にすべおを返すこずが保蚌され、所有者でさえそれを止めるこずはできたせん。







䞀方、この合䜵症は無料ではありたせん。 これは、展開段階で远加の問題を匕き起こすず蚀えたす。 そしお、はい、これらの接続ず課題は、脆匱性を導入する別の方法です。 あなたの暩利を泚意深く芋おください。







トヌクンの暙準があり、 ERC20ず呌ばれ、契玄で実装する必芁があるいく぀かのメ゜ッドを定矩したす。 トヌクンがこの暙準を実装しおいる堎合、倚くの取匕所で衚瀺できたす。 さらに、Ethereum Wallet以倖の他のりォレットはERC20をサポヌトしおいたす。 したがっお、必芁な機胜を実装するだけで、トヌクンを操䜜するための既補のむンフラストラクチャを取埗できたす。 さらに、トヌクンの基盀を築き、すぐにERC20を実装するラむブラリがありたす。 䜕らかの内郚リ゜ヌストヌクンがあり、ナヌザヌが盞互に亀換するこずを想定しおいない堎合は、暙準を実装する必芁はありたせん。 圌らがこのトヌクンでこの遊園地に来お、アトラクションのチケットを賌入した堎合、おそらく、圌は取匕所にリストを必芁ずしたせん。







さらに、問題や奇劙なアクティビティが発生した堎合に、䞀時停止状態を契玄に含めるこずができたす。 たずえば、゚ヌテルが泚がれ、トヌクンが発行されない堎合。 次に、ICOを䞀時停止し、それを把握しお決定を䞋す必芁がありたす。 この状態を技術蚭蚈に組み蟌むこずは䟡倀がありたす。 技術プロゞェクトでトヌクンの発行を提䟛するこずもできたす。 ICOの前にこれに぀いお考えるこずが重芁です。なぜなら、それがトヌクンずどのように互換性を持぀かを理解する必芁があるからです。













必ずこのようなスキヌムを怜蚎しおください-これはICOの状態グラフです。 これは有限状態マシン、぀たりICOが可胜な状態です。 これはグラフであり、状態を説明し、ある状態から別の状態ぞの遷移が発生するこずを瀺したす。 ICOは、州を単に資金調達から「調達成功」に倉曎するべきではありたせん。 それらをすぐに出したしょう。」 ICOの状態間の遷移を理解する必芁がありたす。 投資家は、すべおが公正であるず考えおいるため、これを理解する必芁がありたす。 そしお、これは開発者が理解し、明確にプログラムする必芁がありたす。 Solidityにはこのためのすべおの手段がありたす。いわゆる転送があり、その助けを借りお状態が蚘述されたす。 さらに、無効な遷移が発生しないように、コヌドによっお制埡される状態間で遷移するこずをお勧めしたす。







コントラクトの倖郚で䜿甚可胜な関数は、いわゆるSolidityモディファむアを䜿甚しお状態を蚭定できたす。 そのため、ICOの状態にのみ投資でき、䞀時停止するこずはできたせん。 逆に、所有者は、正垞に完了したICOでのみお金を匕き出すこずができたす。







スマヌトコントラクト開発



技術プロゞェクトの準備が敎い、顧客が満足し、開発者が䜕をする必芁があるかを理解したら、開発に進みたす。 Ethereumには仮想マシンEthereum Virtual Machine、EVMがあり、これらず同じコントラクトプログラムを実行したす。コントラクトは、仮想マシンによっお実行されるいわゆるバむトコヌドです。 この点で、いく぀かの蚀語で契玄を䜜成するこずが可胜になりたす。 Solidity蚀語は、スマヌトコントラクトをれロから開発するために特別に䜜成されたもので、Cに䌌た構文を持っおいたす。 圌以倖にも、他の蚀語がありたす。JavaScriptに䌌た蚀語、Pythonに䌌た蚀語がありたす。







私の盎感的な意芋は、神経生理孊的性質の理由でさえも、Solidityを遞択する方が良いずいうものです。 開発者がPythonに䌌た蚀語を䜿甚する堎合、それでもむヌサリアムスマヌトコントラクトを䜜成したす。 しかし同時に、Pythonに兞型的なセマンティクスずパタヌンが頭に浮かび始め、Blockchain向けに開発するずきには明らかに機胜したせん。







Solidityに぀いお長い間話すこずができるので、ガむダンスが必芁です。 たず、 Truffleフレヌムワヌクの開発を倧幅に促進したす。 コントラクトをテストし、メむンのテストロヌカルチェヌンにデプロむするのに圹立ちたす。 たた、これを段階的に行うこずもできたす。぀たり、契玄システムを新しい契玄で補完するこずもできたす。 同時に、フレヌムワヌクは叀いものをすべお蚘憶し、それらを再配垃したせん。







ラむブラリを再利甚するために呌び出すのはなぜですか コミュニティは非垞に若く、コヌドはほずんどありたせんが、過去30〜40幎にわたっお゜フトりェアの開発で埗られたすべおの原則は、ブロックチェヌンの堎合でも有効です。 そしお、十分にテストされたコヌドがあり、それ自䜓が幅広いプロゞェクトで再利甚を䌎う堎合、それを採甚し、車茪を再発明しないでください。







たず、 OpenZeppelin / zeppelin-solidity libraryに泚目したす 。 スマヌトコントラクトを開発するずき、それは事実䞊の暙準の危機にonしおいたす。 倚くの契玄やラむブラリはありたせんが、比范的小さいものです。 しかし、それらは頻繁なケヌスをカバヌし、契玄曞、いく぀かのトヌクン、䜜成、曞き蟌み可胜なトヌクン、いく぀かの兞型的なICO、セキュリティに関連する䜕か、䟋えば再入攻撃に察する保護を保持するなど、すぐに䜿えるものを提䟛したす。







別のラむブラリはSafeMathです。 Zeppelin-solidityに接続したくない堎合でも䜿甚するこずをお勧めしたす。 それは小さく、文字通りいく぀かのワンラむナヌで、契玄に盎接コピヌできたす。 圌女はあなたをあふれから守りたす。 これは非垞に緊急で深刻な問題です。 たずえば、Solidityで笊号なしの数倀を凊理し、過倱により3぀から5぀を差し匕くず、契玄は匕き続き機胜したすが、その結果、膚倧な数が衚瀺されたす。 これはオヌバヌフロヌが原因で発生したした。 SafeMathラむブラリを䜿甚するず、゚ラヌが発生したす。぀たり、トランザクションぱラヌで完了し、状態は倉曎されたせん。







倚くの掚奚事項がありたす。 ステヌトマシンに぀いお説明したしたが、それを実装するこずが望たしいです。ステヌトず修食子を登録したす。 さらに、ある状態から別の状態ぞの遷移を時間内に実装できたす。 同時に、各関数に修食子が远加されたす。「時間を芋お、もし今ICOの始たりであれば、状態をICOに倉曎したす。」







Solidityの䞖界、スマヌトコントラクトの䞖界では、兞型的なパタヌンが圢になり始めおいるパタヌンがありたす。 たずえば、゜フトりェア、特に䞀郚の䌁業システムの開発には倚くのパタヌンがあるず聞きたした。 ここでは、たずえば、ナヌザヌが圌に送金しようずするずきではなく、圌自身のために資金を受け取るずきに、よく知られた匕き出しパタヌンを含めるこずができたす。 たずえば、ICOが倱敗した堎合、投資家にお金を返す必芁があるずき、自分でやろうずするず、倚くの理由で成功しない可胜性がありたす。 たた、セキュリティの問題もありたす。 適切な小切手を持぀ナヌザヌによる資金の匕き出しずしお払い戻しを蚭蚈するず、はるかに簡単になりたす。







䞀時停止モヌドに぀いお説明したした。 最近芋たICOではあたり䜿甚されたせんが、これは非垞に䟿利なメカニズムです。 もちろん、圌は問題の状況の100に察しおは保蚌しおいたせん䞀時停止しおいおも゚ヌテルを盗むこずができたすが、攻撃の可胜性を倧幅に枛らしたす。







コントラクトの眮換に぀いおは、最埌たで行っお完党に動的なコントラクトを䜜成する必芁はないず蚀わなければなりたせん。そのコヌドは、たずえば、elegatecallなどを呌び出すこずで任意に眮き換えるこずができたす。問題が怜出された堎合、ロゞックを眮き換えるこずができたす。 これは、トヌクンずお金を別々に持っおいるずいう事実のために可胜であり、お金は倉わらないたたです。 原則ずしお、このパヌティクルを眮き換えお、2぀の既存のパヌツに完党に透過的に関連付けるこずができたす。 いく぀かの機胜がありたす。 ICOがトヌクンなどを初期化する堎合は、眮換䞭に2回目の初期化が開始されないようにしおください。 その結果、ICOには新しい䜏所がありたす。これは新しい契玄です。 眮換の可胜性は契玄のコヌドで芋るこずができ、これは䞀皮の劥協であるずいうこずを理解する必芁がありたす。 䞀方で、私はすべおが絶察に倉わらないこずを望みたすこれはあなたに察する信頌を高めたす、他方では、それを安党にプレむするこずは玠晎らしいこずです。 劥協案ずしお、完党に倉曎できない条件をコヌドに指定できたす。 たずえば、資金調達の最小しきい倀が原則ずしお倉曎されおいないこずを゚ヌテルリポゞトリに登録したす。 それから、投資家は、圌らが10䞇を集めたこずが起こらないこずを知っおいるでしょう、しかし、1億を集めたいず思ったが、それでも䜕をしたか。







可胜であれば、契玄のメ゜ッドが入力時に受け取るパラメヌタヌの劥圓性を確認する必芁がありたす。 トヌクンが攟出をサポヌトし、生​​成されるトヌクンの数がパラメヌタヌで指定されおいる堎合、たずえば、トヌクンの数よりもトヌクンの数が倚いかどうかを調べるこずで、この数を確認できたす。 これにより、手動で入力したパラメヌタにタむプミスがある堎合に確実になりたす。 たたは、たずえば、倖郚むンフラストラクチャで障害が発生したずきに倖郚むンフラストラクチャによっお発行が開始された堎合、数十億から数十億のトヌクンが発行されたす。







GitHubぞのさらに3぀のリンク









以䞋に、いく぀かの゜リュヌションを含むリポゞトリのセットを瀺したす。 これらは実隓的なものですので、慎重に詊しおください。通垞、「これはアルファ版です。20ドルを超えお保存しないでください」ず曞かれおいたすが、すべおの良いこずは実隓から埗られるこずは明らかです。 自分ですべおを䞀から曞くよりも、䜕かを基瀎ずしお準備する方がいいかもしれたせん。







堅牢性の開発に必芁なIDE 私はコマンドラむンで積極的に䜜業するこずに慣れおいお、コマンドラむンからTruffleを実行したすが、実際には、 test



、 compile



、 migrate



3぀のコマンドのみが必芁です。 開発環境に぀いおは、PyCharmを遞択したした。Solidity甚の無料のプラグむンがあり、これは良いこずです。 開発環境は倧いに圹立ち、PyCharm / Ideaは優れたIDEです。競合他瀟よりも2倍優れおいるずさえ蚀えたす。 開発環境の助けを䜿甚しお、銎染みのないコヌドを文字通り数時間理解しおいる堎合、契玄内の倉数ずそのすべおの䜿甚を匷調衚瀺でき、監査を行うずきに非垞に圹立ちたす。







スマヌト契玄を履行するためのコストに぀いお少し。 ブロックチェヌンを倉曎する、぀たりトランザクションに参加する蚈算のみにコストがかかりたす。 view



たたはpure



修食子を持぀関数があり、それらは状態を倉曎せず、ブロックチェヌンにデヌタを送信せずに䜿甚できたす。 ロヌカルで呌び出される関数を開発した堎合、費甚は䞀切かかりたせん。







ブロックチェヌンで実際に実行され、状態を倉曎し、デヌタを保存たたは送信するコヌドはすべお、䟡倀がありたす。 このテヌマに぀いお思考実隓を行うのは簡単です。たずえば、非垞に長い間機胜し、倚くのこずを節玄するコヌドを蚘述できたすか。 むヌサリアムネットワヌクの参加者が同時にそれを繰り返す必芁がある堎合、コヌドは䞖界䞭の䜕癟䞇台ものコンピュヌタヌで動䜜したす。 したがっお、むヌサリアムの開発者は、あなたがそれを支払うためにどんな方法でも気にし、珟圚の䟡栌では非垞に高䟡です。 もう1぀のこずは、蚈算ず行ごずにコストが異なるこずです。 単玔な算術挔算の䟡栌は3〜5単䜍のガスであり、州の倉曎には2䞇単䜍のガスがかかりたす。 なんで ブロックチェヌンが倉曎されたため、あなたのために32バむト増加したした。これらのバむトは䞖界䞭の䜕癟䞇ものコンピュヌタヌに到達したした。







スマヌトコントラクトテスト



テストは必芁なステップです、゜フトりェアの50幎の歎史はこれを教えおくれたす。 そしお、ICOに付属するプロゞェクトリポゞトリにテストが衚瀺されないのは奇劙です。 たぶん、それらは完成し、曞かれおいるが、単にレむアりトされおいない。 しかし、いずれにせよ、テストを行う堎合、それらをレむアりトしおみたせんか したがっお、投資家に察しお、ここですべおが十分にテストされおいるこずを瀺したす。 これぱラヌがないこずを保蚌するものではありたせんが、倚くの問題を回避するのに圹立ちたす。







テストはSolidityたたはJavaScriptで盎接蚘述されたす。 いずれの堎合でも、Truffleを䜿甚するず、すべおのテストを䞀床に実行しお、芁玄レポヌトを取埗できたす。 䞀番䞋で蚀う必芁がありたすすべおのテストに合栌し、倱敗はありたせん。 ICOの最も重芁な偎面トヌクン、クラりドセヌル自䜓、貯金、ボヌナスなどをテストしたこずを、ICOのお客様、ナヌザヌ、投資家の䞡方に瀺したす。 ボヌナスは重芁なものです。 投資家がボヌナスを受け取るこずを知るこずは非垞に重芁です。













単䜓テストがありたす-それらは小さな孀立したコヌドフラグメントをテストし、そのようなテストはSolidityで曞くのに䟿利です。







 function testValidationOfDecrease() { Bonuses b = new Bonuses(); b.add(1000000000, 50); b.add(1000000010, 60); b.validate(false); assertInvalid(b, true); b = new Bonuses(); b.add(1000, 60); b.add(1000000000, 50); b.add(1000000010, 60); b.add(1000000020, 0); b.validate(false); assertInvalid(b, true); }
      
      





コヌドはSolidityであり、単玔に契玄を䜜成しおデヌタを送信し、契玄が期埅どおりに機胜しおいるこずを確認したす。 JavaScriptで蚘述されたテストがありたす。 通垞、耇数の契玄が盞互䜜甚に関係しおいる堎合、より耇雑なシナリオがここでチェックされたす。 前述の䞀連の契玄を䜜成するずしたす。 その埌、耇数の契玄が関係し、耇数のナヌザヌが存圚する堎合もありたす。 私たちはそれらを「投資家のようなもの」、「投資家のようなもの」ずも呌びたす。 ただ所有者がいたす、党く暩利のないナヌザヌがいたす。 そしお、ここで耇雑な盞互䜜甚をプログラムし、盞互䜜甚䞭にトヌクンが正しく発行されるこずを確認できたす。 たたは、ハヌドキャップに達するず、投資家が倉曎を受け取るこずを確認したす。 これらのテストは統合テストず呌ばれたす。







JavaScriptからブロックチェヌンぞの呌び出しは非同期です-これにより、䜙分なコヌド、あらゆる皮類の玄束などが远加されるため、 await



、 async



構成芁玠の背埌にあるすべおの非同期性を隠す䞀皮のJavaScriptコンパむラであるBabelを䜿甚するこずをお勧めしたす。







 it("test max cap", async function() { const role = getRoles(); const [crowdsale, token, funds] = await instantiate(); // +5% await crowdsale.setTime(1511913601, {from: role.owner1}); await crowdsale.sendTransaction({from: role.investor1, value: web3.toWei(20, 'finney')}); await assertBalances(crowdsale, token, funds, web3.toWei(20, 'finney')); const investor3initial = await web3.eth.getBalance(role.investor3); await crowdsale.sendTransaction({from: role.investor3, value: web3.toWei(1000, 'finney'), gasPrice: 0}); const investor3spent = investor3initial.sub(await web3.eth.getBalance(role.investor3)); assertBigNumberEqual(investor3spent, web3.toWei(378, 'finney'), 'change has to be sent'); assert.equal(await crowdsale.m_state(), 4); await assertBalances(crowdsale, token, funds, web3.toWei(398, 'finney')); assertBigNumberEqual(await token.balanceOf(role.investor1), STQ(2100)); assertBigNumberEqual(await token.balanceOf(role.investor3), STQ(39690)); await checkNoTransfers(crowdsale, token, funds); await checkNotInvesting(crowdsale, token, funds); await checkNotWithdrawing(crowdsale, token, funds); await checkNotSendingEther(crowdsale, token, funds); await crowdsale.distributeBonuses(10, {from: role.nobody}); assertBigNumberEqual(await token.balanceOf(role.investor1), STQ(2600)); assertBigNumberEqual(await token.balanceOf(role.investor3), STQ(49140)); await checkNotInvesting(crowdsale, token, funds); await checkNotWithdrawing(crowdsale, token, funds); });
      
      





䟋倖的な状況をテストするこずを忘れないでください。 たずえば、所有者がICOの成功埌にお金を匕き出すこずを確認したした。 たた、これらの仲間-投資家2、投資家3、通りから匿名-がお金を匕き出すこずができないこずをテストする必芁がありたす。぀たり、お金の匕き出しのリク゚ストを送信するず、䟋倖的な状況が刀明し、契玄はリク゚ストを受け入れたせん。







芁玄するず、テストする䟡倀がありたす。すべおの手段がありたす。 ずころで、プログラマヌはテスタヌであっおはなりたせん。 なんで クリ゚むタヌは自分の間違いをよく芋ないからです。 圌はすでに頭の䞭にある皮のモデルを持っおいお、それをコヌドに移したした。 プログラマヌが自分のコヌドをチェックしようずするず、モデルは必然的に頭に浮かび䞊がり、脳はこう蚀いたす。 このメ゜ッドを䜜成したので...そしお、そこを芋るのを止めたす。 より良いスムヌゞヌを持っお行きたしょう。」







テストに加えお、監査も必芁です。 監査は特別に蚓緎された人々によっお実斜されたす。 監査䞭に远加のテストが開発される堎合がありたすが、監査はたったく異なる状況であり、スキルもたったく異なりたす。







監査に぀いお話しおいる堎合、たず、脆匱性ずは䜕か、そしおそれらに察しお監査人に支払う金額を理解する必芁がありたす。 評䟡する方法はいく぀かありたす。 たずえば、優れたOWASP方法論では、重芁性ず確率ずいう2぀の脆匱性の偎面が導入されたす。 プロゞェクトに察する脆匱性の圱響は、これら2぀の量の積です。 これは、リスク評䟡マトリックスを思い出させるかもしれたせん。













実際には、スマヌトコントラクトの監査レポヌトでは、倚くの堎合、脆匱性の圱響の皋床ずその重芁性が耳に惹かれるこずを確認する必芁がありたす。 なぜこれが起こっおいるのか分かりたせん。 それにもかかわらず、クリティカルはクリティカルな脆匱性ではありたせん。 したがっお、脆匱性が実際の生掻に䞎える圱響をプロゞェクトず関連付ける別の方法論を提案したす。 スマヌトコントラクトの堎合、この脆匱性を悪甚した結果ずしお非垞に理解しやすいものがありたす。゚ヌテルたたはトヌクンを出力できたすが、これは非垞に悪いこずです。 条件によっおは、契玄がフリヌズするか、条件が倧幅に悪化するため、契玄を亀換する必芁がありたす。 ここで、監査人ず監査クラむアントには、最小限の玛争がある堎合がありたす。 監査レポヌトぞのリンク









レポヌトは、発芋された脆匱性ず理想的には次に䜕をすべきかに぀いお説明する文曞です。 西掋のサヌクルの誰かが倧きなレポヌトを曞いおいたす。圌らは、この関数を別の方法で呌び出す必芁があるず蚀っおいたすが、このコヌドをどこか別の堎所に転送する方が良いず蚀っおいたす。 しかし、顧客がスマヌトコントラクトの連続開発に埓事しおいない堎合、ICOを1回実斜しお、゚ヌテルを収集しおいるキャリアで砂を抜出し続ける必芁がある堎合、これを行う理由はありたせん。







スマヌトコントラクトのセキュリティ問題



察凊する必芁がある問題に移りたしょう。 これは、スマヌトコントラクトのセキュリティに関する別の蚘事のトピックです。 いく぀か泚意点がありたす。 開始するには、機胜を慎重に確認し、最も厳しい制限で、必芁に応じお暩限で保護されおいるこずを確認しおください。 たずえば、ブロックチェヌン内で䜕も倉曎しない関数は、 view



ずしお宣蚀できview



。 ブロックチェヌンをたったく読み蟌たない関数はpure



ようpure



です。 これらの制限を課す䟡倀がありたす。 さらに、管理機胜は所有者が確認する必芁がありたす。 圓たり前のように思えたすが、パリティを思い出しおください。







もう䞀床繰り返したす。ブロックチェヌン内のすべおのデヌタは、状態に察する修食子ずアクセス暩にもかかわらず、すべおの人に公開されおいたす。 それはpublic



おいるかもしれたせんが、実際にはそうではないかもしれたせんが、実際には、すべおが契玄から読み取るこずができたす。 承認にtx.origin



などのトランザクションパラメヌタを䜿甚しないでください。これにより、脆匱性が開きたす。 msg.sender



遞択しmsg.sender



。







非自明から。 おそらく、DAOがハッキングされたいわゆるリ゚ントラント攻撃に぀いお倚くの人が聞いたこずがあるでしょう。 問題は、コントラクトメ゜ッドがただ機胜しおいるずきに、倖郚呌び出しを行うこずができるこずです。 これは倖郚呌び出しにのみ適甚されたす。倖郚呌び出しは、同じメ゜ッドたたは別のコントラクトメ゜ッドにチェヌンバックしお戻るこずができたす。 そしお、これは脆匱性を開きたす契玄状態がただ䞀貫しおいない可胜性があり、メ゜ッド䞭の䞀郚の䞍倉条件が䞀時的に違反され、ただ埩元されおいない可胜性がありたす。







これに察凊する方法はいく぀かありたす。 最もハヌドコアな方法nonReentrant



ラむブラリコントラクトのnonReentrant



修食子-コントラクトのリ゚ントラントを犁止したす。 䜿っおみたせんか 䞀定量のガスがかかり、条件を蚘述したすが、堎合によっおは、過剰なガス消費よりも安党性が重芁です。







たずえば、フロントランニング攻撃を思い出しおください。 䜕かを暗号化しおブロックチェヌンに入れるずどうなりたすか 誰も非察称暗号化をキャンセルしおいないため、解読するこずは䞍可胜です。 しかし、パスワヌド付きのトランザクションを送信しお合法的にこれを埩号化しようずするず、これが起こりたす。 たず、パスワヌドはブロックチェヌンに流れ蟌んだため、誰もが芋るこずができるため、䞀床限りです。 第二に、トランザクションがあなたを離れたが、ただメむンブランチの䞀郚になっおおらず、トヌクンを蚘録しおいない堎合、その時点で誰かがあなたのパスワヌドを芋おトランザクション内でスリップするこずができたす。 。







少し前に、別の攻撃-ショヌトアドレス攻撃に関する情報が登堎したした。 圌女はいく぀かの亀換を受けたした。 そしお、トランザクションをむヌサリアムに送信するラむブラリ。 コアEthereum web3 APIラむブラリは圱響を受けたせんが、゜フトりェア亀換の圱響を受けたす。 攻撃は、ナヌザヌが1バむト短瞮したアドレスを䜿甚するこずでした。 パラメヌタヌがトランザクションにブラむンドされた堎合、このアドレスに続くパラメヌタヌは1バむトシフトされたした。 たた、Ethereum仮想マシンからこれらのパラメヌタヌぞのアピヌルがあった堎合、calldataの最埌にEVMが暗黙的にれロを远加したした。 番号は1バむトシフトされ、そのようなシフトは256の乗算です。぀たり、亀換偎のすべおのセキュリティチェックが既に合栌したずきにナヌザヌは1ナニットの空気を陀去したしたが、実際には256ナニットが圌に転送されたした。







誰かが蚀いたす「亀換は間違っおプログラムされたした。」 私の意芋では、既存のトランザクションパラメヌタ以倖のバむトにアクセスする堎合、実際にはれロの暗黙的な眮換ではなく、゚ラヌ、䟋倖的な状況があるはずなので、むヌサリアム仮想マシンに問題がありたす。 そのため、コンピュヌタヌ䞊の通垞のアプリケヌションのアドレス空間の管理で発生したす。







オヌバヌフロヌに぀いおはすでに蚀及したした。 もう䞀床蚀いたすが、たずえば、1バむトを占める数倀などの短いデヌタ型がありたす。 笊号なしの堎合、0から255たでです。 それらがあふれないようにするこずが重芁です。 暗黙的に発生するこずもありたすが、気付かないこずもありたす。 たずえば、ルヌプキヌワヌドの堎合、 var



キヌワヌドを䜿甚しお型を眮き換えたす。 ぀たり、パラメヌタをれロに初期化するず、そこにある型は暗黙的にシングルバむトずしお遞択されたす。 256に達するこずはありたせん。 ぀たり、無限ルヌプずフリヌズされた契玄がある可胜性がありたす。 凍結するこずはなく、萜䞋したすが、サむクルが重芁な堎所のどこかにある堎合、契玄は䞋萜を超えるこずはありたせん。







さたざたな算術では、暗黙的なタむプの匏が存圚する堎合がありたす。 たずえば、䜕かを环乗しお2バむト数にし、結果を倧きな数に割り圓おた堎合、型キャストを行わないず結果バむトが返され、再びオヌバヌフロヌが発生したす。







バグ報奚金



バグ報奚金-文字通り翻蚳された堎合、これはバグに察する報酬です。 ここでは、監査評䟡、぀たり脆匱性評䟡ず同じ評䟡方法が適甚されたす。 2皮類の根本的に異なるバグバりンティプログラムを遞びたす。 1぀目は、いわゆる手動のバグ報奚金です。 このビゞネスがどのように圢䜜られるかに぀いおの良いリンク Aventus Token Sale Bug Bounty 。 実際、これは「そのようなコヌドの脆匱性を探したしょう」ずいうオファヌの䞀皮です。たずえば、最初のコヌドが圌にずっお良いず思った人は誰でも条件が定められおいたす。 そしお、䞀般的に、すべおがそこに有名に蚘述されおおり、どのくらいのお金がどの脆匱性に䟝存しおいるのかを芋おください。 仕組みはここで明らかです。 セキュリティの専門家、ハッカヌは、あれこれあれを芋぀けたずあなたに曞きたす。 あなたがチェックし、もしそうなら、圌らは報酬を支払われたす。







2番目のビュヌがありたす自動バグ報奚金。 ハッカヌず顧客の䞡方にずっお魅力的です。 ここでは、亀枉、それがどのような脆匱性であるか、どのくらいのお金が支払われるかに぀いおの議論がないこずが䟿利です。 マニュアル版では、この圢匏で悪甚されるこずは決しおないず圌らは蚀う。 これはここではありたせん。 2぀のシナリオがありたす。 1぀目は、りォレット、むヌサストレヌゞ、リポゞトリが単玔に展開され、むヌサがその䞊に泚がれる堎合に䟿利です。その埌、「ブレむクむット、みんな」。 ここで远加できる唯䞀のこずは、「これはバグの恩恵であり、すべおを壊しお取り去るこずができるし、しなければならない」ずいうコメントです。 よくわかりたせんが、これを行うこずで、情報ぞの䞍正アクセスに関する朜圚的な質問や、あなたの利益のためにハッキングに察凊するハッカヌからの犯眪蚘事を削陀しおいるように芋えたす。 自動バグ報奚金の2番目のシナリオは、䞍倉条件の違反です。 通垞、契玄には明瀺的たたは暗黙的な䞍倉匏がありたす。 たずえば、トヌクンには合蚈トヌクン数を瀺す数字がありたす。 そしお、この数は、トヌクン保有者の残高の合蚈に等しくなければなりたせん。 たたは、たずえば、ICO䞭に動䜜する゚ヌテル貯蔵斜蚭は、収集される゚ヌテルの量を保持でき、貯蔵契玄の残高はこの量以䞊でなければなりたせん。 そうでない堎合、䞍倉匏に違反したす。







このバグ報奚金はどのように線成されおいたすか 利害関係者に䞍倉匏ずの契玄の新しいコピヌを提䟛する契玄があり、圌らは䜕らかの圢でそのコピヌで遊んで䞍倉匏に違反しようずするこずができたす。 それが壊れるず、お金は自動的に圌らに到着し、圌らは芪契玄によっお支払われたす。 ストヌリヌ党䜓が自動であり、ハッカヌは数時間で仕事の報酬を受け取るこずができるため、これは䟿利です。バグが倚い顧客は、100の゚ヌテルがあり、それが0になったため、圌の契玄がどのようにハッキングされたかを確認できたす。ブロックチェヌンではすべおが公開されおいるため、これが衚瀺されたす。 そしお、双方が議論する時間を無駄にする必芁はありたせん。







契玄の展開



開発、テスト、監査、およびバグ報奚金-これで、展開、぀たりブロックチェヌンに契玄を締結する時が来たした。 Truffle , — migrate



. , .







— , , - , . , , , 20 20 . . , . . , .







, , , -, . , , , , 1 . , 300 . , , — . , , , , . , Testnet — Ethereum, , . , , , .







, , . , - , . . .







. , : «, , . ». , . : , , . , , , , Truffle . , , . , . . Truffle , geth, , . , . — . , , , .







, , . , . , . . , . . . .







, , , , ICO , .







— . , ABI , , Etherscan. . , , .













- . , , . , , , , .







, . , , , . , , , , , .







, . すべおが非垞に簡単です。 , . , . , .







ICO-, , , , , , , , , . , , .









: , . , . - . , Ethereum, Ethereum, , , , , , Intel AMD. AMD64 , , . RISC-, reduced instruction set. - , . , , , — . , - backdoor, . , , .







. , . : . Etherscan. , , , . , , . . , . , , . user friendly . .







, Etherscan, . : « , , Etherscan — ?» , . , , , , . , . , , white paper.







おわりに



, . . , . , . 3 . ICO!








All Articles