1. Главная страница » Компьютеры

Asp uid obehag bitcoin

Автор: | 16.12.2019

Bitcoin relies on cryptography to function, which is why it is sometimes called a cryptocurrency. But what role does cryptography play in Bitcoin, and why is it needed? We’ll begin with a short introduction to some necessary cryptography concepts (if they are familiar to you, you can just skip to "The Reasons Bitcoin Needs Cryptography" on page 137), and then we’ll explore the specific cryptographic methods used in Bitcoin.

If you flipped to this chapter only because you wanted to know whether the cryptography used by Bitcoin is safe, you can rest easy knowing that Bitcoin uses only tried-and-tested cryptographic techniques: All of the cryptographic methods used by Bitcoin have been widely used in the past by governments and major corporations to secure financial, medical, and other sensitive information, as well as personal identification data.

In fact, the cryptography in Bitcoin could be described as boring, simply because it relies on very conservative cryptographic algorithms. But in some fields of study, such as accounting and dentistry, boring is good; in the case of Bitcoin, conservative and well-established cryptography helps make it more secure. The interesting part is what Bitcoin does with cryptography.

Fortunately, as you’ll see, although Bitcoin cryptography may be old hat to the experts, it is still immensely fascinating to a novice!

A Brief Cryptography Overview

Historically, cryptography was used to send secret messages when necessary to protect information. Messages were systematically scrambled, or encrypted, in a way that hopefully only the recipient of the message knew how to decrypt. A well-encrypted message might be intelligible as battle plans to the intended recipient, but to anyone else it would just be a well-tossed word salad with a side order of alphabet soup. Historically, encryption and decryption were laborious tasks and were reserved only for secure clandestine communication (usually of a military or illicit romantic nature). With the advent of computers, which could do in milliseconds what used to take hours manually, cryptography is now used routinely by the masses to encrypt/decrypt very important (e.g., financial) and not-so-important (e.g., pay-per-view TV) communication. Perhaps surprisingly, the convenience and speed of computers has led to the adoption of cryptographic methods for more than just encrypting secret messages. Common examples include logging in to websites with a username and password combination and using a registration key to install software. Both use cryptographic methods, but no message encryption is involved in either case.

In addition to encrypting messages, modern cryptography is used to verify the validity of information (through cryptographic hash functions) and to prove one’s identity (through digital signatures). For example, without modern cryptography, you wouldn’t be able to distinguish between two identical websites that both claimed to belong to your bank. One might be phony and run by thieves to steal your money. But only your bank’s website can provide the correct digital signature. Before we explain how digital signatures and cryptographic hash functions work, let’s explore one-way functions, a feature that both rely on.

Читайте также:  Pillars of eternity 2 deadfire корабль диковин

One-Way Functions

One-way functions are mathematical functions that make it easy to calculate an output based on the input but difficult to do the reverse. A precise mathematical definition of what is easy or difficult doesn’t exist but depends on the complexity of the calculation and the effort required to solve it.

A typical example is called integer factorization, which asks you to write an integer as the product of only prime numbers—for example, the factors of 6 are 2 and 3, which are both prime. Given the prime factors as input, it is easy to multiply them to produce an output integer, but the reverse is not true (at least for larger numbers). Given a large integer, finding its prime factors is very difficult. The only known methods involve systematically guessing different combinations of prime factors, but the amount of time required to find the right answer increases exponentially with the number of digits. Imagine trying to multiply 2 x 7 x 7 in your head. It is not that difficult to calculate the answer of 98; however, if you were given the number 98 and were required to find its prime factors, generating 2, 2, and 7 would be more difficult. A typical laptop can factor a 60-80 digit number in less than a second, but the required time grows exponentially: To factor a 300-digit number or greater would take a modern supercomputer decades.

Another one-way function, which is a bit more complicated but is commonly used in cryptography, involves the discrete logarithm. Consider a set of integers <0, 1, 2, 3, . , n — 1> where n is a prime number and where we only use modular arithmetic with modulo n:3

hour hand on a clock once it moves past 12; instead of pointing to 13, it starts over and points to 1. However, whereas clocks start over at the number one, the common convention among mathematicians is to start over at 0. So 3 + 6 = 9, but 3 + 6 (mod 7) = 2 because after reaching 7, the next three numbers are 0, 1, and 2.

