1. ホーム
  2. スクリプト・コラム
  3. ゴラン

go言語ブロックチェーン学習スマートコントラクトを呼び出すために

2022-02-14 07:57:48

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言語のブロックチェーンに関する詳細な情報は、スマートコントラクトは、スクリプトホームその他の関連記事に注意を払うしてください!.