Bitcoin Forum
August 14, 2026, 10:52:47 PM *
News: Latest Bitcoin Core release: 31.1 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: Selective Scam: Reused Bitcoin Addresses on 1xmr.org  (Read 71 times)
Trêvoid (OP)
Copper Member
Hero Member
*****
Offline

Activity: 588
Merit: 709


kycnone.com █ No KYC / AML


View Profile
August 10, 2026, 09:04:34 PM
Last edit: August 11, 2026, 08:12:04 PM by Trêvoid
Merited by RGBTC (1), albon (1), coinlary (1)
 #1

Hello everyone,

I have identified that 1xmr.org reuse Bitcoin addresses for incoming payments. My investigation, which involved placing multiple test orders, confirmed that the same wallet address is repeatedly used across different transactions.



https://1xmr.org/order/13a8a9a7-7823-425f-a720-e32e06b86dae (bc1qe392jqsvj8wpzg4s7g9c73t9kwx7usx9h7j7cq)
https://1xmr.org/order/f6e52f4f-511c-49fa-abc8-21f522841732 (bc1qe392jqsvj8wpzg4s7g9c73t9kwx7usx9h7j7cq)
https://1xmr.org/order/72dfa607-18d1-406c-8257-fcde5ab3eb78  (bc1qe392jqsvj8wpzg4s7g9c73t9kwx7usx9h7j7cq)
https://1xmr.org/order/e1fe4994-e502-40e7-b669-c17d1de8956b  (bc1qe392jqsvj8wpzg4s7g9c73t9kwx7usx9h7j7cq)

Address reuse is a significant security red flag that can facilitate selective scamming. While I have not found widespread public reports yet, I recommend extreme caution and avoiding these services until further notice.

And also, “Latest Swaps” section on their homepage shows record is fake.

https://kycnone.com/threads/possible-selective-scam-reused-bitcoin-addresses-on-1xmr-org.53/

Regards,
Trêvoid

Zwei
Legendary
*
Offline

Activity: 2114
Merit: 1351


Trêvoid █ No KYC-AML Crypto Swaps


View Profile
August 11, 2026, 08:07:43 PM
Merited by RGBTC (1), albon (1), Trêvoid (1)
 #2

And also, “Latest Swaps” section on their homepage shows record is fake.
not only that, their "Liquidity on hand" is also fake.

the vibe coding is so bad, they didn't even try to hide it in the code.
they even have it commented that both the "Latest Swaps" and "Liquidity on hand" are only cosmetic, and they display random different data based on each device. all done locally via javascript.

