366 lines
14 KiB
Plaintext
366 lines
14 KiB
Plaintext
// ============================================================================
|
|
// FREEZONE REGISTRATION FLOW
|
|
// ============================================================================
|
|
// Complete registration flow for new freezone members including:
|
|
// 0. Freezone initialization and configuration
|
|
// 1. Public key registration
|
|
// 2. User profile creation & email verification
|
|
// 3. Terms & Conditions signing
|
|
// 4. Crypto wallet creation (TFT + ETH)
|
|
// 5. Payment processing
|
|
// 6. KYC verification with info collection
|
|
|
|
print("=== FREEZONE REGISTRATION FLOW ===\n");
|
|
|
|
// ============================================================================
|
|
// KEYPAIRS AND IDENTITIES
|
|
// ============================================================================
|
|
|
|
// Freezone Organization (Keypair 1)
|
|
let freezone_pubkey = "04d0aea7f0a48bcab4389753ddc2e61623dd89d800652b11d0a383eb3ea74561d730bdd06e0ca8f4cd4013907d95782a0a584313e1d91ae5ad09b663de36bfac44";
|
|
|
|
// User: Timur (Keypair 2)
|
|
let timur_pubkey = "04090636d0a15854c4c0b73f65b6de5f6a27a7b22d6fbf5f6d97c45476a0384fe50781444c33f5af577e017599e4b432373fbcdcd844d8783c5e52240a14b63dc3";
|
|
|
|
print("Identities:");
|
|
print(" Freezone: " + freezone_pubkey);
|
|
print(" Timur: " + timur_pubkey);
|
|
print();
|
|
|
|
// ============================================================================
|
|
// INITIALIZATION: Freezone Configuration
|
|
// ============================================================================
|
|
|
|
print("Initialization: Freezone Configuration");
|
|
print("─────────────────────────────────────────────────────────────");
|
|
|
|
// Create context with freezone as the signatory
|
|
let freezone_ctx = get_context([freezone_pubkey]);
|
|
print("✓ Freezone context created");
|
|
print(" Context ID: " + freezone_ctx.context_id());
|
|
print(" Signatory: Freezone (" + freezone_pubkey + ")");
|
|
|
|
// Configure Email Client
|
|
print("\nConfiguring Email Client...");
|
|
let freezone_email_client = new_email_client()
|
|
.smtp_host("smtp.freezone.example")
|
|
.smtp_port(587)
|
|
.from_email("noreply@freezone.example")
|
|
.from_name("Freezone Platform");
|
|
|
|
print("✓ Email client configured");
|
|
print(" SMTP Host: smtp.freezone.example");
|
|
print(" From: noreply@freezone.example");
|
|
|
|
// Configure Payment Provider (Pesapal)
|
|
print("\nConfiguring Payment Provider...");
|
|
let freezone_payment_client = new_payment_client_pesapal_sandbox(
|
|
1,
|
|
"qkio1BGGYAXTu2JOfm7XSXNruoZsrqEW",
|
|
"osGQ364R49cXKeOYSpaOnT++rHs="
|
|
);
|
|
|
|
print("✓ Payment provider configured (Pesapal Sandbox)");
|
|
print(" Provider: Pesapal");
|
|
print(" Environment: Sandbox");
|
|
|
|
// Configure KYC Provider
|
|
print("\nConfiguring KYC Provider...");
|
|
print("✓ KYC provider configured");
|
|
print(" Provider: Freezone KYC");
|
|
print(" Callback URL: https://freezone.example/kyc/callback");
|
|
|
|
// Create Freezone's own Ethereum wallet
|
|
print("\nCreating Freezone Ethereum Wallet...");
|
|
let freezone_eth_wallet = new_ethereum_wallet()
|
|
.owner_id(999) // Freezone organization ID
|
|
.network("mainnet");
|
|
|
|
print("✓ Freezone Ethereum wallet created");
|
|
print(" Address: " + freezone_eth_wallet.get_address());
|
|
print(" Network: " + freezone_eth_wallet.get_network());
|
|
print(" Owner: Freezone Organization (ID: 999)");
|
|
|
|
// Save Freezone's Ethereum account
|
|
let freezone_eth_account = new_account()
|
|
.owner_id(999)
|
|
.address(freezone_eth_wallet.get_address())
|
|
.currency("ETH")
|
|
.balance(0.0);
|
|
|
|
freezone_ctx.save(freezone_eth_account);
|
|
print("✓ Freezone Ethereum account saved");
|
|
|
|
print("\n✓ Freezone initialization complete\n");
|
|
|
|
// ============================================================================
|
|
// STEP 0: Registration Flow Setup
|
|
// ============================================================================
|
|
|
|
print("Step 0: Registration Flow Setup");
|
|
print("─────────────────────────────────────────────────────────────");
|
|
|
|
// Define registration flow steps
|
|
print("\nRegistration Flow Steps:");
|
|
print(" 1. Public key registration");
|
|
print(" 2. User profile creation & email verification");
|
|
print(" 3. Terms & Conditions signing");
|
|
print(" 4. Crypto wallet creation (TFT + ETH)");
|
|
print(" 5. Payment processing");
|
|
print(" 6. KYC verification with info collection");
|
|
print();
|
|
|
|
// ============================================================================
|
|
// STEP 1: Public Key Registration
|
|
// ============================================================================
|
|
|
|
print("Step 1: Public Key Registration");
|
|
print("─────────────────────────────────────────────────────────────");
|
|
|
|
// User (Timur) provides their public key
|
|
print("User public key received: " + timur_pubkey);
|
|
print("✓ Public key validated and stored\n");
|
|
|
|
// ============================================================================
|
|
// STEP 2: User Profile Creation & Email Verification
|
|
// ============================================================================
|
|
|
|
print("Step 2: User Profile Creation & Email Verification");
|
|
print("─────────────────────────────────────────────────────────────");
|
|
|
|
// Collect basic user information
|
|
let user_name = "Timur Gordon";
|
|
let user_email = "timur@freezone.example";
|
|
print("Collecting user information:");
|
|
print(" Name: " + user_name);
|
|
print(" Email: " + user_email);
|
|
|
|
// Create user profile
|
|
let user_profile = new_user()
|
|
.username(user_name)
|
|
.pubkey(timur_pubkey)
|
|
.add_email(user_email);
|
|
|
|
print("✓ User profile created");
|
|
freezone_ctx.save(user_profile);
|
|
print("✓ Profile saved");
|
|
|
|
// Email Verification
|
|
print("\nInitiating email verification...");
|
|
let verification = new_verification("user_1", user_email);
|
|
|
|
print("✓ Email verification created");
|
|
print(" Verification code: " + verification.get_code());
|
|
print(" Nonce: " + verification.get_nonce());
|
|
|
|
// Prepare verification email
|
|
let verification_link = "https://freezone.example/verify?nonce=" + verification.get_nonce();
|
|
print(" Verification link: " + verification_link);
|
|
print(" (Email sent to: " + user_email + ")");
|
|
|
|
// Simulate user clicking verification link and verifying
|
|
print("\n✓ User clicks verification link and verifies email");
|
|
verification.verify_nonce(verification.get_nonce());
|
|
print("✓ Email verified: " + verification.get_status());
|
|
|
|
freezone_ctx.save(verification);
|
|
print("✓ Verification saved\n");
|
|
|
|
// ============================================================================
|
|
// STEP 3: Terms & Conditions Signing
|
|
// ============================================================================
|
|
|
|
print("Step 3: Terms & Conditions Signing");
|
|
print("─────────────────────────────────────────────────────────────");
|
|
|
|
// Create Terms & Conditions contract
|
|
let terms_contract = new_contract(1)
|
|
.title("Freezone Membership Terms & Conditions")
|
|
.content("By signing this agreement, you agree to abide by all freezone rules and regulations...")
|
|
.creator_id(999); // Freezone admin
|
|
|
|
print("✓ Terms & Conditions contract created");
|
|
print(" Title: " + terms_contract.title());
|
|
|
|
// User signs the contract (add their signature ID)
|
|
let user_signature_id = 1001;
|
|
terms_contract = terms_contract.add_signature(user_signature_id);
|
|
print("✓ User signature added (ID: " + user_signature_id + ")");
|
|
|
|
// Activate contract once signed
|
|
if terms_contract.is_fully_signed(1) {
|
|
terms_contract = terms_contract.activate();
|
|
print("✓ Contract activated: " + terms_contract.status());
|
|
}
|
|
|
|
freezone_ctx.save(terms_contract);
|
|
print("✓ Signed contract saved\n");
|
|
|
|
// ============================================================================
|
|
// STEP 4: Crypto Wallet Creation
|
|
// ============================================================================
|
|
|
|
print("Step 4: Crypto Wallet Creation");
|
|
print("─────────────────────────────────────────────────────────────");
|
|
|
|
// Create TFT crypto account for user
|
|
let tft_account = new_account()
|
|
.owner_id(1)
|
|
.currency("TFT") // ThreeFold Token
|
|
.balance(0.0);
|
|
|
|
print("✓ TFT account created");
|
|
print(" Owner ID: 1");
|
|
print(" Currency: TFT");
|
|
print(" Initial balance: 0");
|
|
|
|
freezone_ctx.save(tft_account);
|
|
|
|
// Create Ethereum wallet for user
|
|
print("\nCreating Ethereum wallet...");
|
|
let eth_wallet = new_ethereum_wallet()
|
|
.owner_id(1)
|
|
.network("mainnet");
|
|
|
|
print("✓ Ethereum wallet created");
|
|
print(" Address: " + eth_wallet.get_address());
|
|
print(" Network: mainnet");
|
|
print(" Balance: 0 ETH");
|
|
|
|
// Save as account
|
|
let eth_account = new_account()
|
|
.owner_id(1)
|
|
.address(eth_wallet.get_address())
|
|
.currency("ETH")
|
|
.balance(0.0);
|
|
|
|
freezone_ctx.save(eth_account);
|
|
print("✓ Ethereum account saved\n");
|
|
|
|
// ============================================================================
|
|
// STEP 5: Payment Processing
|
|
// ============================================================================
|
|
|
|
print("Step 5: Payment Processing");
|
|
print("─────────────────────────────────────────────────────────────");
|
|
|
|
print("Using configured Pesapal payment client...");
|
|
|
|
// Create payment request for registration fee
|
|
print("\nCreating payment session...");
|
|
let payment_request = new_payment_request()
|
|
.amount(100.0)
|
|
.currency("USD")
|
|
.description("Freezone Registration Fee")
|
|
.callback_url("https://freezone.example/payment/callback")
|
|
.merchant_reference("REG_USER_1_" + timestamp());
|
|
|
|
print("✓ Payment request created");
|
|
print(" Amount: $100 USD");
|
|
print(" Description: Freezone Registration Fee");
|
|
|
|
// Initiate payment with Pesapal (this would return a payment URL)
|
|
print("\nInitiating payment session with Pesapal...");
|
|
print(" Payment URL: https://pay.pesapal.com/iframe/PesapalIframe3/Index/?OrderTrackingId=abc123");
|
|
print(" (User would be redirected to Pesapal payment page)");
|
|
|
|
// Simulate user completing payment
|
|
print("\n✓ User clicks payment link and completes payment");
|
|
print(" Payment Status: COMPLETED");
|
|
print(" Transaction ID: TXN_" + timestamp());
|
|
|
|
// Create payment transaction record
|
|
let payment_tx = new_transaction()
|
|
.source(0) // External payment
|
|
.destination(1) // Freezone account
|
|
.amount(100.0)
|
|
.assetid(1);
|
|
|
|
print("✓ Payment transaction recorded");
|
|
|
|
freezone_ctx.save(payment_tx);
|
|
print("✓ Transaction saved\n");
|
|
|
|
// ============================================================================
|
|
// STEP 6: KYC Verification
|
|
// ============================================================================
|
|
|
|
print("Step 6: KYC Verification");
|
|
print("─────────────────────────────────────────────────────────────");
|
|
|
|
// Create KYC session
|
|
let kyc_session = new_kyc_session("user_1", "freezone_kyc")
|
|
.callback_url("https://freezone.example/kyc/callback")
|
|
.success_url("https://freezone.example/kyc/success")
|
|
.error_url("https://freezone.example/kyc/error");
|
|
|
|
print("✓ KYC session created");
|
|
print(" Client ID: " + kyc_session.get_client_id());
|
|
print(" Provider: " + kyc_session.get_provider());
|
|
|
|
// Generate KYC verification URL
|
|
print("\nKYC Verification URL generated:");
|
|
print(" https://kyc.provider.com/verify?session=kyc_session_" + timestamp());
|
|
print(" (User would be redirected to KYC provider)");
|
|
|
|
// Simulate user clicking KYC link and completing verification
|
|
print("\n✓ User clicks KYC link and completes verification");
|
|
print(" - Uploads identity document (Passport)");
|
|
print(" - Takes selfie for liveness check");
|
|
print(" - Provides address proof");
|
|
|
|
// Simulate KYC callback with verification results
|
|
print("\n✓ KYC Provider callback received:");
|
|
print(" - Identity verification: PASSED");
|
|
print(" - Liveness check: PASSED");
|
|
print(" - Address verification: PASSED");
|
|
print(" - Sanctions screening: CLEAR");
|
|
print(" - PEP check: NOT FOUND");
|
|
print(" - Overall Status: VERIFIED");
|
|
|
|
// Create KYC info with verified data from callback
|
|
print("\nStoring verified KYC information...");
|
|
let kyc_info_verified = new_kyc_info()
|
|
.first_name("Timur")
|
|
.last_name("Gordon")
|
|
.email(user_email)
|
|
.phone("+1-555-0123")
|
|
.country("US")
|
|
.date_of_birth("1990-05-15")
|
|
.document_type("passport")
|
|
.document_number("P123456789")
|
|
.verified(true);
|
|
|
|
freezone_ctx.save(kyc_info_verified);
|
|
freezone_ctx.save(kyc_session);
|
|
print("✓ KYC verification data saved");
|
|
print("✓ KYC verification completed\n");
|
|
|
|
// ============================================================================
|
|
// SUMMARY
|
|
// ============================================================================
|
|
|
|
print("═══════════════════════════════════════════════════════════════");
|
|
print("REGISTRATION COMPLETE");
|
|
print("═══════════════════════════════════════════════════════════════");
|
|
print("\nUser Summary:");
|
|
print(" Name: " + user_name);
|
|
print(" Email: " + user_email);
|
|
print(" Public Key: " + timur_pubkey);
|
|
print(" TFT Account: Created");
|
|
print(" ETH Account: Created");
|
|
print(" KYC Status: Verified");
|
|
print(" Payment Status: Completed ($100 USD)");
|
|
print(" Contract: Signed and Active");
|
|
print("\nRegistration Flow:");
|
|
print(" ✓ Freezone initialization (Email, Payment, KYC providers configured)");
|
|
print(" ✓ Freezone Ethereum wallet created");
|
|
print(" ✓ Public key registration");
|
|
print(" ✓ User profile creation & email verification");
|
|
print(" ✓ Terms & Conditions signed");
|
|
print(" ✓ Crypto wallets created (TFT + ETH)");
|
|
print(" ✓ Payment processed ($100 USD)");
|
|
print(" ✓ KYC verification completed with verified info");
|
|
print("\n" + user_name + " is now a verified Freezone member!");
|
|
print("═══════════════════════════════════════════════════════════════\n");
|