randomx

package module
v0.3.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 29, 2021 License: BSD-3-Clause Imports: 9 Imported by: 0

README

go-randomx

This is a binding for Random-X based algorithms.

Do NOT use go mod import this.

NOTICE: For better go.mod experience, like direcly import go-randomx dep through go get or go build, check the https://github.com/core-coin/RandomY and https://github.com/core-coin/go-randomx and their github actions.

Algorithms

  • random-y
  • random-x
  • random-xl
  • random-wow
  • random-arq
  • random-yada

Build

Windows

Firstly download and install the msys2, then open and install the following components:

Take msys2's pacman for example

pacman -Syu
pacman -S git mingw64/mingw-w64-x86_64-go mingw64/mingw-w64-x86_64-gcc mingw64/mingw-w64-x86_64-cmake mingw64/mingw-w64-x86_64-make

Secondly clone this repo to your project folder

cd MyProject
git clone https://github.com/core-coin/go-randomx

And then run ./build.sh to auto compile official random-x code

# clone and compile RandomX source code into librandomx
./build random-x # random-x can be replaced with random-xl random-arq random-wow

Finally you can using the package as your internal one.

Directly using it with import "github.com/MyProject/go-randomx" and then randomx.AllocCache() etc.

Linux

Take Ubuntu for example

Download the latest go from here and then install it following this instruction

sudo apt update && sudo apt upgrade
sudo apt install git cmake make gcc build-essential

Secondly clone this repo to your project folder

cd MyProject
git clone https://github.com/core-coin/go-randomx

And then run go generate to auto compile official random-x code

# clone and compile RandomX source code into librandomx
./build random-x # random-x can be replaced with random-xl random-arq random-wow

Finally you can using the package as your internal one.

Directly using it with import "github.com/myname/my-project/go-randomx" and then start the functions like randomx.AllocCache() etc.

License

The 3-Clause BSD License

Documentation

Index

Constants

View Source
const (
	FlagDefault     C.randomx_flags = 8 + 4 // for all default
	FlagLargePages  C.randomx_flags = 1     // for dataset & rxCache & vm
	FlagHardAES     C.randomx_flags = 2     // for vm
	FlagFullMEM     C.randomx_flags = 4     // for vm
	FlagJIT         C.randomx_flags = 8     // for vm & cache
	FlagSecure      C.randomx_flags = 16
	FlagArgon2SSSE3 C.randomx_flags = 32 // for cache
	FlagArgon2AVX2  C.randomx_flags = 64 // for cache
	FlagArgon2      C.randomx_flags = 96 // = avx2 + sse3
)

All flags

View Source
const RxHashSize = C.RANDOMX_HASH_SIZE

Variables

This section is empty.

Functions

func CalculateHash

func CalculateHash(vm VM, in []byte) []byte

func CalculateHashFirst

func CalculateHashFirst(vm VM, in []byte)

func CalculateHashNext

func CalculateHashNext(vm VM, in []byte) []byte

func DatasetItemCount

func DatasetItemCount() uint32

func DestroyVM

func DestroyVM(vm VM)

func GetDatasetMemory

func GetDatasetMemory(dataset Dataset) unsafe.Pointer

func GetFlags

func GetFlags() C.randomx_flags

func InitCache

func InitCache(cache Cache, seed []byte)

func InitDataset

func InitDataset(dataset Dataset, cache Cache, startItem uint32, itemCount uint32)

func RandomX

func RandomX(vm *RandxVm, mutex *sync.Mutex, hash []byte, nonce uint64) ([]byte, error)

func ReleaseCache

func ReleaseCache(cache Cache)

func ReleaseDataset

func ReleaseDataset(dataset Dataset)

func SHA3_512

func SHA3_512(data ...[]byte) []byte

NIPS implementation of SHA3-512

func SetVMCache

func SetVMCache(vm VM, cache Cache)

func SetVMDataset

func SetVMDataset(vm VM, dataset Dataset)

Types

type Cache

type Cache *C.randomx_cache

func AllocCache

func AllocCache(flags ...C.randomx_flags) (Cache, error)

type Dataset

type Dataset *C.randomx_dataset

func AllocDataset

func AllocDataset(flags ...C.randomx_flags) (Dataset, error)

type RandxVm

type RandxVm struct {
	// contains filtered or unexported fields
}

func NewRandomXVMWithKeyAndMutex

func NewRandomXVMWithKeyAndMutex() (*RandxVm, *sync.Mutex)

func NewRandxVm

func NewRandxVm(key []byte) (ret *RandxVm, err error)

func (*RandxVm) Close

func (this *RandxVm) Close()

func (*RandxVm) Hash

func (this *RandxVm) Hash(buf []byte) (ret []byte)

type VM

type VM *C.randomx_vm

func CreateVM

func CreateVM(cache Cache, dataset Dataset, flags ...C.randomx_flags) (VM, error)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL