Protocol
我在哪裡可以找到礦池通信的文件/規範?
我正在尋找客戶端和池之間的通信/協議的文件或規範。是否有一些或者我必須深入研究 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, ¶ms) 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 呼叫的文件: