mirror of
https://github.com/LBRYFoundation/pool.git
synced 2025-08-23 09:27: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 \
|
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 \
|
c11.c x11.c x12.c x13.c hsr14.c sm3.c x14.c x15.c x17.c \
|
||||||
x22i.c SWIFFTX/SWIFFTX.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 \
|
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 \
|
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 \
|
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},
|
{"x16s", x16s_hash, 0x100, 0, 0},
|
||||||
{"timetravel", timetravel_hash, 0x100, 0, 0},
|
{"timetravel", timetravel_hash, 0x100, 0, 0},
|
||||||
{"bitcore", timetravel10_hash, 0x100, 0, 0},
|
{"bitcore", timetravel10_hash, 0x100, 0, 0},
|
||||||
|
{"exosis", exosis_hash, 0x100, 0, 0},
|
||||||
{"hsr", hsr_hash, 1, 0, 0},
|
{"hsr", hsr_hash, 1, 0, 0},
|
||||||
{"hmq1725", hmq17_hash, 0x10000, 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/aergo.h"
|
||||||
#include "algos/hex.h"
|
#include "algos/hex.h"
|
||||||
#include "algos/argon2d-dyn.h"
|
#include "algos/argon2d-dyn.h"
|
||||||
|
#include "algos/exosis.h"
|
||||||
|
|
|
@ -19,6 +19,7 @@ function yaamp_get_algos()
|
||||||
'blake2s',
|
'blake2s',
|
||||||
'decred',
|
'decred',
|
||||||
'deep',
|
'deep',
|
||||||
|
'exosis',
|
||||||
'hmq1725',
|
'hmq1725',
|
||||||
'keccak',
|
'keccak',
|
||||||
'keccakc',
|
'keccakc',
|
||||||
|
@ -165,6 +166,7 @@ function getAlgoColors($algo)
|
||||||
'bastion' => '#e0b0b0',
|
'bastion' => '#e0b0b0',
|
||||||
'blake' => '#f0f0f0',
|
'blake' => '#f0f0f0',
|
||||||
'blakecoin' => '#f0f0f0',
|
'blakecoin' => '#f0f0f0',
|
||||||
|
'exosis' => '#49CCFE',
|
||||||
'groestl' => '#d0a0a0',
|
'groestl' => '#d0a0a0',
|
||||||
'jha' => '#a0d0c0',
|
'jha' => '#a0d0c0',
|
||||||
'dmd-gr' => '#a0c0f0',
|
'dmd-gr' => '#a0c0f0',
|
||||||
|
@ -225,6 +227,7 @@ function getAlgoPort($algo)
|
||||||
'scrypt' => 3433,
|
'scrypt' => 3433,
|
||||||
'timetravel' => 3555,
|
'timetravel' => 3555,
|
||||||
'bitcore' => 3556,
|
'bitcore' => 3556,
|
||||||
|
'exosis' => 3557,
|
||||||
'c11' => 3573,
|
'c11' => 3573,
|
||||||
'deep' => 3535,
|
'deep' => 3535,
|
||||||
'x11' => 3533,
|
'x11' => 3533,
|
||||||
|
|
Loading…
Add table
Reference in a new issue