Skip to main content

Aleph.im Verifiable Random Function

Project description

Aleph.im Verifiable Random Functions

What is a Verifiable Random Function (VRF)?

Verifiable Random Functions (VRF) are cryptographic primitives that generate random numbers that are both unpredictable and verifiable. This allows to create "trustless randomness", i.e. generate (pseudo-) random numbers in decentralized systems and provide the assurance that the number was indeed generated randomly.

Aleph.im implementation

Aleph.im uses a combination of virtual machines (VMs) and aleph.im network messages to implement VRFs.

The implementation revolves around the following components:

  • The VRF coordinator
  • N executors.

The coordinator receives user requests to generate random numbers. Upon receiving a request, it selects a set of compute resource nodes (CRNs) to act as executors. Each of these executors generates a random number and computes its hash using SHA3–256. These hashes are then posted to aleph.im using a POST message, which also includes a unique request identifier. Once all the hashes are posted and confirmed, the coordinator requests the actual random numbers from each node.

Finally, the coordinator performs a verification process to ensure that all random numbers correspond to their previously posted hashes. The random numbers are then combined using an XOR operation to generate the final random number. This final number, along with a summary of operations performed, is published on aleph.im for public verification.

How to use aleph.im VRFs

The VRF executors and coordinator are meant to be deployed as VM functions on the aleph.im network. The coordinator can also be deployed in library mode (see below).

We provide a script to deploy the VM functions. Just run the following command to package the application and upload it to the aleph.im network.

python3 deployment/deploy_vrf_vms.py

If the deployment succeeds, the script will display links to the VMs on the aleph.im network. Example:

Executor VM: https://api2.aleph.im/api/v0/messages/558b0eeea54d80d2504b0287d047e0b78458d08022d3600bcf8478700dd0aac2 Coordinator VM: https://api2.aleph.im/api/v0/messages/d9eef54544338685a9b4034cc16e285520eb3cf0c199eeade1d6b290365c95d0

Use the coordinator in library mode

The coordinator can also be used directly from Python code. First, deploy the executors using the deployment script, without the coordinator VM:

python3 deployment/deploy_vrf_vms.py --no-coordinator

This will deploy an executor VM on the network and give you its ID. Example:

Executor VM: https://api2.aleph.im/api/v0/messages/558b0eeea54d80d2504b0287d047e0b78458d08022d3600bcf8478700dd0aac2

Then, install the aleph-vrf module and call it from your code:

pip install aleph-vrf
from aleph_vrf.coordinator.vrf import generate_vrf
from aleph_message.models import ItemHash


async def main():
    aleph_account = ...  # Specify your aleph.im account
    vrf_response = await generate_vrf(
        account=aleph_account,
        vrf_function=ItemHash(
            # The hash of the executor VM deployed above
            "558b0eeea54d80d2504b0287d047e0b78458d08022d3600bcf8478700dd0aac2"
        ),
    )
    random_number = int(vrf_response.random_number)

Contribute

Set up the development environment

You can set up a development environment by configuring a Python virtual environment and installing the project in development mode.

python -m virtualenv venv
source venv/bin/activate
pip install -e .[build,testing]

Run tests

This project uses mypy for static type analysis and pytest for unit/integration tests.

# Static analysis with mypy
mypy src/ tests/
# Run unit/integration tests
pytest -v .

Create a new release

  1. Deploy the VMs: python3 deployment/deploy_vrf_vms.py
  2. Update the executor VM hash in the settings (Settings.FUNCTION) and create a Pull Request
  3. Merge the Pull Request and create a new release on Github
  4. Build and upload the package on PyPI: python3 -m build && twine upload dist/*

Other resources

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aleph-vrf-1.0.0.tar.gz (29.1 kB view details)

Uploaded Source

Built Distribution

aleph_vrf-1.0.0-py3-none-any.whl (16.2 kB view details)

Uploaded Python 3

File details

Details for the file aleph-vrf-1.0.0.tar.gz.

File metadata

  • Download URL: aleph-vrf-1.0.0.tar.gz
  • Upload date:
  • Size: 29.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.12

File hashes

Hashes for aleph-vrf-1.0.0.tar.gz
Algorithm Hash digest
SHA256 fffafe9562c6fedcf190f92d6cae817b514651a09342328e70efe9e9d67ccbf6
MD5 622ed73621f553b3d66090d1dd051c35
BLAKE2b-256 b21f59c1452b91056fa7a6496eb3adfcb3fd3a60e0135f2af5d4df7d4bbe4988

See more details on using hashes here.

File details

Details for the file aleph_vrf-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: aleph_vrf-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 16.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.12

File hashes

Hashes for aleph_vrf-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f992686242c869149397032bbb4246f15b1a321d40171ce4c892dca348f7b591
MD5 bcb5fdcacf52cd1d964cba08b8abaf6a
BLAKE2b-256 86f9f0e544fe594fdb9d0bcbe2c53bbf03bffc386129aa710aab42d2703b4cb9

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page