Home

Awesome

Metadata Portal šŸŒ—

Metadata Portal is a self-hosted web page that shows you the latest metadata for a given network.

This is an important addition to Signer, which can update the metadata inside only through a special video QR code without going online. Parity will host its own version of the page for all chains for which we sign the metadata. External users (chain owners) will be able to deploy their versions of metadata portal if they want.

Supported Chains

List of supported chains is published in Nova-utils repository

How does it work?

It all starts with the Github repository. Any user can clone it and run their Metadata Portal. We also host our own version, so let's break down the principles of working on it.

Metadata Portal supports two metadata sources in parallel. Both are equally important for different types of users.

User interface

By default, only production networks are displayed in the user interface. If you'd like to get all list of networks including test networks add /dev to the url. For example https://novasamatech.github.io/metadata-portal/#/dev

1. Parsing it from chain and generating QR codes itself with manual signing

This flow is important for all users who want to always have the latest metadata in their signing devices to parse and sign their transactions right away.

2. Showing manually uploaded and signed QR codes via PRs

This flow is for security-oriented users and Parity itself. It allows chain owners to sign their metadata updates and host QR codes for their users.

3. Parsing it from chain and generating QR code itself with auto signing

This flow is not recommended because private key should be stored in CI configuration and passed as command line argument.

This flow is important for all users who want to always have the latest metadata in their signing devices to parse and sign their transactions right away.

Deployment

Requirements

  1. install https://github.com/paritytech/parity-signer to your signing device

Steps

With integration with Nova Wallet utils configuration

You can use Github Pages to host the metadata-portal for your set of chains

  1. Fork this repo
  2. Edit signer's name and public key in the config-template.toml. The key can be exported from parity-signer
  3. Run cargo run --release -- update-chain-config for updating the config.toml file
  4. Run cargo run --release -- update-chain-config --env dev for updating the config_dev.toml file from chains_dev.json
  5. Configure GitHub Pages to build from gh-pages branch (Settings -> Pages -> Source)
  6. Edit domain name in:
    1. homepage field in package.json
    2. public/CNAME file
  7. Notifications to Matrix:
    1. You can disable it by setting NOTIFY_MATRIX: false in .github/workflows/update.yml
    2. Otherwise, add MATRIX_SERVER, MATRIX_ROOM_ID, MATRIX_ACCESS_TOKEN values to project Actions secrets

Update configuration by yourself

You can use Github Pages to host the metadata-portal for your set of chains

  1. Fork this repo
  2. Edit config.toml
    1. Add/remove chains
    2. Edit signer's name and public key. The key can be exported from parity-signer
  3. Configure GitHub Pages to build from gh-pages branch (Settings -> Pages -> Source)
  4. Edit domain name in:
    1. homepage field in package.json
    2. public/CNAME file
  5. Notifications to Matrix:
    1. You can disable it by setting NOTIFY_MATRIX: false in .github/workflows/update.yml
    2. Otherwise, add MATRIX_SERVER, MATRIX_ROOM_ID, MATRIX_ACCESS_TOKEN values to project Actions secrets

CI

  1. Run Update chains_config file action in order to update config.toml and config_dev.toml files
  2. Check updates&sign runs automatically by cron and generates QRs for production chains
  3. Deploy runs automatically after the PR merge

If you'd like to update test networks from chains_dev file then run

  1. Run Update chains_config file action with dev environment parameter
  2. Run cargo run --release -- -c=config_dev.toml update --sign --signing-key ${{secrets.SIGNING_KEY}} --source node in order to generate metadata for all networks including test networks

Development

Dependencies

The main requirement is the OpenCV. You can check this manual: https://crates.io/crates/opencv

Arch Linux:

OpenCV package in Arch is suitable for this.

pacman -S clang qt5-base opencv

Ubuntu:

sudo apt install libopencv-dev clang libclang-dev

Other Linux:

You have several options of getting the OpenCV library:

Additionally, please make sure to install clang package or its derivative that contains libclang.so and clang binary.

MacOs:

brew install opencv

If you're getting dyld: Library not loaded: @rpath/libclang.dylib: OS can't find libclang.dylib dynamic library because it resides in a non-standard path, set up the DYLD_FALLBACK_LIBRARY_PATH environment variable to point to the path where libclang.dylib can be found, e.g. for XCode:

export DYLD_FALLBACK_LIBRARY_PATH="$(xcode-select --print-path)/Toolchains/XcodeDefault.xctoolchain/usr/lib/"

Frontend

Before running the frontend locally, you need to generate a data file:

make collector

And then run the app in the development mode

yarn start

License

Metadata Portal is available under the GNU GENERAL license. See the LICENSE file for more info. Ā© Novasama Technologies GmbH 2023