Code:
// ---- Latest swaps (per-device, cosmetic) ----
// A rolling feed of 10 conversions kept in device memory. A new one is appended
// every 5-20 minutes; sizes are drawn so the typical swap lands around $3-5k and
// never runs past $100k.
(function () {
  const list = document.getElementById("swapsList");
  if (!list) return;

  const KEY = "1xmr.swaps";
  const COUNT = 10;
  const GAP_LO = 5 * 60 * 1000;
  const GAP_HI = 20 * 60 * 1000;
  const USD_MIN = 120;
  const USD_MAX = 100000;

  // Reference USD prices; stablecoins are pegged at 1.
  const COINS = [
    { label: "BTC",        price: 64737,   decimals: 5, weight: 5 },
    { label: "ETH",        price: 1917,    decimals: 5, weight: 5 },
    { label: "LTC",        price: 44.69,   decimals: 3, weight: 3 },
    { label: "SOL",        price: 71.2,    decimals: 3, weight: 4 },
    { label: "TRX",        price: 0.3262,  decimals: 0, weight: 2 },
    { label: "USDT-TRC20", price: 1,       decimals: 2, weight: 6 },
    { label: "USDT-ERC20", price: 1,       decimals: 2, weight: 4 },
    { label: "USDT-SOL",   price: 1,       decimals: 2, weight: 3 },
    { label: "USDC-ERC20", price: 1,       decimals: 2, weight: 3 },
    { label: "USDC-SOL",   price: 1,       decimals: 2, weight: 3 },
    { label: "DAI-ERC20",  price: 1,       decimals: 2, weight: 1 }
  ];
  const WEIGHT_TOTAL = COINS.reduce((sum, c) => sum + c.weight, 0);

  function rand(lo, hi) { return lo + Math.random() * (hi - lo); }

  function pickCoin() {
    let r = Math.random() * WEIGHT_TOTAL;
    for (const c of COINS) {
      r -= c.weight;
      if (r <= 0) return c;
    }
    return COINS[0];
  }

  // Log-normal sizing: median ~$2.6k, mean ~$4k, clamped to [120, 100000].
  function pickUsd() {
    const u = Math.max(1e-9, Math.random());
    const v = Math.max(1e-9, Math.random());
    const gauss = Math.sqrt(-2 * Math.log(u)) * Math.cos(2 * Math.PI * v);
    const usd = Math.exp(Math.log(2600) + 0.85 * gauss);
    return Math.min(USD_MAX, Math.max(USD_MIN, usd));
  }

  function trim(n, decimals) {
    const s = n.toFixed(decimals);
    return decimals > 0 ? s.replace(/\.?0+$/, "") : s;
  }

  // Most people send round-ish figures (5000 USDT, 0.25 BTC) rather than
  // eight decimals, so snap to a nice step most of the time.
  function humanize(amount) {
    if (Math.random() > 0.65) return amount;
    const mag = Math.pow(10, Math.floor(Math.log10(amount)));
    const step = mag / [1, 2, 4][Math.floor(Math.random() * 3)];
    return Math.max(step, Math.round(amount / step) * step);
  }

  function makeSwap(at) {
    const coin = pickCoin();
    const amount = humanize(pickUsd() / coin.price);
    return { coin: coin.label, amount: trim(amount, coin.decimals), at };
  }

  function ago(ts) {
    const mins = Math.max(1, Math.round((Date.now() - ts) / 60000));
    if (mins < 60) return mins + (mins === 1 ? " minute ago" : " minutes ago");
    const hrs = Math.round(mins / 60);
    return hrs + (hrs === 1 ? " hour ago" : " hours ago");
  }

  function load() {
    try {
      const state = JSON.parse(localStorage.getItem(KEY));
      if (state && Array.isArray(state.items) && state.items.length) return state;
    } catch (_) { /* fall through to a fresh feed */ }
    return null;
  }
  function save(state) {
    try { localStorage.setItem(KEY, JSON.stringify(state)); } catch (_) {}
  }

  function seed() {
    const items = [];
    let at = Date.now() - rand(60 * 1000, GAP_LO);
    for (let i = 0; i < COUNT; i++) {
      items.push(makeSwap(at));
      at -= rand(GAP_LO, GAP_HI);
    }
    return { items, next: Date.now() + rand(GAP_LO, GAP_HI) };
  }

  let state = load() || seed();

  function render(freshFirst) {
    list.innerHTML = "";
    for (const s of state.items) {
      const li = document.createElement("li");
      if (freshFirst && s === state.items[0]) li.className = "fresh";
      const pair = document.createElement("span");
      pair.className = "pair";
      pair.innerHTML =
        '<span class="from"></span><span class="arrow">&rarr;</span><span class="to"></span>';
      pair.querySelector(".from").textContent = s.amount + " " + s.coin;
      pair.querySelector(".to").textContent = "XMR";
      const when = document.createElement("span");
      when.className = "ago";
      when.textContent = ago(s.at);
      li.appendChild(pair);
      li.appendChild(when);
      list.appendChild(li);
    }
  }

  function tick() {
    const now = Date.now();
    let added = false;
    while (now >= state.next) {
      state.items.unshift(makeSwap(state.next));
      state.items = state.items.slice(0, COUNT);
      state.next += rand(GAP_LO, GAP_HI);
      added = true;
    }
    save(state);
    render(added);
  }

  tick();
  setInterval(tick, 30000);
})();

