EOS интегрирует технологию Web Assembly для выполнения смарт-контрактов.
Сегодня Дэн Лаример опубликовал пост Web Assembly on EOS - 50,000 Transfers Per Second.
Команде разработчиков удалось достигнуть тестовой производительность в 50 000 TPS (транзакций в секунду) на один поток с использованием Web Assembly.
Для сравнения, сеть Bitcoin может обрабатывать 7 TPS. (Не тысяч, нет. Просто семь!)
А сеть VISA способна пропускать через себя более 24000 транзакций в секунду, по данным самой VISA.
Но цель разработчиков – миллионы TPS. Что может быть достигнуто за счет параллельности и горизонтальной масштабируемости. Так для современной архитектуры серверов, использующих 128 ядер, один компьютер может быть в состоянии достичь 6M TPS. Конечно, есть некоторые факторы, которые будут ограничивать производительность. Но, с надлежащим образом распараллеленными приложениями, - миллионы TPS достижимы.
Что позволит вывести платформу EOS на использование глобальных сценариев для бизнеса. Кстати, официальную тестовую сеть хотят представить уже этим летом.
Перевод статьи
Первоначальным выбором языка программирования для смарт-контрактов был скриптовый язык Wren. Несколько недель назад удалось запустить тест с пустым контрактом. Тест показал производительность около 1000 операций в секунду; это слишком медленно для нашей целевой производительности.
В результате команда разработчиков EOS отказалась от языка программирования Wren в пользу Web Assembly. Сегодня мы хотели бы обновить информацию о прогрессе и первоначальных результатах, которых мы достигли.
Общие сведения о Web Assembly
Web Assembly является новым отраслевым стандартом при поддержке Microsoft, Google и Apple. Целью настоящего стандарта является выполнение ненадежного кода c высокой производительностью в вашем браузере. Web Assembly изменяет правила игры, позволяя создавать веб-приложения с высокой производительностью, такие как редактирование видео и изображений и игры.
Web Assembly обеспечивает универсальную компиляцию, что позволяет разрабатывать приложения на любом языке программирования. В настоящее время существуют компиляторы для C, C++ и Rust. Даже ведется работа для компилирования Solidity (*язык смарт контрактов Ethereum) в Web Assembly.
Интеграция с EOS
Несколько недель назад мы написали смарт контракт гипотетической валюты на Wren. Сегодня мы покажем реальную рабочую реализацию написанную на "C" и компилируемую в Web Assembly (WASM). Затем мы использовали транзакции EOS для создания учетной записи (@simplecoin) и загрузки WASM кода в тестовый блокчейн.
На этой стадии бурного развития, всё еще находится в движении, и есть некоторые шероховатости, которые будут сглаживаться до выхода нашей официальной тест-сети общего пользования этим летом.
Тем не менее, вот пример того, как контракт выглядит в C сегодня:
typedef struct {
AccountName from;
AccountName to;
uint64_t amount;
String* memo;
} Transfer;
void Transfer_unpack( DataStream* ds, Transfer* transfer )
{
AccountName_unpack( ds, &transfer->from );
AccountName_unpack( ds, &transfer->to );
uint64_unpack( ds, &transfer->amount );
String_unpack( ds, &transfer->memo );
}
typedef struct {
uint64_t balance;
} Balance;
/** Constructor called once when code is first uploaded */
void onInit() {
static Balance initial;
static AccountName simplecoin;
AccountName_initCString( &simplecoin, "simplecoin", 10 );
initial.balance = 1000*1000;
store( &simplecoin, sizeof(AccountName), &initial, sizeof(Balance));
}
/** Message handler when Transfer message is delivered to @simplecoin */
void onApply_Transfer_simplecoin() {
static char buffer[100];
int read = readMessage( buffer, 100 ); /** load message content */
static Transfer message;
static DataStream ds;
DataStream_init( &ds, buffer, read );
Transfer_unpack( &ds, &message ); /* unpack it */
static Balance from_balance;
static Balance to_balance;
to_balance.balance = 0;
read = load( &message.from, sizeof(message.from),
&from_balance.balance, sizeof(from_balance.balance) );
assert( read == sizeof(Balance), "no existing balance" );
assert( from_balance.balance >= message.amount, "insufficient funds" );
load( &message.to, sizeof(message.to),
&to_balance.balance, sizeof(to_balance.balance) );
to_balance.balance += message.amount;
from_balance.balance -= message.amount;
if( from_balance.balance )
store( &message.from, sizeof(AccountName),
&from_balance.balance, sizeof(from_balance.balance) );
else
remove( &message.from, sizeof(AccountName) );
store( &message.to, sizeof(message.to),
&to_balance.balance, sizeof(to_balance.balance) );
}
Этот код был скомпилирован с использованием интерфейса WasmFiddle для генерации WebAssembly (WASM). Он использует несколько простых вызовов API, такие как readMessage
, load
и store
для выборки и хранения информации в блокчейне.
Данный контракт создаст 1 млн монет и распределит их на счет @simplecoin. Затем контракт позволит @simplecoin передать эти монеты на другие счета, которые в свою очередь могут передавать их другим.
Первоначальные тесты
Я создал тест, который будет загружать этот контракт, а затем создаст отдельные операции для перевода средств от @simplecoin к @init1 1000 раз.
auto start = fc::time_point::now();
for( uint32_t i = 0; i < 1000; ++i )
{
eos::chain::SignedTransaction trx;
trx.emplaceMessage("simplecoin", "simplecoin",
vector<AccountName>{"init1"}, "Transfer",
types::Transfer{"simplecoin", "init1", 1+i, "memo"} );
trx.expiration = db.head_block_time() + 100;
trx.set_reference_block(db.head_block_id());
db.push_transaction(trx);
}
auto end = fc::time_point::now();
idump(( 1000*1000000.0 / (end-start).count() ) );
Конечный результат дал около 50 000 переводов в секунду в среднем в течение многих различных запусков. Имейте в виду, что эти первые результаты и есть много вещей, которые могут повлиять на производительность в лучшую и в худшую стороны. Пока слишком рано делать выводы об окончательной производительности, но 50000 последовательных действий в секунду гораздо ближе к области, в которой мы хотим быть – Facebook, Visa и так далее.
Эта производительность была измерена на 2014 iMac с 4GHz Intel Core i7 CPU.
Сравнение с Wren
Причина, по которой Wren был медленнее, заключалась в том, что каждый раз приходилось компилировать код, и не было простого способа кэшировать скомпилированные результаты. Оказывается, скорость Wren сильно зависит от запуска программы в течение длительного периода времени по сравнению с ее начальной стоимостью запуска. Это противоположность тому, что мы хотим для платформы смартконтрактов, которая запускает много быстрых программ.
Библиотека WebAssembly, которую мы используем, компилирует Web Assembly (WASM) в собственные инструкции x86, используя библиотеку компилятора LLVM. Это позволяет WASM работать со скоростью до 80% от оригинальной скорости, что намного быстрее, чем любой интерпретируемый язык, и, конечно, быстрее, чем если оптимизация компиляции Just-in-Time (JIT) выполняется для каждого отдельного запуска.
Путь вперед
Теперь, когда мы доказали концепцию контрактов на основе WebAssembly и подтвердили, что их однопоточная производительность уже лидирует в отрасли, мы продолжим сбрасывать API, которые мы публикуем для Web Assembly, и рассмотрим возможность добавления поддержки языков и инструментов более высокого уровня, чтобы сделать разработку проще, чем писать на C.
Наши первоначальные тестовые сети будут сосредоточены на стабильности кода и API и будут выполнять контракты в рамках одного потока. Однако, дизайн архитектуры программного обеспечения EOS.IO позволит нам переключиться на многопоточное выполнение без необходимости хардфорка блокчейна. Как видно из наших первоначальных эталонных тестов, даже однопоточная реализация EOS по-прежнему является лидером в отрасли с большим запасом для современных приложений.
Будьте в курсе
Подпишитесь на нашу рассылку на https://eos.io, чтобы быть в курсе последних событий и предстоящей продажи токенов EOS.
от себя добавлю, – подписывайтесь на @alenevaa, чтобы также быть в курсе последних событий!
Круто, есть оценка когда EOS составит конкуренцию Эфиру?
Такой оценки нет! Слишком много факторов действует одновременно.
Эфир также не стоит на месте и развивается. Переход на PoS (Casper) увеличит пропускную способность сети Ethereum. Возможно, близко время когда Эфир догонит Биткойн по капитализации. И тогда может начаться массовый переток капитала инвесторов из BTC в ETH.
В любом случае, Эфир уже нашел свою нишу и продолжает ее расширять. В то время как EOS предстоит всё проходить с нуля. Да, у EOS обещает быть хорошей масштабируемость. Но что с безопасностью? Ведь позволить выполнять произвольный скомпилированный (бинарный) код, хоть и в «песочнице», потенциально создает широкий вектор атак.
Ведь даже для такого проверенного и надежного гипервизора как Xen (проект развивается с 2003 года), периодически выявляют уязвимости.
Недавние из них (XSA-213, XSA-214 и XSA-215), позволяют выйти за пределы текущего гостевого окружения. Проблему также усугубляет возможность применения стабильно работающего эксплоита, не требующего каких-то особых условий для атаки. И это только то, что публикуется. А сколько остается «за кадром»?
Что тут говорить про такую новую технологию как WebAssembly, которой всего лишь 2 года!?
Поэтому, несмотря на общее позиционирование Ethereum и EOS, как технологии смарт-контрактов, идеологии и реализации у них разные. А, следовательно, и занимаемые ниши тоже могут отличаться. И все технологии будут мирно сосуществовать!
Чтобы разрядить серьезность, EOS составит конкуренцию Эфиру тогда, когда появится сайт «EOS/ETH Flipper | Watchening EOS Flippening Happening», аналогичный этому «ETH/BTC Flipper»
@alenevaa Поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:
Награда за Количество полученных комментариев
Вы можете нажать на любой бейдж, чтобы увидеть свою страницу на Доске Почета.
Чтобы увидеть больше информации о Доске Почета, нажмите здесь
Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом
стоп
@alenevaa Поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:
Награда за количество голосов
Вы можете нажать на любой бейдж, чтобы увидеть свою страницу на Доске Почета.
Чтобы увидеть больше информации о Доске Почета, нажмите здесь
Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом
стоп
@alenevaa Поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:
Награда за количество голосов
Вы можете нажать на любой бейдж, чтобы увидеть свою страницу на Доске Почета.
Чтобы увидеть больше информации о Доске Почета, нажмите здесь
Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом
стоп
Здорово, посмотрим, что будет дальше
@alenevaa Поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:
Награда за количество полученных голосов
Вы можете нажать на любой бейдж, чтобы увидеть свою страницу на Доске Почета.
Чтобы увидеть больше информации о Доске Почета, нажмите здесь
Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом
стоп
@alenevaa Поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:
Награда за Количество комментариев
Вы можете нажать на любой бейдж, чтобы увидеть свою страницу на Доске Почета.
Чтобы увидеть больше информации о Доске Почета, нажмите здесь
Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом
стоп
@alenevaa Поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:
Награда за количество голосов
Вы можете нажать на любой бейдж, чтобы увидеть свою страницу на Доске Почета.
Чтобы увидеть больше информации о Доске Почета, нажмите здесь
Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом
стоп
Голосуя за это уведомление, вы помогаете всем пользователям Голоса. Узнайте, как здесь.
@alenevaa Поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:
Награда за количество голосов
Вы можете нажать на любой бейдж, чтобы увидеть свою страницу на Доске Почета.
Чтобы увидеть больше информации о Доске Почета, нажмите здесь
Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом
стоп
Голосуя за это уведомление, вы помогаете всем пользователям Голоса. Узнайте, как здесь.
Ваш пост поддержали следующие Инвесторы Сообщества "Добрый кит":
kot, gabrielvlad
Поэтому я тоже проголосовал за него!
Узнать подробности о сообществе можно тут:
Разрешите представиться - Кит Добрый
Правила
Инструкция по внесению Инвестиционного взноса
Вы тоже можете стать Инвестором и поддержать проект!!!
Если Вы хотите отказаться от поддержки Доброго Кита, то ответьте на этот комментарий командой "!нехочу"
@alenevaa Поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:
Награда за количество голосов
Вы можете нажать на любой бейдж, чтобы увидеть свою страницу на Доске Почета.
Чтобы увидеть больше информации о Доске Почета, нажмите здесь
Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом
стоп
Голосуя за это уведомление, вы помогаете всем пользователям Голоса. Узнайте, как здесь.