Skip to content
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

Release/v1.195 to main #66

Merged
merged 18 commits into from
Mar 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 13 additions & 12 deletions src/public_settings.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@
// no need to define AVX512 here anymore, just change the project settings to use the AVX512 version

#define MAX_NUMBER_OF_PROCESSORS 32
#define NUMBER_OF_SOLUTION_PROCESSORS 2 // do not increase this for this epoch, because there may be issues due too fast ticking
#define NUMBER_OF_SOLUTION_PROCESSORS 4 // do not increase this for this epoch, because there may be issues due too fast ticking

#define VERSION_A 1
#define VERSION_B 194
#define VERSION_C 2
#define VERSION_B 195
#define VERSION_C 0

#define EPOCH 98
#define TICK 12710000
#define EPOCH 99
#define TICK 12795000

// random seed is now obtained from spectrumDigests

Expand All @@ -24,13 +24,14 @@ static unsigned short UNIVERSE_FILE_NAME[] = L"universe.???";
static unsigned short SCORE_CACHE_FILE_NAME[] = L"score.???";
static unsigned short CONTRACT_FILE_NAME[] = L"contract????.???";

#define DATA_LENGTH 1200
#define INFO_LENGTH 1200
#define NUMBER_OF_INPUT_NEURONS 2400
#define NUMBER_OF_OUTPUT_NEURONS 2400
#define MAX_INPUT_DURATION 200
#define MAX_OUTPUT_DURATION 200
#define SOLUTION_THRESHOLD_DEFAULT 694
#define DATA_LENGTH 256
#define INFO_LENGTH 128
#define NUMBER_OF_INPUT_NEURONS 1024
#define NUMBER_OF_OUTPUT_NEURONS 1024
#define MAX_INPUT_DURATION 256
#define MAX_OUTPUT_DURATION 256
#define NEURON_VALUE_LIMIT 1099511627776LL
#define SOLUTION_THRESHOLD_DEFAULT 45
#define USE_SCORE_CACHE 1
#define SCORE_CACHE_SIZE 1000000 // the larger the better
#define SCORE_CACHE_COLLISION_RETRIES 20 // number of retries to find entry in cache in case of hash collision
56 changes: 38 additions & 18 deletions src/qubic.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
////////// Qubic \\\\\\\\\\

#define CONTRACT_STATES_DEPTH 10 // Is derived from MAX_NUMBER_OF_CONTRACTS (=N)
#define TARGET_TICK_DURATION 3000
#define TARGET_TICK_DURATION 2500
#define TICK_REQUESTING_PERIOD 500ULL
#define FIRST_TICK_TRANSACTION_OFFSET sizeof(unsigned long long)
#define ISSUANCE_RATE 1000000000000LL
Expand All @@ -62,7 +62,7 @@
#define TICK_TRANSACTIONS_PUBLICATION_OFFSET 2 // Must be only 2
#define MIN_MINING_SOLUTIONS_PUBLICATION_OFFSET 3 // Must be 3+
#define TIME_ACCURACY 5000
#define TRANSACTION_SPARSENESS 7
#define TRANSACTION_SPARSENESS 4



Expand Down Expand Up @@ -114,7 +114,7 @@ static Tick etalonTick;
static TickData nextTickData;
static volatile char tickTransactionsLock = 0;
static unsigned char* tickTransactions = NULL;
static unsigned long long tickTransactionOffsets[MAX_NUMBER_OF_TICKS_PER_EPOCH][NUMBER_OF_TRANSACTIONS_PER_TICK];
static unsigned long long* tickTransactionOffsetsPtr = nullptr;
static unsigned long long nextTickTransactionOffset = FIRST_TICK_TRANSACTION_OFFSET;

static m256i uniqueNextTickTransactionDigests[NUMBER_OF_COMPUTORS];
Expand Down Expand Up @@ -225,6 +225,11 @@ static struct



unsigned long long& tickTransactionOffsets(unsigned int tick, unsigned int transaction)
{
const unsigned int tickIndex = tick - system.initialTick;
return tickTransactionOffsetsPtr[tickIndex * NUMBER_OF_TRANSACTIONS_PER_TICK + transaction];
}

