filecoin lotus API 接口使用笔记golang

2 篇文章 0 订阅
1 篇文章 0 订阅

filecoin lotus API 接口使用笔记golang

前言:post 对接 filecoin lotus接口

lotus
https://github.com/filecoin-project/lotus
lotus 基本文档
https://docs.lotu.sh/

两个Lotus节点+矿工API
https://github.com/filecoin-project/lotus/blob/master/api/api_common.go
Lotus节点API
https://github.com/filecoin-project/lotus/blob/master/api/api_full.go
Lotus Miner API
https://github.com/filecoin-project/lotus/blob/master/api/api_storage.go

步骤1:找到 .lotus/config.toml 修改配置

ListenAddress ip改成内网ip,这样就可以内网访问接口,如不修改,则只能本地127.0.0.1访问

RemoteListenAddress 要链接接口的的ip地址

# Default config:
[API]
  ListenAddress = "/ip4/127.0.0.1/tcp/1234/http" //改这~ 127.0.0.1 改成内网ip,这样就可以内外访问接口,
  RemoteListenAddress = "127.0.0.1"  //改这~ 要链接接口的的ip地址
  Timeout = "30s"
#
[Libp2p]
#  ListenAddresses = ["/ip4/0.0.0.0/tcp/0", "/ip6/::/tcp/0"]
#  AnnounceAddresses = []
#  NoAnnounceAddresses = []
#  ConnMgrLow = 150
#  ConnMgrHigh = 180
#  ConnMgrGrace = "20s"
#
[Pubsub]
#  Bootstrapper = false
#  RemoteTracer = "/ip4/xxx.xx.xx.xxx/tcp/4001/p2p/xxxxxxxxxxxxxxxxxx"
#
[Client]
#  UseIpfs = false
#  IpfsMAddr = ""
#  IpfsUseForRetrieval = false
#
[Metrics]
#  Nickname = ""
#  HeadNotifs = false

步骤2:启动节点

nohup  lotus daemon &       --这里我用后台启动

接入接口

这里我模拟接入3个接口,ChainHead,ChainGetBlock,ChainGetBlockMessages
这在源码中 FullNode 可以找到

参数: jsonrpc 写死2.0
参数: method 请求的接口名字
参数: id 不知道
参数: params 每个接口对应需要的参数

func ChainHead()(jsonstr string,err error)  {
	song := make(map[string]interface{})
	song["jsonrpc"] = "2.0"
	song["method"] = "Filecoin.ChainHead"
	song["id"] = 3
	bytesData, err := json.Marshal(song)
	if err != nil {
		return "",err
	}
	reader := bytes.NewReader(bytesData)
	request, err := http.NewRequest("POST", "http://127.0.0.1:1234/rpc/v0", reader)
	if err != nil {
		fmt.Println(err.Error())
		return "",err
	}
	request.Header.Set("Content-Type", "application/json;charset=UTF-8")
	client := http.Client{}
	resp, err := client.Do(request)
	if err != nil {
		fmt.Println(err.Error())
		return "",err
	}
	respBytes, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		fmt.Println(err.Error())
		return "",err
	}
	//byte数组直接转成string,优化内存
	str := (*string)(unsafe.Pointer(&respBytes))
	return *str,nil
}
func  ChainGetBlock(cid string)(jsonstr string,err error)  {
	json:=`
			{ "jsonrpc": "2.0", "method":"Filecoin.ChainGetBlock", "params": [{"/":"`+cid+`"}], "id": 3 }
		`
	reader := bytes.NewReader([]byte(json))
	request, err := http.NewRequest("POST", "http://127.0.0.1:1234/rpc/v0", reader)
	if err != nil {
		fmt.Println(err.Error())
		return "",err
	}
	request.Header.Set("Content-Type", "application/json;charset=UTF-8")
	client := http.Client{}
	resp, err := client.Do(request)
	if err != nil {
		fmt.Println(err.Error())
		return "",err
	}
	respBytes, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		fmt.Println(err.Error())
		return "",err
	}
	//byte数组直接转成string,优化内存
	str := (*string)(unsafe.Pointer(&respBytes))
	return *str,nil
}
func ChainGetBlockMessages(cid string) (jsonstr string,err error){
	json:=`
			{ "jsonrpc": "2.0", "method":"Filecoin.ChainGetBlockMessages", "params": [{"/":"`+cid+`"}], "id": 3 }
		`
	reader := bytes.NewReader([]byte(json))
	request, err := http.NewRequest("POST", "http://127.0.0.1:1234/rpc/v0", reader)
	if err != nil {
		fmt.Println(err.Error())
		return "",err
	}
	request.Header.Set("Content-Type", "application/json;charset=UTF-8")
	client := http.Client{}
	resp, err := client.Do(request)
	if err != nil {
		fmt.Println(err.Error())
		return "",err
	}
	respBytes, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		fmt.Println(err.Error())
		return "",err
	}
	//byte数组直接转成string,优化内存
	str := (*string)(unsafe.Pointer(&respBytes))
	return *str,nil
}
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值