mirror of
https://github.com/LBRYFoundation/pool.git
synced 2025-08-23 17:37:25 +00:00
add exosis algo (timetravel type) (#326)
This commit is contained in:
parent
42a6e8529e
commit
5a54297999
7 changed files with 194 additions and 1 deletions
157
stratum/algos/exosis.c
Normal file
157
stratum/algos/exosis.c
Normal file
|
@ -0,0 +1,157 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#define HASH_FUNC_BASE_TIMESTAMP 1538556426 // Exosis: Genesis Timestamp
|
||||
#define HASH_FUNC_COUNT 8
|
||||
#define HASH_FUNC_COUNT_PERMUTATIONS 40320
|
||||
|
||||
#include <sha3/sph_blake.h>
|
||||
#include <sha3/sph_bmw.h>
|
||||
#include <sha3/sph_groestl.h>
|
||||
#include <sha3/sph_jh.h>
|
||||
#include <sha3/sph_keccak.h>
|
||||
#include <sha3/sph_skein.h>
|
||||
#include <sha3/sph_luffa.h>
|
||||
#include <sha3/sph_cubehash.h>
|
||||
|
||||
|
||||
#define _ALIGN(x) __attribute__ ((aligned(x)))
|
||||
|
||||
// helpers
|
||||
inline void swap(int *a, int *b) {
|
||||
int c = *a;
|
||||
*a = *b;
|
||||
*b = c;
|
||||
}
|
||||
|
||||
static void reverse(int *pbegin, int *pend) {
|
||||
while ( (pbegin != pend) && (pbegin != --pend) )
|
||||
swap(pbegin++, pend);
|
||||
}
|
||||
|
||||
static void next_permutation(int *pbegin, int *pend) {
|
||||
if (pbegin == pend)
|
||||
return;
|
||||
|
||||
int *i = pbegin;
|
||||
++i;
|
||||
if (i == pend)
|
||||
return;
|
||||
|
||||
i = pend;
|
||||
--i;
|
||||
|
||||
while (1) {
|
||||
int *j = i;
|
||||
--i;
|
||||
|
||||
if (*i < *j) {
|
||||
int *k = pend;
|
||||
|
||||
while (!(*i < *--k))
|
||||
/* pass */;
|
||||
|
||||
swap(i, k);
|
||||
reverse(j, pend);
|
||||
return; // true
|
||||
}
|
||||
|
||||
if (i == pbegin) {
|
||||
reverse(pbegin, pend);
|
||||
return; // false
|
||||
}
|
||||
}
|
||||
}
|
||||
// helpers
|
||||
|
||||
void exosis_hash(const char* input, char* output, uint32_t len)
|
||||
{
|
||||
uint32_t _ALIGN(64) hash[16 * HASH_FUNC_COUNT];
|
||||
uint32_t *hashA, *hashB;
|
||||
uint32_t dataLen = 64;
|
||||
uint32_t *work_data = (uint32_t *)input;
|
||||
const uint32_t timestamp = work_data[17];
|
||||
|
||||
sph_blake512_context ctx_blake;
|
||||
sph_bmw512_context ctx_bmw;
|
||||
sph_groestl512_context ctx_groestl;
|
||||
sph_skein512_context ctx_skein;
|
||||
sph_jh512_context ctx_jh;
|
||||
sph_keccak512_context ctx_keccak;
|
||||
sph_luffa512_context ctx_luffa;
|
||||
sph_cubehash512_context ctx_cubehash;
|
||||
|
||||
// We want to permute algorithms. To get started we
|
||||
// initialize an array with a sorted sequence of unique
|
||||
// integers where every integer represents its own algorithm.
|
||||
uint32_t permutation[HASH_FUNC_COUNT];
|
||||
for (uint32_t i = 0; i < HASH_FUNC_COUNT; i++) {
|
||||
permutation[i]=i;
|
||||
}
|
||||
|
||||
// Compute the next permuation
|
||||
uint32_t steps = (timestamp - HASH_FUNC_BASE_TIMESTAMP) % HASH_FUNC_COUNT_PERMUTATIONS;
|
||||
for (uint32_t i = 0; i < steps; i++) {
|
||||
next_permutation(permutation, permutation + HASH_FUNC_COUNT);
|
||||
}
|
||||
|
||||
for (uint32_t i = 0; i < HASH_FUNC_COUNT; i++) {
|
||||
if (i == 0) {
|
||||
dataLen = len;
|
||||
hashA = work_data;
|
||||
} else {
|
||||
dataLen = 64;
|
||||
hashA = &hash[16 * (i - 1)];
|
||||
}
|
||||
hashB = &hash[16 * i];
|
||||
|
||||
switch(permutation[i]) {
|
||||
case 0:
|
||||
sph_blake512_init(&ctx_blake);
|
||||
sph_blake512(&ctx_blake, hashA, dataLen);
|
||||
sph_blake512_close(&ctx_blake, hashB);
|
||||
break;
|
||||
case 1:
|
||||
sph_bmw512_init(&ctx_bmw);
|
||||
sph_bmw512(&ctx_bmw, hashA, dataLen);
|
||||
sph_bmw512_close(&ctx_bmw, hashB);
|
||||
break;
|
||||
case 2:
|
||||
sph_groestl512_init(&ctx_groestl);
|
||||
sph_groestl512(&ctx_groestl, hashA, dataLen);
|
||||
sph_groestl512_close(&ctx_groestl, hashB);
|
||||
break;
|
||||
case 3:
|
||||
sph_skein512_init(&ctx_skein);
|
||||
sph_skein512(&ctx_skein, hashA, dataLen);
|
||||
sph_skein512_close(&ctx_skein, hashB);
|
||||
break;
|
||||
case 4:
|
||||
sph_jh512_init(&ctx_jh);
|
||||
sph_jh512(&ctx_jh, hashA, dataLen);
|
||||
sph_jh512_close(&ctx_jh, hashB);
|
||||
break;
|
||||
case 5:
|
||||
sph_keccak512_init(&ctx_keccak);
|
||||
sph_keccak512(&ctx_keccak, hashA, dataLen);
|
||||
sph_keccak512_close(&ctx_keccak, hashB);
|
||||
break;
|
||||
case 6:
|
||||
sph_luffa512_init(&ctx_luffa);
|
||||
sph_luffa512(&ctx_luffa, hashA, dataLen);
|
||||
sph_luffa512_close(&ctx_luffa, hashB);
|
||||
break;
|
||||
case 7:
|
||||
sph_cubehash512_init(&ctx_cubehash);
|
||||
sph_cubehash512(&ctx_cubehash, hashA, dataLen);
|
||||
sph_cubehash512_close(&ctx_cubehash, hashB);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
memcpy(output, &hash[16 * (HASH_FUNC_COUNT - 1)], 32);
|
||||
}
|
||||
|
16
stratum/algos/exosis.h
Normal file
16
stratum/algos/exosis.h
Normal file
|
@ -0,0 +1,16 @@
|
|||
#ifndef EXOSIS_H
|
||||
#define EXOSIS_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
void exosis_hash(const char* input, char* output, uint32_t len);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -11,7 +11,7 @@ LDFLAGS=-O2 -lgmp
|
|||
SOURCES=lyra2re.c lyra2v2.c Lyra2.c lyra2z.c Lyra2-z.c Sponge.c allium.c \
|
||||
c11.c x11.c x12.c x13.c hsr14.c sm3.c x14.c x15.c x17.c \
|
||||
x22i.c SWIFFTX/SWIFFTX.c \
|
||||
blake.c blakecoin.c blake2s.c jha.c keccak.c lbry.c tribus.c \
|
||||
blake.c blakecoin.c blake2s.c jha.c keccak.c lbry.c tribus.c exosis.c \
|
||||
deep.c fresh.c groestl.c neoscrypt.c nist5.c quark.c qubit.c skein.c skein2.c \
|
||||
bitcore.c timetravel.c x11evo.c x16r.c x16s.c xevan.c bastion.c hmq17.c sonoa.c \
|
||||
bmw.c luffa.c pentablake.c vitalium.c whirlpool.c whirlpoolx.c zr5.c \
|
||||
|
|
15
stratum/config.sample/exosis.conf
Normal file
15
stratum/config.sample/exosis.conf
Normal file
|
@ -0,0 +1,15 @@
|
|||
[TCP]
|
||||
server = yaamp.com
|
||||
port = 3557
|
||||
password = tu8tu5
|
||||
|
||||
[SQL]
|
||||
host = yaampdb
|
||||
database = yaamp
|
||||
username = root
|
||||
password = patofpaq
|
||||
|
||||
[STRATUM]
|
||||
algo = exosis
|
||||
difficulty = 0.125
|
||||
max_ttf = 50000
|
|
@ -129,6 +129,7 @@ YAAMP_ALGO g_algos[] =
|
|||
{"x16s", x16s_hash, 0x100, 0, 0},
|
||||
{"timetravel", timetravel_hash, 0x100, 0, 0},
|
||||
{"bitcore", timetravel10_hash, 0x100, 0, 0},
|
||||
{"exosis", exosis_hash, 0x100, 0, 0},
|
||||
{"hsr", hsr_hash, 1, 0, 0},
|
||||
{"hmq1725", hmq17_hash, 0x10000, 0, 0},
|
||||
|
||||
|
|
|
@ -209,3 +209,4 @@ void sha256_double_hash_hex(const char *input, char *output, unsigned int len);
|
|||
#include "algos/aergo.h"
|
||||
#include "algos/hex.h"
|
||||
#include "algos/argon2d-dyn.h"
|
||||
#include "algos/exosis.h"
|
||||
|
|
|
@ -19,6 +19,7 @@ function yaamp_get_algos()
|
|||
'blake2s',
|
||||
'decred',
|
||||
'deep',
|
||||
'exosis',
|
||||
'hmq1725',
|
||||
'keccak',
|
||||
'keccakc',
|
||||
|
@ -165,6 +166,7 @@ function getAlgoColors($algo)
|
|||
'bastion' => '#e0b0b0',
|
||||
'blake' => '#f0f0f0',
|
||||
'blakecoin' => '#f0f0f0',
|
||||
'exosis' => '#49CCFE',
|
||||
'groestl' => '#d0a0a0',
|
||||
'jha' => '#a0d0c0',
|
||||
'dmd-gr' => '#a0c0f0',
|
||||
|
@ -225,6 +227,7 @@ function getAlgoPort($algo)
|
|||
'scrypt' => 3433,
|
||||
'timetravel' => 3555,
|
||||
'bitcore' => 3556,
|
||||
'exosis' => 3557,
|
||||
'c11' => 3573,
|
||||
'deep' => 3535,
|
||||
'x11' => 3533,
|
||||
|
|
Loading…
Add table
Reference in a new issue