あなたの最初のスマートコントラクトを書く方法は?



スマートコントラクト開発の基本を学び、最初のスマートコントラクトの作成を開始します。スマートコントラクトをテストする方法もわかります。

の中に 、スマートコントラクトとは何か、さまざまなスマートコントラクト言語、およびスマートコントラクト開発環境をセットアップする方法について学習しました。この記事では、最初のスマートコントラクトを構築する方法を学びます。使用しますスマートコントラクトを開発およびテストするためのRemixIDE。

このスマートコントラクト開発チュートリアルでは、以下のトピックについて説明します。





スマートコントラクトの構築

このブログシリーズの一部として、簡単な注文書のスマートコントラクトが開発されます。このシリーズが進行し、堅牢性プログラミング言語の新しい概念が導入されるにつれて、発注書のスマートコントラクトは進化し、改善されます。



スマートコントラクトの構造

Solidityスマートコントラクトは、本質的に、以下のコレクションです

  • データ —契約の現在の状態を維持します
  • 関数 –ロジックを適用して契約の状態を遷移します

Solidityスマートコントラクトは標準構造に従います。スマートコントラクトは次のステートメントで始まります



プラグマディレクティブ

「pragma」キーワードを使用して、特定のコンパイラ機能またはチェックを有効にすることができます。以下のステートメントは、ソースファイル(スマートコントラクト)が0.4.0より前のコンパイラーおよび0.6.0より後のコンパイラーバージョンでコンパイルされないことを定義しています。この宣言により、新しいコンパイラバージョンが導入されたときに意図しない動作が導入されないことが保証されます。

プラグマの堅牢性> = 0.4.0<=0.6.0 

契約宣言

契約は、キーワード「契約」を使用して宣言されます。これは、「PurchaseOrder」という名前で識別される空の契約を宣言します。

契約PurchaseOrder {}

契約に関連するデータを保存する

すべての契約または一般的な用語では、すべてのプログラムがいくつかのデータを保存する必要がある場合があります。プログラムにデータを追加すると、ある程度の柔軟性が得られます。プログラム内のハードコードされた値からユーザー提供の値に移行することは重要な機能です。変数を使用すると、データの保存、データのラベル付け、データの取得、およびデータの操作を行うことができます。

スマートコントラクト開発:変数の導入

堅実では、変数には2つのタイプがあります

  1. 値のタイプ: これらのタイプの変数は値によって渡されます。つまり、関数の引数として、または割り当てで使用される場合は常にコピーされます。例:整数、ブールアドレスなど。
  2. 参照型: これらのタイプの変数は複雑なタイプであり、参照によって渡されます。これらの変数は256ビットに収まらず、コピーにはコストがかかるため、慎重に管理する必要があります。

スマートコントラクトへのデータの追加

コントラクトにデータ変数を追加しましょう。すべての発注書には、それに関連付けられた製品の数量が必要です。データ型が整数または数値になる変数product_quantityを追加しましょう。

Javaサンプルコードのコマンドライン引数

ここで紹介する変数は符号なし整数であり、uint256で表されます。ここで、256は256ビットのストレージを意味します。

  • U- 符号なし (このタイプは正の整数のみを表すことができ、正と負の整数を表すことはできません)
  • INT –整数
  • サイズが256〜256ビット
  • uint256に割り当てることができる最小値は0です
  • uint256に割り当てることができる最大値は2 ^ 256-1 [非常に大きい数]です。

製品数量は正の値にすぎず、現在の仮定では、製品数量の非常に大きな値に対応する予定です。

宣言された「product_quantity」変数は契約状態の一部であるため、契約スペースに永続化または格納されます。現在、この変数はデフォルトで値0になります。

契約PurchaseOrder {uint256 product_quantity}

コンストラクターの定義

コンストラクターは、コントラクトがデプロイされるときに呼び出されます。コンストラクターは、いくつかの値でコントラクトを初期化します。現在のシナリオでは、契約が展開されるときに製品数量が100に設定されます。パラメータ化されたコンストラクタは、変数を渡し、渡された値を使用してproduct_quantityを初期化することによって作成することもできます。

ここで注意すべき重要な点は、コンストラクターに関連付けられたアクセス修飾子「public」です。 publicキーワードは、誰でもこの関数にアクセスできることを指定します。これは制限された関数ではありません。

コンストラクター()public {product_quantity = 100}

関数の追加

プログラムをインタラクティブにする関数を追加しましょう。機能は、プログラムに追加できる制御された機能です。すべての関数の前にキーワード関数があります。全体として、これは関数宣言がどのように見えるかです「」 関数 」。

関数を取得

どのプログラムでも、最も一般的な要件の1つは、格納されている値を読み取ることです。次のコントラクトでは、「product_quantity」値を読み取る必要があります。この機能を提供するために、読み取り関数または取得関数が追加されています。この関数では、保存された値を操作するのではなく、保存された値を取得するだけです。

