diff --git a/site/wallet.html b/site/wallet.html new file mode 100644 index 000000000..20d43c56c --- /dev/null +++ b/site/wallet.html @@ -0,0 +1,301 @@ + + + +RTC Wallet Generator | RustChain + + + + +
+

RTC WALLET GENERATOR

+
Create an RTC address to receive RustChain bounty payouts. Takes 2 seconds.
+ +
+ NOT a Solana/ETH/BTC address. RTC is the native token of RustChain. + If you have a Solana address, you need wRTC (the wrapped version) — see FAQ below. +
For bounty payouts, you need an RTC address starting with RTC. +
+ + +
+
GENERATE YOUR WALLET
+

+ Everything happens in your browser. No data is sent to any server. Your private key never leaves this page. +

+ +
+ + + + + +
+
FAQ
+
+
What is RTC?
+
RustChain Token — the native currency of the RustChain Proof-of-Antiquity network. Fixed supply of 8,388,608 RTC (2^23). Reference value: $0.10/RTC.
+ +
I already have a Solana wallet. Can I use that?
+
No. RTC and SOL are different chains. For Solana, you want wRTC (wrapped RTC) — you can bridge between RTC and wRTC at bottube.ai/bridge. For bounties, we pay in native RTC to an RTC... address.
+ +
Is this address also a miner wallet?
+
Yes! The same RTC address works for receiving bounties, mining rewards, and transfers. If you also want to mine, install pip install clawrtc and use this address as your wallet.
+ +
Can I convert RTC to SOL/USDC?
+
Yes — bridge RTC → wRTC at bottube.ai/bridge, then swap wRTC for SOL on Raydium (pool: 8CF2Q8...).
+ +
How do I check my balance?
+
Visit the Block Explorer or run: curl -sk https://50.28.86.131/api/balance?wallet=YOUR_ADDRESS
+ +
How do I send RTC to someone else?
+
Use the RustChain Wallet GUI (Linux .deb) or the signed transfer API endpoint with your private key.
+ +
Is my private key stored anywhere?
+
No. This page generates keys entirely in your browser using the Web Crypto API. Nothing is sent to any server. If you lose your private key, your RTC is gone forever.
+
+
+ +
+ RustChain • Proof of Antiquity • rustchain.org + • Beacon Atlas +
+
+ + + + + + + +
Ask Elya
\ No newline at end of file diff --git a/tests/test_wallet_page_ed25519.py b/tests/test_wallet_page_ed25519.py new file mode 100644 index 000000000..4112173cd --- /dev/null +++ b/tests/test_wallet_page_ed25519.py @@ -0,0 +1,30 @@ +# SPDX-License-Identifier: MIT +"""Regression checks for the native Ed25519 web wallet implementation.""" + +import unittest +from pathlib import Path + + +WALLET_PAGE = Path(__file__).parents[1] / "site" / "wallet.html" + + +class WalletPageEd25519Tests(unittest.TestCase): + @classmethod + def setUpClass(cls) -> None: + cls.source = WALLET_PAGE.read_text(encoding="utf-8") + + def test_wallet_page_generates_ed25519_keys(self) -> None: + self.assertIn("name: 'Ed25519'", self.source) + self.assertIn("exportKey('jwk'", self.source) + self.assertIn("curve: 'Ed25519'", self.source) + self.assertNotIn("ECDSA", self.source) + self.assertNotIn("P-256", self.source) + + def test_wallet_page_uses_raw_ed25519_public_key_for_address(self) -> None: + self.assertIn("const pubKeyHex = base64UrlToHex(publicJwk.x);", self.source) + self.assertIn("crypto.subtle.digest('SHA-256', addressKeyBytes)", self.source) + self.assertIn("'RTC' + hashHex.substring(0, 40)", self.source) + + +if __name__ == "__main__": + unittest.main()