Skip to content

Commit a7a0dea

Browse files
committed
refactor
1 parent 312b4d2 commit a7a0dea

5 files changed

+175
-152
lines changed

client.go

-108
Original file line numberDiff line numberDiff line change
@@ -446,111 +446,3 @@ func (c *Client) DownloadChunkData(id string) ([]byte, error) {
446446
}
447447
return data, nil
448448
}
449-
450-
func (c *Client) GetTxDataFromPeers(txId string) ([]byte, error) {
451-
peers, err := c.GetPeers()
452-
if err != nil {
453-
return nil, err
454-
}
455-
456-
for _, peer := range peers {
457-
pNode := NewClient("http://" + peer)
458-
data, err := pNode.GetTransactionData(txId)
459-
if err != nil {
460-
log.Error("get tx data failed", "error", err, "peer", peer)
461-
continue
462-
}
463-
return data, nil
464-
}
465-
466-
return nil, errors.New("get tx data from peers failed")
467-
}
468-
469-
func (c *Client) BroadcastData(txId string, data []byte, numOfNodes int64) error {
470-
peers, err := c.GetPeers()
471-
if err != nil {
472-
return err
473-
}
474-
475-
count := int64(0)
476-
for _, peer := range peers {
477-
478-
fmt.Printf("upload peer: %s, count: %d\n", peer, count)
479-
arNode := NewClient("http://" + peer)
480-
uploader, err := CreateUploader(arNode, txId, data)
481-
if err != nil {
482-
continue
483-
}
484-
485-
Loop:
486-
for !uploader.IsComplete() {
487-
if err := uploader.UploadChunk(); err != nil {
488-
break Loop
489-
}
490-
if uploader.LastResponseStatus != 200 {
491-
break Loop
492-
}
493-
}
494-
if uploader.IsComplete() { // upload success
495-
count++
496-
}
497-
if count >= numOfNodes {
498-
return nil
499-
}
500-
}
501-
502-
return fmt.Errorf("upload tx data to peers failed, txId: %s", txId)
503-
}
504-
505-
// push to bundler gateway
506-
507-
// SendItemToBundler send bundle bundleItem to bundler gateway
508-
func (c *Client) SendItemToBundler(itemBinary []byte) (*types.BundlerResp, error) {
509-
// post to bundler
510-
resp, err := http.DefaultClient.Post(types.BUNDLER_HOST+"/tx", "application/octet-stream", bytes.NewReader(itemBinary))
511-
if err != nil {
512-
return nil, err
513-
}
514-
if resp.StatusCode != http.StatusOK {
515-
return nil, fmt.Errorf("send to bundler request failed; http code: %d", resp.StatusCode)
516-
}
517-
518-
defer resp.Body.Close()
519-
// json unmarshal
520-
body, err := ioutil.ReadAll(resp.Body)
521-
if err != nil {
522-
return nil, fmt.Errorf("ioutil.ReadAll(resp.Body) error: %v", err)
523-
}
524-
br := &types.BundlerResp{}
525-
if err := json.Unmarshal(body, br); err != nil {
526-
return nil, fmt.Errorf("json.Unmarshal(body,br) failed; err: %v", err)
527-
}
528-
return br, nil
529-
}
530-
531-
func (c *Client) BatchSendItemToBundler(bundleItems []types.BundleItem) ([]*types.BundlerResp, error) {
532-
respList := make([]*types.BundlerResp, 0, len(bundleItems))
533-
for _, item := range bundleItems {
534-
itemBinary := item.ItemBinary
535-
if len(itemBinary) == 0 {
536-
if err := utils.GenerateItemBinary(&item); err != nil {
537-
return nil, err
538-
}
539-
itemBinary = item.ItemBinary
540-
}
541-
resp, err := c.SendItemToBundler(itemBinary)
542-
if err != nil {
543-
return nil, err
544-
}
545-
respList = append(respList, resp)
546-
}
547-
return respList, nil
548-
}
549-
550-
func (c *Client) GetBundle(arId string) (*types.Bundle, error) {
551-
data, err := c.DownloadChunkData(arId)
552-
if err != nil {
553-
return nil, err
554-
}
555-
return utils.DecodeBundle(data)
556-
}

client_broadcast.go