ここで、get関数(get_quantity)を分解してみましょう。

番号。 キーワード
1 get_quantity(){パラメータは渡されません}
2 公衆{誰でも関数にアクセスできます}
3 見る{関数がコントラクトの状態を読み取るだけで、コントラクトの状態を変更しないことを意味します。したがって、表示します}
4 uint256型の変数を返します{関数によって返されるものを定義します}
function get_quantity()public view returns(uint256){return product_quantity}

セッター関数

データの読み取りは必要であり、前のセクションで完了しましたが、ほとんどのシナリオでは、データの書き込み/更新機能も必要です。この特定の機能は、セッター関数を追加することによって提供されます。この関数は、入力パラメーターの形式でユーザーから値を受け取ります。ユーザーによって関数に提供された値を使用して、変数「product_quantity」の値が書き込まれ、更新されます。

集合関数(update_quantity)を分解してみましょう

SASプログラミングは何に使用されますか

製品数量の値を更新する関数を追加する

番号。 キーワード
1 update_quantity(uint256値){タイプuint256のパラメータ値が渡されます}
2 公衆{誰でも関数にアクセスできます}
3 関数によって状態が更新されるため、不要です
4 uint256型の変数を返します(関数によって返されるものを定義します)
function update_quantity(uint256 value)public {product_quantity = product_quantity + value}

これらすべてをつなぎ合わせると、全体的な契約は次のようになります。

