Skip to content

Conversation

Copy link
Contributor

Copilot AI commented Sep 25, 2025

Overview

This PR creates comprehensive documentation for DAppNode's repository management system, addressing the need for clear technical documentation about how packages are discovered, versioned, and distributed through smart contracts and IPFS.

What's Added

New Wiki Structure (/wiki/)

  • Repository Management System (repository-management-system.md) - Complete overview of the decentralized package management architecture
  • Smart Contracts Overview (smart-contracts-overview.md) - Detailed technical documentation of Directory, Registry, and Repository contracts
  • Package Distribution (package-distribution.md) - In-depth guide to package discovery, download, and installation processes
  • Wiki Index (README.md) - Navigation and quick-start guide

Documentation Coverage

The wiki provides comprehensive coverage of:

Smart Contract Architecture:

  • Directory Contract - Package whitelisting and featured status management
  • Registry Contracts - Two separate registries (.dnp.dappnode.eth and .public.dappnode.eth) with different governance models
  • Repository Contracts - Individual package versioning and IPFS content hash management

Technical Implementation:

  • Ethereum node integration for blockchain event scanning
  • IPFS content distribution and validation mechanisms
  • TheGraph integration for efficient smart contract querying
  • Multi-architecture package support (amd64, arm64)

Key Modules:

  • Toolkit (packages/toolkit/) - Core smart contract and IPFS interaction
  • Installer (packages/installer/) - Complete package installation workflow with dependency resolution

Package Standards:

  • Standardized IPFS content structure with manifest, Docker Compose, and optional assets
  • Semantic versioning implementation with uint16[3] arrays
  • Content validation and schema enforcement

Integration

  • Updated main README.md to reference the new wiki documentation
  • Maintained all existing functionality (no breaking changes)
  • Follows existing repository documentation patterns

Why This Matters

This documentation helps developers understand DAppNode's decentralized package management system, making it easier to:

  • Contribute to repository management functionality
  • Debug package installation issues
  • Understand the relationship between smart contracts, IPFS, and the installer
  • Work with the toolkit and installer modules effectively

The wiki serves as a technical reference for the sophisticated interplay between Ethereum smart contracts (Directory/Registry/Repository) and IPFS that powers DAppNode's censorship-resistant package distribution system.

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • binaries.soliditylang.org
    • Triggering command: /usr/local/bin/node ./build/cli.bundled.js obtain --solc=0.5.16 (dns block)
  • ethereum.github.io
    • Triggering command: /usr/local/bin/node ./build/cli.bundled.js obtain --solc=0.5.16 (dns block)
  • relay.trufflesuite.com
    • Triggering command: /usr/local/bin/node ./build/cli.bundled.js obtain --solc=0.5.16 (dns block)
  • solc-bin.ethereum.org
    • Triggering command: /usr/local/bin/node ./build/cli.bundled.js obtain --solc=0.5.16 (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Original prompt

Create a wiki for repository in the dappmanager repo. Consider using other name after reading the below context. The below context is about how is managed the repository in dappnode, this is how new dappnode packages and versions are published, how is its content downloaded, etc. The main submodules involved into this are toolkit and installer

in dappnode the repository is a subset of smart contracts: directory, registry and repository

  • Directory serves as the smart contract with a whitelist of dappnode packages that will be the ones listed in the dappstore. Each dappnode package has the ability of being with property "featured"
  • Registry: is the smart contract whose ENS encapsulates the registry Smart Contract ENS. Right now there are 2 registries: .dnp.dappnode.eth (controlled mainly by dappnode) and .public.dnp.dappnode.eth which is public. So for instance a dappnode package rotki.dnp.dappnode.eth will belong to the registry dnp
  • Repository: each dappnode package has a unique ENS (that belongs to a certain registry) which points to the smart contract of the package. (i.e rotki.dnp.dappnode.eth) This smart contract of the package is the contract where versioning is done, so on new dappnode package version there is executed a transaction that emits an event, this event contains a version in semver range and the ipfs hash for such version.

Because of above, it is required an ethereum node to know the dappnode packages availalbe as well as its versions and ipfs hashes.

Since each dappnode package version has an IPFS hash, and this ipfs hash contains the content for such version, it is required to download the content from an ipfs node. The content of each ipfs hash follows a standard and contains a subset of files that the dappmanager downloads, such as: docker image, compose file, etc


✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.

Copilot AI changed the title Create a wiki for repository in the dappmanager repo. Consider using other name after reading the below context. The below context is about how is managed the repository in dappnode, this is how new dappnode packages and versions are published, how is ... Create comprehensive repository management wiki documentation Sep 25, 2025
Copilot finished work on behalf of pablomendezroyo September 25, 2025 13:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants