You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
<h2className="text-2xl font-semibold text-white mb-6 text-center">How It Works</h2>
68
+
<divclassName="text-gray-300 text-center">
69
+
70
+
<pclassName="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
+
<pclassName="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
+
<pclassName="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
+
<pclassName="mb-6">
94
+
Once the signup TX makes it into a block and on-chain, it will get picked up by our <ahref="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
+
<pclassName="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
+
<pclassName="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
0 commit comments