Skip to content

mmathys/acfts

Repository files navigation

ACFTS

Asynchronous Consensus-Free Transaction System

Table of Contents

  1. Install
  2. Introduction
  3. Executables
  4. Testing
  5. Code
  6. Mirroring

Install

Prerequisites: Go is required.

Clone the repo:

git clone git@github.com:mmathys/acfts.git

# or use the ETH Mirror:
git clone git@gitlab.ethz.ch:disco-students/fs20/mmathys-consensus-free-transaction-systems.git

Add $GOPATH/bin to your $PATH

# Add this line to your .bashrc, .zshrc or similar
export PATH=$PATH:$GOPATH/bin

# reload .bashrc
source ~/.bashrc

Build source and install executables:

go build ./...
go install ./...

Introduction

ACFTS is an asynchronous consensus-free transaction system. It consists of trusted servers and untrusted clients. Each server and client have a unique ECDSA key. The address is derived from its public key.

The client has a CLI which allows easy transfer of credits. In this setup, each client automatically gets 100 valid credits. The client CLI can be accessed by starting the client executable.

Topologies

Topologies are defined as JSON configuration files in topologies/.

Topologies encode all necessary information about server and clients, for example: address, keys, network address, replication instances. In a system, a server and client must always use the same topology.

When launching a server or a client, its configuration can be given by a topology, an address (which must correspond to a node in the topology). When server shard replication is used, a replication instance index can additionally be passed.

Executables

The CLIs are installed in $GOPATH/bin.

Server

server                      # Executable
    --address <address>     # Address assigned to server. Must be in hexadecimal.
    --topology <file>       # Topology configuration file
    --benchmark             # Outputs number of tx/s to stdout
    --pprof                 # Enables pprof profiler
    --instance <number>     # Replication instance (used for sharding)
    --help                  # Prints help

Client

Launch the CLI:

client                      # Executable
    --address <address>     # Address assigned to client. Must be in hexadecimal.
    --topology <file>       # Topology configuration file
    --benchmark             # If set: outputs benchmark
    --help                  # Prints help

Run CLI commands:

> help                    # Show the help section
> send <address> 100      # Send 100 credits to <address>. Must be in hexadecimal.
> utxo                    # Show local UTXOs
> balance                 # Show balance
> info                    # Show client information
> clear                   # Clear console

Testing

For Benchmarks and testing, it is recommended that tests are run with an IDE, for example Goland.

Code

Folder Description
client Client specific code
common Code which is used in both server and client, for example ECDSA-related code.
docs Documentation
server Server specific code
test Tests and benchmarks
topologies Topology config files

Mirroring

The original repository is hosted on GitHub and mirrored to a repository hosted on gitlab.ethz.ch.

About

Asynchronous Consensus-Free Transaction System

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published