It is easy (as in, you can do it with a pocket calculator) to raise an integer, a, to the kth power to calculate the integer b:

However, the discrete logarithm, which is finding k given only a, b, and n, is difficult to calculate. The only known methods to find k are variations on trying to guess every value between 0 and n that satisfy the preceding equation. The larger the value of n, the harder it is (and the more time it will take) to calculate k.

In the early days of computers, people started applying the asymmetry in these one-way functions to build various classes of cryptographic algorithms, which is what we’ll discuss next.

Instruction — ASP .NET Bitcoin/Altcoin Package

  1. Two Versions Available (stable version 1.0.10 — iFrame payment box and version 1.2.0 RC1 — mobile friendly json payment box)
  • A. Version 1.0.10 — Stable, iFrame Payment Box, Not Mobile Friendly. Demo»

    Install package from nuget.org — https://www.nuget.org/packages/GoUrl.io/ (command "Install-Package GoUrl.io", it is package only without examples, Iframe, not mobile friendly)

    or download full package v1.0.10 with Examples from github / gourl.io directly

    B. Version 1.2.0RC1 (release candidate 1), Json Payment Box, Mobile Friendly, White Label Product. Demo»

    Download full package v1.2.0RC1 with Examples from github / zip source file

    Package uses own database with table crypto_payments (file /GoUrl/App_Data/GourlDb.mdf) for storing bitcoin/altcoin payment information (transaction ID, payment Date, user ID, order ID, etc) on your website. If you wish to move this table to your existing database, run sql query, it will create new MSSQL "crypto_payments" table in your existing database; and after configure ‘connectionStrings’ in /GoUrl/Web.config. Package default Database store in /GoUrl/App_Data folder. Example — Asp Page with All Payment Statistics

    Free Register or Login on the gourl.io, create new payment box/es and get free GoUrl Private/Public Keys (screenshot)

    Add in your _Layout line — . See example — /GoUrl/Views/Shared/_Layout.cshtml

    Create payment controller with your public/private keys, orderID, userID, etc. See controller example, ready to use with files from directory /Examples/ — /GoUrl/Controllers/GoUrl/ExamplesController.cs (screenshot)

    Edit the function Main in the file /GoUrl/GoUrlCore/NewPayment.cs to add additional actions after a payment has been received (update database records, send email to user, etc).

    You will need to place Callback URL in bitcoin/altcoin payment box (screenshot), please use: http://yoursite.com/GoUrl/Callback

    For display bitcoin/altcoin payment box in your View, you need to use Helper Cryptobox (@Html.Cryptobox(DisplayCryptoboxModel) or display Partial View Partial/_Cryptobox.

    For use examples, please add your gourl private keys to Web.config and private/public keys to several places in ExamplesController.cs.

    THAT’S IT! CRYPTOCOIN PAYMENT BOX/CAPTCHA SHOULD NOW BE WORKING ON YOUR SITE.

    MSSQL Table for package

    The package uses its own database with table crypto_payments where all bitcoin/altcoin payments made to you would be stored. You can have multiple cryptoboxes on site (such as bitcoin, dash, dogecoin, etc) and all payment information for such transactions will be stored in that one table.

    If you wish to move the table to your existing database, please run query below, it will create new crypto_payments table in your existing database; and after configure ‘connectionStrings’ in /GoUrl/Web.config.

    GoUrl Gateway Features

    Our Payment Gateway with Instant Checkout allows you to easily organise your website —

  • 100% Free Open Source on Github.com
  • No Monthly Fee, Transaction Fee from 0%
  • No >

GoUrl Bitcoin/Altcoin Payment Gateway offer a simple ASP.NET C# Package which you can easily integrate into your own ASP website in minutes.

Start accepting payments on your website, including all major cryptocoins, and start selling online in minutes. No application process.

The big benefit of Cryptocoin Payment Box is that it fully integrated on your website, no external payment pages opens (as other payment gateways offer).

Your website will receive full user payment information immediately after cryptocoin payment is made and you can process it in automatic mode.

A. Website Owner / Seller Side

You can use the following steps to sell your products on your website for cryptocoins if you wish to and can automatically convert them to USD

Знали ли вы, что у каждой биткойн-ноды есть встроенное API, которым можно пользоваться как локально, так и через Web?

А нет, стойте, начну с другой стороны.

Своя биткойн-нода – что это и зачем

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

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

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

Нода – это программа, которая запущена и работает на компьютере или сервере, и обменивается данными с такими же нодами по всему миру. Принцип работы сравним с битторентом – есть огромная база транзакций, есть программы у участников на компе. Каждая такая программа – это как филиал банка, где можно выставлять счета, оплачивать счета, переводить деньги из одного филиала в другой на тот или иной счет. На своей установленной ноде вы создаете адреса для получения денег (например 15u2exuYtMbvaDyVNYWgThFidZP7KHyjmM ), с неё же отправляете на другие адреса, можно отправлять в рамках своей ноды, что бы запутать/размазать и т.п.

Каждый раз, когда вы делаете транзакцию (перевод средств) в своей ноде, ваша нода пишет в вашу локальную копию блокчейна эти данные, подписанные вашей уникальной цифровой подписью, и эта ваша копия блокчейна синхронизируется с другими нодами, а те с другими и т.п. – и это быстрый процесс. Стоит вам перевести деньги у себя локально с одного адреса на другой, об этом узнают в течении минуты-двух на другом конце планеты. Другой вопрос, что эту сделку не посчитают окончательно завершенной, пока майнеры не добавят её в нужное кол-во блоков в свои копии блокчейна, пока эти копии тоже не синхронизируются и не разойдутся.. Но это другой вопрос.

Итак, для себя я вижу применение полезным применение ноды в двух случаях:

  1. Когда хочу иметь полный, надежный и бесконтрольный доступ к своим же средствам
  2. Когда хочу иметь надежный и быстрый платежный интерфейс

С первым пунктом всё понятно – паранойя и жажда контроля. Что насчет второго?

Нода как платежный интерфейс

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

Чужое API

И тут начинаются пляски с бубнами. Самое очевидное, на первый взгляд решение, это использование стороннего API. Многие сайты предоставляют такие решения, например вот решение от blockchain.info. Я его пользовал несколько лет назад, и вот что мне не понравилось (это было давно, сейчас ситуация могла измениться):

Проблема 1. Задержки в трансфере

Для получения платежа нужно сначала обратиться (через API) на сайт blockchain.info, получить новый адрес для получения платежа, дать адрес клиенту, клиент на этот адрес отправляет средства – это всё еще кошелек blockhain.info (далее – BI). Через какое-то время по шедулеру деньги переводятся на с кошелька, который перевел клиент, на кошель, который указал ты.. Но не сразу. В некоторых случаях BI ждет подтверждений, в некоторых ждет, когда мелкие платежи в сумме составят какую-то сумму, и только потом BI вызывает callback на твоем сайте, сообщая о том, что средства пришли.

Я сбился со счета, когда злые клиенты писали мне лично, с вопросом – я перевел бабки, уже 10 подтверждений, почему не пополнился баланс. В таких случаях, иногда пришлось клиента упрашивать подождать, иногда писать в саппорт BI, и, в особо запущенных случаях, перевод мог идти до ТРЕХ ДНЕЙ. Это многовато даже по меркам биткоина. Понятное дело, что второй раз люди не отправляли средства.

Кроме того, люди не отправляют неизвестно куда средства, дураков нет. Очень распространенный паттерн – отправить небольшую сумму, рублей на 30, проверить, пришло или нет, потом вывести её, проверить вернулось ли, сколько по факту списалось комиссии и т.п. Очевидно, если с 30 рублями такая история на несколько дней, сколько нервов потребуется при вводе/выводе крупной суммы?

Проблема 2. Технические ограничения

Для каждого пользователя я создавал свой адрес, но первая ласточка прозвучала, когда кол-во юзеров перевалило за 1000. Банально перестал работать интерфейс – в то время никто не ожидал, что кому-то может понабиться такое кол-во, и после 999 кошелька JavaScript просто падал с ошибкой на сайте.

Ладно, не беда, я продолжил получение нужных мне данных через API, и через какое-то время столкнулся с тем, что меня начали отвергать – размер моих данных, с учетом кол-ва адресов и переводов превысил допустимые для них нормы. Об этом мне сообщили и пообещали жуткие кары, после чего я переделал механизм – стал по другому генерировать, стал заново использовать адреса.. Но это не круто, когда не можешь делать так, как нужно тебе.

Проблема 3. Фатальная

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

Хочу сразу отметить, у меня нет претензий к BlockChain.Info, у них отличное и бесплатное API, для каких-то ненагруженных проектов я бы выбрал именно их.

В те дни я пробовал работу разных API, неплохое было у https://developers.xapo.com/, какой-то платный сервис обещал все, что мне было нужно, но не смог принять (и увидеть!) платеж от меня, какой-то отдавал ошибки при запросах к API и т.п. В общем на рынке было не так много интеграционных решений для проведения платежей. Не уверен, что и сейчас есть, но должны же быть.

Своё API

А теперь о своём. Биткойн нода, как я писал вначале, имеет встроенное API. Иными словами, если залезть в конфиг и выставить нужные настройки, на компе/сервере с нодой поднимется Web-сервис, на него можно отправлять запросы – создания адресов, получения денег, отправки денег, получать информацию о блокчейне, валидировать адреса и т.п. В простейшей схеме это выглядит так – у вас есть какой-то своей сервер, которым пользуются пользователи, и есть биткоин-нода, которая (в идеале) видна только вашему серверу. Ваш сервер обращается к ноде, для того, что бы удовлетворить запросы пользователей.

Давайте установим и проверим.

Установка.

Говорю сразу, для ноды важно место. Сейчас она занимает больше 200Гб и будет дальше расти, т.к. содержит весь блокчейн. Дисковое место по какой-то иронии сейчас дорогое, так что сервер дешевле брать с HDD, или вообще установить её на ноутбуке дома и пробросить порт. Я расскажу на примере установки на ноутбук, на который установлен Ubuntu Server LTS.

Отредактировать файл /etc/bitcoin/bitcoin.conf

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

Создать директорию для хранения блокчейна (200Гб на сегодня). По умолчанию будет всё падать в /home

Добавить запуск ноды в кронтаб после перезагрузки

Добавить алиас, что бы каждый раз не указывать конфиг

Для проверки выполнить

Самая полезная команда поначалу – выводит список доступных команд

С её помощью так же можно узнать как пользоваться любой из представленных команд. Например:

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

Отправлять деньги получателю

Или списку получателей (каждому свою сумму)

Что более приятно, обращаться к ноде через веб (если явно разрешить это в конфиге). Разумеется, о безопасности забывать нельзя, поэтому нужно, в идеале, работать через VPN каналы, ну, или хотя бы ограничить доступ к ноде по IP.

Запуск API

Давайте изменим конфиг и посмотрим, что получится

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

Ноду нужно перезапустить (в простейшем случае перезагрузите убунту, или убейте процесс bitcoind и запустите заново, скопировав команду из crontab)

Теперь можно проверить работу – откроем для начала в браузере

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

Если всё сделано правильно, результат будет таким:

Еще пару методов – запросим инфу о текущем состоянии блокчейна и попробуем осуществить перевод

Вывод будет выглядеть так

Вот, собственно, код:

Готово, получилось – нода работает и скрипт отправляет и получает с неё данные. Считайте, платежный шлюз или что-то такое в кармане. Из полезного еще можно упомянуть такой параметр, как walletnotify. Можете вписать его в конфиг. Вот так:

Каждый раз, когда в вашу ноду прилетает информация о транзакции (кто-то отправил вам деньги или вы отправили кому-то), будет вызываться скрипт /home/scripts/transaction.sh (его надо написать, конечно).

Этому скрипту входящим параметром будет передаваться транзакция. Что с ней делать – ваш выбор. Я использовал так – как только приходила транзакция, срабатывал скрипт, писал этот переданный хеш транзации в файл, как наиболее надежное средство. Серверный демон мониторил файл, и, если находил там свежую запись, уже переносил в базу и проверял – т.е. вызывал метод ноды, который запрашивал информацию о транзакции. Если это была входящая транзакция, и это первое её упоминание, смотрел на какой адрес она пришла, по адресу находил в базе юзера с этим платежным адресом (адреса я выдавал) и сообщала ему, что платеж поступил и ждет подтверждений.

Еще из той же серии параметр blocknotify=/home/bitcoin/blocknotify.sh %s. Каждый раз, когда обновляется информация о блоках, он вызывает скрипт и передает ему номер блока. Это удобно использовать для обновления инфы о подтверждениях. Т.е. если блок изменился, значит поработали майнеры, можно проверить что там есть по нашим транзакциям.

Более подробно о командах можно узнать тут (на английском языке)

Заключение

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *