Skip to content

Commit 9748474

Browse files
authored
feat: initial content for How It Works page (#68)
Signed-off-by: Aurora Gaffney <[email protected]>
1 parent 832c0ac commit 9748474

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed

src/pages/HowItWorks.tsx

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,58 @@ const HowItWorks = () => {
6363
</div>
6464
</div>
6565

66+
<div className="bg-[#00000033] rounded-lg p-8 backdrop-blur-sm border border-[#ffffff1a] mb-8">
67+
<h2 className="text-2xl font-semibold text-white mb-6 text-center">How It Works</h2>
68+
<div className="text-gray-300 text-center">
69+
70+
<p className="mb-6">
71+
Our VPN system consists of multiple components, including smart contracts, a custom chain
72+
indexer and API, a web frontend, and OpenVPN. These pieces work together to facilitate signup
73+
and management of your VPN subscription and access to the VPN tunnel in a manner that focuses
74+
on privacy.
75+
</p>
76+
77+
<p className="mb-6">
78+
The signup process typically starts on our website. While it's not strictly necessary to use
79+
our website to subscribe to our services, it does make things easier. Once you connect your
80+
wallet, we will query our API for any existing subscriptions, as well as for current region and
81+
plan information. Once you choose a plan and selection the option to purchase, the site will
82+
call our API with your wallet address and chosen plan information. This will build a transaction
83+
based on your wallet, which is then returned to the user to be signed by their wallet and
84+
submitted.
85+
</p>
86+
87+
<p className="mb-6">
88+
The signup transaction will be validated by a smart contract, checking that it conforms to
89+
available regions and plans, the datum matches the expected shape, all funds are the correct amounts
90+
and going to the correct places, and other various sanity checks.
91+
</p>
92+
93+
<p className="mb-6">
94+
Once the signup TX makes it into a block and on-chain, it will get picked up by our <a href="https://github.com/blinklabs-io/vpn-indexer">custom indexer</a>.
95+
The client datum will be extracted and its information written to a SQLite database. A new client TLS
96+
certificate is generated and signed by our CA certificate, and a new VPN client config built and
97+
uploaded to a private S3 bucket.
98+
</p>
99+
100+
<p className="mb-6">
101+
Once a profile has been uploaded to S3, our API will allow fetching it by validating ownership of the
102+
wallet used to do the signup. This is done by generating a challenge string (the hex-encoded client
103+
ID and the current UNIX epoch time), signing this message with your wallet, and passing it to our API.
104+
We validate the signature of the challenge message against the wallet PKH provided at signup, and
105+
respond with a pre-signed S3 URL to fetch the client config.
106+
</p>
107+
108+
<p className="mb-6">
109+
The downloaded VPN client config can be loaded into the OpenVPN client of your choice. The user's client
110+
TLS certificate will be validated against our CA certificate when authenticating to the VPN
111+
server.
112+
</p>
113+
114+
</div>
115+
116+
</div>
117+
66118
<div className="text-center">
67119
<Link
68120
to="/"

0 commit comments

Comments
 (0)