Golang implementation of RandomX
Go to file
DataHoarder 55d6161f6e
All checks were successful
continuous-integration/drone/tag Build is passing
continuous-integration/drone/push Build is passing
Version v3.1.0, implement generic NewDataset and GetFlags
2024-04-23 14:36:43 +02:00
aes Version v3.0.0, support full datataset mode in 64-bit targets, modified api, optimized allocations, full VM run JIT on amd64, optimize AES asm 2024-04-23 04:33:42 +02:00
argon2 Move argon2 / float packages to their own folders, cleanup vm Run 2024-04-15 04:14:15 +02:00
asm Version v3.0.0, support full datataset mode in 64-bit targets, modified api, optimized allocations, full VM run JIT on amd64, optimize AES asm 2024-04-23 04:33:42 +02:00
blake2 Version v3.0.0, support full datataset mode in 64-bit targets, modified api, optimized allocations, full VM run JIT on amd64, optimize AES asm 2024-04-23 04:33:42 +02:00
keys Generate constants from hashes on startup, generate LUT for aes, cleanup endianness to be all little-endian 2024-04-12 17:53:28 +02:00
.drone.yml Added wasm testing to CI 2024-04-19 18:33:50 +02:00
cache.go Version v3.0.0, support full datataset mode in 64-bit targets, modified api, optimized allocations, full VM run JIT on amd64, optimize AES asm 2024-04-23 04:33:42 +02:00
config.go Version v3.1.0, implement generic NewDataset and GetFlags 2024-04-23 14:36:43 +02:00
dataset.go Version v3.1.0, implement generic NewDataset and GetFlags 2024-04-23 14:36:43 +02:00
dataset_full.go Version v3.0.0, support full datataset mode in 64-bit targets, modified api, optimized allocations, full VM run JIT on amd64, optimize AES asm 2024-04-23 04:33:42 +02:00
dataset_full_no64.go Version v3.0.0, support full datataset mode in 64-bit targets, modified api, optimized allocations, full VM run JIT on amd64, optimize AES asm 2024-04-23 04:33:42 +02:00
dataset_light.go Version v3.0.0, support full datataset mode in 64-bit targets, modified api, optimized allocations, full VM run JIT on amd64, optimize AES asm 2024-04-23 04:33:42 +02:00
exec.go amd64: Implemented VM JIT 2024-04-20 19:53:47 +02:00
exec_generic.go amd64: Implemented VM JIT 2024-04-20 19:53:47 +02:00
exec_mmap_unix.go amd64: Implemented VM JIT 2024-04-20 19:53:47 +02:00
flags.go Version v3.1.0, implement generic NewDataset and GetFlags 2024-04-23 14:36:43 +02:00
go.mod Version v3.0.0, support full datataset mode in 64-bit targets, modified api, optimized allocations, full VM run JIT on amd64, optimize AES asm 2024-04-23 04:33:42 +02:00
go.sum Include softfloat64 and allow for purego implementation 2024-04-17 06:04:29 +02:00
jit_amd64.go Version v3.0.0, support full datataset mode in 64-bit targets, modified api, optimized allocations, full VM run JIT on amd64, optimize AES asm 2024-04-23 04:33:42 +02:00
jit_generic.go amd64: Implemented VM JIT 2024-04-20 19:53:47 +02:00
LICENSE Working RandomX with minimal assembly for rounding mode (AMD64,ARM64) 2024-04-11 08:46:34 +02:00
math.go Version v3.0.0, support full datataset mode in 64-bit targets, modified api, optimized allocations, full VM run JIT on amd64, optimize AES asm 2024-04-23 04:33:42 +02:00
randomx.go Update 'randomx.go' 2019-10-15 20:31:51 +02:00
randomx_test.go Version v3.0.0, support full datataset mode in 64-bit targets, modified api, optimized allocations, full VM run JIT on amd64, optimize AES asm 2024-04-23 04:33:42 +02:00
README.md Version v3.0.0, support full datataset mode in 64-bit targets, modified api, optimized allocations, full VM run JIT on amd64, optimize AES asm 2024-04-23 04:33:42 +02:00
register.go Version v3.0.0, support full datataset mode in 64-bit targets, modified api, optimized allocations, full VM run JIT on amd64, optimize AES asm 2024-04-23 04:33:42 +02:00
superscalar.go Version v3.0.0, support full datataset mode in 64-bit targets, modified api, optimized allocations, full VM run JIT on amd64, optimize AES asm 2024-04-23 04:33:42 +02:00
superscalar_instruction.go Version v3.0.0, support full datataset mode in 64-bit targets, modified api, optimized allocations, full VM run JIT on amd64, optimize AES asm 2024-04-23 04:33:42 +02:00
superscalar_jit_amd64.go Cleanup readme, superscalar 2024-04-20 20:22:05 +02:00
superscalar_jit_amd64.s amd64: Implemented VM JIT 2024-04-20 19:53:47 +02:00
superscalar_noasm.go redo JIT superscalar to include less custom assembly 2024-04-19 17:53:43 +02:00
vm.go Version v3.0.0, support full datataset mode in 64-bit targets, modified api, optimized allocations, full VM run JIT on amd64, optimize AES asm 2024-04-23 04:33:42 +02:00
vm_bytecode.go amd64: Implemented VM JIT 2024-04-20 19:53:47 +02:00
vm_bytecode_jit_amd64.go Version v3.0.0, support full datataset mode in 64-bit targets, modified api, optimized allocations, full VM run JIT on amd64, optimize AES asm 2024-04-23 04:33:42 +02:00
vm_bytecode_jit_amd64.s Version v3.0.0, support full datataset mode in 64-bit targets, modified api, optimized allocations, full VM run JIT on amd64, optimize AES asm 2024-04-23 04:33:42 +02:00
vm_bytecode_jit_generic.go Version v3.0.0, support full datataset mode in 64-bit targets, modified api, optimized allocations, full VM run JIT on amd64, optimize AES asm 2024-04-23 04:33:42 +02:00
vm_bytecode_native.go Version v3.0.0, support full datataset mode in 64-bit targets, modified api, optimized allocations, full VM run JIT on amd64, optimize AES asm 2024-04-23 04:33:42 +02:00
vm_bytecode_purego.go amd64: Implemented VM JIT 2024-04-20 19:53:47 +02:00
vm_instruction.go Version v3.0.0, support full datataset mode in 64-bit targets, modified api, optimized allocations, full VM run JIT on amd64, optimize AES asm 2024-04-23 04:33:42 +02:00
vm_instruction_native.go Include softfloat64 and allow for purego implementation 2024-04-17 06:04:29 +02:00
vm_instruction_purego.go Include softfloat64 and allow for purego implementation 2024-04-17 06:04:29 +02:00

