ICOの技術的特城。 開始する







こんにちは、Habr 今日、私の話は、ICOの前埌にEthereumプラットフォヌムでICOを実斜する技術的な経隓に぀いおです。 これたでのずころ、私は少数のプロゞェクトに参加したしたが、すでにいく぀かの技術的背景を集めるこずができたした。 Habrオヌディ゚ンス向けにICOを実斜するための技術的なロヌドマップは興味深いものになるず思いたす。 興味のあるカットをお願いしたす。







クラりドセヌル経枈モデルの準備



それはすべお、クラりドセヌルを垌望する顧客から始たりたす。 タスク「Nトヌクンを発行し、契玄からXのレヌトでそれらを販売する」は非垞に理解しやすく簡単なように芋えたすが、倚くの堎合、「今はわかりたせんが、ICOの前にお知らせしたす」に特定のパラメヌタヌが蚘茉されおいたす。 非垞に頻繁に、顧客は自分のトヌクンに䞎える準備ができおいるものだけを知っおいるが、どのようにそれらを配垃するのか党く考えおおらず、トヌクンの数、日付、販売のための割匕サむズはそのような自由なパラメヌタヌであるず信じおおり、自由にそれらをねじるこずができたす䞀郚の管理者パネルずICOの前倜に契玄を展開したす。 実際、これはそうではありたせん。実際には、ありふれたタむプミスのリスクさえ考慮する必芁がありたす。 zapadloivで䞀床は修正できないスマヌト契玄を扱っおいるこずに泚意しおください。 そしお、い぀かはすべおのナヌザヌの資金をロックする契玄を展開する絶奜の機䌚がありたすたずえば、日付がたちたちです-決しお取埗するこずはできたせん。







たずえば、すべおの関数で次のように蚘述したす。







require(currentTime > icoStartTime);
      
      





したがっお、展開䞭に指定された時間枠倖の契玄ずの操䜜を犁止したす。 この堎合、特に最初からではなく、途䞭で契玄を停止する堎合、展開䞭のタむプミスは非垞に高䟡になる可胜性がありたす。 もちろん、コントラクトコントロヌラヌを提䟛しおいる堎合は新しいコントラクトを組み蟌むこずができたすが、投資家の前で䞍泚意で䜜られた独自の枠を修正する必芁がありたす。 そしお、あなたがあなたの仕事を芳察し、あなたが些现に日付を混同したそれらは、圌らの結論を匕き出したす。







倚くのモデルには、ボヌナスず玹介プログラムに関する埮劙なポむントがありたす。 玹介プログラムは、あるナヌザヌから特定のシヌクレットが提瀺されたずきに、別のナヌザヌがトヌクンにボヌナスを受け取る堎合に特に圹立ちたす。 このようなこずは、1぀のサヌバヌでトランザクションの順序が決定され、すべおのナヌザヌのデヌタベヌスがある通垞のシステムでうたく機胜したす。 このようなプログラムは、スマヌトコントラクトで実装された堎合









远加の蚈算は朜圚的な脆匱性であり、スマヌトコントラクトの算術オヌバヌフロヌは珟実です。







したがっお、経枈モデルの開発は最も重芁な最初のステップです。 特定の開発タスクが玙の䞊で修正されるずいう事実で終わりたす。 そしお、すべおの定数を䞀床に取埗しおみおください-開発時にすぐに䜿甚しおください。 蚘述する必芁があるコヌドの90は契玄テストであり、その数は期間数、割匕などによっお異なりたす。顧客がGitHubでの契玄の公開の前倜に来お、1幎間ICOを実斜するこずを決めた堎合3぀の期間がある以前のオプションの代わりに割匕を0.1削枛するために毎日-すべおのテストを曞き換える必芁がありたす。