// ---- Liquidity display (per-device, cosmetic) ----
(function () {
  const el = document.querySelector(".reserves .amount");
  if (!el) return;
  const KEY = "1xmr.liq";
  const MIN_FLOOR = 750;
  const MAX_FLOOR = 850;
  const RESET_LO = 1900;
  const RESET_HI = 2800;
  const DROP_LO = 5;
  const DROP_HI = 150;
  const INTERVAL_LO = 15 * 60 * 1000;
  const INTERVAL_HI = 20 * 60 * 1000;

  function rand(lo, hi) { return lo + Math.random() * (hi - lo); }

  function load() {
    try { return JSON.parse(localStorage.getItem(KEY)); } catch (_) { return null; }
  }
  function save(state) {
    try { localStorage.setItem(KEY, JSON.stringify(state)); } catch (_) {}
  }

  let state = load();
  if (!state || typeof state.amount !== "number") {
    state = { amount: rand(RESET_LO, RESET_HI), next: Date.now() + rand(INTERVAL_LO, INTERVAL_HI), floor: rand(MIN_FLOOR, MAX_FLOOR) };
    save(state);
  }

  function tick() {
    const now = Date.now();
    while (now >= state.next) {
      state.amount -= rand(DROP_LO, DROP_HI);
      state.next += rand(INTERVAL_LO, INTERVAL_HI);
      if (state.amount <= state.floor) {
        state.amount = rand(RESET_LO, RESET_HI);
        state.floor = rand(MIN_FLOOR, MAX_FLOOR);
      }
    }
    state.amount = Math.round(state.amount * 100000) / 100000;
    save(state);
    el.textContent = state.amount.toFixed(5) + " XMR";
  }

  tick();
  setInterval(tick, 60000);
})();



safe to say this is a 100% scam exchange.

Trêvoid (OP)
Copper Member
Hero Member
*****
Offline

Activity: 588
Merit: 709


kycnone.com █ No KYC / AML


View Profile
August 11, 2026, 08:11:54 PM
 #3

And also, “Latest Swaps” section on their homepage shows record is fake.
not only that, their "Liquidity on hand" is also fake.

the vibe coding is so bad, they didn't even try to hide it in the code.
they even have it commented that both the "Latest Swaps" and "Liquidity on hand" are only cosmetic, and they display random different data based on each device. all done locally via javascript.

