filecoin技術架構分析之十一:filecoin原始碼分析之內部介面層api包分析
本文作者:先河系統楊尉;原創作品,轉載請註明出處
[上一篇連結] filecoin技術架構分析之十:filecoin原始碼分析之支撐包分析(2/2)
[下一篇連結] 待續
目錄
-
11.filecoin原始碼分析之內部介面層api包分析
- 11.1 api
- 11.2 actor
- 11.3 address
- 11.4 client
- 11.5 config
- 11.6 daemon
- 11.7 dag
- 11.8 id
- 11.11.log
- 11.10 miner
- 11.11 mining
- 11.12 ping
- 11.13 retrieval_client
- 11.14 swarm
api包提供內部介面,供協議層、command/REST使用
較大程度依賴node包
分析版本,go-filecoin版本:master 2c87fd59 (2019.3.7)
11.1 api
11.1.1 api的介面定義
如下所示,包含了一系列子介面
type API interface { Actor() Actor Address() Address Client() Client Daemon() Daemon Dag() Dag ID() ID Log() Log Miner() Miner Mining() Mining Paych() Paych Ping() Ping RetrievalClient() RetrievalClient Swarm() Swarm Version() Version }
11.1.2 api的介面實現
▼ package impl ▶ imports // nodeAPI來實現其介面定義 ▼-nodeAPI : struct [fields] // 合約 -actor : *nodeActor // 地址 -address : *nodeAddress // 客戶端 -client : *nodeClient // daemon -daemon : *nodeDaemon // dag -dag : *nodeDag // 節點ID -id : *nodeID // 日誌 -log : *nodeLog // 日誌 -logger : logging.EventLogger // 礦工 -miner : *nodeMiner // 挖礦 -mining : *nodeMining // 節點 -node : *node.Node // 支付通道 -paych : *nodePaych // ping -ping : *nodePing // 檢索客戶端 -retrievalClient : *nodeRetrievalClient // swarm -swarm : *nodeSwarm // 版本 -version : *nodeVersion [methods] // 如下為實現API介面 +Actor() : api.Actor +Address() : api.Address +Client() : api.Client +Daemon() : api.Daemon +Dag() : api.Dag +ID() : api.ID +Log() : api.Log +Miner() : api.Miner +Mining() : api.Mining +Paych() : api.Paych +Ping() : api.Ping +RetrievalClient() : api.RetrievalClient +Swarm() : api.Swarm +Version() : api.Version ▼ functions // 例項化API // 1 獲取高層API porcelainAPI 指標,miner與paych有用到 // 2 呼叫各子系統的例項化函式逐一例項化 +New(node *node.Node) : api.API
11.2 actor
11.2.1 actor的介面定義
▼ package api ▶ imports ▼+ActorView : struct [fields] // actor型別 +ActorType : string // actor地址 +Address : string // actor餘額 +Balance : *types.AttoFIL // actor程式碼-CID +Code : cid.Cid // 匯出符號集合 +Exports : ReadableExports // 表徵actor例項的狀態 +Head : cid.Cid // 訊息計數器,僅為account actors與外部發生互動的時候計算 +Nonce : uint64 // 匯出符號集合 +ReadableExports : map[string]*ReadableFunctionSignature ▼+ReadableFunctionSignature : struct [fields] // 引數 +Params : []string // 返回 +Return : []string ▼+Actor : interface // 目前介面只有檢視功能,返回合約的具體資訊 [methods] +Ls(ctx context.Context) : []*ActorView, error
11.2.2 actor的介面實現
▼ package impl ▶ imports // 使用nodeActor來實現Actor介面 ▼-nodeActor : struct [fields] -api : *nodeAPI [methods] // 呼叫ls方法實現查詢功能 +Ls(ctx context.Context) : []*api.ActorView, error [functions] // 例項化nodeActor,由api實現程式碼中呼叫 -newNodeActor(api *nodeAPI) : *nodeActor ▼ functions // 獲取合約型別 // 1 account actor // 2 儲存市場actor // 3 支付通道actor // 4 礦工actor // 4 BootstrapMiner actor -getActorType(actType exec.ExecutableActor) : string // 查詢合約狀態 -ls(ctx context.Context, fcn *node.Node, actorGetter state.GetAllActorsFunc) : []*api.ActorView, error -makeActorView(act *actor.Actor, addr string, actType exec.ExecutableActor) : *api.ActorView -makeReadable(f *exec.FunctionSignature) : *api.ReadableFunctionSignature -presentExports(e exec.Exports) : api.ReadableExports
11.3 address
-
提供功能
- 地址顯示方法
- 地址查詢方法
- 建立地址方法
- 匯出地址方法
- 匯入地址方法
▼ package api ▶ imports ▼+Address : interface [methods] +Addrs() : Addrs +Export(ctx context.Context, addrs []address.Address) : []*types.KeyInfo, error +Import(ctx context.Context, f files.File) : []address.Address, error ▼+Addrs : interface [methods] +Lookup(ctx context.Context, addr address.Address) : peer.ID, error +Ls(ctx context.Context) : []address.Address, error +New(ctx context.Context) : address.Address, error
11.4 client
-
提供如下功能
- 查詢piece資料(DAG格式)
- 匯入資料(相當於ipfs add)
- 列出所有訂單
- 支付
- 發起儲存交易
- 查詢儲存交易
▼+Ask : struct [fields] +Error : error +Expiry : *types.BlockHeight +ID : uint64 +Miner : address.Address +Price : *types.AttoFIL ▼+Client : interface [methods] +Cat(ctx context.Context, c cid.Cid) : uio.DagReader, error +ImportData(ctx context.Context, data io.Reader) : ipld.Node, error +ListAsks(ctx context.Context) : chan Ask, error +Payments(ctx context.Context, dealCid cid.Cid) : []*paymentbroker.PaymentVoucher, error +ProposeStorageDeal(ctx context.Context, data cid.Cid, miner address.Address, ask uint64, duration uint64, allowDuplicates bool) : *storage.DealResponse, error +QueryStorageDeal(ctx context.Context, prop cid.Cid) : *storage.DealResponse, error
11.5 config
-
提供功能
- Get配置
- Set配置
11.6 daemon
-
提供功能
- 啟動程序相關
- 具體的業務啟動邏輯會呼叫到node包
▼ package api ▶ imports ▼+DaemonInitConfig : struct [fields] // 如果配置,定期檢查並密封staged扇區 +AutoSealIntervalSeconds : uint +DefaultAddress : address.Address // 指定網路 +DevnetNightly : bool +DevnetTest : bool +DevnetUser : bool // 創世檔案 +GenesisFile : string +PeerKeyFile : string // repo目錄 +RepoDir : string // 指定礦工 +WithMiner : address.Address +DaemonInitOpt : func(*DaemonInitConfig) ▼+Daemon : interface [methods] +Init(ctx context.Context, opts ...DaemonInitOpt) : error +Start(ctx context.Context) : error +Stop(ctx context.Context) : error
11.7 dag
-
提供功能
- dag查詢功能
- 類似ipfs block get
11.8 id
-
提供功能
- ID詳細資訊
- 如多地址、協議版本、匯出公鑰等
▼+IDDetails : struct [fields] +Addresses : []ma.Multiaddr +AgentVersion : string +ID : peer.ID +ProtocolVersion : string +PublicKey : []byte [methods] +MarshalJSON() : []byte, error +UnmarshalJSON(data []byte) : error ▼+ID : interface [methods] +Details() : *IDDetails, error ▼ functions -decode(idd map[string]*json.RawMessage, key string, dest interface{}) : error
11.11.log
- 提供日誌功能
▼+Log : interface [methods] +Tail(ctx context.Context) : io.Reader
11.10 miner
- 建立礦工
▼+Miner : interface [methods] +Create(ctx context.Context, fromAddr address.Address, gasPrice types.AttoFIL, gasLimit types.GasUnits, pledge uint64, pid peer.ID, collateral *types.AttoFIL) : address.Address, error
11.11 mining
-
挖礦控制
- 啟動,單次啟動
- 停止
▼+Mining : interface [methods] +Once(ctx context.Context) : *types.Block, error +Start(ctx context.Context) : error +Stop(ctx context.Context) : error
11.12 ping
- 提供ping介面
▼+PingResult : struct [fields] +Success : bool +Text : string +Time : time.Duration ▼+Ping : interface [methods] +Ping(ctx context.Context, pid peer.ID, count uint, delay time.Duration) : chan *PingResult, error
11.13 retrieval_client
- 提供檢索介面
▼+RetrievalClient : interface [methods] +RetrievePiece(ctx context.Context, pieceCID cid.Cid, minerAddr address.Address) : io.ReadCloser, error
11.14 swarm
-
提供節點連線功能
- 顯示連線節點
- 連線節點
- 查詢節點
▼+SwarmConnInfo : struct [fields] +Addr : string +Latency : string +Muxer : string +Peer : string +Streams : []SwarmStreamInfo [methods] +Len() : int +Less(i, j int) : bool +Swap(i, j int) ▼+SwarmConnInfos : struct [fields] +Peers : []SwarmConnInfo [methods] +Len() : int +Less(i, j int) : bool +Swap(i, j int) ▼+SwarmConnectResult : struct [fields] +Peer : string +Success : bool ▼+SwarmStreamInfo : struct [fields] +Protocol : string ▼+Swarm : interface [methods] +Connect(ctx context.Context, addrs []string) : []SwarmConnectResult, error +FindPeer(ctx context.Context, peerID peer.ID) : peerstore.PeerInfo, error +Peers(ctx context.Context, verbose, latency, streams bool) : *SwarmConnInfos, error
[上一篇連結] filecoin技術架構分析之十:filecoin原始碼分析之支撐包分析(2/2)
[下一篇連結] 待續