Skip to content

BuildDeclareTxn

Builds a declare transaction for deploying new contract classes to Starknet.

Function Signature

func BuildDeclareTxn(
    contractClass *contracts.ContractClass,
    compiledClassHash *felt.Felt,
    opts *BuildOptions,
) (*rpc.DeclareTxnV2, error)

Source: transactions.go

Parameters

  • contractClass (*contracts.ContractClass): Sierra contract class definition
  • compiledClassHash (*felt.Felt): Hash of the compiled CASM class
  • opts (*BuildOptions): Transaction build options

Returns

  • *rpc.DeclareTxnV2: Fully constructed declare transaction V2
  • error: Error if build fails

Usage Example

package main
 
import (
	"encoding/json"
	"os"
	
	"github.com/NethermindEth/starknet.go/contracts"
	"github.com/NethermindEth/starknet.go/hash"
	"github.com/NethermindEth/starknet.go/utils"
)
 
func main() {
	// Load Sierra contract class
	sierraData, _ := os.ReadFile("contract.json")
	var sierraClass contracts.ContractClass
	json.Unmarshal(sierraData, &sierraClass)
	
	// Load and hash CASM class
	casmClass, _ := contracts.UnmarshalCasmClass("contract.casm.json")
	compiledHash, _ := hash.CompiledClassHash(casmClass)
	
	// Build declare transaction
	txn, err := utils.BuildDeclareTxn(
		&sierraClass,
		compiledHash,
		&utils.BuildOptions{
			Nonce:  currentNonce,
			MaxFee: maxFee,
		},
	)
	
	if err != nil {
		panic(err)
	}
	
	// txn is ready to be signed and sent
}

Use Cases

1. Deploy New Contract Class

txn, _ := utils.BuildDeclareTxn(sierraClass, compiledHash, &utils.BuildOptions{
    Nonce:  nonce,
    MaxFee: maxFee,
})
 
// Sign and submit
signedTxn := account.Sign(txn)
hash, _ := provider.AddDeclareTransaction(ctx, signedTxn)

2. Upgrade Contract Implementation

// Declare new version
newClassTxn, _ := utils.BuildDeclareTxn(newSierraClass, newCompiledHash, opts)
 
// Later upgrade the proxy
upgradeCall := rpc.FunctionCall{
    ContractAddress:    proxyAddress,
    EntryPointSelector: utils.GetSelectorFromNameFelt("upgrade"),
    Calldata:           []*felt.Felt{newClassHash},
}

See Also