diff --git a/packages/contract.cm/src/offchain/uiCommands.ts b/packages/contract.cm/src/offchain/uiCommands.ts index 68cc41c..49aa006 100644 --- a/packages/contract.cm/src/offchain/uiCommands.ts +++ b/packages/contract.cm/src/offchain/uiCommands.ts @@ -9,7 +9,6 @@ export const constructAddWordUiCommand = ({ word, contractId }: { word: string; methodName: PUBLIC_METHODS.ADD_WORD, methodArgs: [[word] satisfies AddWordArgs], cost: FEE.ADD_WORD, - withQueue: false, }), ]); }; diff --git a/packages/contract.cm/src/onchain/addWord.ts b/packages/contract.cm/src/onchain/addWord.ts index 46d7e1f..61c2d02 100644 --- a/packages/contract.cm/src/onchain/addWord.ts +++ b/packages/contract.cm/src/onchain/addWord.ts @@ -1,5 +1,5 @@ import { constructClaim } from '@coinweb/contract-kit'; -import { readOp, storeOp, cwait, queue } from 'cwait'; +import { readOp, storeOp, cwait } from 'cwait'; import { TypedClaim } from '../../../lib/dist/shared/types'; import { AddWordArgs, createWordKey, WordClaimBody } from '../offchain/shared'; @@ -26,15 +26,13 @@ export const addWord = cwait(async (...[word]: AddWordArgs) => { console.log('await storeOp'); await storeOp(constructClaim(createWordKey(id), { word }, '0x0')); - await queue(async () => { - console.log('await readOp'); - const res = await readOp>(createWordKey(id)); + console.log('await readOp'); + const res = await readOp>(createWordKey(id)); - console.log('await storeOp2'); - await storeOp( - constructClaim(createWordKey(id + id), { word: (res?.body.word ?? '') + (res?.body.word ?? '') }, '0x0') - ); - }); + console.log('await storeOp2'); + await storeOp( + constructClaim(createWordKey(id + id), { word: (res?.body.word ?? '') + (res?.body.word ?? '') }, '0x0') + ); console.log('await extraLogic'); const wordClaim = await extraLogic(id); diff --git a/packages/cwait/src/onchain/context/context.ts b/packages/cwait/src/onchain/context/context.ts index e892496..273a71a 100644 --- a/packages/cwait/src/onchain/context/context.ts +++ b/packages/cwait/src/onchain/context/context.ts @@ -92,7 +92,4 @@ export const context = { get needSaveResult() { return getMethodArgs()[6] ?? false; }, - get isQueue() { - return getMethodArgs()[8] ?? false; - }, }; diff --git a/packages/cwait/src/onchain/index.ts b/packages/cwait/src/onchain/index.ts index 2a9dcc7..b8cda81 100644 --- a/packages/cwait/src/onchain/index.ts +++ b/packages/cwait/src/onchain/index.ts @@ -3,4 +3,3 @@ export * from './executor'; export * from './promisifiedOps'; export * from './createContract'; export * from './cwait'; -export * from './queue'; diff --git a/packages/cwait/src/onchain/queue/index.ts b/packages/cwait/src/onchain/queue/index.ts deleted file mode 100644 index cadd6a9..0000000 --- a/packages/cwait/src/onchain/queue/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './queue'; diff --git a/packages/cwait/src/onchain/queue/queue.ts b/packages/cwait/src/onchain/queue/queue.ts deleted file mode 100644 index 17614a3..0000000 --- a/packages/cwait/src/onchain/queue/queue.ts +++ /dev/null @@ -1,21 +0,0 @@ -const queues = new Set(); - -let queueId = 0; - -export const queue = Promise>(callback: TCallback) => { - const id = queueId++; - queues.add(id); - - const promise = new Promise((resolve) => { - callback().finally(() => { - queues.delete(id); - resolve(); - }); - }); - - return promise; -}; - -export const isQueueLocked = () => { - return queues.size > 0; -}; diff --git a/packages/cwait/src/onchain/utils/constructTx/prepareInThreadTxs.ts b/packages/cwait/src/onchain/utils/constructTx/prepareInThreadTxs.ts index f44a1b0..58515b5 100644 --- a/packages/cwait/src/onchain/utils/constructTx/prepareInThreadTxs.ts +++ b/packages/cwait/src/onchain/utils/constructTx/prepareInThreadTxs.ts @@ -18,7 +18,6 @@ import { ExecutorMethodArgs, ResolvedOp, ResolvedSlotOp, Task } from '../../../t import { constructFundsClaimRangRead, constructFundsClaimStore } from '../../claims/funds'; import { constructResultBlockFilter, constructResultClaimTake, resultKey } from '../../claims/result'; import { context, getRawContext } from '../../context'; -import { isQueueLocked } from '../../queue/queue'; import { isPreparedBlockOp, isPreparedExecOp } from '../typeGuards'; export const prepareInThreadTxs = ({ @@ -42,7 +41,7 @@ export const prepareInThreadTxs = ({ const restOfAvailableCweb = availableCweb - outThreadFee; - const restOfCweb = restOfAvailableCweb + storedCweb - BigInt(takeOps.length) * 100n - 3000n; + const restOfCweb = restOfAvailableCweb + storedCweb - BigInt(takeOps.length) * 100n - 3000n - queueCostFee; const txs = restOfCweb > 0n @@ -52,8 +51,9 @@ export const prepareInThreadTxs = ({ ...takeOps, ...constructSendCweb(restOfCweb, user, null), ]), + ...queue.gateway.unlock(getRawContext()), ] - : []; + : queue.gateway.unlock(getRawContext()); return { txs, calls: 0 }; } @@ -84,8 +84,7 @@ export const prepareInThreadTxs = ({ txFee += 200n; childCalls.push({ - callInfo: { - ref: constructContractRef(context.issuer, []), + callInfo: prepareQueueCall(context.issuer, { methodInfo: { methodName: context.methodName, methodArgs: [ @@ -96,15 +95,14 @@ export const prepareInThreadTxs = ({ context.thisId, true, [], - isQueueLocked(), ] satisfies ExecutorMethodArgs, }, contractInfo: { - providedCweb: cwebPerCall - 700n, + providedCweb: cwebPerCall - 700n - queueCostFee, authenticated: null, }, contractArgs: [], - }, + }), }); callsPrepared++; @@ -156,17 +154,12 @@ export const prepareInThreadTxs = ({ txFee += 800n + outThreadFee + BigInt(takeOps.length) * 100n; callsPrepared++; - const isNeedToLockQueue = !context.isQueue && isQueueLocked(); - const isNeedToUnlockQueue = context.isQueue && !isQueueLocked(); + const isNeedToResetQueue = !!childCalls.length; - if (isNeedToLockQueue) { - console.log('isNeedToLockQueue'); - txFee += queueCostFee; - } - - if (isNeedToUnlockQueue) { - console.log('isNeedToUnlockQueue'); + if (isNeedToResetQueue) { + console.log('isNeedToResetQueue'); txFee += queueUnlockFee; + txFee += queueCostFee; } let callInfo: PreparedCallInfo = { @@ -181,7 +174,6 @@ export const prepareInThreadTxs = ({ context.parentId, context.needSaveResult, takeOps.map((op) => (op.TakeOp.key.second_part as [string])[0]), - isQueueLocked(), ] satisfies ExecutorMethodArgs, }, contractInfo: { @@ -191,7 +183,7 @@ export const prepareInThreadTxs = ({ contractArgs: [constructFundsClaimRangRead(context.thisId), ...callArgs], }; - if (isNeedToLockQueue) { + if (isNeedToResetQueue) { callInfo = prepareQueueCall(context.issuer, callInfo); } @@ -211,7 +203,7 @@ export const prepareInThreadTxs = ({ returnTxs.push(constructContinueTx(getRawContext(), childBlocks, childCalls)); } - if (isNeedToUnlockQueue) { + if (isNeedToResetQueue) { returnTxs.push(...queue.gateway.unlock(getRawContext())); } } diff --git a/packages/cwait/src/onchain/utils/constructTx/prepareOutThreadTxs.ts b/packages/cwait/src/onchain/utils/constructTx/prepareOutThreadTxs.ts index d9d1d5e..f7a0b7e 100644 --- a/packages/cwait/src/onchain/utils/constructTx/prepareOutThreadTxs.ts +++ b/packages/cwait/src/onchain/utils/constructTx/prepareOutThreadTxs.ts @@ -1,14 +1,8 @@ -import { - constructContinueTx, - constructContractRef, - FullCallInfo, - NewTx, - PreparedOperation, -} from '@coinweb/contract-kit'; +import { constructContinueTx, FullCallInfo, NewTx, PreparedOperation, prepareQueueCall } from '@coinweb/contract-kit'; +import { queueCostFee } from 'lib/onchain'; import { ExecutorMethodArgs, Task } from '../../../types'; import { context, getRawContext } from '../../context'; -import { isQueueLocked } from '../../queue/queue'; import { isPreparedExecOp } from '../typeGuards'; export const prepareOutThreadTxs = ({ @@ -41,8 +35,7 @@ export const prepareOutThreadTxs = ({ const id = task.op.ExecOp.id; const callInfo = { - callInfo: { - ref: constructContractRef(context.issuer, []), + callInfo: prepareQueueCall(context.issuer, { methodInfo: { methodName: context.methodName, methodArgs: [ @@ -53,15 +46,14 @@ export const prepareOutThreadTxs = ({ context.parentId ?? context.thisId, false, [], - isQueueLocked(), ] satisfies ExecutorMethodArgs, }, contractInfo: { - providedCweb: cwebPerCall - 700n, + providedCweb: cwebPerCall - 700n - queueCostFee, authenticated: null, }, contractArgs: [], - }, + }), }; if (siblingTxInfo[task.batchId]) { diff --git a/packages/cwait/src/types.ts b/packages/cwait/src/types.ts index ead417f..a5b7fb3 100644 --- a/packages/cwait/src/types.ts +++ b/packages/cwait/src/types.ts @@ -45,5 +45,4 @@ export type ExecutorMethodArgs = [ parentId?: string, saveResult?: boolean, takenFundsIds?: string[], - isQueue?: boolean, ];