CheckSync is a utility function to check sync state
(ctx context.Context, cs chan *ethclient.Client)
| 219 | |
| 220 | //CheckSync is a utility function to check sync state |
| 221 | func CheckSync(ctx context.Context, cs chan *ethclient.Client) chan *ethclient.Client { |
| 222 | out := make(chan *ethclient.Client) |
| 223 | var wg sync.WaitGroup |
| 224 | size := 0 |
| 225 | |
| 226 | for client := range cs { |
| 227 | size++ |
| 228 | go func(client *ethclient.Client) { |
| 229 | defer wg.Done() |
| 230 | var blk *types.Block |
| 231 | var progress *ethereum.SyncProgress |
| 232 | var err error |
| 233 | if blk, err = client.BlockByNumber(ctx, nil); err != nil { |
| 234 | fmt.Println("CheckSync error ", err) |
| 235 | if err.Error() == light.ErrNoPeers.Error() { |
| 236 | fmt.Println("CheckSync error ErrNoPeers ", err) |
| 237 | } |
| 238 | return |
| 239 | } |
| 240 | highestBlkN := blk.NumberU64() |
| 241 | |
| 242 | fmt.Println("highestBlkN ", highestBlkN) |
| 243 | if progress, err = client.SyncProgress(ctx); err != nil { |
| 244 | fmt.Println("SyncProgress err ", err) |
| 245 | return |
| 246 | } |
| 247 | fmt.Println("progress ", progress) |
| 248 | }(client) |
| 249 | } |
| 250 | wg.Add(size) |
| 251 | // Wait for all the reads to complete |
| 252 | go func() { |
| 253 | wg.Wait() |
| 254 | close(out) |
| 255 | }() |
| 256 | return out |
| 257 | } |
| 258 | |
| 259 | // GetCurrentBlock returns a block number of latest known header from the |
| 260 | // current canonical chain. |