Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions appdatabase/database.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"go.uber.org/zap"

d_common "github.com/status-im/status-go/common"
"github.com/status-im/status-go/kvstore"
"github.com/status-im/status-go/logutils"

"github.com/ethereum/go-ethereum/common"
Expand Down Expand Up @@ -97,6 +98,12 @@ func InitializeDB(path, password string, kdfIterationsNumber int) (*sql.DB, erro
return nil, err
}

kvStore := kvstore.NewDB(db)
err = kvStore.DropDeprecatedKeys(kvstore.DeprecatedKeys)
if err != nil {
return nil, err
}

return db, nil
}

Expand Down
4 changes: 4 additions & 0 deletions appdatabase/migrations/sql/1743042367_create_kv_store.up.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
CREATE TABLE IF NOT EXISTS kv_store (
key TEXT PRIMARY KEY,
value BLOB
);
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ require (
github.com/schollz/peerdiscovery v1.7.0
github.com/siphiuel/lc-proxy-wrapper v0.0.0-20230516150924-246507cee8c7
github.com/urfave/cli/v2 v2.27.2
github.com/waku-org/go-waku v0.8.1-0.20250320134751-fdf03de179a7
github.com/waku-org/go-waku v0.8.1-0.20250325095250-f59588a970e6
github.com/waku-org/waku-go-bindings v0.0.0-20250313132258-6f95d51df46c
github.com/wk8/go-ordered-map/v2 v2.1.7
github.com/yeqown/go-qrcode/v2 v2.2.1
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -2150,8 +2150,8 @@ github.com/waku-org/go-libp2p-pubsub v0.12.0-gowaku.0.20240823143342-b0f2429ca27
github.com/waku-org/go-libp2p-pubsub v0.12.0-gowaku.0.20240823143342-b0f2429ca27f/go.mod h1:Oi0zw9aw8/Y5GC99zt+Ef2gYAl+0nZlwdJonDyOz/sE=
github.com/waku-org/go-libp2p-rendezvous v0.0.0-20240110193335-a67d1cc760a0 h1:R4YYx2QamhBRl/moIxkDCNW+OP7AHbyWLBygDc/xIMo=
github.com/waku-org/go-libp2p-rendezvous v0.0.0-20240110193335-a67d1cc760a0/go.mod h1:EhZP9fee0DYjKH/IOQvoNSy1tSHp2iZadsHGphcAJgY=
github.com/waku-org/go-waku v0.8.1-0.20250320134751-fdf03de179a7 h1:SxJt0AXNUWaqFnPOB3BBK7GKf+y7eVjToq4D5ngz0gw=
github.com/waku-org/go-waku v0.8.1-0.20250320134751-fdf03de179a7/go.mod h1:zYhLgqwBE3sGP2vP+aNiM5moOKlf/uSoIv36puAj9WI=
github.com/waku-org/go-waku v0.8.1-0.20250325095250-f59588a970e6 h1:jYJlwnFuQEgQMKfgwy1CXjmQxZlSgM/2ajY0cJpEiKI=
github.com/waku-org/go-waku v0.8.1-0.20250325095250-f59588a970e6/go.mod h1:zYhLgqwBE3sGP2vP+aNiM5moOKlf/uSoIv36puAj9WI=
github.com/waku-org/go-zerokit-rln v0.1.14-0.20240102145250-fa738c0bdf59 h1:jisj+OCI6QydLtFq3Pyhu49wl9ytPN7oAHjMfepHDrA=
github.com/waku-org/go-zerokit-rln v0.1.14-0.20240102145250-fa738c0bdf59/go.mod h1:1PdBdPzyTaKt3VnpAHk3zj+r9dXPFOr3IHZP9nFle6E=
github.com/waku-org/go-zerokit-rln-apple v0.0.0-20230916172309-ee0ee61dde2b h1:KgZVhsLkxsj5gb/FfndSCQu6VYwALrCOgYI3poR95yE=
Expand Down
86 changes: 86 additions & 0 deletions kvstore/database.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package kvstore

import (
"database/sql"
)

const (
WakuRlnRateLimitState = "waku/rln-rate-limit-state"

ConfigRlnRateLimitEnabled = "config/rln-rate-limit-enabled"
)

var DeprecatedKeys = []string{}

// Database sql wrapper for db operations.
type Database struct {
db *sql.DB
}

func NewDB(db *sql.DB) *Database {
return &Database{db: db}
}

// Close closes database.
func (db Database) Close() error {
return db.db.Close()
}

// Set stores a key-value pair in kv_store
func (db *Database) Set(key string, value []byte) error {
query := `INSERT INTO kv_store (key, value) VALUES (?, ?)
ON CONFLICT(key) DO UPDATE SET value = excluded.value;`
_, err := db.db.Exec(query, key, value)
return err
}

// Get retrieves a value by key
func (db *Database) Get(key string) ([]byte, error) {
var value []byte
err := db.db.QueryRow(`SELECT value FROM kv_store WHERE key = ?`, key).Scan(&value)
if err == sql.ErrNoRows {
return nil, nil
}
return value, err
}

// SetBool stores a boolean value in kv_store
func (db *Database) SetBool(key string, value bool) error {
var boolByte byte
if value {
boolByte = 1
} else {
boolByte = 0
}
return db.Set(key, []byte{boolByte})
}

// GetBool retrieves a boolean value by key
func (db *Database) GetBool(key string) (bool, error) {
value, err := db.Get(key)
if err != nil {
return false, err
}
if value == nil {
return false, nil // Default to false if key is missing
}
return value[0] == 1, nil
}

// Delete removes a key from kv_store
func (db *Database) Delete(key string) error {
_, err := db.db.Exec(`DELETE FROM kv_store WHERE key = ?`, key)
return err
}

// DropKeys removes unused keys from kv_store
func (db *Database) DropDeprecatedKeys(keys []string) error {
for _, key := range keys {
err := db.Delete(key)
if err != nil {
return err
}
}

return nil
}
109 changes: 109 additions & 0 deletions kvstore/database_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
package kvstore

import (
"database/sql"
"testing"

"github.com/status-im/status-go/sqlite"
"github.com/status-im/status-go/t/helpers"

"github.com/stretchr/testify/require"
)

type DbInitializer struct {
}

func (a DbInitializer) Initialize(path, password string, kdfIterationsNumber int) (*sql.DB, error) {
db, err := sqlite.OpenDB(path, password, kdfIterationsNumber)
if err != nil {
return nil, err
}

_, err = db.Exec(`CREATE TABLE IF NOT EXISTS kv_store (
key TEXT PRIMARY KEY,
value BLOB
);`)

if err != nil {
return nil, err
}

return db, nil
}

func setupTestDB(t *testing.T) (*Database, func()) {
db, err := helpers.SetupTestMemorySQLDB(DbInitializer{})
require.NoError(t, err)
return NewDB(db), func() { require.NoError(t, db.Close()) }
}

func TestSetGetDelete(t *testing.T) {
db, stop := setupTestDB(t)
defer stop()

err := db.Set("key", []byte("value"))
require.NoError(t, err)

value, err := db.Get("key")
require.NoError(t, err)
require.Equal(t, []byte("value"), value)

err = db.Set("key", []byte("another-value"))
require.NoError(t, err)

value, err = db.Get("key")
require.NoError(t, err)
require.Equal(t, []byte("another-value"), value)

err = db.Delete("key")
require.NoError(t, err)

value, err = db.Get("key")
require.NoError(t, err)
require.Nil(t, value)
}

func TestSetBoolGetBool(t *testing.T) {
db, stop := setupTestDB(t)
defer stop()

value, err := db.GetBool("key")
require.NoError(t, err)
require.False(t, value)

err = db.SetBool("key", true)
require.NoError(t, err)

value, err = db.GetBool("key")
require.NoError(t, err)
require.True(t, value)

err = db.SetBool("key", false)
require.NoError(t, err)

value, err = db.GetBool("key")
require.NoError(t, err)
require.False(t, value)
}

func TestDropDeprecatedKeys(t *testing.T) {
db, stop := setupTestDB(t)
defer stop()

err := db.Set("key", []byte("value"))
require.NoError(t, err)

err = db.Set("deprecated-key", []byte("value"))
require.NoError(t, err)

err = db.DropDeprecatedKeys([]string{"deprecated-key"})
require.NoError(t, err)

value, err := db.Get("key")
require.NoError(t, err)
require.Equal(t, []byte("value"), value)

value, err = db.Get("deprecated-key")
require.NoError(t, err)
require.Nil(t, value)
}
8 changes: 7 additions & 1 deletion protocol/messenger_base_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,12 @@ import (

"go.uber.org/zap"

"github.com/status-im/status-go/appdatabase"
"github.com/status-im/status-go/eth-node/crypto"
"github.com/status-im/status-go/multiaccounts/settings"
"github.com/status-im/status-go/params"
"github.com/status-im/status-go/protocol/tt"
"github.com/status-im/status-go/t/helpers"
"github.com/status-im/status-go/wakuv2"

wakutypes "github.com/status-im/status-go/waku/types"
Expand Down Expand Up @@ -85,11 +87,15 @@ func newMessengerWithKey(shh wakutypes.Waku, privateKey *ecdsa.PrivateKey, logge
}

func newTestWakuNode(logger *zap.Logger) (wakutypes.Waku, error) {
db, err := helpers.SetupTestMemorySQLDB(appdatabase.DbInitializer{})
if err != nil {
return nil, err
}
return wakuv2.New(
nil,
&wakuv2.DefaultConfig,
logger,
nil,
db,
nil,
func([]byte, peer.AddrInfo, error) {},
nil,
Expand Down
8 changes: 6 additions & 2 deletions server/pairing/sync_device_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"github.com/stretchr/testify/suite"

"github.com/status-im/status-go/api"
"github.com/status-im/status-go/appdatabase"
"github.com/status-im/status-go/common/dbsetup"
"github.com/status-im/status-go/eth-node/crypto"
"github.com/status-im/status-go/eth-node/types"
Expand All @@ -33,6 +34,7 @@ import (
"github.com/status-im/status-go/protocol/tt"
accservice "github.com/status-im/status-go/services/accounts"
"github.com/status-im/status-go/services/browsers"
"github.com/status-im/status-go/t/helpers"
"github.com/status-im/status-go/wakuv2"
)

Expand Down Expand Up @@ -85,8 +87,10 @@ func (s *SyncDeviceSuite) SetupTest() {
DefaultShardPubsubTopic: wakuv2.DefaultShardPubsubTopic(),
EnableStoreConfirmationForMessagesSent: false,
}
var err error
s.pxBootNode, err = wakuv2.New(nil, exchangeNodeConfig, s.logger.Named("pxServerNode"), nil, nil, nil, nil)

db, err := helpers.SetupTestMemorySQLDB(appdatabase.DbInitializer{})
s.Require().NoError(err)
s.pxBootNode, err = wakuv2.New(nil, exchangeNodeConfig, s.logger.Named("pxServerNode"), db, nil, nil, nil)
s.Require().NoError(err)
s.Require().NoError(s.pxBootNode.Start())

Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion vendor/modules.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1041,7 +1041,7 @@ github.com/waku-org/go-discover/discover/v5wire
github.com/waku-org/go-libp2p-rendezvous
github.com/waku-org/go-libp2p-rendezvous/db
github.com/waku-org/go-libp2p-rendezvous/pb
# github.com/waku-org/go-waku v0.8.1-0.20250320134751-fdf03de179a7
# github.com/waku-org/go-waku v0.8.1-0.20250325095250-f59588a970e6
## explicit; go 1.21
github.com/waku-org/go-waku/logging
github.com/waku-org/go-waku/tests
Expand Down
Loading