Verify
Verifies a signature against a message hash using the account's public key. This method checks whether a signature is valid for a given message hash using Starknet's ECDSA curve (STARK curve) to verify the signature components against the message hash and public key.
Method Signature
func (account *Account) Verify(
msgHash *felt.Felt,
signature []*felt.Felt,
) (bool, error)Source: signature.go
Parameters
msgHash(*felt.Felt): Message hash to verifysignature([]*felt.Felt): Signature array containing [r, s] components
Returns
bool: True if signature is valid for the given message hash, false otherwiseerror: Error if verification process fails
Usage Example
package main
import (
"context"
"fmt"
"log"
"math/big"
"os"
"github.com/NethermindEth/juno/core/felt"
"github.com/NethermindEth/starknet.go/account"
"github.com/NethermindEth/starknet.go/rpc"
"github.com/NethermindEth/starknet.go/utils"
"github.com/joho/godotenv"
)
func main() {
ctx := context.Background()
if err := godotenv.Load(); err != nil {
log.Fatal("Failed to load .env file:", err)
}
rpcURL := os.Getenv("STARKNET_RPC_URL")
if rpcURL == "" {
log.Fatal("STARKNET_RPC_URL not set")
}
provider, err := rpc.NewProvider(ctx, rpcURL)
if err != nil {
log.Fatal("Failed to create provider:", err)
}
accountAddress := os.Getenv("ACCOUNT_ADDRESS")
publicKey := os.Getenv("ACCOUNT_PUBLIC_KEY")
privateKey := os.Getenv("ACCOUNT_PRIVATE_KEY")
if accountAddress == "" || publicKey == "" || privateKey == "" {
log.Fatal("Account credentials not set in .env")
}
ks := account.NewMemKeystore()
privKeyBI, ok := new(big.Int).SetString(privateKey, 0)
if !ok {
log.Fatal("Failed to parse private key")
}
ks.Put(publicKey, privKeyBI)
accountAddressFelt, err := utils.HexToFelt(accountAddress)
if err != nil {
log.Fatal("Failed to parse account address:", err)
}
accnt, err := account.NewAccount(provider, accountAddressFelt, publicKey, ks, account.CairoV2)
if err != nil {
log.Fatal("Failed to create account:", err)
}
message := new(felt.Felt).SetUint64(12345)
signature, err := accnt.Sign(ctx, message)
if err != nil {
log.Fatal("Failed to sign message:", err)
}
isValid, err := accnt.Verify(message, signature)
if err != nil {
log.Fatal("Failed to verify signature:", err)
}
fmt.Printf("Message: %s\n", message.String())
fmt.Printf("Signature: [%s, %s]\n", signature[0].String(), signature[1].String())
fmt.Printf("Verification result: %v\n", isValid)
}Error Handling
valid, err := accnt.Verify(message, signature)
if err != nil {
// Handle verification errors
return err
}
if !valid {
log.Println("Signature is invalid for this message")
}Common Use Cases
- Verify off-chain signatures before processing requests
- Validate message authenticity in authentication systems
- Check signature validity in custom authorization schemes
- Verify signed data for cross-chain message verification
- Confirm signature integrity before broadcasting transactions

