---
# System prepended metadata

title: AWS Architecture

---

# AWS Architecture

## Resources

### DynamoDB

We have 5 different tables for this application in DynamoDB. They are as follows:

There are two user types in this application, streamers and users. Streamers create streams and questions for users to bet on.

The **streamer** table has an attached username(their display name for the application) and info about their stream.
```
export type Streamer = {
  address: Address; // primary key
  username: string; // username of streamer
  active_stream: string; // uuid of active stream in stream table
  past_streams: string[]; // uuid of past streams in stream table
};
```

The users have information pertaining to their bets, deposits, and withdrawals.
```
export type User = {
  address: Address; // primary key
  username: string; // username of user for leaderboards
  bets: string[]; // uuid of bets in bets table
  deposits: Transaction[]; // transactions of deposits
  withdrawals: Transaction[]; // transactions of withdrawals
};

export type Transaction = {
  transaction_hash: string; // primary key
  date: number; // date of transaction in unix timestamp
  amount: number; // amount of transaction
};
```



The **stream** table stores information about the stream, such as which game is playing, which questions are attached to this stream, what platform is this stream on, and the url of the stream.
```
export type Stream = {
  stream_uuid: string; // uuid, primary key
  stream_url: string; // url of stream, ie twitch.tv/username
  platform: string; // twitch, youtube, etc
  game: string; // game being played
  questions: string[]; // uuid of questions in questions table
};
```
The **question** table stores information about the question that is not stored on the blockchain. This includes the question text, the outcome texts, the associated streamer, and the associated bets.
```
export type Question = {
  question_uuid: string; // uuid, primary key
  answer_reported: boolean; // true if the oracle has reported the answer
  game: string; // uuid of game in games table
  question: string; // the question
  outcomes: string[]; // array of possible outcomes
  question_id: string; // the question id
  owner_address: string; // the owner of the question
  oracle_address: string; // the oracle of the question
  chain_id: number; // the chain id of the question
  collateral_token: string;
  fpmm_address: Address;
  betting_end_time: number; // milliseconds since epoch
  bets: string[]; // uuid of bets for this question in the bets table
  streamer: Address; // the streamer of the question
  stream_uuid: string; // the stream uuid of the question
};
```

The **bet** table is used to store user bets. This allows us to fetch all the bets they have placed and retrieve that quickly.
```
export type Bet = {
  bet_uuid: string; // primary key
  question_uuid: string;
  chain_id: number;
  outcome_index: number;
  buy_amount: number;
  bettor: Address;
  active: boolean;
};
```

### App Runner

App Runner is just used to host our application, happy to send over the endpoints and codebase as needed.



## Security

## How do customers access services

The main entrypoint that customers use to take an action is via the [web app](https://app.sweep.gg/). Note that the application is not currently live, but it is functional

### How customer data is encrypted and stored

The first thing is that anything that involves funds is done through third party services. We use [privy](https://privy.io/) to store user funds, and actual funds are custodied on the blockchain.

Besides that, we do not store any passwords(authentication is handled by privy) or anything that should require encryption as shown above, but we'd love to hear your thoughts.

The rest of the customer data is stored in dynamoDB, as mentioned above.

### Hosting

We are hosting the frontend of the [web app](https://app.sweep.gg/) on vercel, the domain is stored on namecheap.

We are hosting the backend on aws app runner.

## Questions

Problem: We want to change the url of our api server from https://pbxmgts9q6.us-east-1.awsapprunner.com to api.sweep.gg. We need to configure DNS settings in aws to do so, but the record name and record value is too long since domain name registrars max out at 60 characters for the host name but the aws app runner suggested host name is 70 characters.

AWS Record host name: `_2d6f4cd9c162fe8a83497f7abc24e0b7.2a57j78kno9625niimzv5i3ywjyq5bm.api.sweep.gg.`
AWS Record value:
`_32c18cc4cc66612e77331e2f5f6037ef.mhbtsbpdnt.acm-validations.aws.`

Is there a way to configure a custom domain for aws app runner?

## Computer vision

### Classification model
Params: ~1 million
size:  3 MB
Pytorch - yes
General Architecture
5 Convolutional Layers
4 csp bottleneck layers
1 FC layer for classification

### Detection model
Params: 3 M
size: 6 MB
Pytorch - yes
Arch:
7 Convolutional Layers
8 csp Bottleneck layers
1 pooling layer