Bitcoin Forum
November 08, 2024, 02:21:27 AM *
News: Latest Bitcoin Core release: 28.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1] 2 3 »  All
  Print  
Author Topic: Какой язык лучше для создания блокчейна  (Read 751 times)
abakr (OP)
Sr. Member
****
Offline Offline

Activity: 1736
Merit: 254



View Profile
November 29, 2019, 09:46:45 PM
 #1

Привет. Недавно начал изучать java. Но есть сомнения, пригодится ли он когда я его досконально изучу в направлении создания криптовалют. Есть ли более перспективные в этом плане языки. Вроде немного монет на java: semux и больше не слыхал
kzv
Legendary
*
Offline Offline

Activity: 1722
Merit: 1285

OpenTrade - Open Source Cryptocurrency Exchange


View Profile WWW
November 30, 2019, 07:30:48 AM
 #2

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

OpenTrade - Open Source Cryptocurrency Exchange
A-Bolt
Legendary
*
Offline Offline

Activity: 2334
Merit: 2374


View Profile
November 30, 2019, 09:49:59 AM
 #3

Привет. Недавно начал изучать java. Но есть сомнения, пригодится ли он когда я его досконально изучу в направлении создания криптовалют. Есть ли более перспективные в этом плане языки. Вроде немного монет на java: semux и больше не слыхал

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

Bitcoin - C++
Next - Java
Ethereum - Geth - Go, Parity - Rust
Balthazar
Legendary
*
Offline Offline

Activity: 3108
Merit: 1359



View Profile
November 30, 2019, 10:13:44 AM
 #4

Любой, хоть Javascript. Лишь бы голова была на месте.
abakr (OP)
Sr. Member
****
Offline Offline

Activity: 1736
Merit: 254



View Profile
November 30, 2019, 05:09:47 PM
 #5

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

Так понимаю цпп это C++? А криптография это походу не програмирование, а матанализ или чего то похожее?
kzv
Legendary
*
Offline Offline

Activity: 1722
Merit: 1285

OpenTrade - Open Source Cryptocurrency Exchange


View Profile WWW
November 30, 2019, 07:14:29 PM
Merited by Symmetrick (1)
 #6

Так понимаю цпп это C++? А криптография это походу не програмирование, а матанализ или чего то похожее?

Все верно.
Про криптографию очень хорошая статья для начинающих: https://habr.com/ru/post/335906/

OpenTrade - Open Source Cryptocurrency Exchange
johhnyUA
Legendary
*
Offline Offline

Activity: 2436
Merit: 1849


Crypto for the Crypto Throne!


View Profile
December 02, 2019, 06:52:05 PM
 #7

Любой, хоть Javascript. Лишь бы голова была на месте.

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

.freebitcoin.       ▄▄▄█▀▀██▄▄▄
   ▄▄██████▄▄█  █▀▀█▄▄
  ███  █▀▀███████▄▄██▀
   ▀▀▀██▄▄█  ████▀▀  ▄██
▄███▄▄  ▀▀▀▀▀▀▀  ▄▄██████
██▀▀█████▄     ▄██▀█ ▀▀██
██▄▄███▀▀██   ███▀ ▄▄  ▀█
███████▄▄███ ███▄▄ ▀▀▄  █
██▀▀████████ █████  █▀▄██
 █▄▄████████ █████   ███
  ▀████  ███ ████▄▄███▀
     ▀▀████   ████▀▀
BITCOIN
DICE
EVENT
BETTING
WIN A LAMBO !

.
            ▄▄▄▄▄▄▄▄▄▄███████████▄▄▄▄▄
▄▄▄▄▄██████████████████████████████████▄▄▄▄
▀██████████████████████████████████████████████▄▄▄
▄▄████▄█████▄████████████████████████████▄█████▄████▄▄
▀████████▀▀▀████████████████████████████████▀▀▀██████████▄
  ▀▀▀████▄▄▄███████████████████████████████▄▄▄██████████
       ▀█████▀  ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀  ▀█████▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
.PLAY NOW.
Balthazar
Legendary
*
Offline Offline

Activity: 3108
Merit: 1359



View Profile
December 02, 2019, 11:17:54 PM
Last edit: December 03, 2019, 04:01:58 AM by Balthazar
 #8

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

1) Есть языки, полные по тьюрингу, и есть неполные. Если язык полон по тьюрингу, то на нем можно сделать все, что можно сделать на другом полном по тьюрингу. А блокчейн это, или ядро ОС - не имеет никакого значения совсем. Ядра ОС и драйверы к ним сочиняют и на C#, и на Java, есть даже ОС на Haskell. Зачастую это вызывает взрыв мозга у учителей информатики, вбивающих людям в голову всякий "высокоуровневый" и  "низкоуровневый" бред.

