DistroFund - System Design/Specification

The app has a front-end that connects to an Aleo smart contract, which allows sending up to 15 tokens, either private or public, in a single transaction.

I. System Architecture

We are developing our application on the Aleo blockchain, which is a platform for private applications using zero-knowledge cryptography. The Aleo blockchain provides the perfect base for our project, as it allows us to transfer assets securely and privately.

II. Key Components

  • User Interface (UI): We design our user interface to be smooth and easy to use. It lets you start and control asset transfers. It has a simple design that works for users with any skill level.

  • Leo Program (Smart Contract): Our Leo program will make asset transfers private and secure. The smart contracts will manage the asset allocation, keeping it private and trustworthy.

  • Blockchain Integration: Our system will integrate with the Aleo blockchain, leveraging its privacy-focused features for asset transfers and transaction privacy.

  • API Layer: The UI layer will directly work with the Leo program using the Aleo Typescript SDK

III. Data Flow

  • Users will access the application through the user interface, providing necessary details for private asset transfers.

  • The UI will interact with the API layer, which, in turn, communicates with the Leo Programs on the Aleo blockchain.

  • Leo Programs will use zero knowledge proofs to verify and execute private asset transfers while maintaining user privacy.

IV. Diagram

V. Terminology

  • Asset: A digital representation of a value, which can include tokens, cryptocurrencies, or other blockchain-based assets.

  • Leo Programs: Smart contracts on the Aleo blockchain, designed for privacy-focused transactions.

  • API: Application Programming Interface, facilitating interaction between different software components.

  • DistroFund: DistroFund and Scatter could be used interchangeably - it is a term that we use in this document to describe our dApp that allows a user to send a token or native coins to multiple addresses in a single transaction.

VI. Features/Functionality

We have the following main features:

  • Users can connect Leo wallet to our web-based application

  • Users can distribute Aleo native coin

  • Users can check their existing public and private account balance

  • Users can see paginated table of full account's transactions and redirect to https://explorer.aleo.org for additional information

  • Users can input a form with array of recipient addresses and corresponding amounts

  • Users can distribute Aleo native coins to multiple accounts in one transaction

Work in progress features:

  • Users can decide if they want to distribute Aleo native coin or tokens

  • Users can distribute Aleo tokens to multiple accounts in one transaction

  • Users that act as senders can decide to hide their sender address “transfer_private_to_public” (ZK feature)

  • Users can decide to hide the address of the receivers “transfer_public_to_private” (ZK Feature)

VI. References

This is the initial rough wireframe design of DistroFund

  • On Figure 1 is the initial screen. Users should click connect-wallet and initiate a connection to the DistroFund application.

  • On figure 2 once the user has connected their wallet they can check the account balance and transaction history. They can create new single private transaction to transfer Aleo native currency to up to 15 recepients

On Figure 3 you can see opened New Transaction Screen with 2 input textareas, first one for desired recepient addresses and second for wanted amounts to send to each address.

On Figure 4 is same screen as Figure 3 but with valid inputs.

On Figure 5 the sender can see a summary of the DistroFund transaction and when the button is clicked only a single transaction will be broadcasted, but it will send the desired funds to multiple receivers.

Work in progress:

On this step it will be an option for the sender to:

  • transfer_private_to_public

  • transfer_public_to_private

  • transfer_public

Last updated