Skip to content

FmtCallDataCairo2

Formats function calls into calldata for Cairo 2 contracts.

Function Signature

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

Parameters

  • callArray - Slice of function calls to format

Returns

  • []*felt.Felt - Formatted calldata array for Cairo 2 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"
)
 
func main() {
	// Create contract address manually to avoid utils import
	contractAddress, _ := new(felt.Felt).SetString("0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7")
 
	// Create entry point selector manually (this is the selector for "transfer")
	entryPointSelector, _ := new(felt.Felt).SetString("0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e")
 
	// 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 2
	calldata := account.FmtCallDataCairo2(functionCalls)
	fmt.Printf("Formatted calldata length: %d\n", len(calldata))
 
	// Display the formatted calldata structure
	fmt.Println("\nCalldata structure (Cairo 2):")
	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: 7
 
Calldata structure (Cairo 2):
  Number of calls: 0x1
  First call contract: 0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7
  First call selector: 0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e
 
Full calldata array:
  [0]: 0x1
  [1]: 0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7
  [2]: 0x83afd3f4caedc6eebf44246fe54e38c95e3179a5ec9ea81740eca5b482d12e
  [3]: 0x3
  [4]: 0x1234567890abcdef
  [5]: 0x64
  [6]: 0x0

Error Handling

This function does not return errors. Ensure the function calls array is properly populated before calling.

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

Related Methods