;(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
Logo Pagbenk Seu dinheiro rende mais
Topo

Site de câmbio lança ferramenta que pesquisa melhor preço do bitcoin

Téo Takar

Colaboração para o UOL, em São Paulo

14/12/2017 04h00

O site Câmbio Store lançou nesta semana uma ferramenta que permite pesquisar, em tempo real, a melhor cotação para compra de bitcoins. O comparador de preços informa as cotações e taxas praticadas por seis "exchanges" (as corretoras que negociam criptomoedas): Foxbit, Mercado Bitcoin, Bitcoin To You, Negocie Coins, Arena Bitcoin e Braziliex.

Os valores são atualizados automaticamente a cada 20 segundos. A empresa diz que planeja expandir o comparador de preços para outras moedas virtuais, como o Ethereum e o Litecoin.

Leia também:

A lista é ordenada do menor para o maior valor efetivo (cotação mais taxas). Ao lado dos valores, o cliente encontra um link, que o direciona ao site da respectiva corretora. Por enquanto, a transação não é feita diretamente pelo site da Câmbio Store, mas a empresa diz que isso deve mudar no futuro.

"Estamos negociando parcerias com as 'exchanges' para que os clientes possam fechar a transação diretamente no nosso site, sem necessidade de ser redirecionado", diz Bruno Ferreira, presidente da Câmbio Store.

Comprar bitcoins usando dólares, euros ou libras

O site de câmbio diz que pretende oferecer, a partir do ano que vem, a possibilidade de comprar bitcoins usando qualquer moeda estrangeira, como dólares, euros ou libras.

"Quem tiver em casa uma sobra de moeda estrangeira de alguma viagem e quiser trocar por bitcoins poderá fazer toda a operação com a gente", diz Ferreira. Também será possível o cliente realizar a operação inversa, ou seja, vender bitcoins e comprar moeda estrangeira.

Segundo ele, a ideia é simplificar o processo. Em vez de ir a uma casa de câmbio para trocar a moeda estrangeira por reais e, depois, comprar a moeda virtual pela internet, as duas operações serão feitas simultaneamente.

Como há uma operação de câmbio embutida nesse processo, Ferreira lembra que haverá cobrança de IOF, conforme previsto pelas normas do Banco Central.

Site atua em parceria com corretoras

A empresa, que é especializada em transações de câmbio com moedas estrangeiras pela internet, já oferecia esse tipo de comparativo para as moedas tradicionais, como dólar, euro e libra.

A Câmbio Store tem hoje parceria com cerca de dez casas de câmbio em diversas cidades do país. Atualmente, consegue atender pedidos para compra e venda de moedas estrangeiras nos Estados de São Paulo, Rio de Janeiro e Minas Gerais, além de Curitiba (PR) e nas capitais do Nordeste. No começo de 2018, a empresa pretende alcançar clientes localizados em todas as capitais do país.

Onde encontrar: www.cambiostore.com/comprar/bitcoin

Bitcoin é fraude? Entenda por que bancos querem distância

olhardigital