35 lines
978 B
Go
35 lines
978 B
Go
package stf
|
|
|
|
import (
|
|
"context"
|
|
"iter"
|
|
|
|
"cosmossdk.io/core/header"
|
|
"cosmossdk.io/core/server"
|
|
"cosmossdk.io/core/store"
|
|
"cosmossdk.io/core/transaction"
|
|
)
|
|
|
|
// doSimsTXs constructs a function to simulate transactions in a block execution context using the provided simsBuilder.
|
|
func (s STF[T]) doSimsTXs(simsBuilder func(ctx context.Context) iter.Seq[T]) doInBlockDeliveryFn[T] {
|
|
return func(
|
|
exCtx context.Context,
|
|
_ []T,
|
|
newState store.WriterMap,
|
|
headerInfo header.Info,
|
|
) ([]server.TxResult, error) {
|
|
const key = "sims.header.time"
|
|
simsCtx := context.WithValue(exCtx, key, headerInfo.Time) //nolint: staticcheck // using string key to decouple
|
|
var results []server.TxResult
|
|
var i int32
|
|
for tx := range simsBuilder(simsCtx) {
|
|
if err := isCtxCancelled(simsCtx); err != nil {
|
|
return nil, err
|
|
}
|
|
results = append(results, s.deliverTx(simsCtx, newState, tx, transaction.ExecModeFinalize, headerInfo, i+1))
|
|
i++
|
|
}
|
|
return results, nil
|
|
}
|
|
}
|