用Golang开发以太坊去中心化应用(连载一)

3,531 阅读3分钟

[TOC]

个人简介

HundredLee
2013年起,便奋斗在数字货币交易平台开发第一线,2016年接触区块链,从此走上不归路。目前正在开发一套全新的高速撮合引擎。
微博 :weibo.com/hundredlee2…
邮箱 :hundred9411#gmail.com

连载准备

连载一,介绍以太坊,查询余额等。
连载二,go-ethereum转出以太坊、如何对接token、如何查询token余额、如何转出token。
连载三,交易平台对接以太坊的一些经验和总结。

以太坊是神马东西?

百度百科:

以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统,以太坊从诞生到2017年5月,短短3年半时间,全球已有200多个以太坊应用诞生。以太坊是一个平台和一种编程语言,使开发人员能够建立和发布下一代分布式应用。 以太坊可以用来编程,分散,担保和交易任何事物:投票,域名,金融交易所,众筹,公司管理, 合同和大部分的协议,知识产权,还有得益于硬件集成的智能资产。

安装geth客户端

  • geth是目前使用最广泛的客户端,他可以用于挖矿、建立私有链、管理以太坊账户等。
  • osx 用户可以直接通过brew来安装。具体参考 blog.csdn.net/ethchinese/…
  • 若希望通过源码编译安装,那么请参照这里 www.cnblogs.com/dophin459/p…
  • 当然官方github的readme文档,也是非常详细的,建议可以看看 github.com/ethereum/go…
  • 这里不再详细介绍安装方式,网上资料特别多 。

开发

连接以太坊

  • 首先比较重要的一步,先 go get https://github.com/ethereum/go-ethereum

  • 如果上一步你成功安装了geth客户端,并开启了rpc功能,例如http://127.0.0.1,那么你就可以在golang中连接rpc。

  • 直接上代码:


import (
    "github.com/ethereum/go-ethereum/accounts/abi/bind"
    "github.com/ethereum/go-ethereum/ethclient"
    "github.com/ethereum/go-ethereum/rpc"
)

func connectToRpc() (*ethclient.Client, error) {
    client, err := rpc.Dial("http://127.0.0.1")

    if err != nil {
        return nil, err
    }

    conn := ethclient.NewClient(client)
    return conn, nil
}

查询以太坊(eth)余额

  • 在开发以太坊应用中,经常需要获取账户内的余额。
  • 由于上一步我们已经成功连接上了以太坊客户端,那么我们只需要直接简单的调用接口就可以了。

import (
    "context"
    "github.com/ethereum/go-ethereum/accounts/abi/bind"
    "github.com/ethereum/go-ethereum/common"
)

//特别注意,这里的address就是你要查询的以太坊余额的地址。一般是0xddddd 这样的形式
func GetBalance(address string) {

    client,err := connectToRpc()

    if err != nil {
        panic(err.Error())
    }

    balance, err := client.BalanceAt(context.TODO(),common.HexToAddress(address), nil)

}
  • 特别注意的是以太坊的Decimal是18,那么我们获得的余额要乘以10^-18,才能得到正常的以太坊数量。
  • 以太坊的其他token也一样,会有不同的Decimal,但是会有相应的方法获得,这个不需要担心,在下一个连载会讲到。

  if err != nil {
        beego.Error(err.Error())
    } else {

       //这个就是地址中以太坊的余额
        balanceV := float64(balance.Int64()) * math.Pow(10, -18)
    }

结束

接受捐赠,多少都是支持。

WechatIMG13
WechatIMG13