私に関しおは、投資家ず受益者に関するナヌザヌストヌリヌの圢匏でタスクの送信を開始するように顧客に䟝頌するのが最善です。 9月1日の仮想投資家は、N゚ヌテルの量を契玄の䜏所に振り替え、Mトヌクンを受け取りたす。 9月2日、受益者は個人アドレスから指瀺を送信しお、トヌクンのレヌトを倉曎し、1぀のETHでXトヌクンを発行したす。 9月3日、2番目の投資家はN゚ヌテルを送信し、異なる量のトヌクンを受け取りたす。 3番目の投資家はN゚ヌテルを送信したすが、トヌクンはなくなったため、残りのトヌクンを受け取り、空䞭の倉化が圌に返されたす。 䜕らかの方法で、顧客からこのようなストヌリヌを絞り出しお、同じこずの意味を正確に理解しおください。







最初の段階の時間を事前に眮きたす。 クラむアントず䞀緒に5〜6時間座っお、このような集たりをさらに数回繰り返しお、コンセンサスを埗るこずはできたせん。 すべおを正しく効率的に行う堎合-最初の実りのない䌚議の埌、クラむアントに慎重に考え、すべおの偎面を最初に数日間圌のチヌムず䞁寧に䟝頌しおから、開発にお金ず時間を費やすこずはおそらく䟡倀がありたす







さお、最初のセクションを終了したしょう。経隓豊かな開発者にずっおは、「良い結果が埗られないxs」ずしお知られおいたす。







スマヌト契玄の開始を想像するこずさえできない堎合



少なくずも1぀の契玄を既に展開しおいる堎合は、この小さなセクションをスキップしおください。これは、契玄を開始するこずの本質を簡単に説明するもう1぀の詊みです。







デプロむは次のずおりです。 スマヌトコントラクトコヌドを含む非垞に倧きなトランザクションをむヌサリアムクラむアントから送信しおいたす。 Ethereumネットワヌクに次のように䌝えたす。「スマヌトコントラクトを特定のアドレスに眮きたす。 このアドレスを䜿甚しお、ナヌザヌは契玄にアクセスしたす。」 自分のバヌゞョンのサむトをむンタヌネットに投皿しおいるようで、特定のアドレスで機胜し始めたす。 別のコントラクトをデプロむされた堎所に曞き換えるこずはできたせん。コヌドは修正されたせん。別のアドレスに新しいバヌゞョンのコントラクトを配眮するこずのみが可胜です。 ネットワヌクの通垞のメンバヌずしおの契玄には、独自のブロヌドキャスト残高があり、「自動りォレット」の䞀皮であるブロヌドキャストを送受信できたす。 単に圌にお金を送ればもちろん、そのようなシナリオが契玄で芏定されおいる堎合、圌の残高は増加したす。 10 ETHを送信し、察応する方法で契玄に違反しない堎合、契玄の残高で+10 ETHを受け取りたす。 スマヌトコントラクト内のクラりドセヌルコントラクトの堎合、ETHを受け入れる関数は、受信した金額に珟圚のトヌクン亀換レヌトを乗算し、察応するトヌクン数をそれを送信したアドレスに割り圓おたす。 実際、このアドレスが非垞に倚くのトヌクンを獲埗するために必芁な情報をブロックチェヌンに曞き蟌むだけです。







たずえば、ICOで発行されるトヌクンの数は、プログラムデヌタだけです。 より具䜓的には、トヌクンの残高は連想配列の倀であり、キヌはむヌサリアムのアドレスです。 ある参加者から別の参加者ぞのトヌクンの転送は、特定のアドレスに配眮されたスマヌトコントラクトのtransfer



メ゜ッドぞの呌び出しず芋なすこずができたす。これは、あるアドレスからトヌクンの䞀郚を受け取り、別のアドレスに远加したす。 マむナヌは、プログラムメモリ内のこれらの倉曎を次のブロックに曞き蟌みたす。次のブロックは、ナヌザヌからコントラクトずトランザクションに入っおきたトランザクションを実行したす。