+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package goar
2+
3+
import (
4+
"errors"
5+
"fmt"
6+
7+
"github.com/everFinance/sandy_log/log"
8+
)
9+
10+
func (c *Client) GetTxDataFromPeers(txId string) ([]byte, error) {
11+
peers, err := c.GetPeers()
12+
if err != nil {
13+
return nil, err
14+
}
15+
16+
for _, peer := range peers {
17+
pNode := NewClient("http://" + peer)
18+
data, err := pNode.GetTransactionData(txId)
19+
if err != nil {
20+
log.Error("get tx data failed", "error", err, "peer", peer)
21+
continue
22+
}
23+
return data, nil
24+
}
25+
26+
return nil, errors.New("get tx data from peers failed")
27+
}
28+
29+
func (c *Client) BroadcastData(txId string, data []byte, numOfNodes int64) error {
30+
peers, err := c.GetPeers()
31+
if err != nil {
32+
return err
33+
}
34+
35+
count := int64(0)
36+
for _, peer := range peers {
37+
38+
fmt.Printf("upload peer: %s, count: %d\n", peer, count)
39+
arNode := NewClient("http://" + peer)
40+
uploader, err := CreateUploader(arNode, txId, data)
41+
if err != nil {
42+
continue
43+
}
44+
45+
Loop:
46+
for !uploader.IsComplete() {
47+
if err := uploader.UploadChunk(); err != nil {
48+
break Loop
49+
}
50+
if uploader.LastResponseStatus != 200 {
51+
break Loop
52+
}
53+
}
54+
if uploader.IsComplete() { // upload success
55+
count++
56+
}
57+
if count >= numOfNodes {
58+
return nil
59+
}
60+
}
61+
62+
return fmt.Errorf("upload tx data to peers failed, txId: %s", txId)
63+
}

client_bundle.go

+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package goar
2+
3+
import (
4+
"bytes"
5+
"encoding/json"
6+
"fmt"
7+
"io/ioutil"
8+
"net/http"
9+
10+
"github.com/everFinance/goar/types"
11+
"github.com/everFinance/goar/utils"
12+
)
13+
14+
func (c *Client) GetBundle(arId string) (*types.Bundle, error) {
15+
data, err := c.DownloadChunkData(arId)
16+
if err != nil {
17+
return nil, err
18+
}
19+
return utils.DecodeBundle(data)
20+
}
21+
22+
// SendItemToBundler send bundle bundleItem to bundler gateway
23+
func (c *Client) SendItemToBundler(itemBinary []byte) (*types.BundlerResp, error) {
24+
// post to bundler
25+
resp, err := http.DefaultClient.Post(types.BUNDLER_HOST+"/tx", "application/octet-stream", bytes.NewReader(itemBinary))
26+
if err != nil {
27+
return nil, err
28+
}
29+
if resp.StatusCode != http.StatusOK {
30+
return nil, fmt.Errorf("send to bundler request failed; http code: %d", resp.StatusCode)
31+
}
32+
33+
defer resp.Body.Close()
34+
// json unmarshal
35+
body, err := ioutil.ReadAll(resp.Body)
36+
if err != nil {
37+
return nil, fmt.Errorf("ioutil.ReadAll(resp.Body) error: %v", err)
38+
}
39+
br := &types.BundlerResp{}
40+
if err := json.Unmarshal(body, br); err != nil {
41+
return nil, fmt.Errorf("json.Unmarshal(body,br) failed; err: %v", err)
42+
}
43+
return br, nil
44+
}
45+
46+
func (c *Client) BatchSendItemToBundler(bundleItems []types.BundleItem) ([]*types.BundlerResp, error) {
47+
respList := make([]*types.BundlerResp, 0, len(bundleItems))
48+
for _, item := range bundleItems {
49+
itemBinary := item.ItemBinary
50+
if len(itemBinary) == 0 {
51+
if err := utils.GenerateItemBinary(&item); err != nil {
52+
return nil, err
53+
}
54+
itemBinary = item.ItemBinary
55+
}
56+
resp, err := c.SendItemToBundler(itemBinary)
57+
if err != nil {
58+
return nil, err
59+
}
60+
respList = append(respList, resp)
61+
}
62+
return respList, nil
63+
}

wallet.go

