Skip to content

Commit

Permalink
Initial cleaned-up commit.
Browse files Browse the repository at this point in the history
  • Loading branch information
unyieldinggrace committed May 17, 2020
1 parent 2ae54e1 commit 5059197
Show file tree
Hide file tree
Showing 612 changed files with 116,930 additions and 0 deletions.
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
experiments/aggsigjs/node_modules/
nanofusion/node_modules/
nanofusion/client/node_modules/
.idea/

47 changes: 47 additions & 0 deletions GettingStarted.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# Getting Started

NanoFusion is currently in an alpha release state. You are welcome to try it, but be
aware that it definitely has some bugs and rough edges sticking out.

One of those rough edges is that I haven't bothered doing any production-deployment
stuff yet. If you want to run it, for now you have to install nodejs and run a
development server. Don't worry, it's not as intimidating as it sounds.

Assuming you have cloned the repository and have node installed, you can start the server component by doing:
```
npm install
npm start
```

In a separate terminal window, start the react dev server for the client component:
```
cd ./client
npm install
npm start
```

This will open up a browser window to `http://localhost:3000`. The server component
runs on port 5000, but cors is enabled, so they can talk to each other just fine.

If you want to actually submit blocks to the network, you will need to configure the
Nano node HTTP endpoint. In this repository, it is pointing to my test node at
`http://nanofusion.casa:7076`. When I first put this up, I left that server
running pretty wide open so others could test with it. Not good practice, but
we all know it's easier to test when things run wide open, and I wanted
any interested devs to have a good experience. I do NOT guarantee that this
node will always be available for testing, so you may have to run your own. If it gets
abused at any point (e.g. for excess work generation), then I will have to
take it down.

To work for an end-to-end test, the node has to accept actions like `work_generate`
that are blocked by default, so you will need to make sure that the node you use
has those available.

To set up the node endpoint, edit `./client/src/config.js` and set the value of `nanoNodeAPIURL`
to your node's address and port.

The eventual goal (especially in mix sessions) is to distribute the work-generation
load across all of the participants in the mix session, using WebGL in the browser.
Generating proof-of-work using WebGL has already been done here: [https://numtel.github.io/nano-webgl-pow](https://numtel.github.io/nano-webgl-pow/).
But it will take some effort to integrate it into the multi-party signing process.

6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@

NanoFusion is a trustless mixing protocol for the Nano cryptocurrency. It is loosely inspired by CashFusion (https://github.com/cashshuffle/spec/blob/master/CASHFUSION.md), the protocol developed by Jonald Fyookball for Bitcoin Cash.

## Getting Started

If you want to actually try running the software, see [GettingStarted.md](GettingStarted.md).

## Describing the Problem

Because Nano is account-based, rather than UTXO-based, some changes are required in order to created a trustless mixing protocol. In a UTXO-based currency, one transaction can have many inputs. CashFusion works by having these many inputs come from different owners. In contrast, each Nano transaction has exactly one sending account and one receiving account. This makes it difficult to mix coins without trusting a central server, because at some point, someone has to have the authority to cryptographically sign the send-transactions from the mixing account. Whoever can sign transactions from the mixing account can send all the money to themselves if they wish.

## Accounts with Aggregated Signatures
Expand Down
23 changes: 23 additions & 0 deletions client/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
/node_modules
/.pnp
.pnp.js

# testing
/coverage

# production
/build

# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local

npm-debug.log*
yarn-debug.log*
yarn-error.log*
68 changes: 68 additions & 0 deletions client/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).

## Available Scripts

In the project directory, you can run:

### `npm start`

Runs the app in the development mode.<br />
Open [http://localhost:3000](http://localhost:3000) to view it in the browser.

The page will reload if you make edits.<br />
You will also see any lint errors in the console.

### `npm test`

Launches the test runner in the interactive watch mode.<br />
See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.

### `npm run build`

Builds the app for production to the `build` folder.<br />
It correctly bundles React in production mode and optimizes the build for the best performance.

The build is minified and the filenames include the hashes.<br />
Your app is ready to be deployed!

See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.

### `npm run eject`

**Note: this is a one-way operation. Once you `eject`, you can’t go back!**

If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.

Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own.

You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it.

## Learn More

You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).

To learn React, check out the [React documentation](https://reactjs.org/).

### Code Splitting

This section has moved here: https://facebook.github.io/create-react-app/docs/code-splitting

### Analyzing the Bundle Size

This section has moved here: https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size

### Making a Progressive Web App

This section has moved here: https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app

### Advanced Configuration

This section has moved here: https://facebook.github.io/create-react-app/docs/advanced-configuration

### Deployment

This section has moved here: https://facebook.github.io/create-react-app/docs/deployment

### `npm run build` fails to minify

This section has moved here: https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify
Loading

0 comments on commit 5059197

Please sign in to comment.