Probably Fair
import { InjectRedis, Redis } from '@nestjs-modules/ioredis'
import { Injectable } from '@nestjs/common'
import provablyFair from 'provably-fair'
export interface ProvablyFairResult {
clientSeed: string
result: number
serverSeedHash: string
serverSeed: string
}
@Injectable()
export class ProvablyFairService {
public provablyFair: any
constructor(@InjectRedis() private readonly redis: Redis) {
this.provablyFair = provablyFair(this.redis)
}
async createAndChallenge(clientSeed: string): Promise<ProvablyFairResult> {
const serverSeedHash = this.provablyFair.generateServerSeedHash()
return new Promise<ProvablyFairResult>((res, rej) => {
this.provablyFair.createAndChallenge(
{
serverSeedHash,
clientSeed,
expiresIn: 60 * 60,
guess: 5,
},
(err, valid, bet) => {
if (err) return rej(err)
res({
clientSeed: bet.clientSeed,
result: bet.result,
serverSeedHash: serverSeedHash,
serverSeed: bet.serverSeed,
})
}
)
})
}
async verify(
serverSeed: string,
clientSeed: string
): Promise<Pick<ProvablyFairResult, 'result'>> {
return new Promise<Pick<ProvablyFairResult, 'result'>>((res, rej) => {
this.provablyFair.verify(
{
serverSeed,
clientSeed,
// result,
},
(err, valid, bet) => {
if (err) return rej(err)
res({
result: valid.result,
})
}
)
})
}
}Last updated