プラグマの堅牢性> = 0.4.0<=0.6.0 contract PurchaseOrder{ uint256 product_quantity //state variable /*Called with the contract is deployed and initializes the value*/ constructor() public{ product_quantity = 100 } // Get Function function get_quantity() public view returns(uint256){ return product_quantity } // Set Function function update_quantity(uint256 value) public { product_quantity = product_quantity + value } } 

スマートコントラクトの展開

スマートコントラクトをテストする時が来ました。このスマートコントラクトをテストするために、 リミックスオンラインIDE

Remixはのためのオンライン遊び場です イーサリアムスマートコントラクト 。 Remixは完全にブラウザベースです。 Remixは、スマートコントラクトを作成できるオンラインIDE(統合開発環境)を提供します。 Remixは、オンラインのSolidityコンパイラ機能を提供します。 Remix IDEのスマートコントラクトは、特定のコンパイラバージョンを使用してシームレスにコンパイルできます。

Remixは、スマートコントラクトをすばやくテストする機能も提供します。

Remixは、ローカルマシンにインストールすることなく、スマートコントラクトの開発とスマートコントラクトの単体テストを開始するための完全なツールセットを提供します。開発者はインフラストラクチャについて心配するのではなく、スマートコントラクトの作成に集中する必要があるため、これは堅実さから始めるのに非常に役立ちます。

Remix IDEで必要なのは、スマートコントラクト開発を開始するためのブラウザーとインターネット接続だけです。スマートコントラクトのアイデアの迅速な開発、テスト、および検証。

Remixは最近UIをアップグレードしました。

Remix-UI-Smart-Contracts-Edureka

上の画像で強調表示されているファイルアイコンをクリックすると、ファイルエクスプローラーが開きます。

  1. プラスアイコンをクリックすると、新しいファイルを作成できます。ファイルにPurchaseOrder.solという名前を付けます。
  2. これにより、PurchaseOrder.solという名前の空のファイルが作成されます。このファイルをクリックして開きます。
  3. 契約全体をPurchaseOrder.solにコピーして貼り付けましょう。
  4. 2番目のアイコンをクリックすると、左側のメニューのファイルアイコンのすぐ下に、Solidityコンパイラオプションが表示されます。
  5. [コンパイラ]ラベルで、コンパイラのバージョンを選択します。現在選択されているバージョンは0.5.8です。
  6. コンパイラバージョンの選択後、「CompilePurchaseOrder.sol」をクリックします。これにより、スマートコントラクトがコンパイルされます。

7.スマートコントラクトが正常にコンパイルされたら、[コンパイルの詳細]ボタンをクリックすると、次の詳細が表示されます。コンパイル後、2つの重要な情報が利用可能になります

    • ABI –アプリケーションバイナリインターフェイス。これは、スマートコントラクトで公開されているすべてのメソッドとメソッドのメタデータの詳細を示すjsonファイルです。これについての詳細は、後続のブログで説明されます。
    • バイトコード– EVM(Ethereum仮想マシン)操作コード、スマートコントラクトロジックはコンパイル時にバイトコードに変換されます。

8.スマートコントラクトをテストするには、スマートコントラクトを展開する必要があります。スマートコントラクトをデプロイするには、コンパイルアイコンの下にある左側のメニューの次のアイコンをクリックします。次の画面が表示されます。スマートコントラクトをテストするには、スマートコントラクトを展開する必要があります。スマートコントラクトをデプロイするには、左側のメニューのコンパイルアイコンの下にある次のアイコンをクリックします。次の画面が表示されます。

展開オプション

展開画面には、いくつかの選択肢があります。それらを1つずつ見ていきましょう。

  • 環境:これは、Amazon、Flipkart、Newegg(これらはすべてオンライン小売業者)のいずれかからラップトップを購入することを選択するのと同様のオプションと考えることができます。要件に基づいて、どこから購入するかを選択します。同様に、Remixの場合、スマートコントラクトを展開してスマートコントラクトをテストするオプションがあります。環境ラベルの横のドロップダウンには、3つの選択肢があります
    • JavaScript VM –ローカルEthereumシングルノードがブラウザーメモリでスピンアップされ、トランザクション(デプロイメント、関数の呼び出し)に使用できる5つの事前に資金提供されたテストアカウントを提供します
    • 注入されたWeb3提供–これはMetaMaskに依存しています。メタマスクはブローカーや仲介者のようなもので、Webアプリケーションがスマートコントラクトと対話できるようにします。メタマスクは、IDを管理し、イーサリアムネットワークに送信されるトランザクションに署名する機能を提供します。この仲介者または3rdパーティは、スマートコントラクトが展開されるブロックチェーンネットワークを決定するための支援を提供します。
    • Web3プロバイダー–ローカルEthereumノードを実行していて、RPCエンドポイントが使用可能な場合、このオプションを使用できます。スマートコントラクトはローカルのイーサリアムノードにデプロイされます。
  • アカウント:この情報は、選択した環境に基づいて入力されます。例えば。 JavaScript VMは、5つの事前に資金提供されたテストアカウントを提供します。 Web3プロバイダーとInjectedWeb3の場合、事前に資金が提供されたテストアカウントは提供されません。
  • ガス制限:これは、イニシエーターがトランザクションに費やすことができるガスの最大量を定義します。これは、無限ループ状態から保護し、無限ループ状態の場合にアカウントのすべての資金を使い果たす場所です。
  • 値:スマートコントラクトの展開中に送信する必要がある可能性のある値。これはオプションの値です。

コントラクトをデプロイするには、JavaScript VMオプションを選択し、アカウントのドロップダウンから最初のアカウントを選択し、アカウントの残高(100エーテル)をメモします。

表示されるスマートコントラクト名がPurchaseOrderであることを確認し、デプロイをクリックします。発生する主なアクション

  1. アカウントの残高が100エーテルから99.999999エーテルに変更され、差し引かれる金額はスマートコントラクトを展開するためのトランザクションコストです。
  2. デプロイされたコントラクトの下に、スマートコントラクトの新しいタイルが表示されます。これは、次のような新しいスマートコントラクトのアドレスも提供します(0x692a70d2e424a56d2c6c27aa97d1a86395877b3a
  3. コンソールウィンドウに次の情報が表示されます
    1. トランザクションハッシュ–契約の展開を一意に識別します
    2. 取引コスト
    3. 契約住所

展開された契約との対話

  1. デプロイされたコントラクトでは、次の2つの対話方法がupdate_quantityとget_quantityで使用できます。
  2. これらの相互作用方法は両方とも、「注文書」契約で定義されている公開方法です。
  3. 数量の更新「update_quantity」メソッドには入力パラメーターが必要であるため、入力ボックスが必要です。
  4. 数量の取得「get_quantity」メソッドは、product_quantityの値を取得します。
  5. get_quantityが呼び出されたときに何が起こるかを確認してみましょう。コンストラクターで初期化された戻り値100が表示されます。これにより、トランザクションが発生することはありません
  6. update_quantityを呼び出し、入力として30を指定しましょう。これにより、トランザクションが発生します

簡単に言うと、コントラクトの状態への書き込み操作を引き起こす(つまり、コントラクト変数を変更する)操作はすべてトランザクションになります。

Javaで数値を逆にする方法

コントラクトの状態を読み取るだけの操作では、トランザクションは発生しません。

スマートコントラクト開発の結論

これで、私たちは最初のスマートコントラクトを作成しました。スマートコントラクトの展開からトランザクションの開始まで、スマートコントラクトをテストするために必要なことを確認しました。

スマートコントラクト開発シリーズの続きである次のブログでは、スマートコントラクトの展開についてさらに深く掘り下げて、堅牢性の基礎についてさらに深く掘り下げていきます。

それで、私はこれを結論付けます スマートコントラクト 開発ブログ。このブログを楽しんで読んでいただき、参考になったと思います。

スマートコントラクトを学び、ブロックチェーンの領域でキャリアを築き、イーサリアムプログラミングの専門知識を習得したい場合は、ライブオンラインに登録してください ここでは、24時間365日のサポートが付属しており、学習期間全体をガイドします。

質問がありますか? 「スマートコントラクト開発」のコメントセクションにその旨を記載してください。早急にご連絡いたします。st。