go言語ブロックチェーン学習スマートコントラクトを呼び出すために
1. abiファイルを取得する
契約へのインターフェース
リミックスツールでコントラクトをコンパイルした後、リミックスツールには
KFold(list, n_splits =kflod, shuffle=True)
をコピーしたものです。
次に、新しい xx.abi ファイルを作成し、割り当てた値を貼り付けます。
注:コードが変更されたため、再コンパイル後
f = KFold(n_splits =kflod, shuffle=True)
f.get_n_splits(list)
も変更されますので、必ず最新の
abi
Abiは、以下のsolc経由で生成することもできます。
<ブロッククオートsolc --bin test.sol -o test.abi
2. abigenツールのインストール
goファイルを生成するために使用されます。
ファイルをダウンロードするには githubアドレス
このmain.goファイルを見つけてgoビルドを行い、abigen.exeファイルを生成してください。
そして、これをbinディレクトリのここに置きます。
そして、ここで検証することができます
アビジェンツールによるgoファイルの生成
abigen --abi xx.abi --pkg packagename --type structname --out xx.go
abi ファイルは remix デプロイ時に取得できます pkg は出力ファイルのパッケージ名、すなわちパッケージ名を指定します type は契約構造体名を指定します out は出力する go ファイルの名前を指定します。
3.リミックスリンク・プライベートチェーン
geth
プライベートチェーンを開始するには、rpccorsdomain *を指定します。そうしないと、remixで接続できません。
セレクト
Web3 Provider
メソッドを使用する場合、デフォルトの接続先はプライベートチェーンポート8545です。
しかし、ここにはアカウントがないことがおわかりいただけると思います
そこで、アカウントを作成することができます
を2つ作成した後
そして、ここで見ることができます。
4. 契約の展開
1. プライベートチェーンの接続:選択
Web3 Provider
の場合、デフォルトのポート番号が
8545
もし
geth
によって開始されました。
rpc
ポート番号の整合性が取れていないため、整合性のある番号に変更する。
2. 契約書の配備
以下のようなエラーが発生することがありますが、その解決策を示します。
1 .エラー:認証が必要です:パスワードまたはロック解除。このエラーは、アカウントのロックを解除することによって報告されます。
アカウントロック解除: personal.unlockAccount("account address")
ロックを解除するだけ
2 .Returned error: exceeds block gas limit: このエラーが発生した場合、ブロック番号のgaslimitを見て、デプロイ時に常に変更するようにします。
ブロック番号の取得:eth.blockNumber
ブロック番号に基づく詳細の取得:eth.getBlock(0)はgasLimitの値を表示します、展開時のgaslimitはこれより大きくできません。
3 .Returned error: insufficient funds for gas * price + value: 契約を展開するには、マイニングによって、稼がなければならない手数料が必要です。
お金がない、お金を採掘するために。
指定されたスレッド数でマイニングを開始する: miner.start(1)
採掘停止: miner.stop()
採掘が行われているかどうかのチェック:eth.mining true:採掘、false:採掘しない
アカウントアドレスの配列を取得:eth.accounts
マイニングアドレスの取得:eth.coinbase デフォルトで最初に作成されたアカウント
最初の口座の残高を表示:eth.getBalance(eth.accounts[0])
指定した口座の残高を取得:eth.getBalance("口座アドレス")
5. プライベートチェーンノード作成ブロックの初期化
以下の内容の genesis.json ファイルを新規に作成します。
{
"config":{
"chainId":15,
"homesteadBlock":0,
"eip155Block":0,
"eip158Block":0
},
"coinbase":"0x000000000000000000000000000000000000000000000000",
"difficulty":"0x40000",
"extraData": "",
"gasLimit":"0xffffffff",
"nonce":"0x0000000000000042",
"timestamp":"0x00",
"alloc":{
}
}
意味するところ
coinbase
: マイニングアカウントアドレス、自由に記入してください、後で設定することも可能です、通常デフォルトで作成される最初のユーザーです
difficulty
: 現在のブロックの難易度を設定します。難しすぎるとCPUの採掘が大変になるので、ここでは難易度を小さく設定します
gasLimit
: この値は、ブロックが含むことができるトランザクションメッセージの総数を制限するために消費されるGASの総量に制限を設定し、最大値を記入する。
nonce
nonceはマイニング用の64ビット乱数で、彼とmixhashの設定はEtherのイエローペーパーを満たす必要があることに注意してください。
mixhash
: マイニング用のnonceと合わせて使用し、前のブロックの一部から生成したハッシュ。
parentHash
: 直前のブロックのハッシュ値で、ジェネシスブロックなので0extraDataとなります。
timestamp
: 作成ブロックのタイムスタンプを設定する
alloc
: アカウントとその中のエーテル数を事前に入力するために使用します。プライベートチェーンのマイニングが簡単になったので、アカウントにあらかじめコインを入れておく必要がなくなり、必要な時にコインを作ればいいようになりました。
cmdはjsonファイルが格納されているパスに移動します。
geth -datadir "fanone" init genesis.json
6. 契約の展開
デプロイメントには、処理手数料が必要です
http://ethscan.hubwiz.com/
7.コール
github.com/ethereum/go-ethereum v1.10.0
package main
import (
"github.com/ethereum/go-ethereum/ethclient"
"github.com/ethereum/go-ethereum/common"
"eth_block/utils/contract/abi"
"fmt"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
)
func main() {
// connect to rpc
client,err := ethclient.Dial("http://127.0.0.1:8545")
// Define the address of the account to operate the contract
addr := "0x29794ab2ed6c47faff7ebdd6dcdd71a263e25460"
// convert the string address to common.Address
common_addr := common.HexToAddress(addr)
if err ! = nil {
panic("Error connecting to Ethernet contract")
}
// Create the contract object
contract_obj,err11 := contract.NewTestAddress(common_addr,client)
if err11 ! =nil {
panic("Error creating contract object")
}
fmt.Println(contract_obj.TestAddressCaller) // Caller access function
fmt.Println(contract_obj.TestAddressTransactor) // Transactor has function
fmt.Println(contract_obj.TestAddressFilterer) // Nothing to do
}
上記は、スマートコントラクトの詳細を呼び出すために学習するGo言語のブロックチェーンであり、Go言語のブロックチェーンに関する詳細な情報は、スマートコントラクトは、スクリプトホームその他の関連記事に注意を払うしてください!.
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン