Skip to content

FmtCallDataCairo0

Formats function calls into calldata for Cairo 0 contracts.

Method Signature

func FmtCallDataCairo0(callArray []rpc.FunctionCall) []*felt.Felt

Parameters

  • callArray - Slice of function calls to format

Returns

  • []*felt.Felt - Formatted calldata array for Cairo 0 contracts

Usage Example

package main
 
import (
    "fmt"
 
    "github.com/NethermindEth/juno/core/felt"
    "github.com/NethermindEth/starknet.go/account"
    "github.com/NethermindEth/starknet.go/rpc"
    "github.com/NethermindEth/starknet.go/utils"
)
 
func main() {
    // Define contract address and entry point
    contractAddress, _ := utils.HexToFelt("0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7")
    entryPointSelector := utils.GetSelectorFromNameFelt("transfer")
 
    // Create recipient address
    recipient, _ := new(felt.Felt).SetString("0x1234567890abcdef")
 
    // Create function calls
    functionCalls := []rpc.FunctionCall{
        {
            ContractAddress:    contractAddress,
            EntryPointSelector: entryPointSelector,
            Calldata: []*felt.Felt{
                recipient,                      // recipient
                new(felt.Felt).SetUint64(100), // amount low
                new(felt.Felt).SetUint64(0),   // amount high
            },
        },
    }
 
    // Format calldata for Cairo 0
    calldata := account.FmtCallDataCairo0(functionCalls)
    fmt.Printf("Formatted calldata length: %d\n", len(calldata))
 
    // Display the formatted calldata structure
    fmt.Println("\nCalldata structure:")
    fmt.Printf("  Number of calls: %s\n", calldata[0])
    if len(calldata) > 1 {
        fmt.Printf("  First call contract: %s\n", calldata[1])
    }
    if len(calldata) > 2 {
        fmt.Printf("  First call selector: %s\n", calldata[2])
    }
 
    // Display all calldata elements
    fmt.Println("\nFull calldata array:")
    for i, data := range calldata {
        fmt.Printf("  [%d]: %s\n", i, data)
    }
}

Expected Output

Formatted calldata length: 9
 
Calldata structure:
  Number of calls: 0x1
  First call contract: 0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7
  First call selector: 0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e
 
Full calldata array:
  [0]: 0x1
  [1]: 0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7
  [2]: 0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e
  [3]: 0x0
  [4]: 0x3
  [5]: 0x3
  [6]: 0x1234567890abcdef
  [7]: 0x64
  [8]: 0x0

Error Handling

This function doesn't return an error. Ensure the function calls array is properly populated before calling.

if len(functionCalls) == 0 {
    log.Fatal("No function calls to format")
}
 
calldata := account.FmtCallDataCairo0(functionCalls)
// Safe to use calldata

Related Methods