Что же до блокчейна, то подойдёт абсолютно любой язык, на котором сравнительно просто можно реализовать односвязный список или дерево. Яваскрипт входит в их число, собственно. Простейший блокчейн на Javascript реализуется за 10-15 минут. А за 20 его можно научить сохраняться на диск и реорганизовываться.

2) Никакого особого языка в клиентах Сатоши нет и не было. Обычная мешанина из разных стандартов C++ и макросов буста. Большая часть увиденного мной кода из проектов на C++, реализованных господрядчиками, выглядела именно так. То есть, довольно херово, чистой воды write-only.  Roll Eyes

Склонен считать, что это так было сделано специально, чтобы не выдать себя использованием "любимых" паттернов. Примерно так же, как некоторые намеренно пишут записки левой рукой, так и Сатоши старательно сочинял именно говно код, чтобы сравнением кода с уже опубликованными проектами нельзя было выйти на автора. Иначе просто невозможно объяснить откровенную глупость некоторых решений, несовместимую с иновационностью проекта в целом.
investgroup
Full Member
***
Offline Offline

Activity: 644
Merit: 135


View Profile
December 03, 2019, 12:47:29 AM
 #9

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

1) Есть языки, полные по тьюрингу, и есть неполные. Если язык полон по тьюрингу, то на нем можно сделать все, что можно сделать на другом полном по тьюрингу. А блокчейн это, или ядро ОС - не имеет никакого значения совсем. Ядра ОС и драйверы к ним сочиняют и на C#, и на Java, есть даже ОС на Haskell. Зачастую, это вызывает взрыв мозга у учителей информатики, вбивающих людям в голову всякий "высокоуровневый" и  "низкоуровневый" бред.

чушь порешь как обычно - а ей уже и не больно, бо уже сдохла Wink))


Для написания систем - нужен язык СИСТЕМНОГО программирования, коими до определенного момента совсем не являлись даже некоторые обычные для систем языки(теперь)...

Альтернатива - только ассемблер и квази-ассемблер, то есть говно квази-языки программирования вроде Ц и его извращений...


Жаба же даже квази-языком программирования не является - это квази-программирование Smiley))


довольно херово, чистой воды write-only.  Roll Eyes

а вот тут умная мысль Wink


Еще усвой простую мысль - что например система, написанная и работающая на том-же паскале на самом деле не написана и не работает, бо функций паскаля _СИСТЕМНЫХ_ просто не существует!

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


Назовешь хоть пару языков СИСТЕМНОГО программирования?..


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

из тебя аналитик еще хуже чем программист...

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

Кстати биткойн.pdf вполне возможно что вообще какая-нить секретарша писала - можете искать там паттерны сколько угодно, но когда поймаете она бит от байта не отличит, так что все равно никто не поверил бы даже подпишись она real name с десятком цифровых подписей...
Balthazar
Legendary
*
Offline Offline

Activity: 3108
Merit: 1359



View Profile
December 03, 2019, 12:59:26 AM
 #10

investgroup

Ваше оценочное суждение очень важно, оставайтесь на линииCheesy
kzv
Legendary
*
Offline Offline

Activity: 1722
Merit: 1285

OpenTrade - Open Source Cryptocurrency Exchange


View Profile WWW
December 03, 2019, 07:03:57 AM
 #11

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

OpenTrade - Open Source Cryptocurrency Exchange
investgroup
Full Member
***
Offline Offline

Activity: 644
Merit: 135


View Profile
December 03, 2019, 07:53:44 AM
Last edit: March 01, 2020, 07:03:37 PM by Xal0lex
 #12

Главной вопрос:  а кто использованные библиотеки поддерживает?..

И не появиться ли дырка, после того, как выйдет новая версия библиотек?..


PS  вот потому и лучше системные языки, где есть все фишки, причем _стандартизированные и переносимые_...
А так-то да - в принципе блокчейн может быть таким приметивным, что его можно написать на чем угодно - но поверьте, если ваша задача таким кривым инструментом решается, то вам лучше токен, а не блокчейн!
А отдельный блокчейн(который имел бы в наше время смысл!) потребует такие редкие функции, что половину из них все равно придеться писать с нуля, да и с системой там интеграция будет скорее всего не слабая...

investgroup

Ваше оценочное суждение очень важно, оставайтесь на линииCheesy

привет, детка, че курил в этот раз? Wink

И случайно не умеешь ли писать на спарке?..
(спорю в гугель полезешь? Wink   а тебе б надо знать это как отче наш...)


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

