1. 程式人生 > >以太坊之——golang以太坊介面呼叫

以太坊之——golang以太坊介面呼叫

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

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.go

1. abi 檔案在 remix 部署時可以得到
2. Pkg 指定的是編譯成的 go 檔案對應的 package 名稱
3. type指定的是go檔案的入口函式,可以認為是類名
4. out 指定輸出go檔名稱

go呼叫rpc介面

  • geth啟動時加上引數–rpcapi “db,eth,net,web3,personal”
  • go呼叫getBalance()例項
package main

import (
    "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])
}

知識星球二維碼380.png

相關推薦

——golang介面呼叫

Go語言具有簡單易學、功能強大,可跨平臺編譯等眾多優勢,所以這裡選擇以Go語言切入以太坊。 開始之前需要以下環境: - Ubuntu(這裡以ubuntu16.04為例) - geth Ubuntu16.04安裝Go1.9.2 在與以太坊互動之前,我

微服務不同服務間進行介面呼叫

前言:最近在做專案時用到了微服務的架構。本篇文章主要說明微服務之間讓服務進行通訊。 正文:在其他模組進行呼叫user模組的使用者所有資訊。 在業務層實現的程式碼 @FeignClient(value="user",fallback=UserServerFailBack.class) public int

PHP-微信開發圖靈機器人--天氣介面呼叫

微信開發中,圖靈機器人回覆、天氣、翻譯、美食、地圖、二維碼功能,隨處可見。大小網站、APP都在運用這項技術在專案中。今天簡單介紹一下圖靈機器人回覆,天氣介面呼叫、翻譯介面,希望對朋友們有用。 效果案例: 思路很簡單,首先,token要一致,然後在瀏覽器上跑起來, 回到微信平臺

3.秘鑰文件

運行 eth wid 兩種 發的 關註 隨著 http 必須 1.賬號   賬號在以太坊中扮演著核心的角色.以太坊共有兩種賬號類型: 外部賬號( EOA) 和合約賬號.   在這裏我們先重點關註外部賬號,簡稱賬號.合約賬號簡稱合約,合約賬戶在合約章節中詳細介紹. 外部

Downloader同步區塊流程

隨著以太坊的資料越來越多,同步也越來越慢,使用full sync mode同步的話恐怕得一兩個禮拜也不見得能同步完。以太坊有fast sync mode,找了些文章還不是很明白具體內容,所以嘗試著看懂寫下來,如有錯誤之處歡迎指正。關於fast sync mode的演算法,是在

LevelDB原始碼分析

最近研究以太坊的LevelDB使用,看了看程式碼,大致介紹下使用流程(網上介紹的leveldb大多是c++版本的,以太坊使用的是go語言版本的),我使用的是mac book開發環境。介紹中會忽略一些細節,如有重要遺漏或者錯誤歡迎指出。讀此篇文章預設leveldb的基本知識都瞭

教程-搭建私鏈挖礦

安裝客戶端 安裝Gth,即Go語言實現的以太坊客戶端 (go-ethereum)。 brew tap ethereum/ethereum brew install ethereum 配置初始狀態 新建ethdev目錄 mkdir ethdev cd ethdev

區塊鏈遊戲:馬,基於的區塊鏈養成類遊戲

以太馬是一款基於區塊鏈的寵物養成類遊戲,每隻馬都有一個獨特的基因組,決定了它的顏值,並釋放罕見的屬性,也可繁衍出奇特稀有的後代。每隻馬都是唯一的,擁有就不會消失。公正透明的養成系統,讓每隻以太馬產生無限可能。下面在這裡給大家詳細的說明下整個遊戲的玩法,更多的內容歡迎大家進入遊

異步協程吊了!親測!簡直完美,Python異步協程的葵花寶典!

獲取 nis 時間 定義 換上 req 體驗 用戶輸入 3.1 2.1 阻塞 進群:125240963 即可獲取數十套PDF哦! 阻塞狀態指程序未得到所需計算資源時被掛起的狀態。程序在等待某個操作完成期間,自身無法繼續幹別的事情,則稱該程序在該操作上是阻塞的。 常

I2C總線(三)---C語言理解IIC

