Skip to content

NewMemKeystore

Creates a new empty in-memory keystore. MemKeystore is thread-safe (uses mutex), intended for testing and development, and not persistent (keys are lost when program exits). For production, implement a custom Keystore that securely persists keys.

Function Signature

func NewMemKeystore() *MemKeystore

Source: keystore.go

Parameters

None

Returns

  • *MemKeystore - New empty MemKeystore instance

Usage Example

package main
 
import (
	"fmt"
	"math/big"
 
	"github.com/NethermindEth/juno/core/felt"
	"github.com/NethermindEth/starknet.go/account"
)
 
func main() {
	ks := account.NewMemKeystore()
 
	fmt.Println("Created new empty MemKeystore")
 
	privKeyFelt, _ := new(felt.Felt).SetRandom()
	bytes := privKeyFelt.Bytes()
	privKey := new(big.Int).SetBytes(bytes[:])
 
	pubKey := "0x1234567890abcdef"
 
	fmt.Printf("\nTest key pair:")
	fmt.Printf("Public Key:  %s\n", pubKey)
	fmt.Printf("Private Key: %s\n", privKey)
 
	fmt.Println("\nAttempting to get non-existent key:")
	_, err := ks.Get("0x9999")
	if err != nil {
		fmt.Printf("Error (expected): %v\n", err)
	}
 
	fmt.Println("\nAdding key to keystore:")
	ks.Put(pubKey, privKey)
	fmt.Println("Key added successfully")
 
	fmt.Println("\nRetrieving key from keystore:")
	retrieved, err := ks.Get(pubKey)
	if err != nil {
		fmt.Printf("Error: %v\n", err)
	} else {
		fmt.Printf("Retrieved key: %s\n", retrieved)
		fmt.Printf("Key retrieved successfully: %v\n", retrieved != nil)
	}
 
	fmt.Println("\nAdding another key:")
	pubKey2 := "0xfedcba0987654321"
	privKey2 := new(big.Int).SetUint64(999999)
	ks.Put(pubKey2, privKey2)
	fmt.Printf("Added key with public key: %s\n", pubKey2)
 
	retrieved2, err := ks.Get(pubKey2)
	if err != nil {
		fmt.Printf("Error: %v\n", err)
	} else {
		fmt.Printf("Retrieved second key: %s\n", retrieved2)
	}
}

Error Handling

NewMemKeystore does not return errors. It always creates a valid empty keystore instance.

Common Use Cases

  • Creating an empty keystore before adding keys with Put method
  • Initializing keystore for test accounts
  • Setting up keystore for development environments
  • Managing multiple key pairs in testing scenarios