-
Notifications
You must be signed in to change notification settings - Fork 154
Contract one time oracle query #708
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
philippwerner
wants to merge
81
commits into
feature/2025-12-09-oracle-machine
Choose a base branch
from
feature/2025-12-15-contract-one-time-oracle-query
base: feature/2025-12-09-oracle-machine
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Contract one time oracle query #708
philippwerner
wants to merge
81
commits into
feature/2025-12-09-oracle-machine
from
feature/2025-12-15-contract-one-time-oracle-query
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Using plain function pointers for referencing user procedures for notifications may cause failures when snapshots are saved and loaded, because function pointer may change when the node is restarted with a snapshot in the middle of an epoch. As a solution, notification contract procedures must be registered at node startup. The function pointer and related data is stored in a registry and referenced by a procedure ID that is defined by the contract index and the line of the procedure in the source code (which stay constant between restarts and thus can be stored in the oracle engine state snapshot file).
017c75f to
45e7b62
Compare
* Add qRWA SC * Add qRWA unit test * Fix payout logic * Fix typos and renames * Fix Bug - Wrong treasury update after release when the SC does not have enough funds to pay for releaseShares (to QX) * Add a comprehensive test case * Exclude the SC from the snapshot * Fix init addresses * Fix init addresses for gtest * Add get active poll functions * Add function to get general asset balances * Add function to get a list of general assets * Adapt to new DateAndTime object * Fix Pool B extra funds after revoking management rights * Use internal Asset object in qRWA * Add checks for dividend transfer * Address comments * Snapshot QMINE shares in all SC * Fix SC code compliance * Remove unused comments
* QDuel * transfer dividends to RL shareholders * Remove magic numbers * Move test file * Changes public to protected * Adds lock mechanism * Deposit * Return qus after end epoch * Adds check state in tick * Transferring rooms and players to the next epoch * Create room in tick * Transferring rooms and players to the next epoch * Base tests * Adds tests * Fixes * Add new test * Adds cleanup for HashMaps * Update constructionEpoch
* Adjust SWATCH to burn for all infrastructure contracts * Change burn in SWATCH to balance reserve of the infrastructure SC * Change divisions to use QPI::div --------- Co-authored-by: Franziska Mueller <11660876+Franziska-Mueller@users.noreply.github.com>
* Implement QThirtyFour contract with ticket purchasing and winner selection logic * Add QReservePool and QTF contract definitions with related functionalities * Refactor QThirtyFour.h: reposition QTF2 struct definition for clarity * Test version for QThirtyFour * CalcReserveTopUp * New structs * Fees * Refactoring * Remove profit transfer from k3 to k2 with FR enabled * Adds tests * Updates testes * Does not block the purchase of a ticket at a higher price * - src/contracts/QThirtyFour.h: ensure k4 reseed uses up-to-date QRP reserve and don’t consume reseed budget with tier top-ups on k4 rounds - test/contract_qtf.cpp: expose private/protected internals for unit tests, add exact-match k2/k3 ticket generators (unique), fund jackpot balance in k4 test, and force FR off in baseline k2/k3 revenue-split test * Removes SettlementLocals and aligned_storage_t * Updates tests * Update tests * Update tests * Updates index * Updates inde• Fix k=4 settlement: protect jackpot reseed from k2/k3 reserve top-ups; correct schedule bitmask in specx * Fixes ContractVerify * Use RL::max * Fixes ContractVerify * QDuel * transfer dividends to RL shareholders * Remove magic numbers * Move test file * Changes public to protected * Adds lock mechanism * Deposit * Return qus after end epoch * Adds check state in tick * Transferring rooms and players to the next epoch * Create room in tick * Transferring rooms and players to the next epoch * Base tests * Adds tests * Fixes * Add new test * Adds cleanup for HashMaps * Renames Available to Allowed for SC Auto-update QTF index in QRP Adds cleanup for allowedSmartContracts in QRP * Fixes comment * Update constructionEpoch * Update constructionEpoch * Fixes build and warnings * Fixes warnings, order --------- Co-authored-by: Franziska Mueller <11660876+Franziska-Mueller@users.noreply.github.com>
* Fix race condition in use of reorgBuffer This fixes a problem that led to random freezes because of the concurrent use of the reorgBuffer (aka scratchpad). So far, only the tick processor or the contract processor were allowed to use it (or the main processor if the tick and contract processors were not running). However, due to the use of the scratchpad in QPI::Collection and the use of Collection::add() -> Collection::_rebuild() in pendingTxsPool.add(), the reorgBuffer recently has also been used by the request processor without any locking. In consequence, concurrent execution of pendingTxsPool.add() and other functions using the reorgBuffer in the tick/contract processor led to undefined behaviour, usually freezing the request processor before leaving pendingTxsPool.add() and before unlocking pendingTxsPool.lock. As a clean solution, reorgBuffer has been replaced by commonBuffers, a class that supports concurrent use of multiple buffers with proper locking. In qubic.cpp, it is now configured to provide 2 buffers, in order to support concurrent execution of pendingTxsPool.add() and one other commonBuffers / scratchpad use case without blocking. When other use cases of commonBuffers / scratchpad will be added in the future, the console log output "Common buffers: [...] max waiting processors" should be monitored in order to decide about adding more buffers by changing COMMON_BUFFERS_COUNT. * Add ASSERT nullptr of commonBuffer + fix typo
…-15-contract-one-time-oracle-query
Don't use commonBuffers in oracle engine for less locking in commonBuffers. A static buffer is sufficient for the the oracle engine use case, because it only requires a small buffer. However, in commonBuffers is used in the tick processor for creating oracle reply transactions for simplicity.
... for out-of-storage tick numbers (too distant future or past)
* Improve connection between node and OM. * Fix missing debug log.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Closes #672