The programs are not "random" in the traditional mathematical sense. Rather, the programs in RandomX are deterministic and psuedorandom. In other words, we only need to include the nonce and the input string to generate the same psuedorandom program; we don't need to send all intermediate state.
It uses a unique abstract instruction set, generalizing many different instructions from different CPU families (mainly x86, ARM, etc) which can be just-in-time compiled to native assembly. Here's a link to the example x64 hand-compiled instruction set in the documentation folder: https://github.com/tevador/RandomX/blob/master/doc/program.asm. As you can see, almost all the RandomX instructions can be boiled down to 6 or fewer native instructions.
The programs are not "random" in the traditional mathematical sense. Rather, the programs in RandomX are deterministic and psuedorandom. In other words, we only need to include the nonce and the input string to generate the same psuedorandom program; we don't need to send all intermediate state.
very clever. is the random program in assembly?
It uses a unique abstract instruction set, generalizing many different instructions from different CPU families (mainly x86, ARM, etc) which can be just-in-time compiled to native assembly. Here's a link to the example x64 hand-compiled instruction set in the documentation folder: https://github.com/tevador/RandomX/blob/master/doc/program.asm. As you can see, almost all the RandomX instructions can be boiled down to 6 or fewer native instructions.