RandomX (Golang Implementation)

RandomX is a proof-of-work (PoW) algorithm that is optimized for general-purpose CPUs. RandomX uses random code execution (hence the name) together with several memory-hard techniques to minimize the efficiency advantage of specialized hardware.


Fork from git.dero.io/DERO_Foundation/RandomX. Also related, their Analysis of RandomX writeup.

Original code failed RandomX testcases and was implemented using big.Float.


This package implements RandomX without CGO, using only Golang code, native float64 ops, some assembly, but with optional soft float purego implementation.

All test cases pass properly.

Supports Full mode and Light mode.

For the C++ implementation and design of RandomX, see github.com/tevador/RandomX

Feature 386 amd64 arm arm64 mips mips64 riscv64 wasm
purego
Full Mode
Float Operations hw hw soft hw soft soft soft soft
AES Operations soft hw soft soft soft soft soft soft
Superscalar Execution native native+jit native native native native native native
VM Execution native native+jit soft native soft soft soft soft

A pure Golang implementation can be used on platforms without hard float support or via the purego build flag manually.

Any platform with no hard float support or when enabled manually will use soft float, using softfloat64. This will be very slow.

Native hard float can be added with supporting rounding mode under asm.

JIT only supported under Unix systems (Linux, *BSD, macOS), and can be hard-disabled via the disable_jit build flag, or at runtime.