Bitcoin Forum
July 02, 2022, 07:45:47 PM *
News: Latest Bitcoin Core release: 23.0 [Torrent]
 
  Home Help Search Login Register More  
  Show Posts
Pages: [1]
1  Local / Кодеры / DCA-стратегия в BTC на React и Recharts on: February 03, 2020, 10:55:44 PM
Перевод статьи: How To Build a Bitcoin Dollar Cost Average Chart With React and Recharts

Как создать график инвестиционной стратегии DCA в биткоин, используя React и Recharts

Строим графики, чтобы разобраться с нашими финансовыми вложениями


Примечание: не рассматривайте эту статью как совет по инвестированию. Статья предназначена исключительно для образовательных целей. Better Programming, его персонал и владельцы не несут ответственности за ваши инвестиционные решения.

Recharts - это графическая библиотека, которая представляет из себя множество декларативных React-компонентов для построения графиков с помощью D3. Доступны десять настраиваемых типов графика, а также вспомогательные компоненты.

В этом туториале мы создадим несколько AreaCharts для отображения стоимости портфеля, общей суммы монет и общей суммы инвестиций за определенный временной период, на котором осуществляем dollar cost averaging биткоина.

Посмотрите на www.cryptodca.org интерактивный пример графика, который мы будем строить. Посетите GitHub проекта, чтобы узнать больше.

.     .     .

Разделы

  •    Построение графика Dollar Cost Averaging (DCA)
  •    Начало работы
  •    История цен, полученная с помощью API CoinGecko
  •    Получение данных
  •    Расчет итоговых значений
  •    Создание массива для графика
  •    Recharts графика
  •    Recharts всплывающей подсказки
  •    Recharts точек
  •    Recharts оси Y и оси X
  •    Recharts нескольких типов данных
  •    Recharts адаптации размера экрана
  •    Вывод

.     .     .

Построение Графика Dollar Cost Averaging

Dollar Cost Averaging (DCA) - это инвестиционная стратегия, для которой характерно пополнение портфеля одним и тем же активом на одну и ту же сумму в долларах через регулярные временные интервалы с целью снижения краткосрочной волатильности.

Например, инвестиция в размере $ 200 в конкретную ценную бумагу или криптовалюту каждый месяц означает, что вы будете покупать больше единиц актива, когда его цена низкая, и меньше, когда цена выше. Читайте статью Investopedia о DCA, чтобы узнать больше.

Построение графика стоимости  DCA биткоина конкретного счета с течением времени требует, чтобы мы рассчитали общую стоимость счета на каждом интервале в течение определенного периода времени.

Например, если взять за интервал месяц, а за период времени - два года, то нам нужно вычислить общую стоимость счета 24 раза. Чтобы вычислить общую стоимость на определенном интервале, нам нужно умножить общее количество накопленных монет за период на цену монеты в момент покупки.

Количество накопленных за период монет может быть рассчитана путем деления суммы инвестирования на цену монеты в момент совершения покупки для каждого интервала времени.

Давайте проиллюстрируем это примером, скажем, мы планируем покупать биткоин на сумму $ 200 каждый месяц с января 2016 по май 2016.

Количество монет за первый месяц легко рассчитать, просто берем Сумму для Инвестирования ($ 200) и делим на Цену Монеты ($ 434.33) на 1 января 2016 года.

Посчитать общую стоимость тоже легко, просто возьмите Количество Монет, умноженное на текущую Цену Монеты, за первый месяц она должна равняться сумме вложенных средств ($ 200).

Code:
// amountToInvest / coinPrice
200 / 434.33  ~= .46 // Amount of Coin for the first month (Количество Монет за первый месяц)

// amountOfCoin * coinPrice
.46 * 434.33 ~= 200  // Total Value (Общая Стоимость)

Расчет Количества Монет за второй месяц немного отличается.

Во-первых, как в прошлом месяце, делим сумму инвестиций на цену монеты текущего месяца ($ 371,04). Затем добавляем это значение к сумме монет предыдущего месяца (.46).

Code:
// amountToInvest / coinPrice
200 / 371.04  ~= .54 // Amount of Coin bought in the second month (Количество Монет, купленных во втором месяце)

// amountOfCoin for second month + amountOfCoin for first month
.54 + .46 = 1 // Total Accumulated Amount of Coin (Общее Накопленное Количество Монет)

Чтобы рассчитать Общую Стоимость на второй месяц, мы берем Общее Накопленное Количество Монет и умножаем на текущую Цену Монеты.

Code:
// Total Accumulated Amount of Coin * coinPrice
1 * 371.04 = 371.04

Проделав то же самое для последующих месяцев, получаем следующую таблицу:

Месяц     Цена монеты     Всего Инвестировано     Количество Монет     Общая Стоимость

1            434.33               200                               .46                           200
2            371.04               400                               1                              371.04
3            424.49               600                               1.47                         624.00
4            416.75               800                               1.95                         811.20
5            452.59               1000                             2.39                         1081.69

Код для вычисления этих значений может выглядеть примерно так.

Code:
for (let i = 0; i < numOfDays; i += freqInDays) {
  const coinPrice = priceArr[i].price;
  coinAmount += amountToInvest / coinPrice;
  totalInvested += amountToInvest;
  const total = coinAmount * coinPrice;
  dataArr.push({
    TotalInvested: totalInvested,
    CoinAmount: coinAmount,
    CoinPrice: coinPrice,
    Total: total,
    date: priceArr[i].date,
  });
}
calculate.values.js размещен на GitHub

numOfDays - общее количество дней за период времени. В нашем случае получается 121 день между январем и маем 2016.

freqInDays - это временной интервал, через который осуществляется покупка, в данном случае он составляет 30 дней.

priceArr - это массив объектов с ценами биткойна и датами, соответствующими этой цене.

amountToInvest - это сумма в долларах, которая будет инвестирована за временной интервал, в данном случае это $ 200.

coinAmount - это общее количество монет, накопленных к текущему моменту.

totalInvested - это общая сумма инвестиций к текущему моменту.

total - общая стоимость портфеля в долларах США.

Для этих четырех значений: TotalInvested, CoinAmount, CoinPrice и Total, - мы хотим построить график изменения во времени.

freqInDays, amountToInvest и numOfDays будут задаваться пользователем, а цены биткоина, priceArr, будут взяты из API CoinGecko.

.     .     .

Начало работы

Создаем новый проект Creat React App

Code:
npx create-react-app bitcoin-dca
cd bitcoin-dca
npm start

Переходим на src/App.js и переписываем начальный код.

Code:
import React from "react";
import "./App.css";
function App() {
  return (
    <div className="App">
      <h1 className="title">Bitcoin</h1>
    </div>
  );
}
export default App;
src.app.js размещен на GitHub

Наконец, переходим на src/App.css и обновляем css-элементы, как показано ниже.

Code:
body {
  background-color: #232323;
  color: white;
}
.title {
  color: #f7931a;
  font-size: 40px;
}
.App {
  text-align: center;
}
src.app.css размещен на GitHub

.     .     .

История Цен из API CoinGecko

API CoinGecko бесплатно предлагает крипто-данные без ключа API. Конечная точка /coins/{id}/market_chart/range предоставляет историю рыночных данных о конкретной монеты в пределах указанного диапазона, это именно то, что нам нужно.

Параметр id относится к ID монеты, в данном случае это биткоин (id=bitcoin). Параметр vs_currency определяет, в какой валюте нам будет отправлена цена биткойна.

Параметры from и to задают период времени, за который будет получена цена, и должны быть представлены в виде временной метки UNIX.

Например, https://api.coingecko.com/api/v3/coins/bitcoin/market_chart/range?vs_currency=usd&from=1392577232&to=1422577232 получит цену биткоина в USD за каждый день между датами 16.02.2014 и 30.01.2015.

.     .     .

Получение данных

Во-первых, давайте зададим статичные значения startDate, endDate, freqInDays и amountToInvest в начале App.js. В идеале, мы создадим форму для ввода этих переменных пользователем, но пока определим их тут.

Затем создадим простую async-функцию, которая принимает startDate и endDate, запрашивает данные при помощи API CoinGecko и помещает их в состояние.

Чтобы хранить данные и различные состояния, нам нужно определить coinData, isLoading и error в компоненте состояния.

Code:
import React, { useEffect, useState } from "react";
import "./App.css";
const APIURL = "https://api.coingecko.com/api/v3/";
function App() {
  const startDate = "1/1/2016";
  const endDate = "1/1/2020";
  const freqInDays = 30;
  const amountToInvest = 200;
  const [coinData, setCoinData] = useState([]);
  const [isLoading, setIsLoading] = useState(false);
  const [error, setError] = useState(false);
  const getCoinData = async (startDate, endDate) => {
    setIsLoading(true);
    const url = ""; // TODO
    try {
      const coinResponse = await fetch(url);
      const data = await coinResponse.json();
      setCoinData(data);
      setError(false);
      setIsLoading(false);
    } catch (e) {
      setIsLoading(false);
      setError(e);
    }
  };
  return (
    <div className="App">
      <h1>Bitcoin</h1>
    </div>
  );
}
export default App;
app.js размещен на GitHub

Чтобы передавать параметры startDate и endDate в понятном для человека виде, мы будем использовать библиотеку Day.js, которая поможет нам конвертировать даты из вида, понятного человеку, во временные метки UNIX. Импортируем dayjs и применим его расширение advancedformat.

Code:
...
import dayjs from "dayjs";
import advancedFormat from "dayjs/plugin/advancedFormat";
dayjs.extend(advancedFormat);
...

Затем используем метод format, принадлежащий dayjs, чтобы конвертировать даты во временные метки UNIX внутри функции getCoinData.

Code:
...
const getCoinData = async (startDate, endDate) => {
  ...
  const startDateUnix = dayjs(startDate).format("X");
  const endDateUnix = dayjs(endDate).format("X");
  ...
}
...
getCoinData.js размещен на GitHub

Затем создаем URL  описанным выше способом, добываем данные, и обновляем состояние компонента с помощью setCoinData.

Code:
...
 const getCoinData = async (startDate, endDate) => {
    ...
    const startDateUnix = dayjs(startDate).format("X");
    const endDateUnix = dayjs(endDate).format("X");
    const range = `range?vs_currency=usd&from=${startDateUnix}&to=${endDateUnix}`;
    const url = `${APIURL}/coins/bitcoin/market_chart/${range}`;
    try {
      const coinResponse = await fetch(url);
      const data = await coinResponse.json();
      setCoinData(data);
      setError(false);
      setIsLoading(false);
    } catch (e) {
      setIsLoading(false);
      setError(e);
    }
 }
...
getCoinData.js размещен на GitHub

Теперь мы можем вызвать эту функцию в Хуке useEffect с датами, размещенными в верхней части компонента.

Code:
...
useEffect(() => {
  getCoinData(startDate, endDate);
}, []);
...

Существует четыре UI-состояния, которые нам нужно обработать: noData, loading, error и data. Добавим несколько условных операторов под Хуком useEffect, как это показано ниже.

Code:
...
let content = <div>No Data</div>;
if (coinData && coinData.prices && coinData.prices.length > 0)
  content = <div>Data</div>;
if (isLoading) content = <div>Loading</div>;
if (error) content = <div>{error}</div>;
return (
  <div className="App">
    <h1 className="title">Bitcoin</h1>
    {content}
  </div>
);
...
useEffect.js размещен на GitHub

Данные, получаемые из const data = await coinResponse.json(), будут представлять из себя массив из временных меток UNIX и цен в промежутке между двумя заданными нами датами.

