以太坊之——golang以太坊介面調用

來源:互聯網
上載者:User

Go語言具有簡單易學、功能強大,可跨平台編譯等眾多優勢,所以這裡選擇以Go語言切入以太坊。
開始之前需要以下環境:

  • Ubuntu(這裡以ubuntu16.04為例)
  • geth

    Ubuntu16.04安裝Go1.9.2

    在與以太坊互動之前,我們需要安裝Go語言開發工具,這裡選擇的版本是Go1.9.2。接下來我們開始安裝

    在終端輸入以下命令

$ curl -O https://storage.googleapis.com/golang/go1.9.linux-amd64.tar.gz  $ tar -C /usr/local -zxvf go1.9.linux-amd64.tar.gz  $ mkdir -p ~/go/src$ export GOPATH=~/go/src  //go項目要放到~/go/src目錄下編譯$ go version

接下來,需要用到ipc方式和rpc方式。go-ethereum中有相關檔案和工具,我們把它複製下來。

複製go-ethereum到本地

在終端輸入

$ cd ~/go/src$ mkdir -p github.com/ethereum$ cd github.com/ethereum/$ git clone https://github.com/ethereum/go-ethereum.git

部署智能合約到geth

接下來的操作需要geth私人節點,下面是啟動命令和參數

  • 啟動geth
$ geth --identity "pdj" --datadir data0 --rpcport 8545 --rpccorsdomain "*" --port "30303" --nodiscover --nat "any" --networkid 15 --rpc --rpcapi "db,eth,net,web3,personal" --ipcpath "geth.ipc" console
  • 在http://remix.ethereum.org/上編譯智能合約
  • 在remix的 run選項中選擇"Web3 Provider",Web3 Provider Endpoint 為"http://localhost:8545"

ipc方式調用智能合約

  • 複製部署智能合約時產生的abi到.abi檔案中
  • 通過abigen工具產生.go檔案

這裡需要編譯產生一個abigen工具,用來產生.go檔案

  • 編譯~/go/src/github.com/ethereum/go-ethereum/cmd/abigen/目錄下的main.go
$ cd ~/go/src/github.com/ethereum/go-ethereum/cmd/abigen/$ go build -i

編譯成功之後就會在目前的目錄下產生abigen

$ abigen --abi xx.abi --pkg pkgname --type apiname --out xx.go1. abi 檔案在 remix 部署時可以得到2. Pkg 指定的是編譯成的 go 檔案對應的 package 名稱3. type指定的是go檔案的入口函數,可以認為是類名4. out 指定輸出go檔案名稱

go調用rpc介面

  • geth啟動時加上參數--rpcapi "db,eth,net,web3,personal"
  • go調用getBalance()執行個體
package mainimport (    "fmt"    "github.com/ethereum/go-ethereum/rpc")func main() {    client, err := rpc.Dial("http://localhost:8545")    if err != nil {        fmt.Println("rpc.Dial err", err)        return    }       var account[]string    err = client.Call(&account, "eth_accounts")    var result string    //var result hexutil.Big    err = client.Call(&result, "eth_getBalance", account[0], "latest")    //err = ec.c.CallContext(ctx, &result, "eth_getBalance", account, "latest")    if err != nil {        fmt.Println("client.Call err", err)        return    }       fmt.Printf("account[0]: %s\nbalance[0]: %s\n", account[0], result)    //fmt.Printf("accounts: %s\n", account[0])}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.