From bd8fd15141ee822ba6441b753effdee3961c4d28 Mon Sep 17 00:00:00 2001 From: jeffyanta Date: Sat, 17 Jan 2026 20:37:54 -0500 Subject: [PATCH] StatefulSwap now waits for VTA reservation --- ocp/rpc/transaction/swap_handler.go | 6 +++--- ocp/vm/virtual_account.go | 14 ++++++++++++-- ocp/worker/geyser/external_deposit.go | 2 +- ocp/worker/sequencer/fulfillment_handler.go | 8 ++++---- 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/ocp/rpc/transaction/swap_handler.go b/ocp/rpc/transaction/swap_handler.go index abf9dcf..0566e7a 100644 --- a/ocp/rpc/transaction/swap_handler.go +++ b/ocp/rpc/transaction/swap_handler.go @@ -103,7 +103,7 @@ func (h *CurrencyCreatorBuySwapHandler) MakeInstructions(ctx context.Context) ([ return nil, err } - h.memoryAccount, h.memoryIndex, err = vm_util.GetVirtualTimelockAccountLocationInMemory(ctx, h.data, destinationTimelockAccounts.Vault) + h.memoryAccount, h.memoryIndex, err = vm_util.GetVirtualTimelockAccountLocationInMemory(ctx, h.data, destinationTimelockAccounts.Vault, true) if err != nil { return nil, err } @@ -282,7 +282,7 @@ func (h *CurrencyCreatorSellSwapHandler) MakeInstructions(ctx context.Context) ( return nil, err } - h.memoryAccount, h.memoryIndex, err = vm_util.GetVirtualTimelockAccountLocationInMemory(ctx, h.data, destinationTimelockAccounts.Vault) + h.memoryAccount, h.memoryIndex, err = vm_util.GetVirtualTimelockAccountLocationInMemory(ctx, h.data, destinationTimelockAccounts.Vault, true) if err != nil { return nil, err } @@ -454,7 +454,7 @@ func (h *CurrencyCreatorBuySellSwapHandler) MakeInstructions(ctx context.Context return nil, err } - h.memoryAccount, h.memoryIndex, err = vm_util.GetVirtualTimelockAccountLocationInMemory(ctx, h.data, destinationTimelockAccounts.Vault) + h.memoryAccount, h.memoryIndex, err = vm_util.GetVirtualTimelockAccountLocationInMemory(ctx, h.data, destinationTimelockAccounts.Vault, true) if err != nil { return nil, err } diff --git a/ocp/vm/virtual_account.go b/ocp/vm/virtual_account.go index 9b58c25..5d9f609 100644 --- a/ocp/vm/virtual_account.go +++ b/ocp/vm/virtual_account.go @@ -97,8 +97,18 @@ func GetVirtualTimelockAccountStateInMemory(ctx context.Context, vmIndexerClient return &state, memory, uint16(protoMemory.Index), nil } -func GetVirtualTimelockAccountLocationInMemory(ctx context.Context, data ocp_data.Provider, vault *common.Account) (*common.Account, uint16, error) { - memoryAddress, index, err := data.GetVmMemoryLocationByAddress(ctx, vault.PublicKey().ToBase58()) +func GetVirtualTimelockAccountLocationInMemory(ctx context.Context, data ocp_data.Provider, vault *common.Account, waitForReservation bool) (*common.Account, uint16, error) { + var memoryAddress string + var index uint16 + var err error + for range 20 { + memoryAddress, index, err = data.GetVmMemoryLocationByAddress(ctx, vault.PublicKey().ToBase58()) + if err == nil || !waitForReservation { + break + } + + time.Sleep(time.Second / 4) + } if err != nil { return nil, 0, err } diff --git a/ocp/worker/geyser/external_deposit.go b/ocp/worker/geyser/external_deposit.go index 683ed17..7405a45 100644 --- a/ocp/worker/geyser/external_deposit.go +++ b/ocp/worker/geyser/external_deposit.go @@ -104,7 +104,7 @@ func initiateExternalDepositIntoVm(ctx context.Context, data ocp_data.Provider, return errors.Wrap(err, "error ensuring vta is initialized") } - memoryAccount, memoryIndex, err := vm_util.GetVirtualTimelockAccountLocationInMemory(ctx, data, timelockAccounts.Vault) + memoryAccount, memoryIndex, err := vm_util.GetVirtualTimelockAccountLocationInMemory(ctx, data, timelockAccounts.Vault, false) if err != nil { return errors.Wrap(err, "error getting vta location in memory") } diff --git a/ocp/worker/sequencer/fulfillment_handler.go b/ocp/worker/sequencer/fulfillment_handler.go index 473b573..3ff2fab 100644 --- a/ocp/worker/sequencer/fulfillment_handler.go +++ b/ocp/worker/sequencer/fulfillment_handler.go @@ -365,7 +365,7 @@ func (h *NoPrivacyTransferWithAuthorityFulfillmentHandler) MakeOnDemandTransacti return nil, nil, err } - sourceMemory, sourceIndex, err := vm_util.GetVirtualTimelockAccountLocationInMemory(ctx, h.data, sourceVault) + sourceMemory, sourceIndex, err := vm_util.GetVirtualTimelockAccountLocationInMemory(ctx, h.data, sourceVault, false) if err != nil { return nil, nil, err } @@ -378,7 +378,7 @@ func (h *NoPrivacyTransferWithAuthorityFulfillmentHandler) MakeOnDemandTransacti var txn solana.Transaction var makeTxnErr error if isInternal { - destinationMemory, destinationIndex, err := vm_util.GetVirtualTimelockAccountLocationInMemory(ctx, h.data, destinationToken) + destinationMemory, destinationIndex, err := vm_util.GetVirtualTimelockAccountLocationInMemory(ctx, h.data, destinationToken, false) if err != nil { return nil, nil, err } @@ -569,7 +569,7 @@ func (h *NoPrivacyWithdrawFulfillmentHandler) MakeOnDemandTransaction(ctx contex return nil, nil, err } - sourceMemory, sourceIndex, err := vm_util.GetVirtualTimelockAccountLocationInMemory(ctx, h.data, sourceVault) + sourceMemory, sourceIndex, err := vm_util.GetVirtualTimelockAccountLocationInMemory(ctx, h.data, sourceVault, false) if err != nil { return nil, nil, err } @@ -582,7 +582,7 @@ func (h *NoPrivacyWithdrawFulfillmentHandler) MakeOnDemandTransaction(ctx contex var txn solana.Transaction var makeTxnErr error if isInternal { - destinationMemory, destinationIndex, err := vm_util.GetVirtualTimelockAccountLocationInMemory(ctx, h.data, destinationToken) + destinationMemory, destinationIndex, err := vm_util.GetVirtualTimelockAccountLocationInMemory(ctx, h.data, destinationToken, false) if err != nil { return nil, nil, err }