Skip to content

Commit

Permalink
ARCO-170: replace go-bt with go-sdk (#561)
Browse files Browse the repository at this point in the history
* ARCO-170: replace go-bt with go-sdk

* ARCO-170: replace unused replace

* ARCO-170: update go.mod

* ARCO-170: replace go-bt after rebase

* ARCO-170: regenerate mocks

* ARCO-170: revert change in tests

* ARCO-170: fix test

* ARCO-170: fix PR comments

* ARCO-170: reorganize imports

* ARCO-170: add sdkTx alias to sdk.Transaction package

* ARCO-170: remove unused comments

* ARCO-170: update alias in e2e tests
  • Loading branch information
pawellewandowski98 authored Aug 22, 2024
1 parent ab0592f commit 31ff375
Show file tree
Hide file tree
Showing 51 changed files with 859 additions and 937 deletions.
4 changes: 2 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ module github.com/bitcoin-sv/arc
go 1.22.5

require (
github.com/bitcoin-sv/go-sdk v1.0.0
github.com/cenkalti/backoff/v4 v4.3.0
github.com/getkin/kin-openapi v0.127.0
github.com/go-testfixtures/testfixtures/v3 v3.9.0
Expand All @@ -14,8 +15,6 @@ require (
github.com/labstack/echo/v4 v4.12.0
github.com/lib/pq v1.10.9
github.com/libsv/go-bc v0.1.29
github.com/libsv/go-bk v0.1.6
github.com/libsv/go-bt v1.0.8
github.com/libsv/go-bt/v2 v2.2.5
github.com/libsv/go-p2p v0.3.2
github.com/lmittmann/tint v1.0.5
Expand Down Expand Up @@ -94,6 +93,7 @@ require (
github.com/json-iterator/go v1.1.12 // indirect
github.com/klauspost/compress v1.17.9 // indirect
github.com/labstack/gommon v0.4.2 // indirect
github.com/libsv/go-bk v0.1.6 // indirect
github.com/magiconair/properties v1.8.7 // indirect
github.com/mailru/easyjson v0.7.7 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
Expand Down
9 changes: 4 additions & 5 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ github.com/apapsch/go-jsonmerge/v2 v2.0.0 h1:axGnT1gRIfimI7gJifB699GoE/oq+F2MU7D
github.com/apapsch/go-jsonmerge/v2 v2.0.0/go.mod h1:lvDnEdqiQrp0O42VQGgmlKpxL1AP2+08jFMw88y4klk=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
github.com/bitcoin-sv/go-sdk v1.0.0 h1:jAx0Ib5rtCC5eeY2h6JD/2ojSe6IYY50F4SWu78Yv34=
github.com/bitcoin-sv/go-sdk v1.0.0/go.mod h1:NOAkJLbjqKOLuxJmb9ABG86ExTZp4HS8+iygiDIUps4=
github.com/bitcoinsv/bsvd v0.0.0-20190609155523-4c29707f7173 h1:2yTIV9u7H0BhRDGXH5xrAwAz7XibWJtX2dNezMeNsUo=
github.com/bitcoinsv/bsvd v0.0.0-20190609155523-4c29707f7173/go.mod h1:BZ1UcC9+tmcDEcdVXgpt13hMczwJxWzpAn68wNs7zRA=
github.com/bitcoinsv/bsvutil v0.0.0-20181216182056-1d77cf353ea9 h1:hFI8rT84FCA0FFy3cFrkW5Nz4FyNKlIdCvEvvTNySKg=
Expand Down Expand Up @@ -197,8 +199,8 @@ github.com/libsv/go-bc v0.1.29 h1:w3ZnpZxLkTrjklwkr9x/y/xv0vJz5FVVZjd/gvtvGQs=
github.com/libsv/go-bc v0.1.29/go.mod h1:l6epTfcakN8YKId/hrpUzlu1QeT3ODF1MI3DeYhG1O8=
github.com/libsv/go-bk v0.1.6 h1:c9CiT5+64HRDbzxPl1v/oiFmbvWZTuUYqywCf+MBs/c=
github.com/libsv/go-bk v0.1.6/go.mod h1:khJboDoH18FPUaZlzRFKzlVN84d4YfdmlDtdX4LAjQA=
github.com/libsv/go-bt v1.0.8 h1:nWLLcnUm0dxNO3exqrL5jvAcTGkl0dsnBuQqB6+M6vQ=
github.com/libsv/go-bt v1.0.8/go.mod h1:yO023bNYLh5DwcOYl+ZqLAeTemoy6K+2UbQlIBMv+EQ=
github.com/libsv/go-bt v1.0.4 h1:2Css5lfomk/J97tM5Gk56Lp+tTK6xWYnmHNc/fGO6lE=
github.com/libsv/go-bt v1.0.4/go.mod h1:AfXoLFYEbY/TvCq/84xTce2xGjPUuC5imokHmcykF2k=
github.com/libsv/go-bt/v2 v2.2.5 h1:VoggBLMRW9NYoFujqe5bSYKqnw5y+fYfufgERSoubog=
github.com/libsv/go-bt/v2 v2.2.5/go.mod h1:cV45+jDlPOLfhJLfpLmpQoWzrIvVth9Ao2ZO1f6CcqU=
github.com/libsv/go-p2p v0.3.2 h1:O32CzkqM+jhSuleRHJln6JjL2pKH8aaRTx8lAfhIiic=
Expand Down Expand Up @@ -386,7 +388,6 @@ go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN8
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201208171446-5f87f3452ae9/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30=
golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M=
Expand All @@ -411,7 +412,6 @@ golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
Expand All @@ -422,7 +422,6 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.23.0 h1:YfKFowiIMvtgl1UERQoTPPToxltDeZfbj4H7dVUCwmM=
golang.org/x/sys v0.23.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.22.0 h1:BbsgPEJULsl2fV/AT3v15Mjva5yXKQDyKf+TbDz7QJk=
golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4=
Expand Down
38 changes: 23 additions & 15 deletions internal/beef/beef.go
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package beef

import (
"bytes"
"errors"
"fmt"

"github.com/libsv/go-bc"
"github.com/libsv/go-bt/v2"
sdkTx "github.com/bitcoin-sv/go-sdk/transaction"
)

const (
Expand All @@ -25,8 +25,8 @@ const (
)

type TxData struct {
Transaction *bt.Tx
BumpIndex *bt.VarInt
Transaction *sdkTx.Transaction
BumpIndex *sdkTx.VarInt
txID string
}

Expand All @@ -43,7 +43,7 @@ func (td *TxData) GetTxID() string {
}

type BEEF struct {
BUMPs []*bc.BUMP
BUMPs []*sdkTx.MerklePath
Transactions []*TxData
}

Expand Down Expand Up @@ -83,31 +83,39 @@ func DecodeBEEF(beefHex []byte) (*BEEF, []byte, error) {
return decodedBeef, remainingBytes, nil
}

func (d *BEEF) GetLatestTx() *bt.Tx {
func (d *BEEF) GetLatestTx() *sdkTx.Transaction {
return d.Transactions[len(d.Transactions)-1].Transaction // get the last transaction as the processed transaction - it should be the last one because of khan's ordering
}

func decodeBUMPs(beefBytes []byte) ([]*bc.BUMP, []byte, error) {
func decodeBUMPs(beefBytes []byte) ([]*sdkTx.MerklePath, []byte, error) {
if len(beefBytes) == 0 {
return nil, nil, errors.New("cannot decode BUMP - no bytes provided")
}

nBump, bytesUsed := bt.NewVarIntFromBytes(beefBytes)
nBump, bytesUsed := sdkTx.NewVarIntFromBytes(beefBytes)

if nBump == 0 {
return nil, nil, errors.New("invalid BEEF - lack of BUMPs")
}

beefBytes = beefBytes[bytesUsed:]

bumps := make([]*bc.BUMP, 0, uint64(nBump))
bumps := make([]*sdkTx.MerklePath, 0, uint64(nBump))
for i := uint64(0); i < uint64(nBump); i++ {
bump, bytesUsed, err := bc.NewBUMPFromStream(beefBytes)
fmt.Println(len(beefBytes))
bump, err := sdkTx.NewMerklePathFromBinary(beefBytes)
if err != nil {
return nil, nil, err
}

beefBytes = beefBytes[bytesUsed:]
// calculate the number of bytes used to encode the bump
bumpBytes := bump.Bytes()
usedBytes := beefBytes[:len(bumpBytes)]
if !bytes.Equal(bumpBytes, usedBytes) {
return nil, nil, errors.New("beef bytes not equal")
}

beefBytes = beefBytes[len(bumpBytes):]

bumps = append(bumps, bump)
}
Expand All @@ -120,7 +128,7 @@ func decodeTransactionsWithPathIndexes(beefBytes []byte) ([]*TxData, []byte, err
return nil, nil, errors.New("invalid BEEF - no transaction")
}

nTransactions, bytesUsed := bt.NewVarIntFromBytes(beefBytes)
nTransactions, bytesUsed := sdkTx.NewVarIntFromBytes(beefBytes)

if nTransactions < 2 {
return nil, nil, errors.New("invalid BEEF- not enough transactions provided to decode BEEF")
Expand All @@ -131,7 +139,7 @@ func decodeTransactionsWithPathIndexes(beefBytes []byte) ([]*TxData, []byte, err
transactions := make([]*TxData, 0, int(nTransactions))

for i := 0; i < int(nTransactions); i++ {
tx, bytesUsed, err := bt.NewTxFromStream(beefBytes)
tx, bytesUsed, err := sdkTx.NewTransactionFromStream(beefBytes)
if err != nil {
return nil, nil, err
}
Expand All @@ -141,15 +149,15 @@ func decodeTransactionsWithPathIndexes(beefBytes []byte) ([]*TxData, []byte, err
return nil, nil, errors.New("invalid BEEF - no HasBUMP flag")
}

var pathIndex *bt.VarInt
var pathIndex *sdkTx.VarInt

switch beefBytes[0] {
case hasBump:
beefBytes = beefBytes[1:]
if len(beefBytes) == 0 {
return nil, nil, errors.New("invalid BEEF - HasBUMP flag set, but no BUMP index")
}
value, bytesUsed := bt.NewVarIntFromBytes(beefBytes)
value, bytesUsed := sdkTx.NewVarIntFromBytes(beefBytes)
pathIndex = &value
beefBytes = beefBytes[bytesUsed:]
case hasNoBump:
Expand Down
Loading

0 comments on commit 31ff375

Please sign in to comment.