@@ -54,15 +54,28 @@ func (c *Client) GetInfo() (info *types.NetworkInfo, err error) {
54
54
return
55
55
}
56
56
57
- func (c * Client ) Peers () ([]string , error ) {
57
+ func (c * Client ) GetPeers () ([]string , error ) {
58
58
body , _ , err := c .httpGet ("peers" )
59
59
if err != nil {
60
60
return nil , ErrBadGateway
61
61
}
62
62
63
63
peers := make ([]string , 0 )
64
64
err = json .Unmarshal (body , & peers )
65
- return peers , err
65
+ if err != nil {
66
+ return nil , err
67
+ }
68
+
69
+ // filter local
70
+ fpeers := make ([]string , 0 )
71
+ for _ , p := range peers {
72
+ if strings .Contains (p , "127.0.0." ) {
73
+ continue
74
+ }
75
+ fpeers = append (fpeers , p )
76
+ }
77
+
78
+ return peers [:], nil
66
79
}
67
80
68
81
// GetTransactionByID status: Pending/Invalid hash/overspend
@@ -435,42 +448,40 @@ func (c *Client) DownloadChunkData(id string) ([]byte, error) {
435
448
}
436
449
437
450
func (c * Client ) GetTxDataFromPeers (txId string ) ([]byte , error ) {
438
- peers , err := c .Peers ()
451
+ peers , err := c .GetPeers ()
439
452
if err != nil {
440
453
return nil , err
441
454
}
455
+
442
456
for _ , peer := range peers {
443
- if strings .Contains (peer , "127.0" ) {
444
- continue
445
- }
446
- arNode := NewClient ("http://" + peer )
447
- data , err := arNode .GetTransactionData (txId )
457
+ pNode := NewClient ("http://" + peer )
458
+ data , err := pNode .GetTransactionData (txId )
448
459
if err != nil {
449
- fmt . Printf ("get tx data error:%v, peer: %s \n " , err , peer )
460
+ log . Error ("get tx data failed" , "error" , err , "peer" , peer )
450
461
continue
451
462
}
452
463
return data , nil
453
464
}
465
+
454
466
return nil , errors .New ("get tx data from peers failed" )
455
467
}
456
468
457
- func (c * Client ) UploadTxDataToPeers (txId string , data []byte ) error {
458
- peers , err := c .Peers ()
469
+ func (c * Client ) BroadcastData (txId string , data []byte , numOfNodes int64 ) error {
470
+ peers , err := c .GetPeers ()
459
471
if err != nil {
460
472
return err
461
473
}
462
474
463
- count := 0
475
+ count := int64 ( 0 )
464
476
for _ , peer := range peers {
465
- if strings .Contains (peer , "127.0" ) {
466
- continue
467
- }
477
+
468
478
fmt .Printf ("upload peer: %s, count: %d\n " , peer , count )
469
479
arNode := NewClient ("http://" + peer )
470
480
uploader , err := CreateUploader (arNode , txId , data )
471
481
if err != nil {
472
482
continue
473
483
}
484
+
474
485
Loop:
475
486
for ! uploader .IsComplete () {
476
487
if err := uploader .UploadChunk (); err != nil {
@@ -483,10 +494,11 @@ func (c *Client) UploadTxDataToPeers(txId string, data []byte) error {
483
494
if uploader .IsComplete () { // upload success
484
495
count ++
485
496
}
486
- if count > 20 {
497
+ if count >= numOfNodes {
487
498
return nil
488
499
}
489
500
}
501
+
490
502
return fmt .Errorf ("upload tx data to peers failed, txId: %s" , txId )
491
503
}
492
504
0 commit comments