PPS  да кстати вот тебе вопрос как программеру на засыпку:  что будет если ваш битховен откомпилить на интел и моторолу, где байты идут в другом порядке?..   Ну и написать исходник на чем-нить "системно-независимом"(это так-же как со странами - когда от программиста уже ничего не зависет Wink)) ), чтобы не заморачиваться...  Раз - и у всех int в структурах байты местами переставились, старшенький с младшеньким...  но почему-то все работает, причем аж в 2х вариантах...
Ну, понятно, что таким блоки с моторолы не пройдут на интеле и наоборот...  Но фишка в чем?   Возникнет 2 форка!!!  Правильно?..  (Дальше сам?..)
И вопрос - заметил бы ты раскол в сети или нет?..   Ну, потом-то конечно заметят лет через несколько - а вот чтобы сразу?..
Balthazar
Legendary
*
Offline Offline

Activity: 3108
Merit: 1359



View Profile
December 03, 2019, 02:54:31 PM
 #13

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

Скриптовые языки с динамическими типами придуманы не для парсинга хекс дампов из стримов.
В "скриптовых" языках, вроде питона или того же JS, есть всё необходимое для работы с бинарными данными. А если кому-то лень собирать пакеты руками, то есть и куча библиотек с обертками. Ситуация особенно не отличается от таковой при написании аналогичного приложения на любом другом языке, включая "системные". Если человек криворукий и не знает, как работает TCP/IP, то ему не поможет ничего. Если же знает, то и на JS нормально напишет, да ещё и время сэкономит на этом.

Можно конечно и ими, не переплюетесь и переблюетесь по ходу коддинга.
Это было бы интересным пассажем, если бы не...

Code:
./internals
-rw-r--r--   1 alexi  staff  26237 Dec  1 18:25 Chain.js
-rw-r--r--   1 alexi  staff  24267 Dec  1 18:27 Context.js
-rw-r--r--   1 alexi  staff  78658 Dec  1 07:58 Node.js
./internals/database
-rw-r--r--   1 alexi  staff  29296 Nov 28 02:07 ChainDB.js
-rw-r--r--   1 alexi  staff   3816 Nov 16 10:00 NodeDB.js
./internals/primitives
-rw-r--r--   1 alexi  staff  34093 Nov 29 07:50 BlockTemplate.js
-rw-r--r--   1 alexi  staff  23793 Nov 29 06:26 Coinbase.js
-rw-r--r--   1 alexi  staff   7462 Nov 24 01:42 Filter.js
-rw-r--r--   1 alexi  staff   7478 Nov 22 15:11 Manifest.js
-rw-r--r--   1 alexi  staff   3489 Nov 22 15:11 MerkleTree.js
-rw-r--r--   1 alexi  staff    272 Nov 23 05:45 Recipients.js
-rw-r--r--   1 alexi  staff  30216 Nov 29 08:00 Snapshot.js
-rw-r--r--   1 alexi  staff   6442 Nov 22 15:11 SnapshotFactory.js
-rw-r--r--   1 alexi  staff  14533 Nov 29 07:59 SnapshotUtils.js
-rw-r--r--   1 alexi  staff   3936 Nov 10 06:38 Token.js

Ага, именно, я решил отойти от слов и провести такой эксперимент на самом себе. И больше скажу - никакой разницы с написанием аналогичного кода на C++ или C# я для себя не вижу от слова совсем. Да, для некоторых вещей приходится писать обертки. В то же время, для других не приходится. Так что плюс-минус всё то же самое, ибо главное при программировании - алгоритмы и постановка задачи, все остальное вторично. Программирование этим и отличается от "коддинга", когда некто бездумно пишет всякую херню, а потом смотрит в отладчик и удивляется.

Единственный существенный вывих мозга при работе с JS - добровольно-принудительная асинхронность, но это даже хорошо.
kzv
Legendary
*
Offline Offline

Activity: 1722
Merit: 1285

OpenTrade - Open Source Cryptocurrency Exchange


View Profile WWW
December 03, 2019, 03:54:56 PM
 #14

Если человек криворукий и не знает, как работает TCP/IP, то ему не поможет ничего. Если же знает, то и на JS нормально напишет, да ещё и время сэкономит на этом.

Точно сэкономит? Может проведем простейший эксперимент?
Напишите программу на яваскрипте, которая на вход принимает строку "02010000", а на выходе дает число 258 ?
Потом сравним с тем, как это можно сделать в с++?

OpenTrade - Open Source Cryptocurrency Exchange
Balthazar
Legendary
*
Offline Offline

Activity: 3108
Merit: 1359



View Profile
December 03, 2019, 04:31:34 PM
Merited by Symmetrick (1)
 #15

Точно сэкономит? Может проведем простейший эксперимент?
Напишите программу на яваскрипте, которая на вход принимает строку "02010000", а на выходе дает число 258 ?
Потом сравним с тем, как это можно сделать в с++?
Да легко.

Вариант 1:

Code:
const [hexBytes] = process.argv.slice(2);
console.log(Buffer.from(hexBytes, 'hex').readUInt32LE());

Code:
$ node test.js 02010000
258
$

Вариант 2:

