FmtCalldata
Formats calldata based on the account's Cairo version.
Method Signature
func (account *Account) FmtCalldata(fnCalls []rpc.FunctionCall) ([]*felt.Felt, error)Parameters
fnCalls- Slice of function calls to format
Returns
[]*felt.Felt- Formatted calldataerror- Error if Cairo version unsupported
Usage Example
Prerequisites: This example assumes you have account instances already created for both Cairo v0 and v2. To learn how to create an account, see NewAccount.
package main
import (
"fmt"
"log"
"github.com/NethermindEth/juno/core/felt"
"github.com/NethermindEth/starknet.go/account"
"github.com/NethermindEth/starknet.go/rpc"
)
func main() {
// Assuming 'acc2' is Cairo v2 Account and 'acc0' is Cairo v0 Account
var acc2, acc0 *account.Account
// acc2 = ... (already initialized with CairoV2)
// acc0 = ... (already initialized with CairoV0)
// Create function calls
contractAddress, _ := new(felt.Felt).SetString("0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7")
entryPointSelector, _ := new(felt.Felt).SetString("0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e")
recipient, _ := new(felt.Felt).SetString("0x1234567890abcdef")
functionCalls := []rpc.FunctionCall{
{
ContractAddress: contractAddress,
EntryPointSelector: entryPointSelector,
Calldata: []*felt.Felt{
recipient,
new(felt.Felt).SetUint64(100),
new(felt.Felt).SetUint64(0),
},
},
}
// Format calldata for Cairo v2
calldata2, err := acc2.FmtCalldata(functionCalls)
if err != nil {
log.Fatalf("Error formatting Cairo v2 calldata: %v", err)
}
fmt.Println("Cairo v2 formatted calldata:")
for i, data := range calldata2 {
fmt.Printf(" [%d]: %s\n", i, data)
}
fmt.Printf("Total elements: %d\n\n", len(calldata2))
// Format calldata for Cairo v0
calldata0, err := acc0.FmtCalldata(functionCalls)
if err != nil {
log.Fatalf("Error formatting Cairo v0 calldata: %v", err)
}
fmt.Println("Cairo v0 formatted calldata:")
for i, data := range calldata0 {
fmt.Printf(" [%d]: %s\n", i, data)
}
fmt.Printf("Total elements: %d\n", len(calldata0))
}Expected Output
Cairo v2 formatted calldata:
[0]: 0x1
[1]: 0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7
[2]: 0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e
[3]: 0x3
[4]: 0x1234567890abcdef
[5]: 0x64
[6]: 0x0
Total elements: 7
Cairo v0 formatted calldata:
[0]: 0x1
[1]: 0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7
[2]: 0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e
[3]: 0x0
[4]: 0x3
[5]: 0x3
[6]: 0x1234567890abcdef
[7]: 0x64
[8]: 0x0
Total elements: 9Description
FmtCalldata formats function calls based on the account's Cairo version:
- Cairo v0: Uses the legacy format with 9 elements total
- Cairo v2: Uses the newer format with 7 elements total
The formatting differences are handled internally based on the account's Cairo version.
Error Handling
formatted, err := acc.FmtCalldata(functionCalls)
if err != nil {
// Handle errors like:
// - Unsupported Cairo version (v1)
return err
}Related Methods
- BuildAndSendInvokeTxn - Uses FmtCalldata internally
- SignInvokeTransaction - Uses formatted calldata

