Skip to content

Commit 0694272

Browse files
committed
Fix conflicts between scheduled callbacks and malleability
1 parent 7f882c7 commit 0694272

File tree

3 files changed

+15
-47
lines changed

3 files changed

+15
-47
lines changed

engine/execution/computation/computer/computer.go

Lines changed: 7 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,10 @@ func NewBlockComputer(
184184
return nil, fmt.Errorf("could not build system chunk transaction: %w", err)
185185
}
186186

187-
processCallbackTxn := blueprints.ProcessCallbacksTransaction(vmCtx.Chain)
187+
processCallbackTxn, err := blueprints.ProcessCallbacksTransaction(vmCtx.Chain)
188+
if err != nil {
189+
return nil, fmt.Errorf("failed to generate callbacks script: %w", err)
190+
}
188191

189192
return &blockComputer{
190193
vm: vm,
@@ -286,13 +289,8 @@ func (e *blockComputer) queueUserTransactions(
286289
isSystemTransaction: false,
287290
}
288291

289-
<<<<<<< HEAD
290292
for i, txnBody := range collection.Collection.Transactions {
291-
requestQueue <- newTransactionRequest(
292-
=======
293-
for i, txnBody := range collection.Transactions {
294293
txQueue <- newTransactionRequest(
295-
>>>>>>> master
296294
collectionInfo,
297295
collectionCtx,
298296
collectionLogger,
@@ -444,17 +442,9 @@ func (e *blockComputer) executeUserTransactions(
444442
rawCollections []*entity.CompleteCollection,
445443
userTxCount int,
446444
) {
447-
<<<<<<< HEAD
448-
txQueue := make(chan TransactionRequest, userTxCount)
449-
450-
e.queueUserTransactions(
445+
txQueue := e.queueUserTransactions(
451446
block.BlockID(),
452447
block.Block.ToHeader(),
453-
=======
454-
txQueue := e.queueUserTransactions(
455-
block.ID(),
456-
block.Block.Header,
457-
>>>>>>> master
458448
rawCollections,
459449
userTxCount,
460450
)
@@ -578,21 +568,10 @@ func (e *blockComputer) executeProcessCallback(
578568
blockSpan otelTrace.Span,
579569
txnIndex uint32,
580570
systemLogger zerolog.Logger,
581-
<<<<<<< HEAD
582-
) ([]*flow.TransactionBody, error) {
583-
processTxn, err := blueprints.ProcessCallbacksTransaction(e.vmCtx.Chain)
584-
if err != nil {
585-
return nil, fmt.Errorf("failed to generate callbacks script: %w", err)
586-
}
587-
588-
// add process callback transaction to the system collection info
589-
// TODO(7749): fix illegal mutation
590-
systemCollectionInfo.CompleteCollection.Collection.Transactions = append(systemCollectionInfo.CompleteCollection.Collection.Transactions, processTxn) //nolint:structwrite
591-
=======
592571
) ([]*flow.TransactionBody, uint32, error) {
593572
// add process callback transaction to the system collection info
594-
systemCollectionInfo.CompleteCollection.Transactions = append(systemCollectionInfo.CompleteCollection.Transactions, e.processCallbackTxn)
595-
>>>>>>> master
573+
// TODO(7749): fix illegal mutation
574+
systemCollectionInfo.CompleteCollection.Collection.Transactions = append(systemCollectionInfo.CompleteCollection.Collection.Transactions, e.processCallbackTxn) //nolint:structwrite
596575

597576
request := newTransactionRequest(
598577
systemCollectionInfo,

fvm/blueprints/scheduled_callback.go

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,11 @@ import (
1515

1616
const callbackTransactionGasLimit = flow.DefaultMaxTransactionGasLimit
1717

18-
<<<<<<< HEAD
1918
// ProcessCallbacksTransaction constructs a transaction for processing callbacks, for the given callback.
2019
// No errors are expected during normal operation.
2120
func ProcessCallbacksTransaction(chain flow.Chain) (*flow.TransactionBody, error) {
22-
script := prepareScheduledContractTransaction(chain, processCallbacksTransaction)
23-
=======
24-
func ProcessCallbacksTransaction(chain flow.Chain) *flow.TransactionBody {
2521
sc := systemcontracts.SystemContractsForChain(chain.ChainID())
2622
script := templates.GenerateProcessCallbackScript(sc.AsTemplateEnv())
27-
>>>>>>> master
2823

2924
return flow.NewTransactionBodyBuilder().
3025
SetScript(script).
@@ -43,30 +38,20 @@ func ExecuteCallbacksTransactions(chainID flow.Chain, processEvents flow.EventsL
4338
return nil, fmt.Errorf("failed to get callback args from event: %w", err)
4439
}
4540

46-
<<<<<<< HEAD
47-
tx, err := executeCallbackTransaction(chainID, id, effort)
41+
tx, err := executeCallbackTransaction(env, id, effort)
4842
if err != nil {
4943
return nil, fmt.Errorf("failed to construct execute callback transactions: %w", err)
5044
}
51-
=======
52-
tx := executeCallbackTransaction(env, id, effort)
53-
>>>>>>> master
5445
txs = append(txs, tx)
5546
}
5647

5748
return txs, nil
5849
}
5950

60-
<<<<<<< HEAD
61-
func executeCallbackTransaction(chain flow.Chain, id []byte, effort uint64) (*flow.TransactionBody, error) {
62-
script := prepareScheduledContractTransaction(chain, executeCallbacksTransaction)
63-
return flow.NewTransactionBodyBuilder().
64-
=======
65-
func executeCallbackTransaction(env templates.Environment, id []byte, effort uint64) *flow.TransactionBody {
51+
func executeCallbackTransaction(env templates.Environment, id []byte, effort uint64) (*flow.TransactionBody, error) {
6652
script := templates.GenerateExecuteCallbackScript(env)
6753

68-
return flow.NewTransactionBody().
69-
>>>>>>> master
54+
return flow.NewTransactionBodyBuilder().
7055
SetScript(script).
7156
AddArgument(id).
7257
SetComputeLimit(effort).

fvm/bootstrap.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -802,9 +802,13 @@ func (b *bootstrapExecutor) deployNFTStorefrontV2(deployTo flow.Address, env *te
802802

803803
func (b *bootstrapExecutor) deployFlowCallbackScheduler(deployTo flow.Address, env *templates.Environment) {
804804
contract := contracts.FlowCallbackScheduler(*env)
805+
txBody, err := blueprints.DeployContractTransaction(deployTo, contract, "FlowCallbackScheduler").Build()
806+
if err != nil {
807+
panic(fmt.Sprintf("failed to create FlowCallbackScheduler deploy transaction: %s", err))
808+
}
805809
txError, err := b.invokeMetaTransaction(
806810
b.ctx,
807-
Transaction(blueprints.DeployContractTransaction(deployTo, contract, "FlowCallbackScheduler"), 0),
811+
Transaction(txBody, 0),
808812
)
809813

810814
panicOnMetaInvokeErrf("failed to deploy FlowCallbackScheduler contract: %s", txError, err)

0 commit comments

Comments
 (0)