接收 朋友 blog 初始化 停止 數據傳輸 date reg alt I2C總線之(三)---以C語言理解IIC為了加深對I2C總線的理解,用C語言模擬IIC總線,邊看源代碼邊讀波形:如下圖所示的寫操作的時序圖: 讀時序的理解同理。對於時序不理解的朋友請參考“I2C總線之

授人魚不如授人漁——CPU漏洞的Symantec解決

感染 內存 manage define 如何 -s 彈性 加固 images 授人以魚不如授人以漁——CPU漏洞的Symantec解決之道 前言1月4日,國外安全研究機構公布了兩組CPU漏洞,由於漏洞嚴重而且影響範圍廣泛,引起了全球的關註,成為2018開年以來第一個信息安

Java IO流 FileWriter 字符寫入文件

close trace finally ood 字符 new finall ava class http://www.verejava.com/?id=16994663236510 package com.io; import java.io.*; public cla

python(六)基礎學習 因為修改前面較多不足處所這裏就少了但是我還是會發的

優化 3的倍數 small align 如果 print big 10個 bre python3.5使用 第六天:   現在我們來講for循環的用法 先寫一段代碼來解釋它: 1 for i in range(10): 2 print(i) 第一段的意思是循環

用C語言探究函式遞迴的巧妙處(斐波那契數列為例)

對於許多C語言的初學者來說,函式是一個比較重要的版塊.函式的使用不僅在學習程式設計的時期可以方便我們解決一些問題.它在未來的工作中也是程式設計師們經常運用的東西.而函式的遞迴是函式這一版塊比較難懂的東西.因此小編以輸出斐波那契數列的第N項為例,來探討函式的遞迴的應用給我們的程式碼帶來的方便.

七十載跑車品牌保時捷面向未來姿亮相首屆

南樂縣 阿里巴巴集團董事局主席馬雲發表致股東的公開信表示:生意難做之時,正是阿里巴巴兌現“讓天下沒有難做的生意”的使命之時。,阿里巴巴(NYSE:BABA)今日釋出了截至2018年9月30日的2019財年第二季度財報(注:阿里巴巴財年與自然年不同步,從每年的4月1日開始,至第二年的3月31日結束)。 財報中

【Python面試必看系列】如何就地操作方式打亂一個列表的元素

Q 16. 如何以就地操作方式打亂一個列表的元素? 為了達到這個目的,我們從 random 模組中匯入 shuffle() 函式。 >>> from random import shuffle >>> mylist=[x for x in ra

太極鏈將一己力改變世界經濟

太極鏈是一個大型的高階智慧區塊鏈,它所提供的區塊鏈是一種內建的完全成熟的圖靈完備的程式語言, 可用於建立編碼任意狀態轉換功能的“智慧合約”,允許使用者建立上述任何系統。 太極鏈的建立,是基於“區塊鏈+智慧合約”的思路,優化了比特幣和以太 坊的功能。太極鏈給我們展示了如下功能:太極鏈周邊配套軟體,包括區塊

mybatis免sql外掛JpaMapper-Jpa hibernate的風格寫mybatis(mybatis實現簡單分表-sharding功能)

mybatis免sql外掛之JpaMapper-以Jpa hibernate的風格寫mybatis(mybatis實現簡單分表-sharding功能) 簡介 JpaMapper以Jpa hibernate的風格寫mybatis的程式碼,可以減少手動寫sql的煩惱。 優勢:

mybatis免sql外掛JpaMapper-Jpa hibernate的風格寫mybatis(主鍵賦值策略及useGeneratedKeys無效的坑)

mybatis免sql外掛之JpaMapper-以Jpa hibernate的風格寫mybatis(主鍵賦值策略及useGeneratedKeys無效的坑) 簡介 JpaMapper以Jpa hibernate的風格寫mybatis的程式碼,可以減少手動寫sql的煩惱。 優勢:

mybatis免sql外掛JpaMapper-Jpa hibernate的風格寫mybatis(生成自定義的MappedStatement)

mybatis免sql外掛之JpaMapper-以Jpa hibernate的風格寫mybatis(生成自定義的MappedStatement) 簡介 JpaMapper以Jpa hibernate的風格寫mybatis的程式碼,可以減少手動寫sql的煩惱。 優勢: