;(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

"Halving" do bitcoin deve abalar mercados de criptomoedas em 2020

Alessandro Bianchi
Imagem: Alessandro Bianchi

19/12/2019 13h28

Por Tom Wilson

LONDRES (Reuters) - Se você não é um entusiasta do bitcoin, provavelmente não sabe o que acontecerá no próximo ano: o chamado "halving", que reduzirá a produção da criptomoeda pela metade.

Ninguém controla este processo. É uma regra escrita no código do bitcoin pelo seu suposto criador, Satoshi Nakamoto, há mais de uma década.

O evento, previsto para maio de 2020, reduzirá pela metade o número de novas moedas de bitcoin produzidas pelos mineradores, que usam equipamentos especializados para resolver complexos quebra-cabeças matemáticos. A solução destes problemas gera moedas de bitcoins.

Essa é uma grande mudança em um mercado que vale cerca de 120 bilhões de dólares, no qual bilhões de dólares em bitcoins são criados a cada ano.

Grupos conhecidos estão se preparando para as acentuadas altas do preço e da volatilidade que costumam acompanhar os "halvings", efeito que ocorre aproximadamente a cada quatro anos para garantir a escassez de bitcoins e segurar a inflação.

É provável que haja vencedores e perdedores. Assim, os agentes do mercado, como mineradores e operadores de bitcoins, estão tentando entender como o próximo halving se desdobrará para conseguirem uma vantagem.

"Esta é a maior questão agora para a maior parte da indústria", disse Eyal Avramovich, presidente-executivo da MineBest, uma empresa sediada em Varsóvia que minera bitcoin.

A queda na produção de bitcoin reforça uma das razões pelas quais a moeda digital descentralizada confunde a regulamentação e a aceitação do mercado financeiro tradicional: seu destino permanece ligado a fatores tecnológicos arcanos.

Em teoria, se a oferta é cortada e a demanda permanece constante, os preços deveriam subir. Desta vez, sete operadores e mineradores entrevistados pela Reuters disseram que o halving de maio provavelmente levará a uma maior volatilidade e volume de negociação. No entanto, o corte no fornecimento está mais precificado que os anteriores, disseram eles, com muitos operadores já preparados para o evento.

Nos períodos de um ano após os dois halvings anteriores, em novembro de 2012 e julho de 2016, o bitcoin subiu cerca de 80 vezes e quatro vezes, respectivamente. Não está claro o quanto dessas altas podem ser atribuídas aos halvings, em comparação com outros fatores.

Desta vez, os mercados de derivativos de bitcoin - ainda em seu início - apontam para uma maior volatilidade no período do halving, disse Jeff Dorman, da Arca, uma empresa de investimentos em criptmoedas dos EUA.

"Para nós, o evento será positivo porque causa atividade no mercado", disse Ha Duong, da Cambrial, um investidor de criptomoedas de Berlim.

Mas para os mineradores que possuem grandes estoques de bitcoin, a volatilidade também pode ser um obstáculo. Para eles, a estabilidade de preços oferece maior previsibilidade para investimentos em novos equipamentos de mineração.

Embora os contratos futuros de bitcoin permitam que os mineradores se protejam do risco, atualmente existem poucas ferramentas para se proteger adequadamente da volatilidade, disse Ricky Li, co-fundador da Altonomy, corretora de criptomoedas.

"Se você deseja uma volatilidade de longo prazo, os contratos de opções disponíveis no mercado atualmente não têm esse prazo", afirmou.