sign up and get card

sequenceDiagram
    note over user,chain: **SIGN UP AND GET CARD**

    actor user
    participant app as Machines App
    participant kyc as KYC Provider
    participant rain as Rain API
    participant wallet as User Wallet
    participant chain as Blockchain

    user->>app: Sign up (email / social / wallet)
    app->>kyc: Submit identity info
    kyc-->>app: KYC approved
    app->>rain: Create virtual account
    rain-->>app: Virtual account created
    app->>rain: Deploy collateral contract
    rain->>chain: Deploy user contract
    chain-->>rain: Return contract address
    app->>rain: Issue first virtual card
    rain-->>app: Card created
    app-->>user: Account ready (VA + contract + card)
    note over wallet,chain: Wallet owns contract and signs all transactions

onramp fiat direct

sequenceDiagram
    note over user,chain: **ONRAMP FUNDS (FIAT DIRECT)**

    participant user as User
    participant bank as User Bank
    participant rain as Rain (VA + API)
    participant chain as Blockchain (User Contract)

    user->>bank: Initiate ACH/RTP/Wire deposit
    bank-->>rain: Send fiat to Rain virtual account
    rain->>rain: Convert fiat to stablecoins
    rain->>chain: Settle stablecoins to user contract
    chain-->>rain: Confirm balance update

onramp fiat private

sequenceDiagram
    participant Wallet
    participant Bank as Bank Service (Revolut / Cash App)
    participant ZKP2P
    participant Contract as Blockchain (User Contract)

    Wallet->>Wallet: ONRAMP FUNDS – PRIVATE FIAT (ZKP2P)
    Wallet->>Bank: initiate private transfer
    Bank-->>ZKP2P: send funds + zero-knowledge proof
    ZKP2P-->>Wallet: private payout to wallet
    Wallet->>Contract: send to rain contract
    Contract-->>Wallet: balance updated

onramp crypto direct

sequenceDiagram
    participant Wallet
    participant Converter as Converter (ChangeNow / FixedFlow / SideShift / DaimoPay)
    participant Alias as Alias Relay (Veil / 0xBow / Railgun)
    participant Contract as Blockchain (User Contract)

    Wallet->>Wallet: ONRAMP FUNDS – CRYPTO (DIRECT / CONVERT / ALIAS)
    alt Direct (token supported)
        Wallet->>Contract: send token
        Contract-->>Wallet: stable settled
    else Convert (token unsupported)
        Wallet->>Converter: swap to supported stable
        Converter-->>Wallet: stable received
        Wallet->>Contract: send stable
        Contract-->>Wallet: settled
    else Alias (extra privacy)
        Wallet->>Alias: send asset
        Alias->>Contract: relay to contract
        Contract-->>Alias: settled
    end

cards and balances

sequenceDiagram
    participant Wallet
    participant Rain as Rain API
    participant C1 as Contract A
    participant C2 as Contract B
    participant Card1 as Card 1
    participant Card2 as Card 2

    Wallet->>Wallet: CARDS AND BALANCES – SINGLE VS MULTIPLE
    Wallet->>Rain: issue cards under Contract A
    Rain-->>Card1: card active
    Rain-->>Card2: card active
    Card1->>C1: spend (auth)
    Card2->>C1: spend (auth)
    Note over Card1,C1: all cards draw from one balance (Contract A)

    Wallet->>Rain: deploy Contract B (extra fee)
    Rain-->>Wallet: Contract B ready
    Wallet->>Rain: issue cards under Contract B
    Card1->>C2: spend (auth)
    Note over Card1,C2: each contract has its own balance and unlimited cards

spend funds

sequenceDiagram
    participant Wallet
    participant Card as Virtual Card (Visa)
    participant Rain as Rain API
    participant Contract as Blockchain (User Contract)
    participant Merchant as Merchant / POS

    Wallet->>Wallet: SPEND FUNDS
    Merchant->>Card: payment request (authorization)
    Card->>Rain: forward auth + amount
    Rain->>Contract: verify balance & lock funds
    Contract-->>Rain: approval + stable transfer
    Rain-->>Card: auth approved
    Card-->>Merchant: payment complete
    Contract-->>Wallet: balance updated

withdraw funds

sequenceDiagram
    participant Wallet
    participant Rain as Rain API (Co-sign)
    participant Contract as Blockchain (User Contract)
    participant Dest as Destination (Stable Out / Crypto)

    Wallet->>Wallet: WITHDRAW FUNDS
    Wallet->>Rain: request API signature
    Rain-->>Wallet: API signature
    Wallet->>Contract: submit tx (wallet + rain sig)
    Contract-->>Dest: send out (stable or crypto)
    Dest-->>Wallet: funds received