Это именно то, что нам потребуется для расчёта итоговых значений и создания графика.

.     .     .

Расчет Итоговых Значений

Теперь наша цель - рассчитать, используя массив coinData.prices, следующие значения:

  • Итоговое Количество Монет в BTC - totalCoinAmount
  • Итоговая Стоимость в USD - endTotal
  • Итоговые Инвестиции в USD - totalInvested
  • Заработанные Деньги в USD - numberGained
  • Заработанные Деньги в Процентах - percentGained

По большей части логика тут такая же, как и в секции Построение Графика Dollar Cost Averaging.

numberGained - это разность итоговой стоимости в USD и totalInvested. percentGained - это процент, на который увеличилось totalInvested (конечное значение - endTotal). Создаем файл src/Totals, как показано ниже.

Code:
import React from "react";
export default function Totals({ priceArr, freqInDays, amountToInvest }) {
  const numOfDays = priceArr.length;
  let coinAmount = 0;
  for (let i = 0; i < numOfDays; i += freqInDays) {
    const coinValue = priceArr[i][1];
    coinAmount += amountToInvest / coinValue;
  }
  const totalCoinAmount = coinAmount;
  const totalInvested = amountToInvest * Math.floor(numOfDays / freqInDays);
  const endTotal = totalCoinAmount * priceArr[priceArr.length - 1][1];
  const numberGained = endTotal - totalInvested;
  const percentGained = ((endTotal - totalInvested) / totalInvested) * 100;
  return <div>Totals</div>;
}
src.totals.js размещен на GitHub

Для того, чтобы выводить на экран эти значения, создаем другой компонент src/Totaljs, применяя простые элементы дизайна.

Code:
import React from "react";
export default function Total({ title, value }) {
  return (
    <div style={styles.row}>
      <h4 style={styles.title}>{title}:</h4>
      <h4 style={styles.value}>{value}</h4>
    </div>
  );
}
const styles = {
  row: {
    display: "flex",
    flexDirection: "row",
    justifyContent: "space-between",
    alignItems: "center",
    maxWidth: 350,
    margin: "10px auto",
  },
  title: {
    fontWeight: 600,
    margin: 0,
  },
  value: {
    color: "#f7931a",
    fontSize: 24,
    margin: 0,
  },
};
src.totals.js размещен на GitHub

Если вы попробуете запустить вычисления выше, то обнаружите, что большинство значений содержат много знаков после запятой. Создаем вспомогательную функцию ./src/round.js, которая будет округлять числа, чтоб они выглядели лучше.

Code:
export default function round(num, digit) {
  return +(Math.round(num + "e+" + digit) + "e-" + digit);
}
Импортируем оба компонента round и Total в компонент Totals.

А затем создаем несколько компонентов Total, передавая описание в свойстве title и актуальное значение в свойстве value. Также мы можем применить к этим значениям функцию round.

Code:
// ./src/Totals.js
import Total from "./Total";
import round from "./round";
...
return (
    <div>
      <Total title={"Ending Value (USD)"} value={`$${round(endTotal, 2)}`} />
      <Total title={"Amount of Coin (BTC)"} value={round(totalCoinAmount, 5)} />
      <Total
        title={"Amount Invested (USD)"}
        value={`$${round(totalInvested, 2)}`}
      />
      <Total title={"Gained (USD)"} value={`$${round(numberGained, 2)}`} />
      <Total title={"Gained (%)"} value={`${round(percentGained, 2)}%`} />
    </div>
  );
...
src.totals.js размещен на GitHub

Наконец, импортируем Totals в App.js и заменяем состояние «data» на компонент Totals.

Code:
...
import Totals from "./Totals";
...
let content = <div>No Data</div>;
if (coinData && coinData.prices && coinData.prices.length > 0)
  content = (
    <Totals
        priceArr={coinData.prices}
        freqInDays={freqInDays}
        amountToInvest={amountToInvest}
      />
  );
if (isLoading) content = <div>Loading</div>;
if (error) content = <div>{error}</div>;
...
Totals.js размещен на GitHub


.     .     .

Создание Массива для Графика

Приведенный ниже код вам уже должен быть хорошо знаком из секции DCA, пожалуйста, ознакомьтесь с этой секцией, чтобы узнать, как этот код работает.

Один момент, что мы снова используем dayjs, чтобы хранить информацию в удобном для человеческого восприятия виде. Создаем новый файл ./src/Graph.js, как показано ниже:

Code:
import React from "react";
import dayjs from "dayjs";
export default function Graph({ priceArr, freqInDays, amountToInvest }) {
  const numOfDays = priceArr.length;
  let coinAmount = 0;
  let totalInvested = 0;
  let dataArr = [];
  for (let i = 0; i < numOfDays; i += freqInDays) {
    const coinPrice = priceArr[i][1];
    coinAmount += amountToInvest / coinPrice;
    totalInvested += amountToInvest;
    const total = coinAmount * coinPrice;
    const date = dayjs(priceArr[i][0]).format("MM/DD/YYYY");
    dataArr.push({
      TotalInvested: totalInvested,
      CoinAmount: coinAmount,
      CoinPrice: coinPrice,
      Total: total,
      date: date,
    });
  }
  return <div style={styles.container}>Chart</div>;
}
const styles = {
  container: {
    maxWidth: 700,
    margin: "0 auto",
  },
};
src.graph.js размещен на GitHub

Это создаст массив объектов dataArr, который будет выглядеть таким образом:

Code:
[
  {TotalInvested: 200, CoinAmount: .46, CoinPrice: 460, Total: 200, date: '1/1/2016'},
  {TotalInvested: 400, CoinAmount: 1, CoinPrice: 380, Total: 200, date: '1/5/2016'},
  ...
]

.     .     .
2  Local / Токены / Celsius Меняет Представление о Банковском Деле on: January 24, 2020, 06:16:41 AM
Перевод статьи: Startup Spotlight: How Celsius Network is Changing Perception of the Banking Business


Обзор Стартапа: Как Сеть Celsius Меняет Представление о Банковском Бизнесе


С того момента, когда была создана технологии блокчейн, мир увидел большое количество революционных идей, воплощенных в жизнь. За последнее десятилетие (или около того) множество стартапов бросали вызов сложившимся устоям, меняя наше восприятие различных отраслей и мира бизнеса в целом. Отличный стартап, способный совершить революцию в банковской сфере, появился всего пару лет назад. Celsius в настоящее время является одним из самых крупных и хорошо финансируемых крипто-стартапов, работающих в данном направлении. Его смысл заключается в создании P2P (peer-to-peer) крипто-кредитной платформы, доступной для всех в мире, позволяющей зарабатывать на инвестициях, кредитовании средств, когда это необходимо, и осуществлять платежи с помощью технологии блокчейн.

Бэкграунд


Celsius Network. Источник: Twitter.com

В 2017 году создатели Celsius - действующие CEO Alex Mashinsky и CFO Daniel Leon - нарисовали концепт проекта на салфетке, и с этого момента начали работу над его полномасштабной реализацией. Проект требовал первоначальных вложений, поэтому весной 2018 года они запустили ICO (Initial Coin Offering). Первая распродажа токенов CEL принесла около $ 50 млн., позволив Celsius запустить первое приложение, чтобы в этом же году создать компанию и обеспечить выполнение всех заявленных услуг.

В настоящий момент размеры финансирования компании Celsius поражают воображение (для недавнего стартапа). Компания может похвастаться общей стоимостью активов более чем в $ 300 млн., организацией кредитов в общей сложности на $ 2,2 млрд., и невероятным количеством в 40K+ активных пользователей кошельков через свое приложение Celsius. Все это произошло всего за два года напряженной работы команды.

Услуги Компании


Источник: Twitter.com

Что такого невероятного в Celsius? Компания предлагает своим клиентам альтернативу институциональным банковским и кредитным сервисам, благодаря которой люди получают преимущество от более качественных финансовых услуг. Компания предоставляет финансовые услуги владельцам криптовалют по всему миру через свою P2P Кредитную систему. Крипто-кошельки, подключенные к Celsius, получают возможность зарабатывать на процентах и брать кредиты по самым низким процентным ставкам. Короче говоря, Celsius позволяет пользователям зарабатывать, одалживать и возвращать деньги с помощью технологии блокчейн. Компания использует кошельки BitGo и застрахована в Lloyd's на сумму $ 100 млн.. Еще один факт, который работает в пользу данной организации, заключается в том, что CEL никогда не был связан и не участвовал в расследованиях, инициированных каким-либо регулирующим государственным органом.

Celsius Уже Меняет Банковский Сектор

Механизм традиционного кредитования часто работает «против», а не «на», человека, предоставляющего свои средства. Банки обычно выплачивают вкладчикам менее 1% годовых, но при этом выдают другим клиентам займы под 25% годовых, сохраняя при этом более 90% стоимости этих кредитов. Практика кредитования носит предвзятый характер, а принимаемые решения усиливают классовое неравенство и еще больше увеличивают разрыв между богатыми и бедными.


Источник: Twitter.com

Глядя на заявления, которые делает CEO компании Alex Mashinsky, становится предельно ясно, как именно этот стартап планирует изменить банковский сектор. Alex говорит, что их главная цель - “unbank” (дать возможность отказаться от банковских услуг) населению, предоставив лучшую альтернативу. Цель состоит в том, чтобы создать криптосообщество, где все делается в интересах клиента. Предоставляя пользователям доступ к криптовалютным кредитам, которые легко переводятся в доллары, Celsius возвращает 80% от полученного дохода в кошельки вкладчиков, по сути, делая то, что ежедневно должны делать банки. Растущий спрос на услуги Celsius виден из растущего дохода компании и большой общественной поддержки, которой они пользуются. Mashinsky объясняет это тем, что стартап работает в интересах своих клиентов.

Забегая Вперед

Мы живем в мире невероятно быстрых перемен. Пионеры технологии дали нам возможность перейти от восхищения идеей беспроводного телефона тридцать лет назад к возможности инвестировать в виртуальную валюту. Глядя на события, разворачивающиеся сейчас в мире стартапов, легко увидеть, как мир станет абсолютно другим в следующем десятилетии или около того. Он станет местом, где банки перестанут доминировать в финансовой сфере, а их более выгодные альтернативы будут доступны для всех.

3  Local / Трейдеры / Внебиржевой Крипто-Трейдинг 101 on: January 17, 2020, 05:51:23 PM
Внебиржевой (ОТС) Крипто-Трейдинг 101

Перевод статьи: Crypto OTC Trading 101

Так как криптовалюты набирают популярность  и широту применения, важно, чтобы определенные фундаментальные аспекты конфиденциальности оставались неизменными в процессе обмена этими валютами. Внебиржевая (over-the-counter, или OTC) торговля  открывает для участников рынка возможность совершать сделки с ордерами произвольного размера без влияния на работу рынка, таким образом не давая подсказок другим участникам. Что же это значит? Чтобы сохранить конфиденциальность и стоимость актива, пользователи должны выйти за пределы биржи.

В апреле 2018 размер ОТС-сделок оценивается в диапазоне от $ 250 млн. до $ 30 млрд. в день, для сравнения, в это же время объем торгов на биржах составил $ 15 млрд. за тот же промежуток времени.


Что такое OTC? Кто этим пользуется?

