Skip to content

Авторизация для Net.Core

Приложение позволяет всем пользователям использовать API. API построено на GRPC. Можно использовать Grpc-Web.

Авторизация происходит посредством Bearer токена который можно создать на странице профиля.

Хосты для подключения: - Основной инстанс: - https://api.transbithub.com - https://md5ytmyud45slls4li7crl7gudybjxz7lavd3bfaapm6ytdnun3wqvyd.onion - Тестовый инстанс: - https://api.test.transbithub.com :::

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

Proto файл

Руководство по генерации клиента для Net.Core

Пример скрипта для генерации клиента TypeScrypt:

protoc -I ~/protoc/include -I Protos --plugin protoc-gen-grpc=/usr/local/bin/protoc-gen-grpc-web --js_out=import_style=commonjs:/home/pstukalov/WebstormProjects/globalbitcoinsfront/src/Protos --grpc-web_out=import_style=typescript,mode=grpcwebtext:/home/user/project/src/Protos Protos/api.proto


for f in /home/user/project/src/Protos/*.js
do
    echo '/* eslint-disable */' | cat - "${f}" > temp && mv temp "${f}"
done

Тип Decimal

Этот тип был введен для корректной передачи чисел с плавающей точкой. Он очень часто встречается в Api.

message Decimal {
  // Whole units part of the amount
  int64 units = 1;
  // Nano units of the amount (10^-9)
  // Must be same sign as units
  sfixed32 nanos = 2;
}

Вот код Net.Core для преобразования этого типа:

using System;
using Decimal = Protos.TradeApi.V1.Decimal;

namespace Shared.Protos
{
    public static class Extensions
    {
        private const decimal NanoFactor = 1_000_000_000;

        public static Decimal ToPb(this decimal value)
        {
            var units = decimal.ToInt64(value);
            var nanos = decimal.ToInt32((value - units) * NanoFactor);
            return new Decimal
            {
                Units = units,
                Nanos = nanos
            };
        }

        public static decimal FromPb(this Decimal value)
        {
            try
            {
                return value.Units + value.Nanos / NanoFactor;
            }
            catch (NullReferenceException)
            {
                return 0;
            }
        }
    }
}

Логика приложения

Объявления и торговля биткоинами.

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

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

Если что-то пошло не так, и пользователи не смогли прийти к компромиссу, любой из участников сделки может создать диспут. Диспут, это приглашение для Арбитра (служба поддержки) присоединиться к сделке и либо завершить ее, либо отменить. Если создан Диспут, пользователи уже не могут изменить статус сделки, это может сделать только Арбитр.

Также, если пользователь продающий фиатную валюту, нажимает кнопку "Я заплатил", после этого отменить сделку нельзя. Это может сделать только Арбитр, через создание Диспута.

Счета

Есть два типа счетов: - Приватные - Публичные

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

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

Цена счета может быть двух типов: - В биткоинах - В фиатной валюте

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

Если цена указана в фиатной валюте, то цена в биткоинах, будет автоматически (1 раз в 5 минут) меняться так, чтоб цена в фиатной валюте оставалась постоянной. Например, фиатная цена 100$, курс биткоина к доллару упал, значит цена в биткоинах увеличится так, что покупатель при оплате все равно заплатит эквивалент 100$, но в биткоинах.

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

Платежи по счетам

При оплате счета, создается платеж. Если происходит оплата с баланса, то платеж сразу переходит в статус "Оплачен". Если происходит оплата не с баланса, то требуется время для получения биткоинов. В это время, статус платежа "Ожидается оплата". Время, через которое платеж перейдет в состояние "Отменен", зависит от способа оплаты. На один счет, один пользователь, может иметь только один счет в статусе "Ожидается оплата". При попытке, создать второй платеж, будет возвращен уже существующий платеж. В этом случае для создания нового платежа, нужно отменить существующий. Изменение статуса платежа на "Оплачен" означает, что покупка совершена.

Возвраты средств

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