#include #include #include #include "obtc.h" #include "singular.h" #include //uint8_t const_data[200]; static const int hex2bin_tbl[256] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1, -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, }; bool hex2bin(unsigned char *p, const char *hexstr, size_t len) { int nibble1, nibble2; unsigned char idx; bool ret = false; while (*hexstr && len) { if ((!hexstr[1])) { printf("hex2bin str truncated"); return ret; } idx = *hexstr++; nibble1 = hex2bin_tbl[idx]; idx = *hexstr++; nibble2 = hex2bin_tbl[idx]; if (((nibble1 < 0) || (nibble2 < 0))) { printf("hex2bin scan failed"); return ret; } *p++ = (((unsigned char)nibble1) << 4) | ((unsigned char)nibble2); --len; } if ((len == 0 && *hexstr == 0)) ret = true; return ret; } int main(int argc, char **argv) { uint8_t genesis_block[80]; uint8_t hash[32]; uint8_t last_prehash[32]; uint8_t last_prehash2[32]; uint8_t prehash_tab[32]; uint8_t nonce_tab[8]; char *prehash_str = "d76ffb1d8e31ec04579b0452b52bde7dbd088e912ab1b11ba924ff309ab44a43";//argv[1]; char *nonce_str = "80aa59a7901f2502";//argv[2]; //char *last_prehash_str = argv[3]; //char *last_prehash_str2 = argv[4]; hex2bin(prehash_tab, prehash_str, strlen(prehash_str)/2); hex2bin(nonce_tab, nonce_str, strlen(nonce_str)/2); //hex2bin(last_prehash, last_prehash_str, strlen(last_prehash_str)/2); //hex2bin(last_prehash2, last_prehash_str2, strlen(last_prehash_str2)/2); /*for (uint8_t i = 0; i<32;i++){ printf("0x%x, ",prehash_tab[i]); } printf("\n"); for (uint8_t i = 0; i<8;i++){ printf("0x%x, ",nonce_tab[i]); } printf("\n");*/ //uint8_t prehash[32] = {0x81,0x55,0x3a,0x69,0x5a,0x05,0x88,0x99,0x8c,0x41,0x37,0x92,0xe7,0x4c,0xe8,0xb8,0xf8,0xa0,0x96,0xd6,0x4b,0x3e,0xe4,0x73,0x87,0x37,0x24,0x34,0x48,0x5c,0x0b,0x6f}; //uint8_t utime[8] = {0x00,0x00,0x01,0x84,0x8c,0xa8,0x7c,0x49}; uint8_t pad[32] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //uint8_t nonce[8] = {0x2f,0x84,0x00,0x00,0x0e,0xba,0x16,0x7c}; #if 0 //uint8_t prehash[32] = {0xa4,0x8f,0xae,0x69,0xeb,0x28,0xc7,0xe0,0x14,0x11,0x4f,0x01,0xae,0x60,0xc8,0xc3,0x82,0x73,0xc4,0x60,0x66,0xcf,0x95,0xd6,0x77,0x1a,0x55,0xd6,0x16,0xd7,0xa1,0x9a};//大端 //uint8_t utime[8] = {0x00,0x00,0x01,0x87,0x22,0x1e,0xad,0x44}; //uint8_t nonce[8] = {0x8e,0xd4,0x00,0x10,0x6b,0xe7,0xe4,0x00}; //uint8_t nonce[8] = {0x8e,0xd4,0x00,0x12,0x27,0xc6,0x90,0xa0}; //uint8_t nonce[8] = {0x8e,0xd4,0x00,0x32,0x0b,0x6b,0xd6,0xd1}; //3f 9a aa c6 32 af 1a 4e 0e 1f ea 8a f8 e3 d5 32 b7 5a a4 71 b2 e4 ef fe a5 bd cc fa 3b dd b6 61 uint8_t prehash[32] = {0x3f,0x9a,0xaa,0xc6,0x32,0xaf,0x1a,0x4e,0x0e,0x1f,0xea,0x8a,0xf8,0xe3,0xd5,0x32,0xb7,0x5a,0xa4,0x71,0xb2,0xe4,0xef,0xfe,0xa5,0xbd,0xcc,0xfa,0x3b,0xdd,0xb6,0x61};//大端 uint8_t utime[8] = {0x00,0x00,0x01,0x87,0x21,0xeb,0x73,0x79}; uint8_t nonce[8] = {0xa3,0xdd,0x02,0x10,0x1a,0x87,0xb4,0x70}; #else /*443e01000000ffff00000000 e0af2a3ba173157d3f70c94aad742fdf16d9930fdfc9d6301e869bcef04ced6c e0af2a3ba173157d3f70c94aad742fdf16d9930fdfc9d6301e869bcef04ced6c dbee84288701000000000000901f25020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 [2023-03-28 22:00:46.549] 00 cc 01 11 70 83 85 16 90 1f 25 02 kas_pow_hash: in:e0af2a3ba173157d3f70c94aad742fdf16d9930fdfc9d6301e869bcef04ced6cdbee842887010000000000000000000000000000000000000000000000000000000000000000000070838516901f2502 kas_pow_hash: out:dae78f5008d3b66f 01a740ce33c812ba 772b3f5763da7bc6 da24cb6c00000000*/ uint8_t prehash[32] = {0xe0,0xaf,0x2a,0x3b,0xa1,0x73,0x15,0x7d,0x3f,0x70,0xc9,0x4a,0xad,0x74,0x2f,0xdf,0x16,0xd9,0x93,0x0f,0xdf,0xc9,0xd6,0x30,0x1e,0x86,0x9b,0xce,0xf0,0x4c,0xed,0x6c}; //uint8_t utime[8] = {0x00,0x00,0x01,0x87,0x28,0x84,0xee,0xdb}; uint8_t nonce[8] = {0x02,0x25,0x1f,0x90,0x16,0x85,0x83,0x70}; #endif /*for (int i = 0; i < 32; ++i) genesis_block[i] = prehash[i]; for (int i = 0; i < 8; ++i) genesis_block[i+32] = utime[7-i]; for (int i = 0; i < 32; ++i) genesis_block[i+40] = pad[31-i]; for (int i = 0; i < 8; ++i) genesis_block[i+72] = nonce[7-i];*/ //uint8_t utime[8] = {0x00,0x00,0x01,0x87,0x21,0xeb,0x73,0x79}; //dbee8428870100000 uint8_t utime[8] = {0x00,0x00,0x01,0x87,0x28,0x84,0xee,0xdb}; for (int i = 0; i < 32; ++i) genesis_block[i] = prehash_tab[i]; for (int i = 0; i < 8; ++i) genesis_block[i+32] = utime[7-i]; for (int i = 0; i < 32; ++i) genesis_block[i+40] = pad[31-i]; for (int i = 0; i < 8; ++i) genesis_block[i+72] = nonce_tab[i]; clock_t start, finish; double Total_time; uint32_t cnt = 0;; //while(1) { start = clock(); opticalbtc_hash((const char*)&genesis_block, (char*)&hash, sizeof(genesis_block)); finish = clock(); Total_time = (double)(finish-start) / CLOCKS_PER_SEC; printf( "\n cnt = %d, opticalbtc_hash run times %f seconds\n", cnt++, Total_time); for (int i=31; i>-1; i--) { printf("%02hhx", hash[i]); } printf("\n"); } //if (hash[31] != 0 || hash[30] != 0){ // for (int i = 0; i < 32; ++i) genesis_block[i] = last_prehash[i]; // opticalbtc_hash((const char*)&genesis_block, (char*)&hash, sizeof(genesis_block)); //} //if (hash[31] != 0 || hash[30] != 0){ // for (int i = 0; i < 32; ++i) genesis_block[i] = last_prehash2[i]; // opticalbtc_hash((const char*)&genesis_block, (char*)&hash, sizeof(genesis_block)); //} if (hash[31] != 0 && hash[30] != 0){ printf("reject\n"); } return 0; } //g++ -std=c++11 *.cpp