;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Topo

Felipe Zmoginski

OPINIÃO

Texto em que o autor apresenta e defende suas ideias e opiniões, a partir da interpretação de fatos e dados.

Como a 'rainha das criptomoedas' usou a rixa entre China e EUA em seu golpe

Caso da "rainha das criptomoedas" Ruja Ignatova, fundadora da OneCoin, revela falta de colaboração tecnológica entre EUA e China - Wikimedia Commons/OneCoin Corporation
Caso da "rainha das criptomoedas" Ruja Ignatova, fundadora da OneCoin, revela falta de colaboração tecnológica entre EUA e China Imagem: Wikimedia Commons/OneCoin Corporation

11/07/2022 04h00

Receba os novos posts desta coluna no seu e-mail

Email inválido

A rivalidade tecnológica entre chineses e americanos permitiu que uma mulher acusada de enganar investidores com um esquema fraudulento baseado em criptomoedas repetisse nos Estados Unidos crimes já cometidos na China. O caso só se tornou público esta semana, quando o FBI anunciou a inclusão da cidadã búlgara Ruja Ignatova, que ficou conhecida como "rainha das criptomoedas", na lista de pessoas procuradas.

Ruja é fundadora da OneCoin, startup com sede na Europa e servidores na Dinamarca, que emite uma criptomoeda de mesmo nome. Ruja elegeu a China como "mercado prioritário" de sua empresa iniciante e, entre 2011 e 2013, se esforçou em atrair investidores chineses para sua plataforma. Ao todo, segundo autoridades chinesas, Ruja captou inacreditáveis US$ 4 bilhões no país asiático.

A forma principal de captação de novos investidores, quase sempre indivíduos que colocavam na OneCoin suas economias pessoais, baseava-se em premiações progressivas para usuários que, além de investir, fossem capazes de atrair outros investidores, sobre os quais ganhariam comissões. Um esquema de pirâmide financeira, em bom português.

Como ocorre em esquemas do tipo, Ruja mantinha sua credibilidade permitindo que investidores mais antigos "realizassem seus lucros" fazendo saques quando suas criptomoedas se valorizavam. E assim as coisas funcionavam... até que deixaram de funcionar. Em 2014, Ruja deixou a China e sua plataforma, a OneCoin, parou de responder aos investidores locais.

Autoridades chinesas identificaram duas centenas de colaboradores que auxiliaram Ruja a cometer crimes na China. Ao final de um processo judicial, 98 cidadãos chineses foram condenados a multas e penas de prisão por crimes financeiros que chegam até 7 anos. O caso OneCoin contribuiu para a decisão de Pequim em proibir o mercado cripto de funcionar no país.

O dado mais inacreditável da história é que, por detalhes burocráticos como a não cooperação entre China e Estados Unidos em questões que envolvam dados de seus cidadãos trafegados online, impediu a China de processar Ruja no exterior, bem como compartilhar detalhes de seu esquema.

A brecha, no entanto, não ou despercebida por Ruja que, mesmo após captações bilionárias na China, ou a oferecer os mesmos serviços nos Estados Unidos... e novamente enganar milhares de usuários incautos.

O caso só se tornou público porque o FBI, esta semana, decidiu dar publicidade ao nome de Ruja, denunciando-a por crimes financeiros online. A notícia, por óbvio, repercutiu na China, país onde ela deixou milhares de vítimas.

Em atendimento a pedidos do FBI, os servidores da OneCoin na Europa foram desligados. O paradeiro de Ruja é desconhecido, mas o caso deixou sob conhecimento público o fato que, a despeito de suas rivalidades, americanos e chineses precisam colaborar mais em itens essenciais à segurança dos sistemas financeiros de ambos os países.