Внебиржевая торговля представляет собой сделку между двумя сторонами, которая происходит не на бирже. Традиционно OTC-площадки предлагают ценные бумаги, которые не торгуются на биржах, чтобы избежать сложностей, связанных с требованиями при осуществлении листинга, или уплаты непомерных сборов. Однако, на рынке криптовалют популярность ОТС-площадок выросла у двух типов пользователей: майнеров и инвесторов. Майнеры стремятся избавиться от своих майнерских заслуг, не снижая их цены, в то время как инвесторы хотят купить большие объемы активов, не снизив рыночного предложения. Одной из ключевых особенностей OTC, особенно в криптосфере, является обеспечение анонимности - нет стаканов ордеров.

Зачем торговать вне биржи?

Криптовалюты, не входящие в первую десятку, часто имеют очень низкую ликвидность, что приводит к мелким стаканам ордеров и волатильности цен. Таким образом, большой ордер вряд ли будет выполнен быстро. Возникнет необходимость разбить ордер на более мелкие части, чтобы сразу же заполнить ордера по сниженным ценам (ситуация известна как проскальзывание). OTC устраняет проскальзывание и увеличивает объем ликвидности, доступной на биржах, что, в свою очередь, снижает волатильность и приводит к более глубоким стаканам ордеров.

Например представим, что рынок сильно волатилен, и я пытаюсь быстро продать 50 BTC на бирже. Взглянув на стакан ордеров, я вижу, что спотовая цена составляет ~$10544. Количество в ордерах на покупку, однако, недостаточно велико, чтобы заполнить ордер на продажу по этой цене. Это означает, что мне придется снижать цену, чтобы включить в свой ордер более глубокие заказы в стакане - и чем глубже я пойду, тем меньше прибыли я получу. В добавок к этому, мой большой ордер на продажу может подтолкнуть спотовую цену BTC еще ниже.

ОТС-сделки не оказывают влияния на работу рынка. Допустим, что я инвестирую на ранних этапах в новый токен, назовем его CharityToken. За каждый доллар, который компания-участник жертвует на благотворительность, минтится CharityToken и вручается этой компании. Затем CharityTokens можно потратить на каком-нибудь открытом рынке для оплаты различных услуг. Мы можем полагать, что мне понадобится обменять мои токены на другие активы, но как ранний инвестор:
  • Я поддерживаю цель проекта и не хочу подрывать общественное доверие;
  • Я не хочу негативно влиять на цену, тем самым снижая общий доход.

Многие проекты в такой ситуации предпочтут выкупить свои токены, чтобы не подвергать негативному воздействию рынок своих активов. Если CharityToken работает с ОТС-провайдером, инвестору становится проще безопасно продать эти токены, не влияя на будущее проекта.

.     .     .

Начинаем Трейдить ОТС (вне биржи)

Я буду использовать Carbon, OTC API платформу (в настоящее время представлена бета-версия), которая позволяет нам создавать ОТС-котировки, а также вносить, обменивать и выводить средства. Carbon - это криптовалютный финтех-стартап, который в настоящее время предлагает обмен фиата на крипту на платформе, и вскоре обеспечит обмен крипты на крипту и крипты на фиат вне платформы. Ликвидность обеспечивается нашими оффшорными партнерами и сервисами, в настоящее время недоступными внутри страны. Вам понадобится некоторое знакомство с Python 3 и библиотекой requests.

В этом руководстве будут подробно описаны пошаговые инструкции и пояснения, но так как оно выполняется в sandbox (testnet) среде, оно может не полностью совпадать с production (mainnet) средой.

Quote
Production Endpoint: https://api.carbon.money
Sandbox Endpoint: https://sandbox.carbon.money/

Во-первых, нам нужно создать учётку супер-юзера, которую мы будем считать главной и использовать исключительно для решения вопросов администрирования и авторизации.

