イーサリアムはスマート コントラクトを構築、コンパイル、展開します
イーサリアムはスマート コントラクトを構築、コンパイル、展開します
同社は nft プロジェクトを構築する予定であるため、centos と ubuntu で Ethereum プライベート チェーンを構築しようとしますが、すべて成功し、truffle を使用してコンパイルおよびデプロイできます。以下に、遭遇した問題とその解決策を記録します。最初にイーサリアムのアカウントと契約を確認することをお勧めします
。
セントスビルド
- 関連する依存関係をインストールする
yum update -y && yum install git wget bzip2 vim gcc-c++ ntp epel-release Nodejs Tree -y
- インストールパッケージをダウンロードします。ここで必要なバージョンを選択できます https://geth.ethereum.org/downloads/ 、リンクを wget にコピーします
wget -c https://gethstore.blob.core.windows.net/builds/geth-alltools-linux-amd64-1.9.24-cc05b050.tar.gz ./
- 解凍する
tar -zxvf geth-alltools-linux-amd64-1.9.24-cc05b050.tar.gz
- 関連するコマンドをビンに直接コピーします。
cp ./abigen /usr/local/bin/abigen
cp ./bootnode /usr/local/bin/bootnode
cp ./clef /usr/local/bin/clef
cp ./evm /usr/local/bin/evm
cp 。 /geth /usr/local/bin/geth
cp ./puppeth /usr/local/bin/puppeth
cp ./rlpdump /usr/local/bin/rlpdump
5.查看
バージョンgeth バージョン
ubuntu上に構築する
add-apt-repository -y ppa:ethereum/ethereum
apt-get update
apt-get install ethereum
geth version
イーサリアムを始める
-
ジェネシスブロックの初期化を開始する前にジェネシスファイルを作成します。これはブロックチェーンのヘッドノードに相当します。
mkdir private_Eth //関連ファイルを置くフォルダーを作成します
cd private_Eth //このパスに json ファイルを作成します
vimgenesie.json //システムには vi が付属しています。vim は単独でダウンロードする必要がありますファイルの内容は次のとおりです。
{ “config”: { “chainId”: 666, “homesteadBlock”: 0, “eip150Block”: 0, “eip150Hash”: “0x0000000000000000000000000000000000000000000000000000000000000”, “eip 「155ブロック」: 0、「eip158ブロック」: 0、「ビザンチウムブロック」: 0、「constantinopleBlock」: 0、「petersburgBlock」: 0、「istanbulBlock」: 0、「ethash」: {} }、「nonce」: 「0x0」、「timestamp」: 「0x5ddf8f3e」、「extraData」: 「0x00000000000000000000000000000000000000」 0000000000000000000000000”, 「gasLimit」:「0xffffffff」、「難易度」:「0x00002」、「mixHash」:「0x00000000000000000000000000000000000000000000000000000000」、
「coinbase」:「0x000000000000000000000000000000000000000」、
「alloc」:{ }、「number」:「0x0」、「gasused」:「0x0」、「parentHash」:「0x0000000000000000000000000000000」 00000000000000000000000000000000” }
- 上記のファイルを使用して作成ブロック パラメーターを初期化します。 datadir はデータの保存に使用されるフォルダーを指定します。
mkdir データの
取得 --datadir データの初期化genesis.json
- Ethereum を開始し、いくつかのパラメータの説明を行う
getth --datadir dataA --nodiscover --networkid 333 --ipcdisable --port 1111 --rpcport 2222 --http --http.corsdomain=“” --http.port 8545 --http.addr 0.0.0.0 --許可-安全でない-ロック解除コンソール
getth --datadir データ --networkid 1337 --http --http.corsdomain=“*” --http.port 8545 --http.addr “0.0.0.0” --allow-insecure-unlock --rpc.allow- unprotected-txs --port 30303 --dev --dev.period 1 console 2>>geth.log
データディレクトリを指定します – datadir により
アカウントのロック解除が許可されます –allow-insecure-unlock (このパラメータが追加されていない場合、personal.unlockAccount() の実行時にアカウントのロック解除に失敗し、コントラクトをデプロイできません) 接続ポート – http.port対話型コンソールに入るには
8545 コンソールはログ ファイル >>geth.log を指定します。パラメータの詳細については、https://blog.csdn.net/pulong0748/article/details/109027085 を参照してください。
truffle を使用してスマート コントラクトをコンパイルしてデプロイする
truffle の公式 Web サイトの入門チュートリアルを直接参照できますhttps://trufflesuite.com/docs/truffle/quickstart
ここでは、truffle を ubuntu で直接インストールすることをお勧めします Windows では環境上の問題が多すぎます。 ubuntu 仮想マシン 仮想マシンのインストール方法は省略します。
- まずnpmをインストールしてください
apt install npm
npm -g install npm //npm をアップグレード
- トリュフをインストールする
npm install -g トリュフ
- truffle を使用してプロジェクト テンプレートを取得する
mkdir MetaCoin
cd MetaCoin
truffle unbox metacoin //ここにネットワークの問題があり、プロジェクト テンプレートを直接取得できません。git に直接移動して zip ファイルをダウンロードし、git リンクを
解凍します。別の方法があります。直接 truffle init で生成できます。最も単純なプロジェクト テンプレート
解凍後のプロジェクトのディレクトリ構造は次の図に示されています。truffle-config.js はデフォルトでは空です。5.コンパイルします。
トリュフコンパイル
- デプロイメント: truffle-config.js 構成ファイルを変更しない場合、デフォルトで truffle の組み込みチェーンにデプロイされます (デフォルトでは、truffle に付属する最初のアカウントがデプロイメントに使用されます)。「truffle Development」と入力して、対話モードに入り、「mitigrate」と入力して展開します。
サーバーのプライベート チェーン (私は centos を使用しています) にデプロイする場合は、truffle-config.js 構成ファイルを変更してから、centos プライベート チェーンにアカウントを作成し、アカウントのロックを解除して、マイナーを許可する必要があります。チェーンがマイニングを開始します。そうでない場合、
設定ファイルは、サーバーの IP とポートが追加されます。
セントスがアカウントを作成する
すべてのアカウントを表示
アカウントのロックを解除し
てマイニングを開始する
web3j を使用して
コントラクトをコンパイル、デプロイし、呼び出します。web3j を使用して Java でコンパイルおよびデプロイし、コントラクトを呼び出したい場合は、Java バージョンのコントラクトを生成する必要があります。生成するにはいくつかの方法があります。 UbuntuでWeb3jコマンドラインツールを使用して生成することを選択します(jdkとtruffleが装備されていることが前提です)
JDKをインストールします
https://blog.csdn.net/qq_37034181/article/details/120673562
Web3j CLI をインストールする最も簡単な方法は、次のスクリプトを使用することです。
カール -L get.web3j.io | sh && ソース ~/.web3j/source.sh
web3j はコントラクトの Java ファイルを生成しますが、
生成する前に、solidity ファイルを truffle でコンパイルする必要があります (操作方法は上記の truffle コンパイルと同様です)。フォルダ)
その後、web3j コマンドを呼び出します
web3j truffle --truffle-json ./MetaCoin.json -o /home/hqz/Desktop -p com.hqz //-o は出力、出力パスを指定、-p は package パッケージ名を指定
これはテスト用に書いた簡単な契約ファイルです
コントラクトのJavaファイルを取得した後、それをJavaプロジェクトに入れて
このメソッドを呼び出してコントラクトをデプロイし、コントラクトメソッドを呼び出しますが、トランザクションレコードにデータを置くことができないようなので、転送インターフェースを直接呼び出しますイーサリアムではデータが 16 進数であるため、文字列をエンコードする必要があります: 文字列を Unicode に変換してから 16 進数に変換する必要があります。以下はトランザクション レコードです。
ブロックチェーンノードの相互接続
admin.nodeInfo.enode //現在のノード情報
admin.addPeer() //ノード追加コマンド
多くの問題に遭遇し、接続が失敗することも何度もあり、最終的には、異なるノードのジェネシスファイルが同じである必要があり、起動コマンドのパラメータに注意を払う必要があるという結論に達しました。
{ “config”: { “chainId”: 666, “homesteadBlock”: 0, “eip150Block”: 0, “eip150Hash”: “0x0000000000000000000000000000000000000000000000000000000000000”, “eip 「155ブロック」: 0、「eip158ブロック」: 0、「ビザンチウムブロック」: 0、「constantinopleBlock」: 0、「petersburgBlock」: 0、「istanbulBlock」: 0、「ethash」: {} }、「nonce」: 「0x0」、「timestamp」: 「0x5ddf8f3e」、「extraData」: 「0x00000000000000000000000000000000000000」 0000000000000000000000000”, 「gasLimit」:「0xffffffff」、「難易度」:「0x00002」、「mixHash」:「0x00000000000000000000000000000000000000000000000000000000」、
「coinbase」:「0x000000000000000000000000000000000000000」、
「alloc」:{ }、「number」:「0x0」、「gasused」:「0x0」、「parentHash」:「0x0000000000000000000000000000000」 00000000000000000000000000000000” }
getth --datadir dataB --nodiscover --networkid 333 --ipcdisable --port 3333 --rpcport 4444 --http --http.corsdomain=“” --http.port 8545 --http.addr 0.0.0.0 -- allow-insecure-unlock --http.api「eth,net,web3,txpool」コンソール
–rpc.txfeecap 0 --rpc.gascap 0
Java がブロックチェーン インターフェイスを呼び出せないという解決策を補足します
– http.api "eth、net、web3、txpool、personal"