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 definitioncompiledClassHash(*felt.Felt): Hash of the compiled CASM classopts(*BuildOptions): Transaction build options
Returns
*rpc.DeclareTxnV2: Fully constructed declare transaction V2error: 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
- Transaction Construction includes declare transaction examples

