Protocol

我在哪裡可以找到礦池通信的文件/規範?

  • June 16, 2016

我正在尋找客戶端和池之間的通信/協議的文件或規範。是否有一些或者我必須深入研究 geth 的原始碼?

(是的,我知道 RPC 文件,我正在尋找描述什麼數據是發送器,礦工如何啟動與礦池通信等的東西。)

我知道的最簡單的地方是查看sammy007/open-ethereum-pool的原始碼。

以下是您需要支持的主要 JSON-RPC 方法,來自sammy007/open-ethereum-pool/proxy/proxy.go,第 232-269 行

switch req.Method {
   case "eth_getWork":
       reply, errReply := s.handleGetWorkRPC(cs)
       if errReply != nil {
           cs.sendError(req.Id, errReply)
           break
       }
       cs.sendResult(req.Id, &reply)
   case "eth_submitWork":
       if req.Params != nil {
           var params []string
           err := json.Unmarshal(*req.Params, &params)
           if err != nil {
               log.Printf("Unable to parse params from %v", cs.ip)
               s.policy.ApplyMalformedPolicy(cs.ip)
               break
           }
           reply, errReply := s.handleSubmitRPC(cs, login, vars["id"], params)
           if errReply != nil {
               err = cs.sendError(req.Id, errReply)
               break
           }
           cs.sendResult(req.Id, &reply)
       } else {
           s.policy.ApplyMalformedPolicy(cs.ip)
           errReply := &ErrorReply{Code: -1, Message: "Malformed request"}
           cs.sendError(req.Id, errReply)
       }
   case "eth_getBlockByNumber":
       reply := s.handleGetBlockByNumberRPC()
       cs.sendResult(req.Id, reply)
   case "eth_submitHashrate":
       cs.sendResult(req.Id, true)
   default:
       errReply := s.handleUnknownRPC(cs, req.Method)
       cs.sendError(req.Id, errReply)
   }
}

確定傳輸什麼數據的最簡單方法是對其進行編譯、插入調試語句並查看正在傳輸的數據。

您可能還想查看sammy007/ether-proxy,這是 sammy007 礦池探勘軟體的更簡單版本。


編輯 17/06/2016 - 添加指向 JSON-RPC 呼叫的連結以確保完整性

這是所需的 JSON-RPC 呼叫的文件:

引用自:https://ethereum.stackexchange.com/questions/6118