node-provably-fair
Version:
A provably fair system for generating and verifying random numbers. Includes support for generating random outcomes based on blockchain data, ensuring fair and tamper-proof results.
89 lines (75 loc) • 3.58 kB
text/typescript
import { ProvablyFair } from '../src/index';
jest.setTimeout(30000); // Define o timeout para 30 segundos (30000 ms)
describe('ProvablyFair', () => {
let provablyFair: ProvablyFair;
beforeEach(() => {
provablyFair = new ProvablyFair();
});
test('Deve gerar um intervalo de vitória válido para uma porcentagem', () => {
const percentage = 0.05;
const result = provablyFair.getWinInterval(percentage);
console.log('Resultado para getWinInterval):', result);
expect(result.percentage).toBe(percentage);
expect(result.interval[0]).toBeGreaterThanOrEqual(1);
expect(result.interval[1]).toBeLessThanOrEqual(10000000);
expect(result.interval[0]).toBeLessThan(result.interval[1]);
});
test('Deve gerar intervalos de vitória válidos para múltiplas porcentagens', () => {
const percentages =
[
20,
20,
20,
20,
20
];
const result = provablyFair.getWinIntervals(percentages);
console.log('Resultado para getWinIntervals):', result);
// Validando cada intervalo
result.forEach((entry, index) => {
// console.log(`Intervalo para porcentagem ${percentages[index]}%:`, entry.interval);
expect(entry.percentage).toBe(percentages[index]);
expect(entry.interval[0]).toBeGreaterThanOrEqual(1);
expect(entry.interval[1]).toBeLessThanOrEqual(10000000);
expect(entry.interval[0]).toBeLessThan(entry.interval[1]);
});
// Garantindo que os intervalos são consecutivos e não sobrepostos
for (let i = 1; i < result.length; i++) {
expect(result[i].interval[0]).toBe(result[i - 1].interval[1] + 1);
}
});
test('Deve gerar 10 números aleatórios consecutivos baseados no hash do bloco Bitcoin e verificar cada giro', async () => {
const clientSeed = 'c57f23440d2f4fa79549314790d9b074';
const rolls: {
randomNumber: number,
serverSeed: string,
secretSalt: string,
nonce: number,
publicHash: string,
bitcoinHash: string
}[] = []; // Declaração explícita do tipo para o array
for (let i = 1; i <= 10; i++) {
const { randomNumber, serverSeed, secretSalt, nonce, publicHash, bitcoinHash } = await provablyFair.generateProvably(clientSeed);
rolls.push({ randomNumber, serverSeed, secretSalt, nonce, publicHash, bitcoinHash });
console.log(`Roll ${i} - Roll:`, randomNumber);
// console.log(`Roll ${i} - Server Seed:`, serverSeed);
// console.log(`Roll ${i} - Secret Salt:`, secretSalt);
// console.log(`Roll ${i} - Nonce:`, nonce);
// console.log(`Roll ${i} - Public Hash:`, publicHash);
// console.log(`Roll ${i} - BTC Hash:`, bitcoinHash);
expect(randomNumber).toBeGreaterThanOrEqual(1);
expect(randomNumber).toBeLessThanOrEqual(10000000);
const isValid = await provablyFair.verifyRoll(
clientSeed,
randomNumber,
serverSeed,
secretSalt,
nonce,
publicHash,
bitcoinHash
);
// console.log(`O giro foi válido?`, isValid);
expect(isValid).toBe(true);
}
});
});