Code:
import requests
root_path = ‘[url=https://sandbox.carbon.money/]https://sandbox.carbon.money[/url]’
create_super_path = '/v1/create/super'
data = {
  'emailAddress': 'julian1@example-email.xyz',
  'password': 'Password1234',
  'companyName': '',
  'firstName': 'Julian',
  'lastName': 'Kocher'
}
req = requests.post(root_path + create_super_path, data)
print(req)
print(req.text)

Что даст нам ответ в консоли (почищенный для удобства восприятия):

Code:
<Response[200]>
{
“message”: ”Successfully created new user! Please record and save your UUID so Carbon Fiber’s team can approve you”,
”uuid”: ”c7c3ef5c-d936–49dc-bbe6-dd4069472400",
”jwtToken”: ”eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiJjN2MzZWY1Yy1kOTM2LTQ5ZGMtYmJlNi1kZDQwNjk0NzI0MDAiLCJzdXBlclVzZXIiOnRydWUsImNvbnRhY3QiOmZhbHNlLCJlbWFpbCI6Imp1bGlhbjFAZXhhbXBsZS1lbWFpbC54eXoiLCJpYXQiOjE1NjU3MjI3OTJ9.3gAOcA7kTo_fQaNnCXITdT0bUA-XH0zaeoW-R_wVL5I”,
”webhookSecret”: ”u894dxPvJa”
}

Если бы мы были в production, нам нужно было бы пройти KYC, чтобы получить доступ к услугам Carbon на этом этапе. Однако, мы в sandbox, так что KYC сейчас не понадобится.

Дальше нам понадобится jwtToken (JSON Web Token) для всех наших будущих запросов, чтобы Carbon мог правильно идентифицировать и авторизовать нас. Сейчас мы можем создать contact, который описывает способ нашего взаимодействия с сервисами Carbon.

Code:
import requests
headers = {
    'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiJjN2MzZWY1Yy1kOTM2LTQ5ZGMtYmJlNi1kZDQwNjk0NzI0MDAiLCJzdXBlclVzZXIiOnRydWUsImNvbnRhY3QiOmZhbHNlLCJlbWFpbCI6Imp1bGlhbjFAZXhhbXBsZS1lbWFpbC54eXoiLCJpYXQiOjE1NjU3MjI3OTJ9.3gAOcA7kTo_fQaNnCXITdT0bUA-XH0zaeoW-R_wVL5I'
}
root_path = ‘[url=https://sandbox.carbon.money%27/]https://sandbox.carbon.money[/url]’
create_contact_path = '/v1/contact/create'
data = {
  'emailAddress': 'otc_test@example-email.xyz',
}
req = requests.post(root_path + create_contact_path, data, headers = headers)
print(req)
print(req.text)

Наш ответ:

Code:
<Response[200]>
{
"message": "successfully created new contact!",
"code": 200,
"details":
  {
    "contactId": "72e75284-8010-4bbd-bfae-9843fcaf5b3c",
    "memo": "59356f62e57767c827a3",
    "addresses": {
      "tron": "TA6dYVjnZtE9mHCSYm5BCtmMa94JDEk42w",
      "eth": "0xd50d569810C445c283A64731f995d9Eb2B660d5F"
    }
  }
}

Важны данные, которые мы получили при создании contact, - наш contactId необходим для создания котировок и управления сделками, прочая информация относится к депонированию.

Следующие два шага можно выполнять в любом порядке:

     1. Мы можем внести средства (EOS, TRX, ETH) в рамках подготовки к внебиржевой торговле.
     2. Мы можем получить котировку для желаемого крипто-актива (EOS, TRX, ETH, CUSD).

Поскольку котировки актуальны 60 секунд, сначала мы внесем наши средства, а затем запросим котировку на интересующую нас пару.

Создание Депозита

Ответ при создании contact содержит информацию, необходимую для внесения депозита. Для блокчейнов Ethereum и Tron мы можем просто отправить наши средства на наш уникальный подконтрольный адрес, указанный в поле addresses нашего ответа при создание contact. Для EOS мы должны отправить наши средства на счет аккаунта Carbon с нашей уникальной меткой (memo).

Пути депозита (для contact, который мы только что создали):
Ethereum: отправляем средства на
0xd50d569810C445c283A64731f995d9Eb2B660d5F
Tron: отправляем средства на TA6dYVjnZtE9mHCSYm5BCtmMa94JDEk42w
EOS: отправляем средства на аккаунт carbonteswal с memo 59356f62e57767c827a3


Примечание: carbonteswal это депозитарный аккаунт Carbon в sandbox . Депозитарный аккаунт в production будет qindynasty11.

Подготавливаясь к созданию котировки, я отправляю 300 EOS через Scatter.


Не забудьте про memo!

Получение Котировки

Теперь, когда я депонировал мои EOS, я готов получить ОТС-котировку. Следуем приведенному ранее образцу:

Code:
get_quote_path = '/v1/otc/getPrice'
data = {
  'contactId': '72e75284-8010-4bbd-bfae-9843fcaf5b3c',
  'input': 'eos',
  'output': 'eth',
  'quantity': 300
}
req = requests.post(root_path + get_quote_path, data, headers = headers)

Это даст нам ответ:

Code:
<Response [200]>
{
  "token":"0e48f7ebac54e65e",
  "exchangeRate":"0.019562286961201156126",
  "input":"300 EOS",
  "output":"5.8686860883603468378 ETH",
  "timestamp":1565726930105,
  "quantity":"300",
  "usdValue":"1225.81"
}

Мы получили котировку - я обмениваю 300 EOS на ~5.8687 ETH (стоимостью $1225.81). Для сравнения, конвертер валют CoinMarketCap рассчитывает, что 300 EOS эквивалентны $1218.63 на момент котировки. Конечно же, это еще он не учитывает проскальзывания!

Осуществление ОТС-сделки

Теперь у нас есть все, что нужно - наши средства задепонированы, и наша котировка создана. Отправим token (в течение его 60 секунд жизни), и своп выполнится.

Code:
submit_token_path = '/v1/otc/submit'
data = {
  'contactId': contactId,
  'token': '0e48f7ebac54e65e',
}
req = requests.post(root_path + submit_token_path, data, headers = headers)

Что (в этом случае) вернется:

Code:
<Response [200]>
{
  "message":"Performing swap now.",
  "inputSwap":"eos input transfer pending",
  "outputSwap": "0xfb07d24002eb17bcb09c4cd7597d15b4a206b61295995f8d967d4578f5a318e9"
}

Если своп выполнен успешно, мы должны получить сообщение, как приведенное выше. Наши EOS обменены при помощи Carbon, и взамен мы имеем ETH на нашем депозитном счете Эфириума (транзакция outputSwap).

Примечание: EOS не имеют ID транзакции, потому что переводы EOS обрабатываются внутри платформы. Смотрите дополнительную информацию в документации Carbon.


Квитанция outputSwap

Вывод Средств

Теперь, когда мы выполнили нашу сделку и получили свои средства, мы можем поместить их на холодный кошелек для обеспечения безопасности. Давайте посмотрим, как мы можем это сделать:

Code:
withdraw_path = '/v1/otc/withdraw'
data = {
  'contactId': contactId,
  'chain': 'eth',
  'address': '0x33E2a10456669E4CeeBFa693ED567a8Fd5E2e9d6',
  'asset': 'eth',
  'quantity': '5.868665088360346838'
}
req = requests.post(root_path + withdraw_path, data, headers=headers)

Простой способ вывести все ваши средства - запросить вывод всей суммы, это вернет ошибку, потому что запрашиваемая сумма больше, чем остаток после оплаты за газ. Просто замените количество балансом, предоставленным в ответе.

Code:
<Response[200]>
{
  "details": {
    "txId": "0x9e93296ba2a7ec0ee9482b4c3ddb571e9bd729293a3427b662c641e44568a131",
    "to":"0x33E2a10456669E4CeeBFa693ED567a8Fd5E2e9d6",
    "quantity":"5.868665088360346838 ETH"
  },
  "message":"withdrawal in progress"
}

Вывод средств был выполнен - мы можем проверить актуальный статус вывода средств, посмотрев txId в Ethereum Testnet Explorer.

Предоставление Сопутствующих Услуг

Если цикл депонирования / котировки / отправки / вывода сложнее, чем вы бы хотели, или если вы хотите попробовать более простую форму ОТС-торговли, Carbon также предлагает вариант двухкомпонентной ОТС-сделки, которая требует только получения котировки, а затем внесения средств для беспрепятственного получения обмениваемого актива на предоставленным пользователем адресе.

Также следите за появлением наших внутри платформенных и вне платформенных (для обмена крипты на фиат) туториалах, которые скоро станут доступны.

Дисклеймер: Carbon спроектировал и разработал это программное обеспечение по запросу оффшорного партнера.


4  Local / Новички / Лайфстайл: Где Потратить Криптовалюту? on: December 29, 2019, 10:46:07 AM
Перевод статьи: https://bmag.io/2019/08/02/lifestyle-where-to-spend-cryptocurrency-on-luxury-items-and-services/

Лайфстайл: Где Потратить Криптовалюту на Предметы Роскоши и Услуги?
Автор: Maria Birger 02/08/2019


Сфера использования цифровых валют расширяется. Таковы возможности, предоставляемые новой технологией и средствами обмена. Но одной из оставшихся проблем является обеспечение возможности использования криптовалюты как фиатной валюты: для покупок. За последние несколько лет многие компании, от лидеров в своих отраслях, таких как Microsoft или Overstock, до небольших магазинов и ресторанов по всему миру, начали активно использовать криптовалюту. Признавая существование большого интерес к высококачественным продуктам и эксклюзивным впечатлениям, мы собрали руководство по шести люксовым брендам, которые признали криптовалюту.

Manufacture Contemporaine du Temps (MCT)


Наручные часы MTC известны как эксклюзивные и технически сложные. Картинка позаимствована: mctwatches.com

Некоторые продавцы люксовых часов и ювелирных изделий предлагают своим покупателям криптовалюту среди вариантов оплаты. Manufacture Contemporaine du Temps (MCT) - это швейцарский производитель люксовых часов, хорошо известный своими инновационными и технически сложными хронографами, которые “меняют лицо времени". Компания разрабатывает и выпускает около 100-150 уникальных часов в год, все собственного производства. Эти высококлассные часы выпускаются ограниченным тиражом и доступны в бутиках по всему миру. MCT теперь предлагает своим клиентам купить часы онлайн с помощью Биткоина.

Samer Halimeh – Продавец Ювелирных Изделий


Потрясающие розовые бриллианты Samer Halimeh. Картинка позаимствована: Twitter.com

Для тех, кто ищет сделанное на заказ, уникальное ювелирное изделие, магазин Samer Halimeh может стать правильным местом для покупок. Ливано-американский ювелир известен своими сделанными на заказ изделиями и редкими драгоценностями. Имея штаб-квартиру в Нью-Йорке, флагманский магазин в Лондоне и магазины в Эр-Рияде и Куала-Лумпуре, творения Халимеха доступны для очень богатых клиентов из США, Европы, России, Ближнего Востока и Юго-Восточной Азии. В 2017 году Samer Halimeh начала принимать в качестве оплаты Bitcoin.

Berkeley Travel - Люксовое Туристическое Агенство


Дайвинг - один из видов отдыха, предлагаемый Berkeley Travel. Картинка позаимствована: www.berkeleytravel.co.uk

Базирующееся в Лондоне Berkeley Travel специализируется на самых роскошных впечатлениях. Агентство предлагает ряд эксклюзивных услуг, включая частные чартерные рейсы, роскошные круизы и парусные экскурсии, сафари по самым захватывающим природным паркам мира и приключения на открытом воздухе с адреналином. Независимо от того, ищете ли вы романтическое путешествие, семейный отдых или экстремальные приключения для одиноких, специальные маршруты агентства включают в себя выбор лучших в мире отелей, ресторанов, клубов, спа-салонов и предметов роскоши.

Juliettes Interiors - Элитная Мебель


Juliette предлагает высококлассную мебель и дизайн. Картинка позаимствована: Twitter.com

Компания Juliettes Interiors, занимающаяся продажей элитной мебели и предоставлением услуг по дизайну интерьеров, славится своими трендами и технологиями. Компания, клиентами которой являются члены королевских семей, главы государств, знаменитости и бизнес-лидеры, обставляющие свои яхты и особняки по всему миру, теперь предлагает новый способ оплаты: Биткоин.

Caribound - Аренда на Время Отпуска


Caribound предлагает в аренду роскошные виллы. Картинка позаимствована: www.caribound.com

Caribound предлагает различные варианты элитного жилья на Карибах, от доступной роскоши до домов премиум и супер-класса. Они подберут на любой вкус. Можно подобрать виллу с полным набором услуг, предлагаемых отелями, или коттедж в тихом месте на красивом пляже. Так как компания возглавляется миллениалами, которые используют новые технологии, Caribound начала принимать биткойн в 2017 году.

Магазины Harvard and MIT COOP


Внутри Harvard Coop. Картинка любезно предоставлена Pinterest.com

Лучшие частные школы и университеты по всему миру всегда привлекали богатых и влиятельных людей. The Coop служит кампусным магазином для Гарвардского и Массачусетского университетов и их известных академических сообществ. Торговые точки The Coop и их интернет-магазин предлагают самый большой выбор официально лицензированной Harvard и MIT атрибутики и подарков по всему миру, а также все необходимое для тех, кто посещает эти элитные учебные заведения. Бостон и Кембридж, Массачусетс привлекает большое количество богатых гостей, чаще всего родителей сейчас обучающихся студентов или тех, кто хочет добиться того, чтобы их отпрыск получил диплом одной из лучших школ мира.
5  Local / Разное / Топ 5 Кейсов Блокчейна в Фармацевтике on: December 20, 2019, 08:31:53 AM
Перевод статьи:
Top 5 Blockchain Use Cases in Pharma and Healthcare — that you should know about!

Топ 5 Кейсов Применения Блокчейна в Фармацевтике и Здравоохранении - о которых вы должны знать!

Реальные примеры использования блокчейна в фармацевтике и здравоохранении



Блокчейн отлично применим в случаях, связанных с использованием технологии индивидуальной маркировки track-and-trace, системой управления происхождением продукта и цепочкой поставок.

Индустрия фармацевтики активно изучает технологию блокчейн для содействия в решении нескольких реально существующих проблем. Многие из этих исследований уже внедрили proof-of-consept, что создало заметный интерес в индустрии.

В этой статье мы рассмотрим топ-5 вариантов применения.

Кейс 1: Проверка подлинности возвращаемых лекарств

В фармацевтической промышленности лекарства часто возвращают производителям. Например, оптовики могут заказать с избытком и, соответственно, могут быть вынуждены возвращать непроданные запасы производителям лекарств.

В то время как доля возвращаемых лекарств невелика по сравнению с продажами (около 2-3% продаж), годовой объем находится в диапазоне $ 7-10 млрд.

В 2016 году продажи производителей фармацевтики в США составили $ 323 млрд. Прогнозируемая выручка десяти крупнейших мировых фармацевтических компаний на 2018 год (которые составляют половину продаж пятидесяти крупнейших компаний) составляет $ 355 млрд. Исходя из этих оценок, объем товарных возвратов на уровне 2-3% от общего объема продаж составляет 7-10 млрд. долл.

Вместо того, чтобы уничтожать эти вполне нормальные товарные поставки, фармацевтические компании предпочитают перепродавать их. Однако, прежде чем они смогут перепродать эти возвращенные лекарства, фармацевтические компании имеют юридическое обязательство проверить подлинность возвращенных лекарств.

В США Закон О Безопасности Цепи Поставок Лекарств (DSCSA) предусматривает, что все американские производители должны внедрить сериализацию или штрих-кодирование лекарств на уровне упаковки к ноябрю 2018 года. Кроме того, к тому же времени следующего года эти серийные номера должны быть использованы для проверки подлинности возвращенных препаратов.

В Европе существует аналогичный нормативный акт, называемый Директивой о Фальсифицированных Лекарствах (FMD), требующий, чтобы все лекарства были сериализованы или штрих-кодированы к февралю 2019 года.

В то время как ЕС выбрал централизованный подход (позволяющий производителям загружать серийные номера в централизованную базу данных регулятора ЕС, а дистрибьюторам подключаться к этой централизованной базе данных для проверки подлинности лекарств), в США нет централизованного регулятора базы данных.

Без такой централизованной базы данных, у каждого дистрибьютора только один вариант интегрировать данные с каждым фармацевтическим производителем, который является логистически недоступным!

Гораздо лучший и рекомендуемый подход заключается в том, чтобы производители фармацевтики записывали серийные номера своих упаковок в блокчейн, который служит децентрализованным и распределенным регистром. Оптовики и потребители смогут затем проверить подлинность упаковки лекарств, подключившись к блокчейну.

Применение Proof-of-Concept

В настоящее время Merck в партнерстве с SAP разработала приложение SAP Pharma Blockchain POC для этого кейса. SAP запустила первое Proof-of-Concept в 3 квартале 2017 года, а второе - в начале 2018 года. PoC для этого кейса работает следующим образом:

  • Существующее решение от SAP (не связанное с блокчейном), называемое ATTP (Advanced Track and Trace for Pharmaceuticals), генерирует уникальные идентификаторы для упаковок лекарств.
  • Когда производитель отправляет упаковку, он регистрирует товар в блокчейне SAP Pharma PO, занося четыре параметра, генерируемые ATTP: номер товара (на основе стандарта GS1), серийный номер, номер партии и дату истечения срока годности.
  • Дистрибьютор может считать эти четыре параметра из штрих-кода упаковки, используя простое мобильное приложение - сканер, позволяющий им проверять возврат.
  • Подделки копий штрих-кодов можно избежать, так как SAP добавил возможность отслеживать каждый переход упаковки из рук в руки. Просмотр карты в мобильном приложении также помогает убедиться, что лекарства находятся в соответствующем географическом регионе.

Кейс 2: Предотвращение Подделки Лекарств и Медицинских Изделий

Способность технологии блокчейн устанавливать происхождение данных делает ее особенно пригодной для использования в цепочке поставок.

​Фармацевтические компании, которые производят, отгружают и поставляют продукцию, испытывают трудности с отслеживанием своей продукции, что позволяет мошенникам вводить поддельные лекарства в систему.

Проблема контрафакта не ограничивается только производством лекарств, а распространяется и на производство медицинских инструментов. По оценкам Всемирной Организации Здравоохранения (ВОЗ), 8% медицинских изделий, находящихся в обращении сегодня, являются подделками.

Контрафактные лекарства и медицинские изделия представляют собой серьезную опасность для потребителей и приводят к потере доходов законных производителей.

Когда Закон О Безопасности Цепи Поставок Лекарств (DSCSA) вступит в силу к ноябрю 2018 года, каждая упаковка лекарств будет однозначно сериализована или штрих-кодирована. Это обеспечит уникальный идентификатор продукта для каждой упаковки лекарств и позволит проверить подлинность каждого проданного продукта.

По мере движения препарата по цепочке поставок транзакции могут быть записаны в блокчейн, тем самым обеспечивая распределенный регистр происхождения. Это позволит всем сторонам отслеживать лекарства на протяжении всего жизненного цикла цепочки поставок.

Это затруднит внедрение поддельных лекарств в цепочку поставок и их распространение среди ничего не подозревающих потребителей.

Применение Proof-of-Concept

Novartis экспериментирует с блокчейном для выявления поддельных лекарств и в режиме реального времени «следит за температурой» всех участников цепочки поставок, используя блокчейн и IoT.

Инициатива возглавляется Fritz, Региональным Архитектором Цепочки Поставок Novartis, и Cuomo, Менеджером Инноваций в Области Прикладных Технологий Novartis.

Novartis также в настоящее время занимается разработкой объединенной сети blockchain между Европейской индустрией фармацевтики и ЕС, называемой программой Innovative Medicine Initiative(IMI) Blockchain Enabled Healthcare. Консорциум будет включать в себя малые и средние компании блокчейна, университеты, клинические лаборатории, больницы, представителей пациентов и прочих; и нацелен на исследование применения в области выявления поддельных лекарств, цепочки поставок, данных о пациентах и клинических испытаний.


Кейс 3: Соблюдение Требований Цепочки Поставок в Фармацевтике

Поскольку лекарства перемещаются по цепочке поставок, компании должны придерживаться правил обращения, транспортировки и хранения лекарств. Требуется отслеживать некоторые эксплуатационные ограничения. Такие как поддержание диапазона температур, влажности, качества воздуха в заданных нормах и т.д.

Условия окружающей среды в рамках цепочки поставок могут оказывать непосредственное влияние на качество и эффективность препарата. Например, чувствительная к температуре продукция, такая как вакцины, должна надлежащим образом контролироваться по всей цепочке поставок.

Сегодня лекарства контролируются по всей цепочке поставок с помощью интеллектуальных устройств IoT, а температура, влажность и другие факторы могут регистрироваться с помощью интеллектуальных устройств на протяжении всего жизненного цикла цепочки поставок.

Однако, поскольку каждый участник цепочки поставок, т.е. производитель, логистическая компания, магазины, аптеки и т.д., ведут свой собственный отдельный регистр учета, проблему в любом конкретном сегменте цепочки поставок трудно отследить.

Технология блокчейн позволяет цепочке поставок в фармацевтике лучший способ включить соблюдение требований и управление в рамках цепочки поставок.

Благодаря присущей ей прозрачности, неизменности и распределенному характеру, технология Блокчейн обеспечивает механизм, который позволяет любому участнику цепочки поставок удостовериться в соблюдение правил логистики и транспортировки цепочки поставок (включая условия обращения и хранения лекарств).

Кроме того, смарт-контракты могут быть запрограммированы так, что оповещение соответствующих сторон в цепочке поставок о не соблюдении условий соответствия выполнится автоматически.

Например, если во время транспортировки происходит температурное отклонение, то с помощью технологии блокчейн потребитель может легко увидеть, в какой момент произошло событие. Кроме того, смарт-контракты могут автоматически вызываться в  блокчейне, что позволит уменьшить сумму счета-фактуры в случае, если логистическая компания, на своем уровне ответственности не обеспечила соблюдение условий хранения.

Кейс 4: Прозрачность и Отслеживаемость Дачи Согласия на Клинические Испытания

Информированное согласие пациента включает в себя информирование пациента о каждом этапе процесса клинических испытаний, включая любые возможные риски, связанные с исследованием. Запротоколированное согласие на клинические испытания и их пересмотр должны быть прозрачными для пациентов и прослеживаемыми для заинтересованных сторон.

Однако на практике процесс осознанного согласия трудно обеспечить точным и достаточным образом.

FDA сообщает, что почти 10% испытаний, которые они контролируют, имеют некоторые проблемы, связанные со сбором согласий. К ним относятся: неполучение письменного информированного согласия, неутвержденные формы, недействительные документы о согласии, несогласие с изменениями протокола и отсутствие одобрения изменений протокола со стороны Institutional Review Board и другие. Часто также регистрируются случаи мошенничества с документами, такие как выдача документов о согласии задним числом.

Протокол блокчейн в клинических испытаниях может обеспечить прозрачность и отслеживаемость согласий.

Блокчейн обеспечивает механизм для использования не поддающейся фальсификации фиксированной во времени формы согласия, для хранения и отслеживания согласия безопасным и общедоступным способом, а также позволяет обмениваться этой информацией в режиме реального времени. Кроме того, смарт-контракт может быть привязан к пересмотру протокола так, что любое изменение в протоколе клинических испытаний требует обновления согласия пациента.
6  Local / Альтернативные криптовалюты / Атаки и Уязвимости Смарт-Контракта on: December 17, 2019, 12:24:18 PM
Перевод статьи:
https://medium.com/better-programming/the-encyclopedia-of-smart-contract-attacks-vulnerabilities-dfc1129fdaac

Энциклопедия Смарт-Контракта:
Атаки и Уязвимости


Глубокое погружение в обеспечение безопасности смарт-контрактов



Приложения на Ethereum распоряжаются финансовыми величинами, что придает вопросу их безопасности исключительную важность. Будучи только формирующейся, экспериментальной технологией, смарт-контракты в своей истории безусловно подвергались ряду атак.
Чтобы предотвратить дальнейшие атаки, я составил список почти всех известных атак и уязвимостей. Хотя этот список включает известные атаки, новые эксплойты все еще регулярно обнаруживаются, и для вас (как для инженера) это должно быть только началом исследования безопасности смарт-контрактов.

Этот список можно найти на GitHub

.     .     .

Атаки

В этом разделе мы рассмотрим известные виды атак, которые могут быть использованы для нападения на слабые места смарт-контрактов.

Фронтраннинг, aka Зависимость от запроса на транзакцию

Университет Конкордии определяет фронтраннинг как  «совокупность действий, благодаря которым объект получает выгоду от предварительного доступа к привилегированной рыночной информации о предстоящих транзакциях и сделках». Знание будущих событий на рынке может привести к использованию этой информации в корыстных целях.

Например, зная, что произойдет очень крупная покупка определенного токена, злоумышленник может купить этот токен заранее и продать его с прибылью, когда крупный заказ на покупку увеличит цену актива.

Фронтраннинг-атаки уже долгое время являются проблемой на финансовых рынках, и из-за прозрачной природы блокчейна эта проблема возникает и на криптовалютных рынках.

Поскольку решение этой проблемы зависит от базы конкретного контракта, от нее может быть трудно защититься. Возможные решения могут быть найдены в использовании пакетного режима для транзакций и схемы предварительной фиксации (т. е. пользователю предоставляется возможность отправлять некоторые данные с задержкой).

DoS-атака с ограничением лимита газа

В блокчейне Ethereum у блоков есть лимит газа. Одно из преимуществ ограничения лимита газа заключается в том, что оно не позволяет злоумышленникам создавать бесконечный цикл транзакций, но если использование газа транзакцией превышает это ограничение, то транзакция не выполняется. Это может привести к Dos-атаке несколькими способами.

Неограниченные операции

Ситуация, в которой может возникнуть проблема с ограничением по лимиту газа, заключается в отправке средств на массив адресов. Даже без какого-либо злого умысла что-то легко может пойти не так. Просто слишком большой массив пользователей, которым нужно заплатить, может максимально увеличить лимит газа и не дать транзакции завершиться успешно.

Эта ситуация также может привести к атаке. Скажем, злоумышленник решает создать значительное количество адресов, при этом каждому адресу выплачивается небольшая сумма средств из смарт-контракта. Если все сделано успешно, транзакция может быть заблокирована на неопределенный срок, что может даже препятствовать выполнению дальнейших транзакций.

Эффективным решением этой проблемы могло бы быть использование системы pull-payment поверх текущей push-payment. Для этого разделите каждый платеж на отдельную транзакцию и попросите получателя совершить вызов функции.

Если по какой-то причине вам действительно нужно перебрать массив неопределенной длины, тогда, по крайней мере, ожидайте, что он может занять несколько блоков, и разрешите его выполнение в нескольких транзакциях - как в этом примере:

Code:
struct Payee {
    address addr;
    uint256 value;
}

Payee[] payees;
uint256 nextPayeeIndex;

function payOut() {
    uint256 i = nextPayeeIndex;
    while (i < payees.length && msg.gas > 200000) {
      payees[i].addr.send(payees[i].value);
      i++;
    }
    nextPayeeIndex = i;
}
Пример взят Consensys

Заполнение блока

В некоторых ситуациях ваш контракт может быть атакован с ограничением лимита газа, даже если вы не перебираете массив неопределенной длины. Злоумышленник может заполнить несколько блоков, прежде чем транзакция будет обработана, используя повышение цены на газ.

Эта атака совершается путем осуществления нескольких транзакций по очень высокой цене на газ. Если цена на газ достаточно высока и транзакции расходуют достаточно газа, они могут заполнить блоки целиком и не дать обработаться другим транзакциям.

Транзакции Ethereum требуют, чтобы отправитель оплачивал газ, чтобы лишать стимула спам-атаки, но в некоторых ситуациях может быть оправданным проведение такой атаки. Например, атака с заполнением блока использовалась на игровом Dapp, Fomo3D. В приложении был таймер обратного отсчета, и пользователь мог выиграть джек-пот, став последним, кто приобрел ключ - кроме того, каждый раз, когда пользователь покупал ключ, таймер продлевался. Злоумышленник купил ключ, а затем заполнил следующие 13 блоков подряд, поэтому смог выиграть джекпот.

Чтобы избежать таких атак, важно тщательно продумать, безопасно ли включать основанные на времени действия в ваше приложение.

DoS-атака с (неожидаемым) возвратом

DoS-атаки (отказ в обслуживании) могут возникать в функциях, когда вы пытаетесь отправить средства пользователю и функциональность зависит от того, был ли перевод успешным.

Это может быть проблемой в том случае, если средства отправляются на умный контракт, созданный злоумышленником, поскольку они могут просто создать резервную функцию, отменяющую все платежи.

Например:

Code:
// INSECURE
contract Auction {
    address currentLeader;
    uint highestBid;

    function bid() payable {
        require(msg.value > highestBid);

        require(currentLeader.send(highestBid)); // Refund the old leader, if it fails then revert

        currentLeader = msg.sender;
        highestBid = msg.value;
    }
}
Пример взят Consensys

Как вы можете видеть в этом примере, если злоумышленник делает заявки из смарт-контракта с резервной функцией, возвращающей все платежи, они никогда не смогут быть профинансированы, и, таким образом, никто никогда не сможет сделать более высокую заявку.

Эта проблема может появиться и без злоумышленника. Например, вы, возможно, хотите заплатить массиву пользователей перебором по этому массиву, и, конечно же, вы хотите убедиться, что каждому пользователю наверняка оплачено. Проблема здесь в том, что если один платеж не удается, функция возвращается, и не один из платежей не проходит.

Code:
address[] private refundAddresses;
mapping (address => uint) public refunds;

// bad
function refundAll() public {
    for(uint x; x < refundAddresses.length; x++) { // arbitrary length iteration based on how many addresses participated
        require(refundAddresses[x].send(refunds[refundAddresses[x]])) // doubly bad, now a single failure on send will hold up all funds
    }
}
Пример взят Consensys

Эффективным решением этой проблемы было бы использование системы pull-payment поверх существующей системы push-payment. Для этого выделите каждый платеж в отдельную транзакцию и попросите получателя вызвать функцию.

Code:
contract auction {
    address highestBidder;
    uint highestBid;
    mapping(address => uint) refunds;

    function bid() payable external {
        require(msg.value >= highestBid);

        if (highestBidder != address(0)) {
            refunds[highestBidder] += highestBid; // record the refund that this user can claim
        }

        highestBidder = msg.sender;
        highestBid = msg.value;
    }

    function withdrawRefund() external {
        uint refund = refunds[msg.sender];
        refunds[msg.sender] = 0;
        (bool success, ) = msg.sender.call.value(refund)("");
        require(success);
    }
}
Пример взят Consensys

Принудительная отправка Эфира в контракт

Иногда пользователи не хотят, чтобы у них была возможность отправлять Эфир на смарт-контракт. Несмотря на это обстоятельство, существует возможность обойти резервную функцию контракта и отправить Эфир.

Code:
contract Vulnerable {
    function () payable {
        revert();
    }

    function somethingBad() {
        require(this.balance > 0);
        // Do something bad
    }
}
Пример взят Consensys

Хотя это выглядит, будто любая транзакция к Зараженному контракту будет возвращена, на самом деле существует пара возможностей принудительно отправить Эфир.

Во-первых можно вызвать selfdestruct метод для контракта, у которого адресом бенефициара задан адрес Зараженного контракта. Это сработает, потому что selfdestruct не станет обращаться к резервной функции.

Другой вариант заключается в предварительном вычислении адреса контракта и отправке эфира на адрес до того, как контракт будет даже развернут. Удивительно, но это возможно.

Грифинг недостаточным количеством газа

Грифинг - это тип атаки, часто встречающийся в видеоиграх, при котором вредитель играет в игру нежелательным образом так, чтобы раздражать других игроков, также известен как троллинг. Этот тип атаки также используется для предотвращения выполнения транзакций по назначению.

Эта атака может быть выполнена на контрактах, которые принимают данные и используют их в подзапросе на другой контракт. Этот метод часто используется в кошельках с мультиподписью, а также с ретрансляторами транзакций. Если подвызов завершается неудачно, либо вся транзакция отменяется, либо выполнение продолжается.

Давайте рассмотрим в качестве примера простой контракт с ретранслятором. Как показано ниже, контракт с ретранслятором позволяет кому-либо создавать и подписывать транзакцию без необходимости ее выполнения. Часто это используется, когда пользователь не может заплатить за газ, связанный с транзакцией.

Code:
contract Relayer {
    mapping (bytes => bool) executed;

    function relay(bytes _data) public {
        // replay protection; do not call the same transaction twice
        require(executed[_data] == 0, "Duplicate call");
        executed[_data] = true;
        innerContract.call(bytes4(keccak256("execute(bytes)")), _data);
    }
}
Пример взят Consensys

Выполняющий транзакцию пользователь, forwarder, может подвергать транзакции цензуре, используя количество газа, достаточное только для выполнения транзакции, но недостаточное для успешного выполнения подзапроса.

Есть два способа предотвратить это. Первым решением было бы разрешить только доверенным пользователям ретранслировать транзакции. Другим решением является требование, чтобы forwarder обеспечивал достаточное количество газа, как показано ниже.

Code:
// contract called by Relayer
contract Executor {
    function execute(bytes _data, uint _gasLimit) {
        require(gasleft() >= _gasLimit);
        ...
    }
}
Пример взят Consensys
7  Local / Кодеры / Создаем на Java Наблюдателя за Ценой Биткоина on: December 11, 2019, 06:51:11 PM
Перевод статьи:
https://medium.com/swlh/building-a-bitcoin-price-watcher-with-alerts-in-java-d52824e0631e

Создаем на Java Наблюдателя за Ценой Биткоина с Уведомлениями

Вы будете автоматически уведомлены об изменениях стоимости Биткоина.


Как разработчик вы, возможно, интересуетесь всем, что связано с технологиями. Поэтому вы, должно быть, уже слышали о Биткоине. Даже будет лучше, если я представлю, что вы уже проявляли интерес к тому, как это работает, и конкретно к технологии Блокчейн. Если вы когда-либо интересовались Биткоином, вы могли заметить, что его цена склонна к значительным колебаниям.

Волатильность Биткоина можно объяснить по большей части тем, что это новый для рынка продукт. Если вы решите купить Биткоин, вы, наверное, потратите какое-то время, наблюдая за его ценой на биржевых платформах. Это может отнять у вас невероятно много времени.

Вместо того, чтобы тратить долгие часы на наблюдения за ценой Биткоина, я научу вас, как на Java написать программу для наблюдения за ценой Биткоина, и получать оповещения непосредственно на вашем рабочем столе, когда цена достигнет заданного вами уровня.

.     .     .

Технические характеристики Наблюдателя Цены Биткоина (Bitcoin Price Watcher или BPW)

Программа BPW, которую мы будем создавать в этой статье, будет иметь следующие функции:

  • Получение цены Биткоина, используя Индекс Цены Биткоина (Bitcoin Price Index или BPI) с сайта CoinDesk.
  • Отслеживание цены Биткоина каждую минуту.
  • Отображение цен на Биткоин для просмотра в интерактивном режиме.
  • Предоставление списка всех отслеженных цен.
  • Показ уведомлений непосредственно на рабочем столе пользователя.

Прочитав эти функции, вы поняли, что наша программа будет запущена на компьютере конечного пользователя. Она будет запущена в командной строке терминала пользователем, который сможет добавлять новое значение цены для отслеживания, через ввод команды, такой как эта:

Quote
WATCH;7450

В этом случае пользователь запрашивает выдать уведомление, когда Биткоин достигнет цены 7 450 долларов.

.     .     .

Создание Проекта Java

Первым шагом будет создание проекта Java, который будет использовать Maven в качестве менеджера зависимостей. Так как мы вынуждены будем обращаться к веб-сервису CoinDesk, мы добавим библиотеку OkHttp в качестве зависимости в наш проект.

OkHttp - это эффективный HTTP-клиент, который идеально подойдет для нашего проекта.

Поскольку веб-сервис BPI CoinDesk возвращает свои данные в формате JSON, мы будем вынуждены добавить в зависимость библиотеку для парсинга данных, полученных таким образом.

Для этого я буду использовать библиотеку org.json, которая занимает мало места и легка в использовании. Все это дает нам следующий файл POM для нашего проекта:

Code:
<project
    xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.ssaurel</groupId>
    <artifactId>BitcoinPriceAlert</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>BitcoinPriceAlert</name>
    <url>http://maven.apache.org</url>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>4.2.2</version>
        </dependency>
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20190722</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>
github.com

.     .     .

Получение Цены Биткоина

Как только проект будет создан и добавлены зависимости, мы переходим к получению цены Биткоина. Веб-сервис Bitcoin Price Index (BPI) CoinDesk доступен по следующему адресу:

https://api.coindesk.com/v1/bpi/currentprice.json

Первый вызов этого API позволит нам увидеть, в каком виде он отображается:

JSON, возвращаемый сервисом BPI

На уровне главного класса нашей программы мы создаем свойство client типа OkHttpClient. Этот объект является точкой входа в OkHttp API и затем позволит нам запустить наш запрос к сервису.

Запрос представлен объектом Request, в котором мы указали конечной точкой BPI CoinDesk. Последний хранится в статической переменной BITCOIN_PRICE_ENDPOINT.

Чтобы выполнить этот запрос с заранее созданным экземпляром OkHttpClient, мы используем его метод newCall, в который мы передаем объект Request, который мы только что создали, в качестве входных данных. Затем остается вызвать метод enqueue, принимающий в качестве входных параметров объект типа Callback. Использование этого интерфейса позволяет нам разделить обработку результата запроса и фактический вызов.

Все это дает следующий код метода loadBitcoinPrice:

Code:
private void loadBitcoinPrice(Callback callback) {
  Request request = new Request.Builder().url(BITCOIN_PRICE_ENDPOINT).build();
  client.newCall(request).enqueue(callback);
}

Так как наша программа должна постоянно мониторить цену Биткоина, необходимо, чтобы этот вызов Сервиса BPI выполнялся через регулярные промежутки времени.

Для реализации этой операции Java предлагает Timer API. Поэтому я определю объект TimerTask, внутри которого задам обращение к методу loadBitcoinPrice. Выполнение данного TimerTask запланировано каждую минуту после вызова метода schedule созданного для данного экземпляра Timer.

Поэтому мы имеем следующий код:

Code:
private void launchTimer() {
 timer = new Timer();
 timer.schedule(new TimerTask() {
   @Override
   public void run() {
     loadBitcoinPrice(new Callback() {
       @Override
       public void onResponse(Call call, Response response) throws IOException {
         String str = response.body().string();
         parseBitcoinPrice(str);
       }

       @Override
       public void onFailure(Call call, IOException ioe) { }
    });
   }
  }, 0, PERIOD);
}

private void cancelTimer() {
 if (timer != null) {
  timer.cancel();
 }
}

private void loadBitcoinPrice(Callback callback) {
 Request request = new Request.Builder().url(BITCOIN_PRICE_ENDPOINT).build();
 client.newCall(request).enqueue(callback);
}
github.com

.     .     .

Парсинг Данных Полученного JSON

В коде выше вы, должно быть, заметили наличие метода parseBitcoinPrice, принимающего в качестве входных данных результат вызова сервиса Bitcoin Price Index. Этот метод и будет отвечать за анализ данных JSON, полученных после вызова Сервиса, чтобы получить текущую цену биткойна.

В этом методе я начинаю создавать экземпляр JSONObject из данных, переданных в качестве входных. Затем я сделаю два вызова, связанных с методом getJSONObject соответственно с параметрами "bpi", а затем "USD“, прежде чем, наконец, вызвать метод getFloat с входным ”rate_float".

Это даст мне текущую стоимость Биткоина в долларах США.

Я вывожу в консоли дату и время, а также цену Биткойна, которая только что была получена. Последняя известная цена биткойна также хранится в свойстве currentPrice нашего главного класса.

На этом моменте метод parseBitcoinPrice выглядит следующим образом:

Code:
private void parseBitcoinPrice(String str) {
  JSONObject jsonObject = new JSONObject(str);
  currentPrice = jsonObject.getJSONObject("bpi").getJSONObject("USD").getFloat("rate_float");
  System.out.println(LocalDateTime.now() + " | Current price = " + currentPrice + "\n");
  
  // ...
}

Я заостряю внимание на этом моменте, потому что, как только эта цена будет получена, необходимо будет сравнить ее с ценами, заданными пользователем для мониторинга.

.     .     .

Моделирование цены для мониторинга

Прежде чем я смогу сравнить текущую полученную стоимость Биткоина с ценами, определенными пользователем для мониторинга, мне нужно будет смоделировать цену для мониторинга.

Цена для мониторинга моделируется в классе Price и имеет следующие два свойства:

  • Свойство target типа float отображает цену для мониторинга.
  • Свойство type, которое является экземпляром Type типа enum (перечисление), отражает типы выполняемых наблюдений.

В самом деле, когда пользователь запрашивает мониторить заданную стоимость, мы будем определять, стоит ли выполнить мониторинг с большей или с меньшей стороны, чтобы сделать уведомление более релевантным.

Перечисление Type которое создано в соответствии с этими требованиями, имеет два значения: UP и DOWN. Кроме того, мы определяем два абстрактных метода:

  • Метод reached, принимающий в качестве входных данных текущую цену биткойна и цену для мониторинга и возвращающий значение true, если эта цена достигнута.
  • Метод msg, принимающий в качестве входных данных текущую цену биткойна и цену для мониторинга и возвращающий сообщение для отображения пользователю.

Реализация этих методов после выполняется специфическим образом для каждого из двух значений перечисления Type. Наконец, определение типа цены для мониторинга выполняется при создании объекта Price путем сравнения текущей стоимости биткойна с ценой для мониторинга, определенной пользователем.

Это дает следующий код для класса Price:

Code:
public class Price {

  enum Type {
    UP() {
      @Override
      public boolean reached(float current, float target) {
        return target < current;
      }

      @Override
      public String msg(float current, float target) {
        return "BTC has rised beyond " + target + " with price : " + current;
      }
    },
    DOWN {
      @Override
      public boolean reached(float current, float target) {
        return current < target;
      }

      @Override
      public String msg(float current, float target) {
        return "BTC has fallen below " + target + " with price : " + current;
      }
    };

    public abstract boolean reached(float current, float target);
    public abstract String msg(float current, float target);
  }

  public float target;
  public Type type;

  public Price(float current, float target) {
    this.target = target;
    type = Float.compare(current, target) < 0 ? Type.UP : Type.DOWN;
  }

}
github.com

.     .     .

Оповещение Пользователя о Достижении Заданной Цены

Ранее я говорил вам, что метод parseBitcoinPrice еще не завершен. На данный момент он отображает только цену биткойна, полученную из сервиса Bitcoin Price Index.

Для того, чтобы работа этого метода была завершена, он должен иметь возможность перебирать цены, которые отслеживает пользователь, и для каждого достижения цены отправлять пользователю предупреждение. Это позволит ему сразу быть предупрежденным о достижении цены, которую он хотел видеть.

Кроме того, как только искомая цена достигнута, не следует забывать удалить ее из списка цен для мониторинга.

Для того, чтобы сделать это, я создам свойство pricesToWatch в главном классе моей программы. Это свойство будет содержать список объектов Price. Для того, чтобы перебирать этот список или иметь возможность при  необходимости удалять пункты, я буду использовать объект Iterator.

Затем для каждой цены я получу свое свойство type, на котором я мог бы вызвать метод reached, передав в качестве входных данных текущую цену Биткоина, и искомую цену, содержащуюся в текущем объекте Price.

Если метод reached возвращает значание true, это означает, что искомая пользователем цена достигнута.

Затем мы должны получить сообщение для отображения пользователю, вызвав метод msg свойства type, связанный с текущим объектом Price. Затем определить метод displayNotification, который будет отвечать за запуск системного уведомления на принимающей машине пользователя.

Виртуальная машина Java для этого предлагает SystemTray API. Который поддерживает правильное отображение системных уведомлений независимо от операционной системы, на которой будет работать программа.

Наконец, остается удалить цену из списка отслеживаемых, вызвав метод итератора remove. Это дает нам следующий код:

Code:
private void parseBitcoinPrice(String str) {
  JSONObject jsonObject = new JSONObject(str);
  currentPrice = jsonObject.getJSONObject("bpi").getJSONObject("USD").getFloat("rate_float");
  System.out.println(LocalDateTime.now() + " | Current price = " + currentPrice + "\n");

  for (Iterator<Price> it = pricesToWatch.iterator(); it.hasNext();) {
    Price priceToWatch = it.next();

    if (priceToWatch.type.reached(currentPrice, priceToWatch.target)) {
      String message = priceToWatch.type.msg(currentPrice, priceToWatch.target);
      System.out.println(message);
      displayNotification("Bitcoin Watcher", message);
      // remove from list to watch
      it.remove();
    }

  }
}

public void displayNotification(String title, String message) {
  if (SystemTray.isSupported()) {
    //Obtain only one instance of the SystemTray object
    SystemTray tray = SystemTray.getSystemTray();
    Image image = Toolkit.getDefaultToolkit().createImage("icon.png");
    TrayIcon trayIcon = new TrayIcon(image, "Bitcoin Watcher Notif");
    trayIcon.setImageAutoSize(true);
    trayIcon.setToolTip("Bitcoin Watcher");
  
    try {
      tray.add(trayIcon);
    } catch (AWTException e) {}

    trayIcon.displayMessage(title, message, MessageType.INFO);
  } else {
    System.err.println("System tray not supported!");
  }
}
github.com

.     .     .
8  Local / Oбcyждeниe Bitcoin / Стоит ли сейчас инвестировать в Биткоин? on: December 09, 2019, 08:21:35 AM
Перевод статьи:
https://medium.com/altcoin-magazine/is-it-still-worth-investing-in-bitcoin-60b11ba449f7
(от 7 Дек 2019)


И Н В Е С Т И Ц И И
Стоит ли сейчас инвестировать в Биткоин?

Предназначение 2020 года: Если вы хотите купить еще один Биткоин, то сейчас самое время.

Биткоин переживает неспокойное время. Колебания курса очень сильны. Однако, в следующем году он может резко пойти вверх: по плану время подходит к очередному Халвингу.

Биткоин-это цифровая валюта, которая имеет ценность только благодаря покупателям и продавцам. Но есть еще возможности получить Биткоин лично, например, как золотую монету. Фото Aleksi Räisä на Unsplash.

Цифровое золото - так называют Биткоин из-за его редкости. Он служит не столько как средство платежа, а скорее для хранения ценностей. Тем не менее, вложения в него все еще очень рискованны, а его курс неустойчив.

Когда легендарный Сатоши Накамото создал первые 50 Биткоинов и Genesis блок 3 января 2009 года, никто в мире даже не мог догадаться, какая революция была тихо и тайно объявлена. Сегодня о Биткоине слышали почти все, но для большинства он остается непонятен. Самое интересное: в то время эти 50 Биткоинов ничего не стоили. Ни цента. Потому что покупателей на него просто не было.

Но сегодня эти 50 Биткоинов стоят примерно 400 000 долларов. А Сатоши Накамото намайнил более миллиона монет. Он миллиардер, может стать самым богатым человеком в мире через несколько лет. Однако никто не знает, кто такой Сатоши Накамото. Это также вносит свой вклад в миф о Биткоине.

Кое что особое о криптовалютах

Они функционируют как банк без центрального звена. Теоретически, любой банк или правительство могут остановить, запретить и заморозить любой платеж, который мы делаем. Но в блокчейне эта власть принадлежит не одному органу, а всем участникам. Блокчейн хранится сразу на многих компьютерах по всему миру. На bitcoin.org вы также можете скачать блокчейн Биткоина, но это не обязательно. Если оплата произведена, все компьютеры в мире ее подтвердят. Это работает автоматически, и вовлечены все участники системы. В блокчейне все полностью прозрачно и может просматриваться и отслеживаться остальными.

Никто не может запретить или украсть какие-либо платежи. Откуда Биткоин берет свою стоимость? В октябре 2019 года Биткоин стоит около 8000 долларов. Эксперты предполагают, что цена Биткоина будет расти с большими колебаниями. Многие считают возможными достижение отметки в 100 000 долларов или даже миллион долларов в течение нескольких лет.

Каждые пару лет сумма, которую компьютерная сеть получает за "майнинг" Биткоина, уменьшается вдвое. Так же, как вы делаете с авокадо, которое вы хотите съесть. Фото Kelly Sikkema на Unsplash.

Причиной таких прогнозов является так называемый коэффициент Stock-to-flow (отношение запасов к потоку). FOCUS-MONEY уже презентовали этот специальный коэффициент в выпуске 30/19. И теперь эти заявления были подкреплены Bayerische Landesbank. Эксперты внимательно изучили этот показатель и определили цель стоимости в районе 90 000 долларов на 2020 год! В ближайшее время биткойн будет стоить около 7500 долларов. Но откуда берется идея колоссального роста цены? Это связано с Халвингом Биткоина, который состоится в середине мая 2020 года.

Халвинг Биткойна: неизбежен в 2020

По той причине, что отец Биткоина Сатоши Накамото встроил в код специальную функцию, каждые четыре года количество Биткоинов, распределенных вдвое, уменьшается. За то, что люди запускают сеть Биткоина на своих компьютерах, они получают вознаграждение. В начале, как уже упоминалось, было 50 Биткоинов за блок. В среднем блок создается каждые десять минут. Через четыре года это значение сократилось вдвое до 25 Биткоинов за блок. В настоящее время мы находимся на уровне 12.5 Биткоина каждые десять минут. А после сокращения вдвое в мае 2020 года всего 6,25 Биткоина в десять минут будут появляться на рынке. Таким образом, будет создаваться все меньше и меньше новых Биткоинов. В настоящее время существует уже 18 миллионов Биткойнов. То есть 85 процентов всех Биткоинов, который будут добыты когда-либо. Потому что 21 миллион - предел. Это тоже прописано в коде. Так что если вы хотите купить еще один Биткоин, то сейчас.

Но как мне понять, является ли Биткоин дорогим или дешевым? Трэйси Майер придумал индикатор для этого: Mayer Multiple. Он делит цену Биткоина 200-дневной линией - средней ценой за последние 200 дней.


Если значение ниже 2.4, то покупка стоит своих денег. Выше 2.4 Биткоин слишком дорог. Майер выяснил это из исторических цен. В середине октября Mayer Multiple находится на отметке 0,95. Очень выгодное значение, историческое среднее - 1.39. Тот, кто хочет инвестировать в Биткоин, должен осознавать риск и держать сумму на минимуме.

Классическая покупка происходит через криптовалютные биржи, такие как Kraken, Bitfinex или Coinbase. Инвесторы открывают здесь счет, вносят деньги и затем могут покупать монеты, как на обычной фондовой бирже. После этого, рекомендуется перевод на безопасный кошелек.

Последние изменения курса Биткоина

С начала недели Биткоин демонстрировал явный рост: в полдень воскресенья самая старая и самая известная цифровая валюта стоила около 9600 долларов, примерно на пять процентов больше, чем в субботу вечером. До прошлой среды Биткоин все еще явно испытывал давление - на Bitstamp курс упал до 7293 долларов до самых низких значений с мая. Тем временем, прогноз пролегает едва касаясь 9200 долларов.

Китай превозносит технологий блокчейн

Некоторые эксперты по Биткоину, такие как Тимо Эмден из Emden Research, видят позитивные заявления председателя КНР Си Цзиньпина о важности технологии blockchain и технологии, на которой основан биткойн, как причину смены настроения. Это может породить надежду на то, что криптовалюты вскоре снова получат поддержку, следуя встречному ветру новых правил последних лет.

По словам Эмдена, сильный рост в пятницу вечером можно отнести к так называемому «короткому сжатию». Есть многочисленные основания полагать, что большое количество продавцов «коротких» позиций, которые хотели заработать на падающих ценах, были вынуждены закрыть свои собственные позиции из-за восходящего импульса.

Участники рынка объяснили дно нескольких месяцев в последнюю среду слушанием босса Facebook Марка Цукерберга перед Комитетом американского Конгресса. Слушание касалось цифровой валюты Libra, запланированной Facebook. Проект привлекает сильную критику со стороны политиков, регуляторов и центральных банков. Некоторые важные сторонники, такие как платежный сервис Paypal, тем временем оказали поддержку.

Рекордный максимум в 20 000 долларов все еще далеко

Сам Биткоин известен своими курсовыми проделками — это исключает цифровую валюту из списка средств платежа в глазах критиков. Только в этом году обменный курс колебался между чуть более 3000 долларов в начале года и почти 14 000 долларов в июне. Резкий рост в июне напоминал осень 2017 года, когда Биткоин пересекал отметки в тысячу долларов одну за другой и поднялся с 2000 до 20 000 долларов в течение нескольких месяцев.

Несмотря на недавнее восстановление цен, криптовалюты далеки от стоимостей, которые они имели в конце 2017 и начале 2018 года. В то время общая стоимость всех криптовалют временно поднялась выше отметки в 800 миллиардов долларов. В субботу днем рыночная капитализация 3047 цифровых валют, зафиксированных на платформе CoinMarketCap, составляла чуть менее 250 миллиардов долларов — из которых только Биткоин составляет около 170 миллиардов долларов.

Вывод

Биткоин и Эфириум по-прежнему являются хорошим вариантом для инвестиций. «Рынок быков» последних лет только подтверждает это, и хотя мы сейчас находимся в боковом тренде, есть много признаков того, что скоро будет достигнут новый рекордный максимум. Но прежде чем инвестировать, пожалуйста, всегда делайте свои собственные исследования и не просто бросайтесь в поток, поддавшись шумихе, как все в 2017 году. Думайте о своих решениях и извлекайте из них прибыль.

Ваш Cryptocurrency Consultant.
9  Local / Oбcyждeниe Bitcoin / Почему Биткоин не потерпит крах on: December 04, 2019, 09:21:48 AM
Перевод статьи:
https://medium.com/swlh/why-bitcoin-is-not-failing-39e10eef1be1

Почему Биткойн Не Потерпит Крах

Недавние колебания курса Биткойна привели к появлению негативных заголовков некоторых изданий с типичными  для такой ситуации предположениями. Так Питер Шифф полагает, что Биткойн совершает «прощальный круг почета», а Нуриэль Рубини, авторитетный профессор, выбрал блокчейн (систему, которую он считает мошеннической и которая по его мнению несомненно потерпит крах) в качестве предмета своего закрепленного поста в Twitter.

Наблюдаемое у некоторых желание, чтобы технология потерпела крах, можно назвать странным и граничащим с безумием. Это не аналитика, они пишут, как если бы их мнения могли повлиять на смысл признанной идеи, оказать эффект на механизм Биткойна, и будто бы они сами могут привести его к провалу своим сфокусированным сознанием и убогой испорченной репутацией.

На самом деле, предложение ценности Биткойна ни для кого не является секретом. Если эти утверждения верны, то Биткойн имеет ценность, будет продолжать иметь ценность и может быть источником ценности для новой, децентрализованной глобальной финансовой системы.

Предложение ценности Биткойна содержит 3 ключевых элемента:

   1. Философия Денежной Ценности Ника Сабо (Nick Szabo’s Philosophy of Monetary Value);
   2. Система Доказательства Работы Адама Бэка (Adam Back’s HashCash Proof of Work);
   3. Биткойн Протокол Сатоши Накамото (Satoshi Nakamoto’s Bitcoin Protocol).

Философия Денежной Ценности Ника Сабо (Nick Szabo’s Philosophy of Monetary Value)

Эта идея утверждает, что понятие денежной ценности существует, и Сатоши Накамото понимает его достаточно хорошо, чтобы воспроизвести в цифровом виде. По мнению этих авторов, это самый революционный аспект биткойна, и все же его часто упускают из виду.



Ник Сабо утверждает это в части своего «Bit-Gold» так буднично, что это можно и не заметить: а именно -

"Драгоценные металлы и предметы коллекционирования имеют неподдельный дефицит из-за дороговизны их создания. Это когда-то обеспечивало деньгам ценность, независимую от какой-либо пользующейся доверием третьей стороны. Однако у драгоценных металлов есть проблемы: слишком дорого проверять их при повседневных транзакциях. Таким образом, пользующаяся доверием третья сторона (как правило это был сборщик налогов, который принимал монеты в качестве оплаты) была призвана проштамповывать норму содержания металла в монете… и что еще хуже, вы не можете платить металом онлайн.

Таким образом, было бы очень хорошо, если бы существовал протокол, по которому неподдельно ценные биты могли бы создаваться онлайн с минимальной зависимостью от пользующихся доверием третьих сторон, а затем надежно храниться, передаваться и анализироваться с таким же минимумом подтверждения. Биты золота."


Он подробно обсуждал это в другом месте - «Ник совершил значительный вклад в понимание денег и денежной ценности».

Его случайное признание собственной, теперь поразительно правильной, концепции того, что составляет денежную ценность, - вот почему мы считаем, что он с большой долей вероятности и является Сатоши Накамото. Чтоб вы понимали, эта философия, исключая провал Биткойна, отражает более глубокое понимание сущности денег, чем “Worlds Greatest Investor" Уоррена Баффета, Нуриэль Рубини, СЕО компании Citadel Кен Гриффен, лауреат Нобелевской премии и профессор экономики в Йеле Роберт Шиллер, Билл Харрис из Intuit и Paypal, СЕО JP Morgan & Co и легенда Institutional Banking Джейми Даймон, и, конечно же, список продолжается высокоинтеллектуальными экспертами в области финансов, экономики, политики и банковского дела.

Система Доказательства Работы Адама Бэка (Adam Back’s HashCash Proof of Work)

Вторая часть - это возможность представить эту философию денежной ценности в цифровом мире.



Идея неподдельно ценных битов Ника Сабо, которые в конце концов оказались в Биткойне, была вдохновлена документом Адама Бэка «Hashcash - контрмера DoS-атаки» (Hashcash - A Denial of Service Counter-Measure).

Адам Бэк создал концепцию Доказательства Работы (Proof of Work) так, чтобы сделать ее стоимость равной просто стоимости использования интернета (как при спам рассылке). Основным принципом этой концепции является простая в проверке, но дорогостоящая в вычислении функция. Используя криптографические алгоритмы, Биткойн создает неподдельно ценные биты в построении блокчейна, которые затем легко и дешево верифицировать при проверке блокчейна. При этом он воспроизводит философию денежной ценности цифровым методом.

Bitcoin Whitepaper Сатоши Накамото

Третья часть состоит в том, чтобы превратить цифровое представление теории денежной ценности в рабочую систему.



Это было достижением Сатоши Накамото, который создал систему Биткойна в техническом документе (Bitcoin Whitepaper). Это открытая система — она не пытается обеспечить жесткую всеобъемлющую структуру для прогнозирования поведения человека. Скорее она остается открытой для неудачи, но стимулирует поведение, которое способствует успешному функционированию системы. Это противоречит типичному отношению к риску - большему надзору, большему управлению и большему вмешательству. Построение открытой системы предполагает, что чрезмерно жесткая структура в конечном итоге должна сломаться.

Это теория игр / финансовые поведенческие идеи

"(Хороший / плохой актер) должен найти более выгодным играть по правилам, таким правилам, которые благоприятствуют ему с большим количеством новых монет, чем все остальные (правила) вместе взятые, чем подрывать систему и законность его собственного богатства."

Также на что стоит обратить внимание, это пункт 11. Выводы в Bitcoin Whitepaper

По нашему мнению, предложение ценности Биткойна зависит от идеи, цифрового воплощения идеи и ее исполнения, и с этим чем дальше, тем лучше.
Однако риск, который волнует людей о протоколе Биткойна, не является показателем ни одного из этих трех элементов. Они делают выводы о Биткойне, ищущем свою цену на рынке, как о принятом или отвергнутом рынком. Разве это разумно?

Возникает вопрос: Является ли открытый рынок Биткойнов - децентрализованный рынок плотно удерживаемого актива, который вспыхнул в теоретическом использовании задолго до того, как получил практическое применение, - угрозой для жизнеспособности проекта?



После достижения пика рыночной капитализации почти в 420 миллиардов долларов США на рознично - раздутой параболе конца 2017 года, актив потерял порядка 84% своей стоимости и был многими назван “мертвым” в период, известный как “Крипто-Зима”. Итак, весна закончилась в 2019 году, и цена актива снова поднялась по другой красивой параболе, на этот раз в меньшей степени.
 
Но Биткойн был «взлетом и падением» с первого дня, сначала существуя как скромное предложение, погружая кончик своего пальца в финансовую вселенную. Идея была настолько захватывающей и мощной, что она сама себя вызвала к жизни. Каждое цветения водорослей, подобно распродаже, распространяло его все дальше и дальше в экосистему.



Не удивительно, что более высокие цены приводят к еще более высоким ценам. Это рефлексивность, естественная рыночная механика, хорошо освещенная ведущим инвестором Джорджем Соросом в его книге на эту тему. Более высокие цены - это предложение рынку новой парадигмы. Иногда рынок принимает парадигму, и цены остаются высокими. Иногда он отвергает парадигму, и новые более высокие цены отвергаются. Однако более высокие цены все равно являются предложением "более высоких цен", и они управляют движениями параболического типа по своей природе.

Рефлексивный всплеск распространяет идею, так как число вовлеченных людей увеличивается и стоимость доллара привлекает внимание более серьезных людей.

Но есть и падения, благодаря которым актив приобретает опыт. Каждый опыт падения ставит весь протокол под давление и под микроскопом, с каждой новой итерацией держателей, каждая волна, более серьезная и мотивированная, чем предыдущая, тычет, подталкивает и исследует работу протокола, чтобы проверить его на ошибку.



На самом деле, было время в районе 2015 года, когда проект выглядел уязвимым. Транзакции стали дорогими, и со стороны плохо информированного взгляда казалось, что может существовать нижняя граница цены, ниже которой проект может быть убит, где он был незащищен от окончательного закрытия. Если бы это было возможно, то стоимость уничтожения проекта была явно выше, чем угроза, которую он представлял для мировой финансовой системы, — о чем свидетельствует тот факт, что убийственный выстрел так и не был сделан или действительно предпринят. Возможно, дикари глобальных институциональных рынков пока не положили на него взгляд, или, возможно, глобальные институты уверены в себе в конкуренции с Биткойном, когда придет время.

В то же время Биткойн развивает внутреннюю ценность, когда использование актива в качестве эталонной ставки для Цифровых Активов и проектов Цифровых Активов создает естественный спрос на транзакции, что создает инерцию в механизме поиска цены. Эта транзакционная инерция увеличивается по мере увеличения использования Биткойна по не спекулятивным причинам.

Возможно, существует некое соотношение спекуляций к общему объему сделок, которое показывает живучесть протокола - возможно, вопрос в том, принимает ли во внимание теория игр Bitcoin Whitepaper Сатоши Накамото огромный вес спекулятивного рычага и его негативного давления с его рефлексивностью? Если актив может быть закрыт ниже уровня, где он становится конечным предложением, то так и будет.

Несмотря на этот риск, люди, которые могут правильно оценить актив для институционального использования и знают, что с ним делать, улучшат рыночный механизм в ближайшие пару лет.

Жизненный цикл Биткойна уже видел, как он становился многими разными вещами. Дикий успех в качестве спекулятивного актива был первоначально испытан розничными игроками, ранними шифропанками, анархистами, торговцами наркотиками в даркнете, либертарианцами и так далее. Эти люди испытали опыт роста цен на Биткойн как одобрение того, как они его рассматривали и как они смотрели на мир.

Дело не в том, что они ошибаются, а в том, что они являются мелкой рыбешкой в схеме мировых финансовых рынков. В какой-то момент рынок стал достаточно большим, чтобы привлекать мелких профессионалов, крупных профессионалов и профессиональные торговые группы, и как это происходит, люди, которые понимают финансовую систему и нюансы проблем, стоящих за ней, начинают смотреть на протокол с точки зрения профессионалов.
Pages: [1]
Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!