Skip to content

Commit 312b4d2

Browse files
committed
add BroadcastData
1 parent e8a4a3b commit 312b4d2

File tree

2 files changed

+50
-38
lines changed

2 files changed

+50
-38
lines changed

client.go

+28-16
Original file line numberDiff line numberDiff line change
@@ -54,15 +54,28 @@ func (c *Client) GetInfo() (info *types.NetworkInfo, err error) {
5454
return
5555
}
5656

57-
func (c *Client) Peers() ([]string, error) {
57+
func (c *Client) GetPeers() ([]string, error) {
5858
body, _, err := c.httpGet("peers")
5959
if err != nil {
6060
return nil, ErrBadGateway
6161
}
6262

6363
peers := make([]string, 0)
6464
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
6679
}
6780

6881
// GetTransactionByID status: Pending/Invalid hash/overspend
@@ -435,42 +448,40 @@ func (c *Client) DownloadChunkData(id string) ([]byte, error) {
435448
}
436449

437450
func (c *Client) GetTxDataFromPeers(txId string) ([]byte, error) {
438-
peers, err := c.Peers()
451+
peers, err := c.GetPeers()
439452
if err != nil {
440453
return nil, err
441454
}
455+
442456
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)
448459
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)
450461
continue
451462
}
452463
return data, nil
453464
}
465+
454466
return nil, errors.New("get tx data from peers failed")
455467
}
456468

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()
459471
if err != nil {
460472
return err
461473
}
462474

463-
count := 0
475+
count := int64(0)
464476
for _, peer := range peers {
465-
if strings.Contains(peer, "127.0") {
466-
continue
467-
}
477+
468478
fmt.Printf("upload peer: %s, count: %d\n", peer, count)
469479
arNode := NewClient("http://" + peer)
470480
uploader, err := CreateUploader(arNode, txId, data)
471481
if err != nil {
472482
continue
473483
}
484+
474485
Loop:
475486
for !uploader.IsComplete() {
476487
if err := uploader.UploadChunk(); err != nil {
@@ -483,10 +494,11 @@ func (c *Client) UploadTxDataToPeers(txId string, data []byte) error {
483494
if uploader.IsComplete() { // upload success
484495
count++
485496
}
486-
if count > 20 {
497+
if count >= numOfNodes {
487498
return nil
488499
}
489500
}
501+
490502
return fmt.Errorf("upload tx data to peers failed, txId: %s", txId)
491503
}
492504

client_test.go

+22-22
Original file line numberDiff line numberDiff line change
@@ -196,30 +196,30 @@ func TestClient_GetTransactionDataByGateway(t *testing.T) {
196196
func TestClient_GetPeers(t *testing.T) {
197197
arNode := "https://arweave.net"
198198
cli := NewClient(arNode)
199-
peers, err := cli.Peers()
199+
peers, err := cli.GetPeers()
200200
assert.NoError(t, err)
201201
t.Log(len(peers))
202202
}
203203

204-
func Test_UploadTxDataToPeers(t *testing.T) {
205-
data := make([]byte, 1103732)
206-
data[0] = byte('z')
207-
data[1] = byte('y')
208-
data[2] = byte('j')
209-
for i := 3; i < len(data); i++ {
210-
data[i] = byte('a')
211-
}
212-
213-
cli := NewClient("https://arweave.net")
214-
txId := "D3GOny9cItUEc8qAl1oLUtnoLOB3OfSB-wKbw8TUIRc"
215-
err = cli.UploadTxDataToPeers(txId, data)
216-
assert.NoError(t, err)
217-
}
204+
// func Test_BroadcastData(t *testing.T) {
205+
// data := make([]byte, 1103732)
206+
// data[0] = byte('z')
207+
// data[1] = byte('y')
208+
// data[2] = byte('j')
209+
// for i := 3; i < len(data); i++ {
210+
// data[i] = byte('a')
211+
// }
212+
213+
// cli := NewClient("https://arweave.net")
214+
// txId := "D3GOny9cItUEc8qAl1oLUtnoLOB3OfSB-wKbw8TUIRc"
215+
// err = cli.BroadcastData(txId, data, 1)
216+
// assert.NoError(t, err)
217+
// }
218218

219-
func Test_GetTxDataFromPeers(t *testing.T) {
220-
cli := NewClient("https://arweave.net")
221-
txId := "D3GOny9cItUEc8qAl1oLUtnoLOB3OfSB-wKbw8TUIRc"
222-
data, err := cli.GetTxDataFromPeers(txId)
223-
assert.NoError(t, err)
224-
assert.Equal(t, 1471643, len(data))
225-
}
219+
// func Test_GetTxDataFromPeers(t *testing.T) {
220+
// cli := NewClient("https://arweave.net")
221+
// txId := "D3GOny9cItUEc8qAl1oLUtnoLOB3OfSB-wKbw8TUIRc"
222+
// data, err := cli.GetTxDataFromPeers(txId)
223+
// assert.NoError(t, err)
224+
// assert.Equal(t, 1471643, len(data))
225+
// }

0 commit comments

Comments
 (0)