この分野のプログラミングの特城の1぀は、デヌタの宣䌝です。 スマヌトコントラクトの機胜に転送するデヌタは開いおいるこずを忘れないでください。 たずえば、単玔な方法で「岩、はさみ、玙」を挔奏するだけで、あなたの遞択を愚かに契玄に送るこずはできたせん。 これが行われた堎合、前のトランザクションをスパむし、芋たものを考慮に入れお自分自身を送信するこずが可胜になりたす。 したがっお、懞賞、オヌクションなどのプログラミングアルゎリズムは垞にマルチパスです。 たず、すべおの関係者が決定のハッシュを送信する必芁がありたす。それ以降は、決定自䜓を公開したす。







別の問題は、トランザクションの順序です。 実際、鉱倫はどのトランザクションが来たかを確認し、より倧きな手数料で独自のトランザクションをすばやく生成できるため、元のトランザクションの䞊のブロックに配眮できたす。 したがっお、分散サヌビスずクラりドセヌルの手順を蚭蚈するずきは、これらの点に泚意する必芁がありたす。







むヌサリアムスマヌトコントラクト開発の技術的偎面



Ethereumブロックチェヌン䞊にレむアりトされた契玄のコヌドは、誰でも利甚できたすが、予玄が必芁です。 実際、「create_contract」トランザクションが閉じられた埌、ブロックチェヌンでは契玄のバむトコヌドのみが利甚可胜になりたす。これを矎しく衚瀺するには、たずえば、このように、契玄の怜蚌に合栌する必芁がありたす。 そしお、これは䞀般に、かなり退屈な手順です。 特別なツヌルがなければ、1日に数十件の契玄しか成功したせん。 たあ、投資家は、コヌドを読むこずができない未怜蚌の契玄にお金を投げ入れたくないので、怜蚌の必芁性は明らかです。







スマヌトコントラクトの゜ヌスの公開は、誰でもコントラクトのむンタヌフェヌス党䜓を芋るこずができ、それがだたされないこず、トヌクンを奪われないこず、受益者に過倧請求しないこずを確認できるこずを意味したす。分散スマヌトコントラクト実行システムが䜜成される理由を忘れないでください-これは、実行が吊定できないような方法でのプログラムコヌドの単なる公開配眮です。 したがっお、契玄に「興味深い」機胜があり、任意の数のトヌクンを発行したり、あるアドレスから別のアドレスに任意の数のトヌクンを転送したりするず、すべおの投資家に䞍快な質問が生じたす。 トヌクンでの操䜜は非衚瀺にできたせん。これは、コントラクトで実行されるすべおのトランザクションずアクションがすべお゚ヌテルブロックチェヌンに蚘録されるためです。







そのような機胜をいく぀か提䟛したす。 契玄のコヌドを読んでいる投資家に正圓な質問を匕き起こし、プロゞェクトの信頌性を倧きく損なう可胜性がありたす。







機胜1 -ICO埌にトヌクンが再発行されたす。 ホワむトペヌパヌで、ICO埌のトヌクンの再発行を正圓化しおいない堎合、ICO期間埌に機胜する任意のアドレスにNトヌクンを䜜成する機胜は、受益者がい぀でも100500トヌクンを䜜成し、取匕所に捚おる機䌚です。 あなたのクラりドセヌルぞの自信はこれには加わりたせん。







特城2-マルチ眲名なしの資金の匕き出し。 このプロゞェクトでは、すべおの゚ヌテル通貚ずその他の通貚をりォレットに远加する必芁がありたすかその匕き出しは単䞀のコンピュヌタヌから可胜ですか そしお、ここでのポむントは、受益者の良識やむヌサリアムのセキュリティですらありたせん。 新しい教䌚のために資金を集める教皇でさえ、脆匱なラップトップを䜿うこずができたす。 たた、ICOの堎合、資金が集められたアドレスぞの秘密鍵を䜿甚したコンピュヌタヌぞの攻撃が成功するず、攻撃者が数癟䞇人になるこずがありたす。 21䞖玀ぞようこそ。暗号の開発により、PCはハッカヌにずっお非垞に魅力的なタヌゲットになりたす。 そしお、受益者がそれに぀いお考えず、䜏所にマルチ眲名を提䟛しなかったずいう事実も、投資家の間で耇雑な感情を匕き起こす可胜性がありたす。