Code:
const fs = require('fs');
const data = fs.readFileSync(0, 'utf-8');
console.log(Buffer.from(data, 'hex').readUInt32LE());

Code:
$ echo 02010000 | node test.js
258
$

При желании еще можно запилить асинхронность, потоки, фабрику объектов... В общем, вопрос фантазии.


Это я всё к чему?

Первое. Для любого случая можно придумать хитрый болт. Я могу показать какой-нибудь трехстрочный промис на JS или C#, с последующим его резолвом. А потом ухмыльнуться и предложить написать аналогичный код GWBasic. Ну несерьезно же, подобные эксперименты ничего не значат от слова совсем.   Wink

Второе. Вы исходите из предположения о том, что меньше написанного кода ведет к меньшей трате времени. Очевидно, что это предположение является в лучшем случае необоснованным. Оно верно только для случаев, когда время на реализацию некого решения ограничивается временем набора текста на клавиатуре, то есть самых тупых сценариев именно "кодинга", а не программирования.
investgroup
Full Member
***
Offline Offline

Activity: 644
Merit: 135


View Profile
December 03, 2019, 04:33:53 PM
 #16

ужоснах...  может лучше в кодах?..
kzv
Legendary
*
Offline Offline

Activity: 1722
Merit: 1285

OpenTrade - Open Source Cryptocurrency Exchange


View Profile WWW
December 03, 2019, 04:45:10 PM
 #17

Ну да, все никак не могу привыкнуть в этому Buffer в яваскрипте и к его методам ((
В принципе с байтами нормально можно работать. А для работы с битами есть что-нибудь?

OpenTrade - Open Source Cryptocurrency Exchange
johhnyUA
Legendary
*
Offline Offline

Activity: 2436
Merit: 1849


Crypto for the Crypto Throne!


View Profile
December 03, 2019, 04:47:04 PM
 #18

2) Никакого особого языка в клиентах Сатоши нет и не было. Обычная мешанина из разных стандартов C++ и макросов буста. Большая часть увиденного мной кода из проектов на C++, реализованных господрядчиками, выглядела именно так. То есть, довольно херово, чистой воды write-only.  Roll Eyes

Я о Script, если что, говорил. Сами клиенты понятное дело написаны на плюсах, Питоне и иногда на шарпе.

Но при кодинге высоким уровнем для низкого, можно дойти до того, до чего дошли ребята с ДАО, когда не понимали как на низком уровне работает функция split  Grin

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

.freebitcoin.       ▄▄▄█▀▀██▄▄▄
   ▄▄██████▄▄█  █▀▀█▄▄
  ███  █▀▀███████▄▄██▀
   ▀▀▀██▄▄█  ████▀▀  ▄██
▄███▄▄  ▀▀▀▀▀▀▀  ▄▄██████
██▀▀█████▄     ▄██▀█ ▀▀██
██▄▄███▀▀██   ███▀ ▄▄  ▀█
███████▄▄███ ███▄▄ ▀▀▄  █
██▀▀████████ █████  █▀▄██
 █▄▄████████ █████   ███
  ▀████  ███ ████▄▄███▀
     ▀▀████   ████▀▀
BITCOIN
DICE
EVENT
BETTING
WIN A LAMBO !

.
            ▄▄▄▄▄▄▄▄▄▄███████████▄▄▄▄▄
▄▄▄▄▄██████████████████████████████████▄▄▄▄
▀██████████████████████████████████████████████▄▄▄
▄▄████▄█████▄████████████████████████████▄█████▄████▄▄
▀████████▀▀▀████████████████████████████████▀▀▀██████████▄
  ▀▀▀████▄▄▄███████████████████████████████▄▄▄██████████
       ▀█████▀  ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀  ▀█████▀▀▀▀▀▀▀▀▀▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
.PLAY NOW.
Balthazar
Legendary
*
Offline Offline

Activity: 3108
Merit: 1359



View Profile
December 03, 2019, 05:20:22 PM
Merited by kzv (2)
 #19

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

В принципе с байтами нормально можно работать. А для работы с битами есть что-нибудь?
Есть обычные битовые операторы, как в C/C++. Только с ними надо осторожнее, потому что обманчивая простота JS в сочетании с битовыми операторами - это термоядерная смесь. Некоторые деятели такое пишут, что потом получается полный ахтунг.
Balthazar
Legendary
*
Offline Offline

Activity: 3108
Merit: 1359



View Profile
December 03, 2019, 05:35:48 PM
 #20

На тему "простоты" и "высокоуровневости" JS:

https://gist.github.com/CryptoManiac/1fc7c37f9e095e59532dfbc99f3ecf8e

Функция предназначена для вычисления murmurhash с длиной вывода, кратной 160 битам. Большинство яваскриптовых IDEшек ругаются на код, как на жутко не соответствующий всем нормам морали.  Grin
Pages: [1] 2 3 »  All
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!