diff --git a/aad_coin_miner_cuda_kernel.cu b/aad_coin_miner_cuda_kernel.cu index 60358dc..18a91f5 100644 --- a/aad_coin_miner_cuda_kernel.cu +++ b/aad_coin_miner_cuda_kernel.cu @@ -17,15 +17,8 @@ void mine_deti_coins_kernel(u32_t *coins_storage_area, u64_t base_nonce, u32_t a u32_t hash[5]; // 1. Initialize Fixed Prefix: "DETI coin 2 " (12 bytes) - // We construct this directly into the u32 array. - // Note: We assume the system is Little Endian, but SHA1 input via macro usually handles bytes. - // Ideally, we pack bytes: 'D','E','T','I' -> 0x44455449 - - // Word 0: "DETI" coin[0] = (u32_t)'D' << 24 | (u32_t)'E' << 16 | (u32_t)'T' << 8 | (u32_t)'I'; - // Word 1: " coi" coin[1] = (u32_t)' ' << 24 | (u32_t)'c' << 16 | (u32_t)'o' << 8 | (u32_t)'i'; - // Word 2: "n 2 " coin[2] = (u32_t)'n' << 24 | (u32_t)' ' << 16 | (u32_t)'2' << 8 | (u32_t)' '; // 2. Initialize Variable Part (Bytes 12 to 53) @@ -45,18 +38,15 @@ void mine_deti_coins_kernel(u32_t *coins_storage_area, u64_t base_nonce, u32_t a coin[15] = 440; // 4. Thread Unique Initialization - // We use the thread ID to set the initial state of the variable bytes + // Uses thread ID to set the initial state of the variable bytes // to ensure every thread starts at a different point. u64_t thread_id = (u64_t)blockIdx.x * blockDim.x + threadIdx.x; u64_t nonce_offset = base_nonce + thread_id * attempts_per_thread; - // "Seeding" the message with the nonce (Fast update of specific bytes) - // We modify the bytes in words 3 through 12. - // Accessing as byte pointer for easier manipulation + // Seeding the message with the nonce (Fast update of specific bytes) u08_t *byte_ptr = (u08_t*)coin; - // Apply the nonce offset to the message structure (Odometer setup) - // Start modifying from byte 12 + // Apply the nonce offset to the message structure u64_t temp_nonce = nonce_offset; for (int k = 12; k < 54 && temp_nonce > 0; k++) { u32_t val = byte_ptr[k ^ 3] + (temp_nonce % 95); // mod 95 to stay in printable ASCII @@ -108,9 +98,7 @@ void mine_deti_coins_kernel(u32_t *coins_storage_area, u64_t base_nonce, u32_t a // --- UPDATE MESSAGE (ODOMETER) --- // Increment the message string for the next attempt - // We only touch the variable bytes. // Start at byte 53 (just before the \n) and work backwards if carry needed. - // Note: byte_ptr access needs XOR 3 for Endianness correction on arrays treated as words int pos = 53; while (pos >= 12) { @@ -136,17 +124,13 @@ void mine_visual_row_kernel(u32_t *coins_storage_area, u32_t *row_template, u64_ u32_t coin[16]; // SHA1 working buffer u32_t hash[5]; - // 1. Load the template (Fixed Visual Part) - // The host has already prepared "DETI coin 2 " + "The DNA Pattern" - // We copy the first 12 words (48 bytes) exactly as they are. + // 1. Load the template #pragma unroll for(int i = 0; i < 12; i++) { coin[i] = row_template[i]; } // 2. Setup the "Mining Area" (Bytes 48-53) - // We use word 12 and part of word 13 for the nonce. - // Word 13 also contains the \n and 0x80 padding. // Template provided by host: [ ... visual ... ] [ mining_space ] \n 0x80 coin[12] = 0x41414141; // Initialize mining space with 'AAAA' @@ -161,11 +145,9 @@ void mine_visual_row_kernel(u32_t *coins_storage_area, u32_t *row_template, u64_ u64_t nonce = base_nonce + thread_id; // Simple linear nonce // 4. Map nonce to the "Mining Area" (Bytes 48-53) - // We manipulate bytes 48, 49, 50, 51 (Word 12) and 52, 53 (Low half of Word 13) + // Change bytes from 48 to 53 u08_t *bytes = (u08_t*)coin; - // We use an Odometer approach on the specific bytes allowed for mining - // so we don't disturb the beautiful visual pattern on the left. u64_t temp_nonce = nonce; for(int k = 48; k <= 53; k++) {