ずころで、あなたが知っおいるようにBitcoinマルチシグアドレスからのBTCの撀回ずAir䞊のマルチシグ契玄からのETHの出力は技術的に非垞に異なっおいたす。 ビットコむンでは、マルチシグアドレスからBTCを匕き出すために、事前にいく぀かの眲名を䜿甚しおトランザクションを䜜成し、すべおの眲名コンピュヌタヌをフラッシュドラむブで散歩する必芁がありたす。 たた、むヌサリアムでは、たずネットワヌク䞊にマルチシグ契玄を配眮し、ETHが衚瀺された埌、必芁な数のコンピュヌタヌから耇数のトランザクションを送信する必芁がありたす。 ぀たり、オン゚ア眲名は別々のトランザクションで送信され、ETHは正確に正しい数の眲名たずえば3぀のうち2぀が到着した時点で事前に指定されたアドレスに送信されたす。







事前に数日以内にマルチシグアドレスを凊理しおください。 Ethereum甚のEthereum WalletやBitcoin甚のElectrumなどのさたざたなクラむアントからそれらを䜜成するこずは簡単な䜜業ですが、アドレス自䜓に泚意する必芁がありたす-マルチシグの䜜成は本圓に簡単ですが、マルチシグコンピュヌタの少なくずも1぀に぀いおそしおそれは動物園かもしれたせんブランドの新しい所有者のMacbook、重量が7.5キロの叀代のマストドンラップトップ、5幎前にIT郚門にランダムに蓄積された新しいラップトップ、完党に最新のむヌサリアムノヌドがあり、起動時に新しいブロックをすばやく、数分で凊理し、そうでなければ、あなたは マルチシグクラむアントには実際の数倀は衚瀺されたせん。







特城3 -GitHubに、ICOの前に合理的な期間にレむアりトされた契玄コヌドが存圚しない。 GitHubでのアクティビティから、ICOの前倜にあなたがひどく修正された契玄をコミットしたこずがわかるなら、それは「ひざの䞊で」準備されたず信じる正圓な理由がありたす。 これは、ほずんどの堎合、監査を行っおいないか、監査埌に䜕かをサブプログラムしおいない可胜性があり、朜圚的に新しいホヌルを远加しおいるこずを意味したす。 理想的な䞖界では、ICOの1か月前に契玄コヌドを公開したす。その埌、問題なくコヌドを監査し、バグバりンティを宣蚀できたす所有者は秘密の歊噚を持っおいるため、ICOのために特別に䜜成されたした-非垞に寛倧に配垃できるトヌクン 。







ブロックチェヌンで公開された怜蚌枈みコヌドは、ICOの数日前に衚瀺されるはずです。 䞀般に、あるアドレスに倧量のむヌサを送信する堎合、このアドレスをむヌサスキャンで調べお、これが同じクラりドセヌル契玄であるこずを確認するずよいでしょう。 開発者であろうずなかろうず、䞀般的には、誰もが契玄コヌドを確認するこずをお勧めしたす。 良い契玄では、理解できる通垞のコメントがあり、ほずんどの開発者にずっお蚀語自䜓は非垞に明確です。







特城4-トヌクンの再発行、所有者のコマンドによる匷制送金など、興味深い远加機胜゚ヌテルを拟うためにい぀でも圌女を呌び出したす。 通垞、クラりドセヌル期間䞭は、むヌサヌ出力ずトヌクンを䜿甚した操䜜の䞡方がブロックされたす。







䞀般的に、あなたが理解するような特城を圢成する原理。 これは、新しいデゞタル経枈に぀いお話すずきの意味です。 ここでは、開発者は必芁ありたせんが、投資家を欺くこずができる機胜ず有甚な機胜を理解しおいる投資家です。 䞀般的に、開発者-正盎なプログラム、Fintechチヌムを理解しおいる開発者-は、Solidityにゆっくりず座りたしょう。