static void logToConsole(const CHAR16* message)
{
Expand Down Expand Up @@ -538,7 +543,7 @@ static void processBroadcastMessage(const unsigned long long processorNumber, Re
if (k == system.numberOfSolutions)
{
if (system.numberOfSolutions < MAX_NUMBER_OF_SOLUTIONS
&& (*score)(processorNumber, request->destinationPublicKey, solution_nonce) >= solutionThreshold[system.epoch])
&& (*score)(processorNumber, request->destinationPublicKey, solution_nonce) >= (unsigned int)solutionThreshold[system.epoch])
{
ACQUIRE(solutionsLock);

Expand Down Expand Up @@ -809,11 +814,11 @@ static void processBroadcastTransaction(Peer* peer, RequestResponseHeader* heade
if (digest == tickData[request->tick - system.initialTick].transactionDigests[i])
{
ACQUIRE(tickTransactionsLock);
if (!tickTransactionOffsets[request->tick - system.initialTick][i])
if (!tickTransactionOffsets(request->tick, i))
{
if (nextTickTransactionOffset + transactionSize <= FIRST_TICK_TRANSACTION_OFFSET + (((unsigned long long)MAX_NUMBER_OF_TICKS_PER_EPOCH) * NUMBER_OF_TRANSACTIONS_PER_TICK * MAX_TRANSACTION_SIZE / TRANSACTION_SPARSENESS))
{
tickTransactionOffsets[request->tick - system.initialTick][i] = nextTickTransactionOffset;
tickTransactionOffsets(request->tick, i) = nextTickTransactionOffset;
bs->CopyMem(&tickTransactions[nextTickTransactionOffset], request, transactionSize);
nextTickTransactionOffset += transactionSize;
}
Expand Down Expand Up @@ -901,9 +906,9 @@ static void processRequestTickTransactions(Peer* peer, RequestResponseHeader* he
const unsigned short index = random(numberOfTickTransactions);

if (!(request->transactionFlags[tickTransactionIndices[index] >> 3] & (1 << (tickTransactionIndices[index] & 7)))
&& tickTransactionOffsets[request->tick - system.initialTick][tickTransactionIndices[index]])
&& tickTransactionOffsets(request->tick, tickTransactionIndices[index]))
{
const Transaction* transaction = (Transaction*)&tickTransactions[tickTransactionOffsets[request->tick - system.initialTick][tickTransactionIndices[index]]];
const Transaction* transaction = (Transaction*)&tickTransactions[tickTransactionOffsets(request->tick, tickTransactionIndices[index])];
enqueueResponse(peer, sizeof(Transaction) + transaction->inputSize + SIGNATURE_SIZE, BROADCAST_TRANSACTION, header->dejavu(), (void*)transaction);
}

Expand Down Expand Up @@ -1908,9 +1913,9 @@ static void processTick(unsigned long long processorNumber)
{
if (!isZero(nextTickData.transactionDigests[transactionIndex]))
{
if (tickTransactionOffsets[system.tick - system.initialTick][transactionIndex])
if (tickTransactionOffsets(system.tick, transactionIndex))
{
Transaction* transaction = (Transaction*)&tickTransactions[tickTransactionOffsets[system.tick - system.initialTick][transactionIndex]];
Transaction* transaction = (Transaction*)&tickTransactions[tickTransactionOffsets(system.tick, transactionIndex)];
const int spectrumIndex = ::spectrumIndex(transaction->sourcePublicKey);
if (spectrumIndex >= 0
&& !entityPendingTransactionIndices[spectrumIndex])
Expand Down Expand Up @@ -1952,9 +1957,9 @@ static void processTick(unsigned long long processorNumber)
{
if (!isZero(nextTickData.transactionDigests[transactionIndex]))
{
if (tickTransactionOffsets[system.tick - system.initialTick][transactionIndex])
if (tickTransactionOffsets(system.tick, transactionIndex))
{
Transaction* transaction = (Transaction*)&tickTransactions[tickTransactionOffsets[system.tick - system.initialTick][transactionIndex]];
Transaction* transaction = (Transaction*)&tickTransactions[tickTransactionOffsets(system.tick, transactionIndex)];
const int spectrumIndex = ::spectrumIndex(transaction->sourcePublicKey);
if (spectrumIndex >= 0
&& !entityPendingTransactionIndices[spectrumIndex])
Expand Down Expand Up @@ -2376,7 +2381,7 @@ static void processTick(unsigned long long processorNumber)
ACQUIRE(tickTransactionsLock);
if (nextTickTransactionOffset + transactionSize <= FIRST_TICK_TRANSACTION_OFFSET + (((unsigned long long)MAX_NUMBER_OF_TICKS_PER_EPOCH) * NUMBER_OF_TRANSACTIONS_PER_TICK * MAX_TRANSACTION_SIZE / TRANSACTION_SPARSENESS))
{
tickTransactionOffsets[pendingTransaction->tick - system.initialTick][j] = nextTickTransactionOffset;
tickTransactionOffsets(pendingTransaction->tick, j) = nextTickTransactionOffset;
bs->CopyMem(&tickTransactions[nextTickTransactionOffset], (void*)pendingTransaction, transactionSize);
broadcastedFutureTickData.tickData.transactionDigests[j] = &entityPendingTransactionDigests[entityPendingTransactionIndices[index] * 32ULL];
j++;
Expand Down Expand Up @@ -2491,7 +2496,7 @@ static void beginEpoch1of2()
bs->SetMem(ticks, ((unsigned long long)MAX_NUMBER_OF_TICKS_PER_EPOCH) * NUMBER_OF_COMPUTORS * sizeof(Tick), 0);
bs->SetMem(tickData, ((unsigned long long)MAX_NUMBER_OF_TICKS_PER_EPOCH) * sizeof(TickData), 0);
bs->SetMem(tickTransactions, FIRST_TICK_TRANSACTION_OFFSET + (((unsigned long long)MAX_NUMBER_OF_TICKS_PER_EPOCH) * NUMBER_OF_TRANSACTIONS_PER_TICK * MAX_TRANSACTION_SIZE / TRANSACTION_SPARSENESS), 0);
bs->SetMem(tickTransactionOffsets, sizeof(tickTransactionOffsets), 0);
bs->SetMem(tickTransactionOffsetsPtr, ((unsigned long long)MAX_NUMBER_OF_TICKS_PER_EPOCH) * NUMBER_OF_TRANSACTIONS_PER_TICK * sizeof(*tickTransactionOffsetsPtr), 0);

for (unsigned int i = 0; i < SPECTRUM_CAPACITY; i++)
{
Expand Down Expand Up @@ -2999,9 +3004,9 @@ static void tickProcessor(void*)
numberOfNextTickTransactions++;

ACQUIRE(tickTransactionsLock);
if (tickTransactionOffsets[system.tick + 1 - system.initialTick][i])
if (tickTransactionOffsets(system.tick + 1, i))
{
const Transaction* transaction = (Transaction*)&tickTransactions[tickTransactionOffsets[system.tick + 1 - system.initialTick][i]];
const Transaction* transaction = (Transaction*)&tickTransactions[tickTransactionOffsets(system.tick + 1, i)];
unsigned char digest[32];
KangarooTwelve(transaction, sizeof(Transaction) + transaction->inputSize + SIGNATURE_SIZE, digest, sizeof(digest));
if (digest == nextTickData.transactionDigests[i])
Expand Down Expand Up @@ -3038,11 +3043,11 @@ static void tickProcessor(void*)

pendingTransaction = (Transaction*)transactionBuffer;
ACQUIRE(tickTransactionsLock);
if (!tickTransactionOffsets[pendingTransaction->tick - system.initialTick][j])
if (!tickTransactionOffsets(pendingTransaction->tick, j))
{
if (nextTickTransactionOffset + transactionSize <= FIRST_TICK_TRANSACTION_OFFSET + (((unsigned long long)MAX_NUMBER_OF_TICKS_PER_EPOCH) * NUMBER_OF_TRANSACTIONS_PER_TICK * MAX_TRANSACTION_SIZE / TRANSACTION_SPARSENESS))
{
tickTransactionOffsets[pendingTransaction->tick - system.initialTick][j] = nextTickTransactionOffset;
tickTransactionOffsets(pendingTransaction->tick, j) = nextTickTransactionOffset;
bs->CopyMem(&tickTransactions[nextTickTransactionOffset], pendingTransaction, transactionSize);
nextTickTransactionOffset += transactionSize;
}
Expand Down Expand Up @@ -3539,6 +3544,12 @@ static bool initialize()

return false;
}
if (status = bs->AllocatePool(EfiRuntimeServicesData, ((unsigned long long)MAX_NUMBER_OF_TICKS_PER_EPOCH) * NUMBER_OF_TRANSACTIONS_PER_TICK * sizeof(*tickTransactionOffsetsPtr), (void**)&tickTransactionOffsetsPtr))
{
logStatusToConsole(L"EFI_BOOT_SERVICES.AllocatePool() fails", status, __LINE__);

return false;
}

if (status = bs->AllocatePool(EfiRuntimeServicesData, SPECTRUM_CAPACITY * sizeof(::Entity) >= ASSETS_CAPACITY * sizeof(Asset) ? SPECTRUM_CAPACITY * sizeof(::Entity) : ASSETS_CAPACITY * sizeof(Asset), (void**)&reorgBuffer))
{
Expand Down Expand Up @@ -3869,6 +3880,10 @@ static void deinitialize()
{
bs->FreePool(ticks);
}
if (tickTransactionOffsetsPtr)
{
bs->FreePool(tickTransactionOffsetsPtr);
}

if (score)
{
Expand Down Expand Up @@ -4227,6 +4242,11 @@ static void processKeyPresses()
appendText(message, L".");
logToConsole(message);

setText(message, L"resourceTestingDigest = ");
appendNumber(message, resourceTestingDigest, false);
appendText(message, L".");
logToConsole(message);

unsigned int numberOfPublishedSolutions = 0, numberOfRecordedSolutions = 0;
for (unsigned int i = 0; i < system.numberOfSolutions; i++)
{
Expand Down
Loading
Loading