资源描述:
《兄弟连Go语言培训open-ethereum-pool以太坊矿池源码分析(8)unlocker模块.docx》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、兄弟连Go语言培训open-ethereum-pool以太坊矿池源码分析(8)unlocker模块#open-ethereum-pool以太坊矿池-unlocker模块##unlocker模块配置```json"unlocker":{ "enabled": false, "poolFee": 1.0, "poolFeeAddress": "", "donate": true, "depth": 120, "immatureDepth": 20, "keepTxFees": fa
2、lse, "interval": "10m", "daemon": "http://127.0.0.1:8545", "timeout": "10s"},```##BlockUnlocker定义```gotype BlockUnlocker struct { config*UnlockerConfig backend*storage.RedisClient rpc*rpc.RPCClient halt bool lastFail error}```##unlocker流程
3、图##GetCandidates原理```gofunc (r*RedisClient)GetCandidates(maxHeight int64)([]*BlockData, error){ //ZRANGEBYSCOREeth:blocks:candidates0maxHeightWITHSCORES option:=redis.ZRangeByScore{Min: "0",Max:strconv.FormatInt(maxHeight, 10)} cmd:=r.client.ZRangeBySco
4、reWithScores(r.formatKey("blocks", "candidates"),option) if cmd.Err()!= nil { return nil,cmd.Err() } return convertCandidateResults(cmd), nil}func convertCandidateResults(raw*redis.ZSliceCmd)[]*BlockData{ var result[]*BlockData for _,v:= ra
5、nge raw.Val(){ //"nonce:powHash:mixDigest:timestamp:diff:totalShares" block:=BlockData{} block.Height=int64(v.Score) block.RoundHeight=block.Height fields:=strings.Split(v.Member.(string), ":") block.Nonce=fields[0]
6、 block.PowHash=fields[1] block.MixDigest=fields[2] block.Timestamp,_=strconv.ParseInt(fields[3], 10, 64) block.Difficulty,_=strconv.ParseInt(fields[4], 10, 64) block.TotalShares,_=strconv.ParseInt(fields[5], 10, 64) block.can
7、didateKey=v.Member.(string) result= append(result,&block) } return result}```##writeImmatureBlock原理```go//Immature即未成年func (r*RedisClient)writeImmatureBlock(tx*redis.Multi,block*BlockData){ //Redis2.8.xreturns"ERRsourceanddestinationobjectsarethe
8、same" if block.Height!=block.RoundHeight{ //RENAMEeth:shares:candidates:round&RoundHeight:nonceeth:shares:candidates:round&blockHeight:nonce tx.Renam