開発の問題に぀いお議論しおいるので、いく぀かの契玄を開始した埌、契玄で手動で蚭定されるタむムスタンプに関する新しい劄想を远加したす。 事実、tsの間違いを犯す可胜性は、定数の蚭定の正確さに぀いおどれだけ話しおも、非垞に高いずいうこずです。 たた、プロゞェクトの所有者があなたに日付を送信するこずもありたす。あなたは深倜であり、䞀般的に再確認するのを嫌がるので、あなたはそれらを契玄に固執するだけです。 コピヌされたコヌドでタむムスタンプを怜玢し、日付の゜ヌトされたリストの圢匏で衚瀺するJSヘルパヌも盲怜化したので、チェックする方が䟿利です。 ここでの゚ラヌの代償はずお぀もなく高い。 3番目のクラりドセヌル割匕期間のどこかに契玄が突然行き詰たるか、クラりドセヌルを閉鎖するず、非垞に䞍快になりたす。







開発の技術的特城に぀いおもう少し。 完党なブロックチェヌンで正しい゚ヌテルりォレットを䜿甚するには、SSDを搭茉した通垞のコンピュヌタヌが必芁です。 過去に誰かが䜕かを倉曎しお゚ヌテル党䜓を盗んだず思うので、ブロックチェヌン党䜓が必芁ではないこずを説明したすが、クラりドセヌル䞭にネットワヌクず完党に同期され、新しい高速を受信するノヌドがありたすブロック。 結局のずころ、プロゞェクトの料金の珟圚のステヌタスを確認し、䜕か問題が発生した堎合に察応する必芁がありたす。 たた、SSDがなければ、コンピュヌタヌは非垞に長い間ブロックチェヌンに「远い぀く」こずができたす。 技術的な芳点から芋るず、これは、スマヌトコントラクトを怜蚌するために、クラむアント゜フトりェアがチェヌンの任意のブロックを䜿甚する必芁があるこずが倚いためです。 そしお、このような擬䌌ランダム読み取りは、読み取りヘッドを垞に再配眮する必芁があるため、埓来のHDDにずっお最悪のパタヌンです。 しかし、SSDにずっお、そのような読曞は趣味です。 さらに、プラスは、ブロックチェヌン内のブロックが倉曎されないずいう事実の圹目を果たしたす。これは、少数の曞き換えを意味し、理論的にはSSDが倧奜きです。 したがっお、ここでのHDDずSSDの違いは非垞に深刻です。 Ethereumクラむアントの操䜜パタヌンでは、ディスクキャッシュも簡単ではないようです。これは、読み取りブロックが再び必芁になるこずはたれであり、ここでのキャッシュは特に効率的ではないためです。 これはすでに䞡方のタむプのドラむブに適甚されたす。







さらに、契玄コヌドを倉曎しおはならないず蚀ったずき、私たちはもちろん完党に誠実ではありたせんでした。 実際、そのような機䌚が生たれおいたす。 これを行うには、メむンのコントラクトコントロヌラヌを䜜成したす。これは、眮き換えが必芁なコントラクトのアドレスを栌玍する䞀皮のプロキシです。 契玄の内郚アドレスの倉曎を蚱可するメ゜ッドもちろん所有者のみが䜿甚可胜があり、ナヌザヌは匕き続きコントロヌラヌにトランザクションを送信するため、叀い契玄ではなく新しい契玄に送信されたす。 䞀般に、スマヌトコントラクトの倚かれ少なかれ耇雑なシステムは、コントロヌラヌコントラクトなしでは完党ではありたせん。 これに぀いおは他の蚘事で詳しく説明したす。 投資家の芳点から芋るず、プロキシ契玄の歎史は、䞀方では良いようです。なぜなら、もし圌らが間違いを芋぀けたら、開発者は契玄を眮き換えるこずでそれを修正できるからです。 「より友奜的なバヌゞョン」のための資金の早期匕き出し。 さお、ヒヌプには、通垞のように、特にある契玄が別の契玄を匕き起こすおよびここに倚くの興味深い脆匱性が存圚する領域での䞀般的なスキヌムの耇雑さは、朜圚的な脆匱性を持぀より倚くの堎所に぀ながりたす。







あなたが顧客である堎合、開発者から開発されたスマヌトコントラクトを期埅しお静かに腹を立おたす。圌らはあなたに合蚈100の重芁な行の3぀のファむルを䞎え、「私たちはすべおです」ず蚀うので、あなたは正しく怒っおいたす。 実際、実際には倚くのコヌドはありたせんが、実際にはそれを芋るのではなく、テストを芋るべきです。 クラりドセヌルスクリプトの開発に぀いお語るのは、その量ず質です。 スマヌトコントラクトの開発では、テストはオプションではなく、開発の必須郚分です。 このような゚ラヌが発生するため、通垞、テスト駆動開発が普通のこずを曞く唯䞀の方法です。 特に所有者がいく぀かの定数を予期せず倉曎するこずに決めた堎合、期間の境界、割匕の倉曎に関連する最も愚かで迷惑なバグをキャッチするのに圹立぀テストです。







Webマズル開発



クラりドセヌルには、オン゚アず「残りはすべお束葉杖」の2皮類がありたす。 顧客がオン゚アの料金に制限した堎合、開発者は満足し、セキュリティ問題IMHOが80〜90枛少したす。 実際、トヌクンの堎合クラむアントが残高を確認しおトヌクンをやり取りするだけでよい堎合、ネットワヌククラむアントりォレット自䜓は完党に機胜する個人アカりントであり、自分でプログラムしたものよりもはるかに匷力な保護を備えおいたす。 取匕履歎ずバックアップをすぐに入手できたす。 別の非垞に重芁なプラスは、この堎合、クラりドセヌルペヌゞの゜ヌスが次のようになるこずです。







 <html><h1>0x2bd1f12269c1ff80042c8d354bba4c1ca52e2061</h1></html>
      
      





, , , ; , ETH. , . , , , -, . html — , DDoS' , — - ( + ) ( ). , — . , , - — .







owner (, , , , Ethereum) — , . BTC.







, BTC. BTC- ETH-, . Ethereum ETH-, , - , . , , Ethereum, MyEtherWallet -. , , JavaScript , , . , , , , . , , ?







, , , . BTC-, . , ETH- , ( , ). BTC- , BTC . , , , : , — .







, - . BTC: , , , .







offline - BTC (LTC, DASH . .) , . — , Ethereum ( ), token-contract , mint(address addr, uint amount)



, ETH- addr



amount



-. cron- , -, , ; VISA MasterCard, .







crowdsale



, - web-, , «» crowdsale. ICO . — , , . — . , ICO, : . , ICO, : , copy-past, DDoS- crowdsale.







crowdsale Ethereum, : — SQL-, user-supplied — XSS. — Ethereum Wallet.







DDoS crowdsale — . , «shut up and take my money», - , , , , 133 ETH (~40$):







https://etherscan.io/address/0x5d3f32f4b2e99fb79d2f6a1cbf3aa7390f8fc751







crowdsale — . , - Cloudflare, . . , DDoS . , Cloudflare: , , , .







fallback- — / . , , , DDoS, , . , , ( 04:30 ), . , SMM — . , ( -), crowdsale-, -, - , - , , .







— , , ICO « -»: - Parity ( Security Alert 2017-11-08 ). -, , «» ( selfdestruct()



) , -. , , 150M . , ICO, , . Parity — , , , , , .







crowdsale- owner', . web- , , ICO. , . , , , , .







crowdsale



ICO , , . ICO , . ICO , , . , , - . cron-, , crowdsale:







 wget -O- https://myico.com | fgrep '<h1>0xTRUE_CROWDSALE_ADDRESS</h1>'
      
      





, ICO — . , ( , etherscan) — . — , ( ICO) — , , .







結論



, ICO - . , , , . , .







, , .








All Articles