Code:
// ---- Latest swaps (per-device, cosmetic) ----
// A rolling feed of 10 conversions kept in device memory. A new one is appended
// every 5-20 minutes; sizes are drawn so the typical swap lands around $3-5k and
// never runs past $100k.
(function () {
  const list = document.getElementById("swapsList");
  if (!list) return;

  const KEY = "1xmr.swaps";
  const COUNT = 10;
  const GAP_LO = 5 * 60 * 1000;
  const GAP_HI = 20 * 60 * 1000;
  const USD_MIN = 120;
  const USD_MAX = 100000;

  // Reference USD prices; stablecoins are pegged at 1.
  const COINS = [
    { label: "BTC",        price: 64737,   decimals: 5, weight: 5 },
    { label: "ETH",        price: 1917,    decimals: 5, weight: 5 },
    { label: "LTC",        price: 44.69,   decimals: 3, weight: 3 },
    { label: "SOL",        price: 71.2,    decimals: 3, weight: 4 },
    { label: "TRX",        price: 0.3262,  decimals: 0, weight: 2 },
    { label: "USDT-TRC20", price: 1,       decimals: 2, weight: 6 },
    { label: "USDT-ERC20", price: 1,       decimals: 2, weight: 4 },
    { label: "USDT-SOL",   price: 1,       decimals: 2, weight: 3 },
    { label: "USDC-ERC20", price: 1,       decimals: 2, weight: 3 },
    { label: "USDC-SOL",   price: 1,       decimals: 2, weight: 3 },
    { label: "DAI-ERC20",  price: 1,       decimals: 2, weight: 1 }
  ];
  const WEIGHT_TOTAL = COINS.reduce((sum, c) => sum + c.weight, 0);

  function rand(lo, hi) { return lo + Math.random() * (hi - lo); }

  function pickCoin() {
    let r = Math.random() * WEIGHT_TOTAL;
    for (const c of COINS) {
      r -= c.weight;
      if (r <= 0) return c;
    }
    return COINS[0];
  }

  // Log-normal sizing: median ~$2.6k, mean ~$4k, clamped to [120, 100000].
  function pickUsd() {
    const u = Math.max(1e-9, Math.random());
    const v = Math.max(1e-9, Math.random());
    const gauss = Math.sqrt(-2 * Math.log(u)) * Math.cos(2 * Math.PI * v);
    const usd = Math.exp(Math.log(2600) + 0.85 * gauss);
    return Math.min(USD_MAX, Math.max(USD_MIN, usd));
  }

  function trim(n, decimals) {
    const s = n.toFixed(decimals);
    return decimals > 0 ? s.replace(/\.?0+$/, "") : s;
  }

  // Most people send round-ish figures (5000 USDT, 0.25 BTC) rather than
  // eight decimals, so snap to a nice step most of the time.
  function humanize(amount) {
    if (Math.random() > 0.65) return amount;
    const mag = Math.pow(10, Math.floor(Math.log10(amount)));
    const step = mag / [1, 2, 4][Math.floor(Math.random() * 3)];
    return Math.max(step, Math.round(amount / step) * step);
  }

  function makeSwap(at) {
    const coin = pickCoin();
    const amount = humanize(pickUsd() / coin.price);
    return { coin: coin.label, amount: trim(amount, coin.decimals), at };
  }

  function ago(ts) {
    const mins = Math.max(1, Math.round((Date.now() - ts) / 60000));
    if (mins < 60) return mins + (mins === 1 ? " minute ago" : " minutes ago");
    const hrs = Math.round(mins / 60);
    return hrs + (hrs === 1 ? " hour ago" : " hours ago");
  }

  function load() {
    try {
      const state = JSON.parse(localStorage.getItem(KEY));
      if (state && Array.isArray(state.items) && state.items.length) return state;
    } catch (_) { /* fall through to a fresh feed */ }
    return null;
  }
  function save(state) {
    try { localStorage.setItem(KEY, JSON.stringify(state)); } catch (_) {}
  }

  function seed() {
    const items = [];
    let at = Date.now() - rand(60 * 1000, GAP_LO);
    for (let i = 0; i < COUNT; i++) {
      items.push(makeSwap(at));
      at -= rand(GAP_LO, GAP_HI);
    }
    return { items, next: Date.now() + rand(GAP_LO, GAP_HI) };
  }

  let state = load() || seed();

  function render(freshFirst) {
    list.innerHTML = "";
    for (const s of state.items) {
      const li = document.createElement("li");
      if (freshFirst && s === state.items[0]) li.className = "fresh";
      const pair = document.createElement("span");
      pair.className = "pair";
      pair.innerHTML =
        '<span class="from"></span><span class="arrow">&rarr;</span><span class="to"></span>';
      pair.querySelector(".from").textContent = s.amount + " " + s.coin;
      pair.querySelector(".to").textContent = "XMR";
      const when = document.createElement("span");
      when.className = "ago";
      when.textContent = ago(s.at);
      li.appendChild(pair);
      li.appendChild(when);
      list.appendChild(li);
    }
  }

  function tick() {
    const now = Date.now();
    let added = false;
    while (now >= state.next) {
      state.items.unshift(makeSwap(state.next));
      state.items = state.items.slice(0, COUNT);
      state.next += rand(GAP_LO, GAP_HI);
      added = true;
    }
    save(state);
    render(added);
  }

  tick();
  setInterval(tick, 30000);
})();

