Golang Ethereum: Go を使用してスマート コントラクトを作成する方法
ブロックチェーン テクノロジーの普及は、生活と経済に大きな変化をもたらしました。その中で、イーサリアムはオープンソースの分散型パブリック ブロックチェーン プラットフォームの 1 つであり、開発者はスマート コントラクトを通じてプログラム可能なデジタル資産を実装できます。他の一般的なプログラミング言語とは異なり、Golang はスマート コントラクトの開発をよりシンプルかつ安全にしながら、より高い実行効率と同時実行性を提供します。この記事では、Golang を使用してスマート コントラクトを作成する方法を説明します。
イーサリアムの概要
イーサリアムは、スマート コントラクトと分散アプリケーション (DApp) 機能を備えた、分散型のオープンソースのパブリック ブロックチェーン プラットフォームです。スマート コントラクトは、コードに基づいて記述され、イーサリアム ネットワーク上で展開および実行できる自動実行コントラクトであり、同時にイーサリアムの転送、データ ストレージ、および複雑な論理操作を実現することができ、イーサリアムをブロックチェーンのリーダーにします。開発の重要なプラットフォーム。
Golang は、Go とも呼ばれる非常に人気のあるプログラミング言語です。 2009 年に Google の Robert Griesemer、Rob Pike、Ken Thompson によって開発された、高性能ネットワークと分散システムの構築に使用されるプログラミング言語です。 Go は従来のプログラミング言語と比較して、シンプルさ、セキュリティ、パフォーマンスが高く、同時実行性をサポートしているため、ブロックチェーン分野でも広く使用されています。
Golang のインストールと構成
始める前に、Golang 環境をインストールして構成する必要があります。最新バージョンの Golang インストーラーを公式 Web サイトからダウンロードし、指示に従ってインストールできます。完了後、ターミナルでインストールが成功したかどうかを確認できます。
go version
インストールが成功した場合は、Go バージョンが表示されます。
スマート コントラクトの作成
ここでは、Golang を使用してスマート コントラクトを作成する方法を説明するために、単純なスマート コントラクトを例に挙げます。
まず、go-ethereum プロジェクトを作成します。ターミナルで次のコマンドを実行できます:
mkdir go-ethereum cd go-ethereum
次に、go モジュールを使用してプロジェクトを初期化します:
go mod init go-ethereum
次に、イーサリアムでのスマート コントラクト開発をサポートするための依存関係を追加する必要があります。ここでは go-ethereum パッケージを使用します。これは Ethereum チームによって開発された Go 言語実装であり、スマート コントラクトの開発に豊富な API サポートを提供します。
go get github.com/ethereum/go-ethereum
プロジェクト ディレクトリで、以下に示すように Solidity スマート コントラクト (MyContract.sol) を作成します。
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract MyContract { uint256 value; function setValue(uint256 _value) public { value = _value; } function getValue() public view returns (uint256) { return value; } }
先頭に、SPDX-License-Identifier アノテーションをコントラクトに追加します。ライセンスを指定します。次に、MyContract コントラクトを宣言し、value という状態変数を追加します。 setValue と getValue という 2 つのパブリック関数を定義し、前者は value の値を _value に設定し、後者は現在の値の値を返します。
次に、次のコマンドを使用して、Solidity スマート コントラクトの Go バインディングをプロジェクト ディレクトリに生成します。
abigen --sol MyContract.sol --pkg bindings --out MyContract.go
オプション --pkg は、Go コードのパッケージ名を指定します。 --out 生成される Go コードの出力ファイル名を指定します。 abigen コマンドは、Solidity スマート コントラクトのソース ファイル MyContract.sol を使用して、Go バインディング コード MyContract.go を生成します。
次に、次のコマンドを使用して Go ファイル (main.go) を作成し、その中に次のコンテンツを追加します。
package main import ( "context" "fmt" "math/big" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/ethclient" "./bindings" ) func main() { client, err := ethclient.Dial("https://mainnet.infura.io") if err != nil { panic(err) } contractAddress := common.HexToAddress("0x06857768a9b56c860c89effbeb8ce6c6a46940ef") instance, err := bindings.NewMyContract(contractAddress, client) if err != nil { panic(err) } value, err := instance.GetValue(&bind.CallOpts{}) if err != nil { panic(err) } fmt.Println("Value:", value) tx, err := instance.SetValue(&bind.TransactOpts{ From: common.HexToAddress("0x8c51b77048b5A9A1bcc30158b4859Af247bAd2b0"), GasLimit: uint64(200000), GasPrice: big.NewInt(20000000000), }, big.NewInt(10)) if err != nil { panic(err) } fmt.Println("Tx Hash:", tx.Hash().Hex()) }
先頭で、go を含むいくつかの依存関係をインポートしました。 ethereum パッケージと、abigen ツールを使用して生成した MyContract パッケージ、およびいくつかの標準ライブラリ パッケージ。アプリケーションを起動する main 関数を作成します。
main 関数では、ethclient.Dial メソッドを使用して Ethereum ネットワークに接続し、Infura が提供する https://mainnet.infura.io ノードを指定します。 MyContract をインスタンス化し、コントラクトのアドレスとクライアントを指定します。 GetValue 関数を呼び出して現在の値を取得し、結果をコンソールに出力します。
次に、SetValue 関数を呼び出して値を 10 に設定し、ガス制限とガス価格を指定します。最後に、トランザクション ハッシュを出力します。
これで、次のコマンドを使用してプログラムをコンパイルして実行できます:
go build ./go-ethereum
アプリケーションは Ethereum ネットワークに接続し、MyContract コントラクトのメソッド setValue および getValue を使用して値を設定および取得します。価値のあるもの。
概要
この記事では、Golang を使用して Ethereum スマート コントラクトを作成する方法を学び、abigen ツールを使用して Solidity スマート コントラクト用の Go バインディング コードを生成する方法を示しました。また、スマート コントラクトの作成を容易にする豊富な API サポートを提供する go-ethereum パッケージも使用します。 Golang と Ethereum の組み合わせは、分散アプリケーションの開発に新たな可能性をもたらし、開発者が分散アプリケーションを構築し、Ethereum ネットワーク上でプログラム可能なデジタル資産を実装することが容易になります。
以上がgolang イーサリアムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。