package commonclient import ( "fmt" "github.com/nspcc-dev/neo-go/pkg/rpcclient/unwrap" "github.com/nspcc-dev/neo-go/pkg/util" "github.com/nspcc-dev/neo-go/pkg/vm/stackitem" ) // ReadIteratorItems calls method that returns iterator and traverses the iterator until all items are read into array. func ReadIteratorItems(inv Invoker, batchSize int, contract util.Uint160, method string, params ...any) ([]stackitem.Item, error) { if batchSize <= 0 { panic("batch size must be positive") } sessionID, iter, err := unwrap.SessionIterator(inv.Call(contract, method, params...)) if err != nil { return nil, fmt.Errorf("unwrap session iterator: %w", err) } var shouldStop bool res := make([]stackitem.Item, 0, len(iter.Values)) for !shouldStop { items, err := inv.TraverseIterator(sessionID, &iter, batchSize) if err != nil { return nil, err } res = append(res, items...) shouldStop = len(items) < batchSize } return res, nil }