NewAccount
Creates a new Account instance.
Method Signature
func NewAccount(
provider rpc.RPCProvider,
accountAddress *felt.Felt,
publicKey string,
keystore Keystore,
cairoVersion CairoVersion,
) (*Account, error)Parameters
provider- RPC provider for blockchain interactionaccountAddress- Address of the account contractpublicKey- Public key of the account as hex stringkeystore- Keystore implementation for signing operationscairoVersion- Cairo version of the account contract (CairoV0 or CairoV2)
Returns
*Account- Newly created Account instanceerror- Error if account creation 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/joho/godotenv"
)
func main() {
// Load .env file
err := godotenv.Load(".env")
if err != nil {
log.Fatal("Error loading .env file")
}
// Get RPC URL from environment
rpcURL := os.Getenv("STARKNET_RPC_URL")
if rpcURL == "" {
log.Fatal("STARKNET_RPC_URL not set in .env")
}
// Create RPC provider
ctx := context.Background()
provider, err := rpc.NewProvider(ctx, rpcURL)
if err != nil {
fmt.Printf("Error creating provider: %v\n", err)
return
}
fmt.Println("Provider created successfully")
// Create account address (ETH token address for example)
accountAddress, _ := new(felt.Felt).SetString("0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7")
// Create keystore with test key
publicKey := "0x03603a2692a2ae60abb343e832ee53b55d6b25f02a3ef1565ec691edc7a209b2"
privateKey := new(big.Int).SetUint64(123456789)
ks := account.SetNewMemKeystore(publicKey, privateKey)
// Create a Cairo v2 account
fmt.Println("\nCreating Cairo v2 account:")
acc, err := account.NewAccount(provider, accountAddress, publicKey, ks, account.CairoV2)
if err != nil {
fmt.Printf("Error creating account: %v\n", err)
} else {
fmt.Printf("Account created successfully\n")
fmt.Printf("Account address: %s\n", accountAddress)
fmt.Printf("Cairo version: %d\n", acc.CairoVersion)
// Get chain ID
chainID, err := provider.ChainID(ctx)
if err == nil {
fmt.Printf("Chain ID: %s\n", chainID)
}
}
// Create a Cairo v0 account
fmt.Println("\nCreating Cairo v0 account:")
acc0, err := account.NewAccount(provider, accountAddress, publicKey, ks, account.CairoV0)
if err != nil {
fmt.Printf("Error creating account: %v\n", err)
} else {
fmt.Printf("Account created successfully\n")
fmt.Printf("Account address: %s\n", accountAddress)
fmt.Printf("Cairo version: %d\n", acc0.CairoVersion)
}
// Test with different account address
fmt.Println("\nCreating account with different address:")
accountAddress2, _ := new(felt.Felt).SetString("0x06fbd460228d843b7fbef670ff15607bf72e19fa94de21e29811ada167b4ca39")
_, err = account.NewAccount(provider, accountAddress2, publicKey, ks, account.CairoV2)
if err != nil {
fmt.Printf("Error creating account: %v\n", err)
} else {
fmt.Printf("Account created successfully\n")
fmt.Printf("Account address: %s\n", accountAddress2)
}
// Test with different Cairo versions
fmt.Println("\nAvailable Cairo versions:")
fmt.Printf("Cairo v0: %d\n", account.CairoV0)
fmt.Printf("Cairo v2: %d\n", account.CairoV2)
}Expected Output
Provider created successfully
Creating Cairo v2 account:
Account created successfully
Account address: 0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7
Cairo version: 2
Chain ID: SN_SEPOLIA
Creating Cairo v0 account:
Account created successfully
Account address: 0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7
Cairo version: 0
Creating account with different address:
Account created successfully
Account address: 0x6fbd460228d843b7fbef670ff15607bf72e19fa94de21e29811ada167b4ca39
Available Cairo versions:
Cairo v0: 0
Cairo v2: 2Description
NewAccount creates an Account instance that can interact with an already deployed account contract on Starknet. It automatically fetches the chain ID from the provider.
Error Handling
acc, err := account.NewAccount(provider, accountAddress, publicKey, ks, account.CairoV2)
if err != nil {
// Handle errors like:
// - Provider connection failure
// - Invalid chain ID
return err
}Related Methods
- GetRandomKeys - Generate keys for testing
- PrecomputeAccountAddress - Calculate address before deployment
- BuildAndEstimateDeployAccountTxn - Deploy new account

