Glazlk={"x":"-12","y":"16"}
Ilyar={"x":"-12","y":"16"}
Web3 Voice🎙
uint256,bool,map(uint32,map(uint256,bool)),(uint256,uint32),uint256,address,(int128,int128),uint128,uint128,uint128,map(uint8,cell),map(uint128,uint128),map(uint256,(address,uint32))
🟧 В конце месяца будет фриминт NFT-коллекции, часть из которых будет обеспечена реальными натуральными бриллиантами (получат уникальную полезность: владение фракцией бриллианта).
🟧 Будут проводиться раффлы, в результате которого некоторые обычные NFT приобретут редкое свойство обеспечения бриллиантом
🟧 Владельцы NFT, обеспеченные полным бриллиантом, могут посетить наше хранилище и получить свой настоящий бриллиант. (4 хранилища по всему миру).
🟧 Откуп NFT: в любой момент пользователь может продать свою NFT, обеспеченную бриллиантом самому проекту.
🟧 Листинг токена подтвержден, большую часть которого юзеры получат аирдропом в зависимости от их набранных поинтов.
Вячеслав Беленко — 1:56
— Примерно год назад была совершена атака на сеть. Может быть, это была непреднамеренная атака — там люди тестировали сеть. Сеть даже останавливалась, мы её в достаточно аварийном режиме ремонтировали. Собственно говоря, атака была возможна исходя из определённых особенностей архитектуры сети. Суть атаки заключалась в том, что был смарт-контракт, который на одно входящее сообщение посылал много исходящих самому себе. Была нагрузка в виде количества сообщений, и нагрузка постоянно росла. Операции по сборке блоков в такой ситуации никак не тарифицировались с точки зрения газа и так далее, поэтому получалось, что эта нагрузка была вектором атаки. Мы достаточно долго искали различные способы, как эту атаку разрешить. В основном были две проблемы. Одна проблема — это объём самой очереди сообщений: очередь большая, сложно с ней работать, возникают проблемы при большой нагрузке. У нас, вообще говоря, сеть должна была делиться на шарды, и это тоже добавляло определённую сложность при сборке блоков. До конца прошлого лета мы занимались техническими экспериментами. По этой причине большая часть задач, которые мы изначально планировали по роадмапу прошлого года, была отодвинута на будущее, так как возникли более срочные задачи. В принципе, Кирилл, наверное, может добавить что-то по технической части более подробно.
Кирилл Заворовский — 4:12
— Какие вещи мы там, собственно, делали? Вот Вячеслав упомянул сплит и сложности, связанные с ним. Тут надо сказать, что при сплите была проблема не только технического плана, но и в самом протоколе. Дело в том, что во время сплита нужно разделить очередь сообщений, которые находятся в шарде, которая разделяется. Проблема оказалась в том, что эта операция требует обхода всех сообщений, и соответственно, одни сообщения идут в одну группу, а другие — в другую. Как можно догадаться, если сообщений много, то эта операция долгая, и сам протокол не подразумевал какого-то разделения её на части или откладывания. Оставалось только как-то уместить эту долгую операцию разделения очереди в один блок. Когда контракт посылает сообщение самому себе, насколько бы оптимальным ни был алгоритм разделения, его не уместить в один блок. Поэтому сначала мы предприняли меры быстрого решения: был какой-то предварительный подсчёт и так далее. Это помогло. Теперь изменения в протоколе заключаются в том, что при сплите очереди не разделяются в одном блоке, а просто две шарды получают одну и ту же очередь. То есть получается, что в этой очереди часть сообщений своих, часть — общих. Когда шарда в процессе обработки этой очереди, операция разделения очереди теперь может быть разделена на несколько блоков. Таким образом, можно потратить на разделение очереди столько времени, сколько нужно, а остальную работу отложить на следующий блок. Вот такой вот подход был использован для решения этой проблемы, что касается атаки.
Александр Алексеев — 7:07
— Наверное, стоит пояснить, может, кто не знает: коллатерал — это как раз те ноды, которые эти блоки и создают. Это специфический термин, возможно, вы ещё услышите его. Да, такое решение позволило нам значительно упростить процесс. Мы разделили ту работу, которую должны были выполнять единомоментно в рамках одного блока, на несколько блоков.
Для того чтобы сделать детерминированный выпуск блоков, отказаться от лишних вещей и получить максимальную скорость, мы заменили шарды на потоки. Соответственно, количество потоков — это конфигурация, заданная на уровне всего протокола, что позволяет независимо от мощности вашего сервера одинаково выполнять входящую очередь. Причём выполнение происходит параллельно и одинаково эффективно. Мы также заменили сетевой протокол на QUIC. Фактически, это просто переписанная с нуля система, учитывающая весь предыдущий опыт и все наработки. 1:05:07
x: int128, y: int128
min=−170141183460469231731687303715884105728 max=+170141183460469231731687303715884105727
++, --, -, delete and ~) for varint and varuintvarInt -> varintvarUint -> varuintvarIntM -> varintMvarUintM -> varuintMint is alias for int257, not for int256, that's why *loadInt* functions return int257 and *storeInt* functions take int257npx everdev sold set --version 0.74.0
export PATH=~/.everdev/sold:$PATH
sold --help
{
"1": {"name": "Spy Radio", "id": "1", "propertiesId": ["1"], "probabilities": ["1000000"]},
"2": {"name": "Old VHS Tape", "id": "2", "propertiesId": ["5", "10", "6"], "probabilities": ["800000", "100000", "100000"]},
"3": {"name": "Left Footed Boot", "id": "3", "propertiesId": ["3", "4", "2"], "probabilities": ["100000", "800000", "100000"]},
"4": {"name": "Very Old Bottle of Ozou", "id": "4", "propertiesId": ["5", "8", "9"], "probabilities": ["100000", "100000", "800000"]},
"5": {"name": "Sage", "id": "5", "propertiesId": ["3", "5", "10"], "probabilities": ["50000", "150000", "800000"]},
"6": {"name": "Box of Old Photos and Medals of a Warehouse Guard", "id": "6", "propertiesId": ["3", "6", "7"], "probabilities": ["900000", "30000", "70000"]},
"7": {"name": "Wilted Four-Leaf Clover", "id": "7", "propertiesId": ["6", "9", "7"], "probabilities": ["270000", "500000", "230000"]},
"8": {"name": "Rusty Key to an Unknown Door", "id": "8", "propertiesId": ["5", "8", "9"], "probabilities": ["600000", "100000", "300000"]},
"9": {"name": "Encyclopedia Volume", "id": "9", "propertiesId": ["3", "10", "2"], "probabilities": ["350000", "600000", "50000"]},
"10": {"name": "Cryptographic Smart Card", "id": "10", "propertiesId": ["4", "5", "9"], "probabilities": ["50000", "700000", "250000"]},
"11": {"name": "Ostrich/Goose Feather Quill and Inkwell", "id": "11", "propertiesId": ["5", "2", "6"], "probabilities": ["200000", "700000", "100000"]},
"12": {"name": "Broken Alarm Clock", "id": "12", "propertiesId": ["7", "6", "5"], "probabilities": ["800000", "100000", "100000"]},
"13": {"name": "Vintage Film Camera", "id": "13", "propertiesId": ["8", "10", "5"], "probabilities": ["800000", "100000", "100000"]},
"14": {"name": "Antique Blueprints", "id": "14", "propertiesId": ["4", "10", "2"], "probabilities": ["50000", "700000", "250000"]},
"15": {"name": "Antique Hourglass", "id": "15", "propertiesId": ["4", "10", "8"], "probabilities": ["600000", "100000", "300000"]},
"16": {"name": "Calculator with Faded Buttons", "id": "16", "propertiesId": ["4", "10", "9"], "probabilities": ["100000", "500000", "400000"]},
"17": {"name": "Rare Stamps/Coin Collection", "id": "17", "propertiesId": ["5", "9", "8"], "probabilities": ["100000", "200000", "700000"]},
"18": {"name": "Deflated Soccer Ball", "id": "18", "propertiesId": ["4", "7", "2"], "probabilities": ["800000", "150000", "50000"]},
"19": {"name": "Worn-out Poker Chip", "id": "19", "propertiesId": ["9", "6", "7"], "probabilities": ["600000", "150000", "250000"]},
"20": {"name": "Gamepad", "id": "20", "propertiesId": ["4", "10", "2"], "probabilities": ["450000", "100000", "450000"]},
"21": {"name": "Memory Card", "id": "21", "propertiesId": ["3", "2", "8"], "probabilities": ["350000", "300000", "350000"]},
"22": {"name": "Lighter", "id": "22", "propertiesId": ["10", "6", "2"], "probabilities": ["800000", "100000", "100000"]},
"23": {"name": "Game Cartridge for DieLast", "id": "23", "propertiesId": ["9", "8", "6"], "probabilities": ["100000", "300000", "600000"]},
"24": {"name": "Old Gas Cylinder", "id": "24", "propertiesId": ["2", "7", "9"], "probabilities": ["350000", "300000", "350000"]},
"25": {"name": "Squashed Paint Bottle", "id": "25", "propertiesId": ["7", "2", "8"], "probabilities": ["600000", "100000", "300000"]},
"26": {"name": "Cassette Tape", "id": "26", "propertiesId": ["4", "8"], "probabilities": ["100000", "900000"]},
"27": {"name": "Geiger Counter", "id": "27", "propertiesId": ["5", "7", "9"], "probabilities": ["300000", "300000", "400000"]},
"28": {"name": "Horse Saddle", "id": "28", "propertiesId": ["3", "6", "4"], "probabilities": ["100000", "100000", "800000"]}
}{ "x": "-14", "y": "11" }, я слишком далеко, чтобы посмотреть
TvmSlice, e.g. TvmSlice s = "0189abef_";*.abi.json file there is no constructor function and no _constructorFlag field, see Deploy the contract with no constructor for more details14-bit numbers are used for function ids for private/internal functions for code optimizations instead of 32-bit (32-bit numbers are still used for onCodeUpgrade functions for back compatibility)sudo apt-get -y install build-essential cmake g++ gcc libboost-all-dev unzip libclang-dev
cargo install --tag 0.75.0 --git https://github.com/everx-labs/TVM-Solidity-Compiler.git
sold --version
sold --help
1042 — это первые 2 байта хэша 0x1042611169821174256a64a6ad8abd3787f0d5539541f2946af71952380457c0 сообщения, если представить в двоичном виде, то это 0001000001000010 🤔
1 — 📻 Spy Radio2 — 📼 Old VHS Tape3 — 👞 Left Footed Boot4 — 🍾 Very Old Bottle of Ozou5 — 🗿 Sage6 — 🧳 Box of Old Photos and Medals of a Warehouse Guard7 — 🍀 Wilted Four-Leaf Clover8 — 🔑 Rusty Key to an Unknown Door9 — 📖 Encyclopedia Volume10 — 💾 Cryptographic Smart Card11 — ✒️ Ostrich/Goose Feather Quill and Inkwell12 — ⏰ Broken Alarm Clock13 — 📷 Vintage Film Camera14 — 🗺 Antique Blueprints15 — ⌛️ Antique Hourglass16 — 🧮 Calculator with Faded Buttons17 — 💸 Rare Stamps/Coin Collection18 — ⚽️ Deflated Soccer Ball19 — 🎰 Worn-out Poker Chip
20 — 🕹 Gamepad21 — 🎴 Memory Card22 — 🔥 Lighter23 — 🌳 Game Cartridge for DieLast24 — 🛢 Old Gas Cylinder25 — 🎨 Squashed Paint Bottle26 — ➿ Cassette Tape27 — ☢️ Geiger Counter28 — 🐎 Horse Saddle
{
"1": {"name": "Spy Radio", "id": "1", "propertiesId": ["1"], "probabilities": ["1000000"]},
"2": {"name": "Old VHS Tape", "id": "2", "propertiesId": ["5", "10", "6"], "probabilities": ["800000", "100000", "100000"]},
"3": {"name": "Left Footed Boot", "id": "3", "propertiesId": ["3", "4", "2"], "probabilities": ["100000", "800000", "100000"]},
"4": {"name": "Very Old Bottle of Ozou", "id": "4", "propertiesId": ["5", "8", "9"], "probabilities": ["100000", "100000", "800000"]},
"5": {"name": "Sage", "id": "5", "propertiesId": ["3", "5", "10"], "probabilities": ["50000", "150000", "800000"]},
"6": {"name": "Box of Old Photos and Medals of a Warehouse Guard", "id": "6", "propertiesId": ["3", "6", "7"], "probabilities": ["900000", "30000", "70000"]},
"7": {"name": "Wilted Four-Leaf Clover", "id": "7", "propertiesId": ["6", "9", "7"], "probabilities": ["270000", "500000", "230000"]},
"8": {"name": "Rusty Key to an Unknown Door", "id": "8", "propertiesId": ["5", "8", "9"], "probabilities": ["600000", "100000", "300000"]},
"9": {"name": "Encyclopedia Volume", "id": "9", "propertiesId": ["3", "10", "2"], "probabilities": ["350000", "600000", "50000"]},
"10": {"name": "Cryptographic Smart Card", "id": "10", "propertiesId": ["4", "5", "9"], "probabilities": ["50000", "700000", "250000"]},
"11": {"name": "Ostrich/Goose Feather Quill and Inkwell", "id": "11", "propertiesId": ["5", "2", "6"], "probabilities": ["200000", "700000", "100000"]},
"12": {"name": "Broken Alarm Clock", "id": "12", "propertiesId": ["7", "6", "5"], "probabilities": ["800000", "100000", "100000"]},
"13": {"name": "Vintage Film Camera", "id": "13", "propertiesId": ["8", "10", "5"], "probabilities": ["800000", "100000", "100000"]},
"14": {"name": "Antique Blueprints", "id": "14", "propertiesId": ["4", "10", "2"], "probabilities": ["50000", "700000", "250000"]},
"15": {"name": "Antique Hourglass", "id": "15", "propertiesId": ["4", "10", "8"], "probabilities": ["600000", "100000", "300000"]},
"16": {"name": "Calculator with Faded Buttons", "id": "16", "propertiesId": ["4", "10", "9"], "probabilities": ["100000", "500000", "400000"]},
"17": {"name": "Rare Stamps/Coin Collection", "id": "17", "propertiesId": ["5", "9", "8"], "probabilities": ["100000", "200000", "700000"]},
"18": {"name": "Deflated Soccer Ball", "id": "18", "propertiesId": ["4", "7", "2"], "probabilities": ["800000", "150000", "50000"]},
"19": {"name": "Worn-out Poker Chip", "id": "19", "propertiesId": ["9", "6", "7"], "probabilities": ["600000", "150000", "250000"]},
"20": {"name": "Gamepad", "id": "20", "propertiesId": ["4", "10", "2"], "probabilities": ["450000", "100000", "450000"]},
"21": {"name": "Memory Card", "id": "21", "propertiesId": ["3", "2", "8"], "probabilities": ["350000", "300000", "350000"]},
"22": {"name": "Lighter", "id": "22", "propertiesId": ["10", "6", "2"], "probabilities": ["800000", "100000", "100000"]},
"23": {"name": "Game Cartridge for DieLast", "id": "23", "propertiesId": ["9", "8", "6"], "probabilities": ["100000", "300000", "600000"]},
"24": {"name": "Old Gas Cylinder", "id": "24", "propertiesId": ["2", "7", "9"], "probabilities": ["350000", "300000", "350000"]},
"25": {"name": "Squashed Paint Bottle", "id": "25", "propertiesId": ["7", "2", "8"], "probabilities": ["600000", "100000", "300000"]},
"26": {"name": "Cassette Tape", "id": "26", "propertiesId": ["4", "8"], "probabilities": ["100000", "900000"]},
"27": {"name": "Geiger Counter", "id": "27", "propertiesId": ["5", "7", "9"], "probabilities": ["300000", "300000", "400000"]},
"28": {"name": "Horse Saddle", "id": "28", "propertiesId": ["3", "6", "4"], "probabilities": ["100000", "100000", "800000"]}
}
Разработчикам ботов и мини-приложений Telegram предлагает два пути, как они могут распорядиться полученными Stars: вывести или вложить в продвижение. Обе возможности появятся «в ближайшее время». Распорядиться теми или иными Stars можно будет спустя 21 день после их получения.
Вывод Stars будет осуществляться на платформе Fragment. «Звёзды» будут конвертироваться в Toncoin, при этом за одну «Звезду» Telegram намерен давать на старте эквивалент $0,013. В условиях Telegram Bot Platform говорится, что в будущем курс может быть пересмотрен:
Как стоимость покупки «Звёзд», так и стоимость, которую Telegram присваивает им в качестве вознаграждения, могут колебаться со временем в зависимости от текущих рыночных условий, экономических соображений и других факторов. Мы не ожидаем частых изменений стоимости, присваиваемой «Звёздам», для выдачи вознаграждений, — говорится на сайте.
При реинвестировании Stars в продвижение бота или мини-приложения «Звезда» оценивается выше — $0,02. Таким образом Telegram намерен субсидировать рекламу, возвращая разработчикам уплаченную в адрес Apple и Google 30-процентную комиссию.
propertiesId? 🤔
promise_yield_create, a new host function designed to allow smart contracts to delay responses until observing another future transaction. This enhancement will provide greater flexibility in transaction sequencing, enabling more sophisticated contract interactions and workflows.// noinspection <name> line before the elementname in // noinspection <name> expression// noinspection <name> line before the elementname in // noinspection <name> expression