From fa54238db9dd5fe43873e7bf59adba40ce94c6b6 Mon Sep 17 00:00:00 2001 From: idky137 Date: Wed, 6 Mar 2024 16:52:15 +0000 Subject: [PATCH] updated README, added POC PDF --- README.md | 11 +++++++++-- docs/nym_poc.pdf | Bin 0 -> 19916 bytes 2 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 docs/nym_poc.pdf diff --git a/README.md b/README.md index 513f4d6..5f3bf3d 100644 --- a/README.md +++ b/README.md @@ -26,9 +26,16 @@ and continue to implement any useful caching/preprocessing we can add...but full 3) Run `$ cargo run --bin zproxy` 3) Run `$ cargo run --release --package zingo-cli -- --chain "testnet" --server "127.0.0.1:8080" --data-dir ~/wallets/test_wallet` -# nproxy/nserver -A nym powered proxy between zingolib and lightwalletd. +# Nym-Proxy / Nym-Server +A nym powered proxy between zcash wallets and lightwalletd, currently capable of sending transactions. + +This is the POC and initial work on enabling zcash infrastructure to use the nym mixnet. + +[Nym_POC](./docs/nym_poc.pdf) shows the current state of this work ands our vision for the future. +Our plan is to first enable wallets to send and recieve transactions via a nym powered proxy between wallets and a lightwalletd before looking at the wider zcash ecosystem. + +# nproxy/nserver - To run zingo-cli through nym-proxy/server, connecting to lightwalletd/zebrad locally: 1) Run `$ zebrad --config #PATH_TO_ZINGO_PROXY/zebrad.toml start` 2) Run `$ ./lightwalletd --no-tls-very-insecure --zcash-conf-path $PATH_TO_ZINGO_PROXY/zcash.conf --data-dir . --log-file /dev/stdout` diff --git a/docs/nym_poc.pdf b/docs/nym_poc.pdf new file mode 100644 index 0000000000000000000000000000000000000000..15313e674d94f90e064ce55be9f1a8df17ae4fbd GIT binary patch literal 19916 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