Skip to content

Commit ac44bfe

Browse files
committed
fix: swap store address formatting and migration
1 parent 28cf401 commit ac44bfe

File tree

4 files changed

+89
-5
lines changed

4 files changed

+89
-5
lines changed

pkg/settlement/swap/addressbook.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ func peerKey(peer swarm.Address) string {
198198

199199
// chequebookPeerKey computes the key where to store the peer for a chequebook.
200200
func chequebookPeerKey(chequebook common.Address) string {
201-
return fmt.Sprintf("%s%s", peerChequebookPrefix, string(chequebook[:]))
201+
return fmt.Sprintf("%s%x", peerChequebookPrefix, chequebook)
202202
}
203203

204204
// peerBeneficiaryKey computes the key where to store the beneficiary for a peer.
@@ -208,7 +208,7 @@ func peerBeneficiaryKey(peer swarm.Address) string {
208208

209209
// beneficiaryPeerKey computes the key where to store the peer for a beneficiary.
210210
func beneficiaryPeerKey(peer common.Address) string {
211-
return fmt.Sprintf("%s%s", beneficiaryPeerPrefix, string(peer[:]))
211+
return fmt.Sprintf("%s%x", beneficiaryPeerPrefix, peer)
212212
}
213213

214214
func peerDeductedByKey(peer swarm.Address) string {

pkg/settlement/swap/swap_test.go

+2-3
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ package swap_test
77
import (
88
"context"
99
"errors"
10-
"fmt"
1110
"io/ioutil"
1211
"math/big"
1312
"testing"
@@ -761,7 +760,7 @@ func TestStateStoreKeys(t *testing.T) {
761760
t.Fatalf("wrong peer key. wanted %s, got %s", expected, swap.PeerKey(swarmAddress))
762761
}
763762

764-
expected = fmt.Sprintf("swap_peer_chequebook_%s", address[:])
763+
expected = "swap_peer_chequebook_000000000000000000000000000000000000abcd"
765764
if swap.ChequebookPeerKey(address) != expected {
766765
t.Fatalf("wrong peer key. wanted %s, got %s", expected, swap.ChequebookPeerKey(address))
767766
}
@@ -771,7 +770,7 @@ func TestStateStoreKeys(t *testing.T) {
771770
t.Fatalf("wrong peer beneficiary key. wanted %s, got %s", expected, swap.PeerBeneficiaryKey(swarmAddress))
772771
}
773772

774-
expected = fmt.Sprintf("swap_beneficiary_peer_%s", address[:])
773+
expected = "swap_beneficiary_peer_000000000000000000000000000000000000abcd"
775774
if swap.BeneficiaryPeerKey(address) != expected {
776775
t.Fatalf("wrong beneficiary peer key. wanted %s, got %s", expected, swap.BeneficiaryPeerKey(address))
777776
}

pkg/statestore/leveldb/migration.go

+39
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ import (
2020
"errors"
2121
"fmt"
2222
"strings"
23+
24+
"github.com/ethereum/go-ethereum/common"
2325
)
2426

2527
var (
@@ -35,6 +37,7 @@ const (
3537
dbSchemaCleanInterval = "clean-interval"
3638
dbSchemaNoStamp = "no-stamp"
3739
dbSchemaFlushBlock = "flushblock"
40+
dbSchemaSwapAddr = "swapaddr"
3841
)
3942

4043
var (
@@ -54,6 +57,7 @@ var schemaMigrations = []migration{
5457
{name: dbSchemaCleanInterval, fn: migrateGrace},
5558
{name: dbSchemaNoStamp, fn: migrateStamp},
5659
{name: dbSchemaFlushBlock, fn: migrateFB},
60+
{name: dbSchemaSwapAddr, fn: migrateSwap},
5761
}
5862

5963
func migrateFB(s *store) error {
@@ -108,6 +112,41 @@ func migrateGrace(s *store) error {
108112
return nil
109113
}
110114

115+
func migrateSwap(s *store) error {
116+
migratePrefix := func(prefix string) error {
117+
keys, err := collectKeys(s, prefix)
118+
if err != nil {
119+
return err
120+
}
121+
122+
for _, key := range keys {
123+
split := strings.SplitAfter(key, prefix)
124+
if len(split) != 2 {
125+
return errors.New("no peer in key")
126+
}
127+
128+
addr := common.BytesToAddress([]byte(split[1]))
129+
fixed := fmt.Sprintf("%s%x", prefix, addr)
130+
131+
var chequebookAddress common.Address
132+
if err = s.Get(key, &chequebookAddress); err != nil {
133+
return err
134+
}
135+
136+
if err = s.Put(fixed, chequebookAddress); err != nil {
137+
return err
138+
}
139+
}
140+
return nil
141+
}
142+
143+
if err := migratePrefix("swap_peer_chequebook_"); err != nil {
144+
return err
145+
}
146+
147+
return migratePrefix("swap_beneficiary_peer_")
148+
}
149+
111150
func (s *store) migrate(schemaName string) error {
112151
migrations, err := getMigrations(schemaName, dbSchemaCurrent, schemaMigrations, s)
113152
if err != nil {

pkg/statestore/leveldb/migration_test.go

+46
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,11 @@ package leveldb
1818

1919
import (
2020
"errors"
21+
"fmt"
2122
"io/ioutil"
2223
"testing"
2324

25+
"github.com/ethereum/go-ethereum/common"
2426
"github.com/ethersphere/bee/pkg/logging"
2527
)
2628

@@ -282,3 +284,47 @@ func TestMigrationErrorTo(t *testing.T) {
282284
t.Errorf("migration ran but shouldnt have")
283285
}
284286
}
287+
288+
func TestMigrationSwap(t *testing.T) {
289+
dir := t.TempDir()
290+
logger := logging.New(ioutil.Discard, 0)
291+
292+
// start the fresh statestore with the sanctuary schema name
293+
db, err := NewStateStore(dir, logger)
294+
if err != nil {
295+
t.Fatal(err)
296+
}
297+
defer db.Close()
298+
299+
address := common.HexToAddress("0xabcd")
300+
storedAddress := common.HexToAddress("0xffff")
301+
302+
if err = db.Put(fmt.Sprintf("swap_peer_chequebook_%s", address[:]), storedAddress); err != nil {
303+
t.Fatal(err)
304+
}
305+
306+
if err = db.Put(fmt.Sprintf("swap_beneficiary_peer_%s", address[:]), storedAddress); err != nil {
307+
t.Fatal(err)
308+
}
309+
310+
if err = migrateSwap(db.(*store)); err != nil {
311+
t.Fatal(err)
312+
}
313+
314+
var retrievedAddress common.Address
315+
if err = db.Get("swap_peer_chequebook_000000000000000000000000000000000000abcd", &retrievedAddress); err != nil {
316+
t.Fatal(err)
317+
}
318+
319+
if retrievedAddress != storedAddress {
320+
t.Fatalf("got wrong address. wanted %x, got %x", storedAddress, retrievedAddress)
321+
}
322+
323+
if err = db.Get("swap_beneficiary_peer_000000000000000000000000000000000000abcd", &retrievedAddress); err != nil {
324+
t.Fatal(err)
325+
}
326+
327+
if retrievedAddress != storedAddress {
328+
t.Fatalf("got wrong address. wanted %x, got %x", storedAddress, retrievedAddress)
329+
}
330+
}

0 commit comments

Comments
 (0)