mirror of
https://github.com/aljazceru/ark.git
synced 2025-12-18 12:44:19 +01:00
Update client sdk (#207)
* Add bitcoin networks * Refactor client * Refactor explorer * Refactor store * Refactor wallet * Refactor sdk client * Refactor wasm & Update examples * Move common util funcs to internal/utils * Move to constants for service types * Add unit tests * Parallelize tests * Lint * Add job to gh action * go mod tidy * Fixes * Fixes * Fix compose file * Fixes * Fixes after review: * Drop factory pattern * Drop password from ark client methods * Make singlekey wallet manage store and wallet store instead of defining WalletStore as extension of Store * Move constants to arksdk module * Drop config and expect directory store and wallet as ark client factory args * Fix * Add constants for bitcoin/liquid explorer * Fix test * Fix wasm * Rename client.Client to client.ASPClient * Rename store.Store to store.ConfigStore * Rename wallet.Wallet to wallet.WalletService * Renamings * Lint * Fixes * Move everything to internal/utils & move ComputeVtxoTaprootScript to common * Go mod tidy
This commit is contained in:
committed by
GitHub
parent
e45bff3c70
commit
89df461623
117
pkg/client-sdk/wasm/localstorage_store_wasm.go
Normal file
117
pkg/client-sdk/wasm/localstorage_store_wasm.go
Normal file
@@ -0,0 +1,117 @@
|
||||
package arksdkwasm
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/hex"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"strconv"
|
||||
"syscall/js"
|
||||
|
||||
"github.com/ark-network/ark-sdk/internal/utils"
|
||||
"github.com/ark-network/ark-sdk/store"
|
||||
"github.com/decred/dcrd/dcrec/secp256k1/v4"
|
||||
)
|
||||
|
||||
const (
|
||||
LocalStorageStore = "localstorage"
|
||||
)
|
||||
|
||||
type storeData struct {
|
||||
AspUrl string `json:"asp_url"`
|
||||
AspPubkey string `json:"asp_pubkey"`
|
||||
WalletType string `json:"wallet_type"`
|
||||
ClientType string `json:"client_type"`
|
||||
ExplorerURL string `json:"explorer_url"`
|
||||
Network string `json:"network"`
|
||||
RoundLifetime string `json:"round_lifetime"`
|
||||
UnilateralExitDelay string `json:"unilateral_exit_delay"`
|
||||
MinRelayFee string `json:"min_relay_fee"`
|
||||
}
|
||||
|
||||
type localStorageStore struct {
|
||||
store js.Value
|
||||
}
|
||||
|
||||
func NewLocalStorageStore() (store.ConfigStore, error) {
|
||||
store := js.Global().Get("localStorage")
|
||||
return &localStorageStore{store}, nil
|
||||
}
|
||||
|
||||
func (s *localStorageStore) GetType() string {
|
||||
return LocalStorageStore
|
||||
}
|
||||
|
||||
func (s *localStorageStore) GetDatadir() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
func (s *localStorageStore) AddData(ctx context.Context, data store.StoreData) error {
|
||||
sd := &storeData{
|
||||
AspUrl: data.AspUrl,
|
||||
AspPubkey: hex.EncodeToString(data.AspPubkey.SerializeCompressed()),
|
||||
WalletType: data.WalletType,
|
||||
ClientType: data.ClientType,
|
||||
Network: data.Network.Name,
|
||||
RoundLifetime: fmt.Sprintf("%d", data.RoundLifetime),
|
||||
UnilateralExitDelay: fmt.Sprintf("%d", data.UnilateralExitDelay),
|
||||
MinRelayFee: fmt.Sprintf("%d", data.MinRelayFee),
|
||||
}
|
||||
return s.writeData(sd)
|
||||
}
|
||||
|
||||
func (s *localStorageStore) GetData(ctx context.Context) (*store.StoreData, error) {
|
||||
key := s.store.Call("getItem", "asp_pubkey")
|
||||
if key.IsNull() || key.IsUndefined() {
|
||||
return nil, nil
|
||||
}
|
||||
buf, err := hex.DecodeString(key.String())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if len(buf) <= 0 {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
aspPubkey, err := secp256k1.ParsePubKey(buf)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
network := utils.NetworkFromString(s.store.Call("getItem", "network").String())
|
||||
roundLifetime, _ := strconv.Atoi(s.store.Call("getItem", "round_lifetime").String())
|
||||
unilateralExitDelay, _ := strconv.Atoi(s.store.Call("getItem", "unilateral_exit_delay").String())
|
||||
minRelayFee, _ := strconv.Atoi(s.store.Call("getItem", "min_relay_fee").String())
|
||||
|
||||
return &store.StoreData{
|
||||
AspUrl: s.store.Call("getItem", "asp_url").String(),
|
||||
AspPubkey: aspPubkey,
|
||||
WalletType: s.store.Call("getItem", "wallet_type").String(),
|
||||
ClientType: s.store.Call("getItem", "client_type").String(),
|
||||
Network: network,
|
||||
RoundLifetime: int64(roundLifetime),
|
||||
UnilateralExitDelay: int64(unilateralExitDelay),
|
||||
MinRelayFee: uint64(minRelayFee),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *localStorageStore) CleanData(ctx context.Context) error {
|
||||
if err := s.writeData(&storeData{}); err != nil {
|
||||
return fmt.Errorf("failed to write to store: %s", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *localStorageStore) writeData(data *storeData) error {
|
||||
dataMap := make(map[string]string)
|
||||
buf, err := json.Marshal(data)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err := json.Unmarshal(buf, &dataMap); err != nil {
|
||||
return err
|
||||
}
|
||||
for key, value := range dataMap {
|
||||
s.store.Call("setItem", key, value)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user