-44
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,9 @@ package goar
33
import (
44
"crypto/rsa"
55
"crypto/sha256"
6-
"errors"
76
"fmt"
87
"io/ioutil"
98
"math/big"
10-
"strconv"
119

1210
"github.com/everFinance/goar/types"
1311
"github.com/everFinance/goar/utils"
@@ -153,45 +151,3 @@ func (w *Wallet) SendTransaction(tx *types.Transaction) (id string, err error) {
153151
}
154152
return
155153
}
156-
157-
// about bundle tx
158-
159-
func (w *Wallet) CreateAndSignBundleItem(data []byte, signatureType int, target string, anchor string, tags []types.Tag) (di types.BundleItem, err error) {
160-
bundleItem := utils.NewBundleItem(w.Owner(), strconv.Itoa(signatureType), target, anchor, data, tags)
161-
// sign
162-
err = utils.SignBundleItem(bundleItem, w.PrvKey)
163-
if err != nil {
164-
return di, err
165-
}
166-
err = utils.GenerateItemBinary(bundleItem)
167-
if err != nil {
168-
return di, err
169-
}
170-
return *bundleItem, nil
171-
}
172-
173-
func (w *Wallet) SendBundleTxSpeedUp(bundleBinary []byte, tags []types.Tag, txSpeed int64) (txId string, err error) {
174-
bundleTags := []types.Tag{
175-
{Name: "Bundle-Format", Value: "binary"},
176-
{Name: "Bundle-Version", Value: "2.0.0"},
177-
}
178-
// check tags cannot include bundleTags Name
179-
mmap := map[string]struct{}{
180-
"Bundle-Format": {},
181-
"Bundle-Version": {},
182-
}
183-
for _, tag := range tags {
184-
if _, ok := mmap[tag.Name]; ok {
185-
return "", errors.New("tags can not set bundleTags")
186-
}
187-
}
188-
189-
txTags := make([]types.Tag, 0)
190-
txTags = append(bundleTags, tags...)
191-
txId, err = w.SendDataSpeedUp(bundleBinary, txTags, txSpeed)
192-
return
193-
}
194-
195-
func (w *Wallet) SendBundleTx(bundleBinary []byte, tags []types.Tag) (txId string, err error) {
196-
return w.SendBundleTxSpeedUp(bundleBinary, tags, 0)
197-
}

wallet_bundle.go

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package goar
2+
3+
import (
4+
"errors"
5+
"strconv"
6+
7+
"github.com/everFinance/goar/types"
8+
"github.com/everFinance/goar/utils"
9+
)
10+
11+
func (w *Wallet) CreateAndSignBundleItem(data []byte, signatureType int, target string, anchor string, tags []types.Tag) (di types.BundleItem, err error) {
12+
bundleItem := utils.NewBundleItem(w.Owner(), strconv.Itoa(signatureType), target, anchor, data, tags)
13+
// sign
14+
err = utils.SignBundleItem(bundleItem, w.PrvKey)
15+
if err != nil {
16+
return di, err
17+
}
18+
err = utils.GenerateItemBinary(bundleItem)
19+
if err != nil {
20+
return di, err
21+
}
22+
return *bundleItem, nil
23+
}
24+
25+
func (w *Wallet) SendBundleTxSpeedUp(bundleBinary []byte, tags []types.Tag, txSpeed int64) (txId string, err error) {
26+
bundleTags := []types.Tag{
27+
{Name: "Bundle-Format", Value: "binary"},
28+
{Name: "Bundle-Version", Value: "2.0.0"},
29+
}
30+
// check tags cannot include bundleTags Name
31+
mmap := map[string]struct{}{
32+
"Bundle-Format": {},
33+
"Bundle-Version": {},
34+
}
35+
for _, tag := range tags {
36+
if _, ok := mmap[tag.Name]; ok {
37+
return "", errors.New("tags can not set bundleTags")
38+
}
39+
}
40+
41+
txTags := make([]types.Tag, 0)
42+
txTags = append(bundleTags, tags...)
43+
txId, err = w.SendDataSpeedUp(bundleBinary, txTags, txSpeed)
44+
return
45+
}
46+
47+
func (w *Wallet) SendBundleTx(bundleBinary []byte, tags []types.Tag) (txId string, err error) {
48+
return w.SendBundleTxSpeedUp(bundleBinary, tags, 0)
49+
}

0 commit comments

Comments
 (0)