// ---- Liquidity display (per-device, cosmetic) ----
(function () {
  const el = document.querySelector(".reserves .amount");
  if (!el) return;
  const KEY = "1xmr.liq";
  const MIN_FLOOR = 750;
  const MAX_FLOOR = 850;
  const RESET_LO = 1900;
  const RESET_HI = 2800;
  const DROP_LO = 5;
  const DROP_HI = 150;
  const INTERVAL_LO = 15 * 60 * 1000;
  const INTERVAL_HI = 20 * 60 * 1000;

  function rand(lo, hi) { return lo + Math.random() * (hi - lo); }

  function load() {
    try { return JSON.parse(localStorage.getItem(KEY)); } catch (_) { return null; }
  }
  function save(state) {
    try { localStorage.setItem(KEY, JSON.stringify(state)); } catch (_) {}
  }

  let state = load();
  if (!state || typeof state.amount !== "number") {
    state = { amount: rand(RESET_LO, RESET_HI), next: Date.now() + rand(INTERVAL_LO, INTERVAL_HI), floor: rand(MIN_FLOOR, MAX_FLOOR) };
    save(state);
  }

  function tick() {
    const now = Date.now();
    while (now >= state.next) {
      state.amount -= rand(DROP_LO, DROP_HI);
      state.next += rand(INTERVAL_LO, INTERVAL_HI);
      if (state.amount <= state.floor) {
        state.amount = rand(RESET_LO, RESET_HI);
        state.floor = rand(MIN_FLOOR, MAX_FLOOR);
      }
    }
    state.amount = Math.round(state.amount * 100000) / 100000;
    save(state);
    el.textContent = state.amount.toFixed(5) + " XMR";
  }

  tick();
  setInterval(tick, 60000);
})();



safe to say this is a 100% scam exchange.

Thanks for sharing your findings that’s correct. I’ll edit the thread title and remove the “possible.”


albon
Legendary
*
Offline

Activity: 2520
Merit: 2425



View Profile
August 12, 2026, 02:33:05 PM
Merited by Trêvoid (1)
 #4

Domain: 1xmr.org
Registered On: 2026-07-29
Expires On: 2027-07-29
Updated On: 2026-08-12
Age: 14 Days
Registrar: Tucows Domains Inc.
Abuse Email: domainabuse@tucows.com

Nice catch, OP.

This is a new platform that’s less than 15 days old. That’s why new platforms that don’t have a reputation yet are high-risk.

From the evidence posted here, this appears to be a scam exchange.

I tested the platform myself and found that they’re using the same wallet address mentioned by the OP. Each transaction should normally have its own unique deposit address rather than using the same fixed address.

Also, the code that @Zwei mentioned is strong evidence against the developers and shows that some of the site’s displayed data is fake including the swap history and  liquidity figures.

I’d recommend that the OP archive any suspicious platform or evidence using Archive.org, Archive.is, and Ghostarchive.org. This way, even if the owner finds out about this and tries to change the site later, there will still be an archived record.

█████████████████████████
███████▀▀███████▀▀███████
█████▀░░▄███████▄░░▀█████
███▀░░██████▀░▀████░░▀███
██▀░░▀▀▀████████████░░▀██
██░░█▄████▀▀███▀█████░░██
██░░███▄▄███████▀▀███░░██
██░░████████████████░░██
██▄░░████▄▄██████▄▄█░░▄██
███▄░░██████░░████░░▄███
█████▄░░▀███░░▐▀░░▄█████
███████▄▄███████▄▄███████
█████████████████████████
.
 ROOBET .██████. BET ON WORLD CUP  🗺 ⚽︎.██████.
|

█▄█
▀█▀
████▄▄██████▄▄████
█▄███▀█░░█████░░█▀███▄█
▀█▄▄░▐█████████▌▄▄█▀
██▄▄█████████▄▄████▌
██████▄▄████████
█▀▀████████████████
██████
█████████████
██
█▀▀██████████████
▀▀▀███████████▀▀▀▀
|.
   BET NOW   
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!