Попробуйте запустить тесты эпох. посмотрите 200,250,300,350 и 400ю Если падение хешрейта вызвано увеличением ДАГ файла, значит это проблема у зеленых. TeamRedMiner только для красных?
|
|
|
Исправил. Текст разбиваю потому что уже имел негативный опыт. Вставил и не проверил что все отобразилось. Когда увидел, пришлось переводить и исправлять заново. Как посмотреть сколько текста отобразиться и сколько влазит в 1 пост? 17. финальная частьРуководство вероятно лучше публиковать последовательно, поэтому забрать на перевод можно в любом порядке, а публиковать только после того, как будет предыдущая готова. бронирую, через 2 недели мое Activity позволит получить новый ранг
|
|
|
Если выбирать что-то из 5700 серии, то лучше посмотреть референстные видеокарты, т.е ГПУ с турбиной. У них лучше охлаждение и турбина дольше работает. В магазинах сейчас продаются нереференстные. Asus выпустил брак https://www.asus.com/ru/Graphics-Cards/TUF-3-RX5700XT-O8G-GAMING/У этой ГПУ плохое охлаждение памяти и она греется более 100 градусов, потом сбрасывает частоты. И в магазинах эта видеокарта стоит дешевле 2х вентильных конкурентов от сапфира.
|
|
|
Перевод. Оригинальная статья: Launching HTML5 Games In The ARK Desktop Wallet — Part Five https://blog.ark.io/launching-html5-games-in-the-ark-desktop-wallet-part-five-a2cf1d32be20Запуск HTML5 игр в ARK Desktop Wallet - часть пятаяТеперь мы подошли к предпоследней части нашей серии, посвященной тому, как запускать HTML5-игры в ARK Desktop Wallet с помощью плагина ARK Core и Construct 3 . Если вы следовали за всеми предыдущими частями этой серии, вы успешно построили с нуля полностью рабочую блокчейн игру с помощью сообщений Smartbridge, сделав интеграцию лобби, для совершения ставок и пари на матч. Хотя наша игра является полностью функциональной, мы еще не реализовали никакой логики призов, кроме начального соответствия ставок. То есть, победители не получают приза, и в случае ничьей ставки не возвращаются. Тем не менее, это будет предметом сегодняшнего урока. Если вы впервые к нам присоединяетесь, обязательно ознакомьтесь с первой частью нашей серии руководств. Это руководство полностью основано на плагине ARK Core, поэтому мы не будем вносить какие-либо изменения в наш проект Construct 3 все это время. Чтобы начать, откройте файл manager.ts в любом текстовом редакторе! Реализация призовой логикиПрежде чем мы начнем, мы должны импортировать транзакции из крипто библиотеки ARK. Для этого найдите: import { Identities } from “@arkecosystem/crypto”;
Замените его на: import { Identities, Transactions } from “@arkecosystem/crypto”;// Now, we’ll examine the relevant part of our existing generateState function to see what happens when a game is won or tied:if (outcome !== “ongoing”) { break; }
Помните, что в случае ничьей значение переменной результата будет “tie”, и если кто-то выиграл, значение переменной результата будет 1 или 2, в зависимости от того, был ли победителем игрок 1 или игрок 2. В противном случае значение будет “ongoing”. Из этого фрагмента кода мы видим на данный момент, что если значение исходной переменной не “ongoing”(т. е. игра выиграна или сыграна вничью), то наш цикл заканчивается, но больше ничего не происходит. Давайте продолжим и пересмотрим этот код сейчас для включения логики, чтобы платить нашим игрокам. Поскольку код выполняется только в том случае, если игра выиграна или сыграна вничью, мы должны это проверить Если это так, мы возвращаем ставку обоим игрокам. Если нет, это означает, что игрок выиграл игру, поэтому должен получить весь приз, который является суммой обеих ставок: if (outcome !== "ongoing") { if (outcome === "tie") { this.pay(address, players, wager); } else { this.pay(address, players[outcome], wager * 2); } break; }
Конечно, мы все еще должны написать нашу функцию оплаты. В случае ничьей объект игроков (который содержит адреса обоих игроков) отправляется в нашу функцию. Когда игра выиграна, просто адрес победителя отправляется в нашу функцию в виде строки. Это означает, что наша функция оплаты будет знать, какой сценарий происходит, проверяя, являются ли переданные ей данные объектом адресов (tie) или единственной адресной строкой (win). ARK Core 2.6 представил широкий спектр полезных функций, которыми мы можем воспользоваться здесь. Первый - это nonces. Проще говоря, каждая транзакция из отправляющего кошелька должна иметь уникальное значение nonce и строго на единицу больше значения nonce самой последней транзакции, отправленной из кошелька. Мы можем использовать это, чтобы проверить значение nonce нашего игрового кошелька - если значение равно нулю, это означает, что мы еще никому не заплатили, поэтому мы должны это сделать. Если значение nonce не равно 0, мы уже заплатили за эту игру. Это предотвращает случай, когда игрокам платят несколько раз (например, когда вы перезапускаете свой плагин и состояние игры восстанавливается). Вторая особенность - это мультиплатежи. Это означает, что в случае ничьей мы можем заплатить обоим игрокам за одну транзакцию. Это помогает уберечь от перегрузки сети, и поскольку существует только одна транзакция, это означает, что существует только один nonce. Сопоставив все вместе, наша логика для функции оплаты выглядит следующим образом: 1.Если nonce кошелька не равен нулю, мы уже заплатили, поэтому мы должны выйти. 2.Мы получаем пароль для кошелька игры и его открытый ключ. 3.Если данные, переданные в функцию, представляют собой одну строку, мы генерируем стандартную транзакцию перевода на указанную сумму за вычетом комиссии за транзакцию и отправляем ее по адресу в строке. 4.Если предоставленные данные являются объектом, содержащим несколько адресов, мы генерируем транзакцию с несколькими платежами для обоих игроков с указанной суммой за вычетом комиссии за транзакцию. 5.Как только наша транзакция была сгенерирована, мы подписываем ее и транслируем в сеть. Мы можем сделать это следующим образом: private pay(sender: string, recipient: string | object, amount: number) { const wallet = app.resolvePlugin("database").walletManager.findById(sender); if (wallet.nonce.toString() !== "0") { return; } const passphrase = this.addresses[sender]; const publicKey = Identities.PublicKey.fromPassphrase(passphrase); const fee = "1000000"; const payAmount = (amount — parseInt(fee)).toString(); let transaction; if (typeof recipient === "string") { transaction = Transactions.BuilderFactory.transfer().nonce("1").senderPublicKey(publicKey).recipientId(recipient).fee(fee).amount(payAmount).vendorField("You won the game, congratulations!"); } else { transaction = Transactions.BuilderFactory.multiPayment().nonce("1").senderPublicKey(publicKey).fee(fee).vendorField("The game was tied. Here is your wager!"); transaction.addPayment(recipient[1], payAmount); transaction.addPayment(recipient[2], payAmount); } const signedTransaction = transaction.sign(passphrase).build(); app.resolvePlugin("p2p").getMonitor().broadcastTransactions([signedTransaction]); }
Следующие шагиПоздравляем, наша игра на блокчейне теперь может рассчитывать, присуждать, выплачивать призы или возвращать вступительные взносы в случае ничьей. Наша отдельная игра завершена! В заключительной части нашей серии руководств мы настроим нашу игру как плагин внутри ARK Desktop Wallet. Если вы застряли в какой-то момент, обязательно ознакомьтесь с нашими документами в центре обучения ARK. Кроме того, наша команда и разработчики активны в Slack , поэтому не стесняйтесь обращаться к нам! Проверьте предыдущие статьи из этой серии здесь: Часть первая: Как импортировать адрес кошелька ARK в ваше приложение Часть вторая: Создание бэкенда для вашего плагина Часть третья: Как заставить вашу игру работать с системой ставок Часть четвертая: Внедрение игровой логики в ваш плагин
|
|
|
Ищу крипто любителей для активности в телеграм группах! Будет еженедельная оплата в токенах торгующий на бирже ~
Каждый раз, когда ищут энтузиастов или любителей - у меня всегда возникает вопрос, может быть что-то новое будет в очередном предложении? Но здесь слово " токены" резко отпугивает Значит так, ТС. Раз вы написали свою тему на этом форуме в разделе Работа - значит самым правильным будет и свой оффер прописать в этой теме, с деталями. А то тут не особо хорошее отношение к новичкам, которые сулят позолоченные слитки, оптом - лишь бы им в телеграм написали. Таких предложений по тексту полно - и отношение к ним, как к разводу, потому что нет информации. Расскажите, может быть вы действительно отличаетесь? Хотелось бы посмеяться, но вы полностью правы на счет развода. Не советую работать с проектом, токен CRAD, если кому интересно. Я маркетолог, мне написал это парень в телеграм, я подготовила ему предложение по продвижению из которого он выбрал таргетинг (скорее всего из-за того что я тесты провожу бесплатно, заказчик оплачивает только рекламу), договорились сделать 5 тестов с бюджетом в 30$ (в общем). Сейчас самое смешное, он скинул 5$, которые мне потом пришлось вернуть, потому что он ожидал огромный поток трафика за 5$. Если вы работали с фейсбук, то знаете что 5$ это минимальный бюджет для одного теста, я растянула на 2, естественно реклама не успела "раскачаться", поэтому было всего 10 переходов. Короче, пассажир зажал деньги на один полноценный тест и потом еще пытался выяснять отношения. Я просто взяла кошелек и вернула, потому что доказывать таким людям что то бессмысленно https://blockchair.com/ethereum/transaction/0x46b2a928ee887e8855a37843c385a4b9651e279576ff5398b0c167fef64130f0Впрочем, сама виновата, что за это взялась. Надеюсь кому то сохраню время Полезный отзыв. Нужно чаще заходить в этот раздел. кликнул на ссылку, и сначала не понял зачем миллионерша с балансом 1300 кефира берет работу за 5 уе и платит комиссию 60 Gwei. https://blockchair.com/ru/ethereum/address/0xea81ce54a0afa10a027f65503bd52fba83d745b8вывод был из адреса биржи
|
|
|
На 1080 ти наблюдается снижение хешрейта у товарищей тоже. Их душат до 45 мх или переходят на другие алгоритмы, где тишка показывает хорошие результаты. С чем это связано, неизвестно, но 1080 ти с кефира уходят
|
|
|
Может жить нужно скромнее, не снимая элитные тачки с дорогой недвижимостью и не употребляь элитное порево? Если дураку на голову упадет состояние, тот его быстро спустит сам или помогут. Чтобы за вами выехали, наверно нужно сильно наследить. Криптовалюта не сильно отличается от фиатных денег и принципов финансовой безопасности.
|
|
|
Авито захламлено БУ блоками, за 3 тысячи можно купить лучше и мощнее.Схему вам никто не даст, их нет в открытом доступе.АСЦ блоки не чинят, диагностика и возврат в Китай
|
|
|
https://www.youtube.com/watch?v=Rc93MyGE0bMДВА ЧИПА У RTX 3090 новый уровень мощи. Выкидывайте свои видеокарты На видео объяснили почему у карты 1вентилятор. У RTX 3 серии будут 2 процессора: основной и сопроцессор для расчета лучей на обратной стороне платы, где и будет 2 вентилятор. майнить этот сопроцессор будет? Это только один из проектов новой СО, или новая утка для АМД Цена топовых видеокарт сейчас сопоставимы со стоимостью автомобиля. 2ХХХ линейки не очень пользуется спросом, т.к много геймеров до сего дня играют на 1080ти 11 гб. Причин для массового спроса не наблюдаю, если эти видеокарты будут окупаться в майнинге около 3х и более лет
|
|
|
Теперь добавьте еще одно дополнительное событие в событие Websocket -> On Text Message, чтобы проанализировать данные лобби. Выберите JSON, а затем Has Key. Введите «games», затем нажмите Готово. Нажмите «Добавить действие» для нашего вновь созданного дополнительного события и перейдите к «Система»> «Установить значение». Мы хотим установить для нашего объекта JSON значение JSON.get («games»). Нажмите Готово. Мы добавим еще одно дополнительное событие для Websocket -> В текстовом сообщении, чтобы сохранить сетевой символ токена. Снова выберите JSON> Has Key. Введите «symbol», выберите «Готово», нажмите «Добавить действие» и выберите «Система»> «Установить значение». Установите для Symbol значение JSON.get («Symbol»). Далее мы собираемся создать функцию для анализа данных нашего лобби. Щелкните правой кнопкой мыши пустую область и выберите «Добавить функцию». Назовите это ParseLobby. Вернитесь к нашему дополнительному событию для «games» и выберите «Добавить действие», затем «Функции»> «ParseLobby». Затем найдите наше предыдущее событие, где мы установили наш текст «Адрес действителен!» и добавьте еще одно действие к нему. Выберите «Система»> «Установить значение» и установите для переменной ValidatedAddress значение TextInput.Text. Теперь выберите «Добавить действие», затем «Функции»> «ParseLobby». Наши модифицированные события Найдите нашу функцию ParseLobby и выберите Добавить действие. Выберите Добавить сценарий. Теперь мы собираемся ввести наш код, чтобы проанализировать список лобби и заполнить наши фреймы: const games = JSON.parse(runtime.globalVars.JSON); const newGames = []; const existingGames = []; const ourGames = [];for (const address of Object.keys(games)) { const game = games[address]; if (game.players[2]) { existingGames.push({ address, game }); if (game.players[1] === runtime.globalVars.ValidatedAddress || game.players[2] === runtime.globalVars.ValidatedAddress) ourGames.push({ address, game }); } } else { newGames.push({ address, game }); } }let html = "";for (const game of newGames) { const wager = (game.game.wager / 100000000); html += "<div>New game by " + game.game.players[1] + " for " + wager + runtime.globalVars.Symbol + " (<a href='ark:" + game.address + "&amount=" + wager + "'>Join</a>)</div>"; }document.getElementById("NewIframe").contentWindow.document.body.innerHTML = html; html = "";for (const game of existingGames) { const wager = game.game.wager / 100000000; html += "<div>Game between " + game.game.players[1] + " and " + game.game.players[2] + " for " + wager + runtime.globalVars.Symbol + "</div>"; }document.getElementById("ExistingIframe").contentWindow.document.body.innerHTML = html; html = "";for (const game of ourGames) { const wager = game.game.wager / 100000000; html += "<div>Game between " + (game.game.players[1] === runtime.globalVars.ValidatedAddress ? "you" : game.game.players[1]) + " and " + (game.game.players[2] === runtime.globalVars.ValidatedAddress ? "you" : game.game.players[2]) + " for " + wager + runtime.globalVars.Symbol + "</div>"; }document.getElementById("OurIframe").contentWindow.document.body.innerHTML = html;
Вы можете спросить, что делает код? Он будет проходить через все наши игры, и если будет два игрока, то это уже существующая игра, в противном случае это новая игра, и будет показана ссылка для автоматической отправки транзакции, чтобы присоединиться к игре, используя ark: URI, про которую мы писали в последнем уроке. Если адрес совпадает с нашим, он добавит игру в третью колонку для удобства идентификации. Конечно, вы можете поиграть с HTML-кодом и добавить стили к элементам div внутри наших фреймов, чтобы сделать его по-настоящему популярным! Попробуйте - запустите наш проект Construct, запустите несколько новых игр и отправьте несколько транзакций, чтобы присоединиться к играм. Вы должны увидеть списки, заполненные адресами и ставками, и они будут меняться и обновляться автоматически, когда транзакции сохраняются в блоки и хранятся в блокчейне. Следующие шагиПоздравляем с окончанием третьего урока! Сегодня мы узнали, как анализировать блокчейн для создания лобби и сопоставления ставок, при этом данные автоматически обновляются в клиенте без обновления вручную. В следующем уроке мы будем играть с полем «smartbridge field», также известным как vendor field, чтобы реализовать пошаговую игровую логику, чтобы сделать нашу игру рабочей. Если вы застряли в какой-то момент, обязательно ознакомьтесь с нашими документами в центре обучения ARK. Кроме того, наша команда и разработчики активны в Slack , поэтому не стесняйтесь обращаться к нам!
|
|
|
Это будет проходить через все наши сгенерированные адреса и вызывать нашу еще не написанную функцию generateState для генерации их игрового состояния при первой загрузке нашего плагина. Затем найдите, где мы слушаем входящие транзакции, которые мы написали в нашем последнем уроке: emitter.on(ApplicationEvents.TransactionApplied, transaction => { if (this.addresses[transaction.recipientId]) { for (const websocket of server.clients) { // @ts-ignore if (websocket.readyState === WebSocket.OPEN && websocket.address === transaction.recipientId) { websocket.send(JSON.stringify({ transaction })); } } } });
Во-первых, в верхней строке измените транзакцию на асинхронную, чтобы наша функция была асинхронной. Затем посмотрите строку for (const websocket of server.clients) Непосредственно перед этой строкой добавьте это, чтобы восстановить состояние любого игрового адреса, который получает новую транзакцию, как только она записывается в базу данных блокчейна: while (!(await app.resolvePlugin(“database”).transactionsBusinessRepository.findById(transaction.id))) { await delay(100); }await this.generateState(transaction.recipientId);
Теперь пришло время написать эту неуловимую функцию generateState. Найдите наш блок кода, в котором мы написали функцию generateAddress, и непосредственно под этим блоком мы напишем наш новый код generateState: private async generateState(address: string) { const database = app.resolvePlugin("database"); const publicKey = Identities.PublicKey.fromPassphrase(this.addresses[address]); const transactions: any[] = await Promise.all( (await database.transactionsBusinessRepository.search({ limit: 0, walletAddress: address, publicKey })).rows.map(async transaction => ({ amount: transaction.amount, recipientId: transaction.recipientId, senderId: Identities.Address.fromPublicKey(transaction.senderPublicKey, app.getConfig().get("network.pubKeyHash")), timestamp: (await database.blocksBusinessRepository.findById(transaction.blockId)).timestamp, vendorField: transaction.vendorField ? transaction.vendorField.toString().trim().toUpperCase() : null }) )); transactions.sort((a: any, b: any) => (a.timestamp > b.timestamp) ? 1 : ((b.timestamp > a.timestamp) ? -1 : 0)); const players = { 1: null, 2: null }; let wager = 0; for (const transaction of transactions) { if (transaction.senderId !== address && transaction.amount >= 10000000) { players[1] = transaction.senderId; wager = transaction.amount; break; } } if (!players[1]) { return; } for (const transaction of transactions) { if (transaction.senderId !== address && transaction.senderId !== players[1] && transaction.amount === wager) { players[2] = transaction.senderId; break; } } this.gameStates[address] = { players, wager }; }
Это была большая работа за короткий промежуток времени, поэтому давайте разберемся с тем, что мы только что сделали. Мы передаем сгенерированный игровой адрес в эту функцию и преобразуем соответствующую парольную фразу в открытый ключ, который нам необходим для поиска всех входящих и исходящих транзакций с адреса кошелька. Мы извлекаем сумму, кошелек получателя, кошелек отправителя, отметку времени и сообщение smartbridge для каждой транзакции и сортируем их в хронологическом порядке. Затем мы перебираем транзакции от самых старых до самых новых, чтобы найти первую входящую транзакцию стоимостью не менее 1 ARK; сумма становится ставкой, а адрес игрока распределяется как игрок 1. Если соответствующий адрес не найден, игра недействительна, поэтому мы отменяем. В противном случае, мы повторяем транзакции, чтобы найти другого игрока, который соответствует ставке. Этот адрес становится игроком 2. Затем мы добавляем адреса и ставки игроков в наш объект gameStates. Передача списка игр клиентуЕсли вы сделали это, отлично! Мы завершили логику создания лобби и управления ставками. Следующим шагом является отправка наших данных через WebSocket нашему клиенту. Мы сделаем это, как только клиент подключится и когда состояние какой-либо игры изменится, поэтому наш клиент покажет самую последнюю информацию. Это займет всего несколько строк кода. Найдите: websocket.send(networkData);
Сразу после этого добавьте: websocket.send(JSON.stringify({ games: JSON.stringify(this.gameStates) })); // This will send all our game states to the client as soon as it connects.// Lastly, find: for (const websocket of server.clients) { // @ts-ignore if (websocket.readyState === WebSocket.OPEN && websocket.address === transaction.recipientId) { websocket.send(JSON.stringify({ transaction })); } }
И заменить его на: const state = JSON.stringify({ games: JSON.stringify(this.gameStates) });for (const websocket of server.clients) { if (websocket.readyState === WebSocket.OPEN) { websocket.send(state); // @ts-ignore if (websocket.address === transaction.recipientId) { websocket.send(JSON.stringify({ transaction })); } } }
Это повторно отправит наши игровые состояния всем подключенным клиентам, если какое-либо из состояний изменится, чтобы клиент синхронизировался. Мы закончили нашу работу с Core для этой части урока! Выполните сборку, чтобы собрать последнюю версию нашего плагина, а затем перезапустите Core. Фильтрация игр по их состоянию
Наш последний шаг - связать все это вместе в Construct 3 и иметь возможность фильтровать игры, чтобы отделить новые игры от существующих, и показать, в каких играх мы участвуем сами. Мы сделаем все это в Construct 3, так что запустите редактор игры, и мы можем начать. Перейдите в Layout Editor для Layout 1 и добавьте 3 новых объекта iframe. Назовите их NewIframe, ExistingIframe и OurIframe. В первом кадре будут перечислены новые игры, ожидающие соперника, во втором - все игры с соответствующими ставками, а в третьем - игры, в которых участвует наш адрес. Для каждого добавленного объекта iframe установите идентификатор, соответствующий назовите и удалите значения URL по умолчанию. Перейдите к нашему Листу событий 1 и щелкните правой кнопкой мыши пустую область нашего листа событий и выберите Добавить глобальную переменную. Назовите это «JSON», который должен быть String. Повторите это, но назовите нашу следующую глобальную переменную «ValidatedAddress». Сделайте это еще раз, но назовите нашу новую переменную «Symbol». Глобальные переменные должны выглядеть так в верхней части таблицы событий
|
|
|
Перевод. Оригинальная статья Launching HTML5 Games In The ARK Desktop Wallet — Part Three https://blog.ark.io/launching-html5-games-in-the-ark-desktop-wallet-part-three-74fc5398b96fЗапуск HTML5 игр в ARK Desktop Wallet - часть третьяДобро пожаловать в третий урок из нашей серии о запуске игры HTML5 в ARK Desktop Wallet! Эта серия предназначена для разработчиков всех уровней квалификации. Цель этой серии - преобразовать игру HTML5 в полноценный плагин для ARK Desktop Wallet. В предыдущих частях ( Первая часть и Вторая часть) мы настраивали базовый игровой клиент, используя Construct 3, который взаимодействует с нашим собственным плагином ARK Core для проверки адресов и отправки и получения транзакций в блокчейне. Теперь пришло время заставить игру работать со ставками и создать лобби для запуска игр и просмотра уже существующих! Но давайте не будем забегать вперед, реальная игровая логика появится в следующей части этой серии, поскольку мы все еще закладываем основы для взаимодействия с сетью и блокчейном. Хорошая новость заключается в том, что код, который мы написали в этих предыдущих частях, может быть повторно использован в будущих проектах, так что у вас будет прочная база для взаимодействия между вашими будущими игровыми клиентами и ARK Core, без необходимости переделывать всю работу снова. Как и в прошлый раз, мы собираемся сосредоточиться на нашем плагине ARK Core, а затем расширить наш проект Construct 3 для взаимодействия с ним. К концу этого урока мы сможем: Отслеживать все сгенерированные игровые адреса и сохраняйте их на диск, чтобы наши ставки и игры не терялись при перезапуске Core. Записать ставку и убедиться, что партнер платит правильную сумму. Передать список игр клиенту. Фильтрация игр по их состоянию, т. е. Ожидают ли они партнера, завершены, или один из участников является нашим собственным подтвержденным адресом, чтобы отличать наши собственные игры. Итак, давайте не будем тратить больше времени - откройте файл manager.ts в вашем любимом текстовом редакторе, и мы приступим к работе! Отслеживание всех сгенерированных игровых адресов для сохраненияВ нашем последнем уроке нам уже удалось сгенерировать новый ARK-адрес для приема транзакций. Возможно, вы заметили, что сгенерированные адреса хранятся только в памяти и будут потеряны при перезапуске Core, без возможности восстановить сгенерированную фразу-пароль для последующей передачи ставок, отправленных на адрес. Чтобы исправить это, мы собираемся сделать так, чтобы эти данные сохранялись, сохраняя наш список игровых адресов и парольных фраз как отдельный объект на диске. Есть разные возможности. Например, вы можете захотеть использовать базу данных, будь то PostgreSQL, MySQL, SQLite3 или другие, но мы собираемся упростить задачу и использовать уже созданную библиотеку под названием FluiDB. Мы можем просто создать новый объект FluiDB для хранения наших игровых адресов, и он будет автоматически и прозрачно загружать и сохранять данные на диск для постоянного хранения, не беспокоясь о написании беспорядочных SQL-запросов или изобретении нашей собственной структуры данных. Давайте импортируем FluiDB в наш проект, выполнив следующую команду на нашем сервере для установки библиотеки: Теперь мы импортируем связь в наш плагин, добавив следующие строки в начало нашего файла manager.ts: import delay from "delay"; import FluiDB from "fluidb";// Replace our previous implementation with FluiDB. Find: private addresses = {};// Replace it with: private addresses = new FluiDB(`${process.env.CORE_PATH_DATA}/generated-addresses`); private gameStates = {};
Мы это сделали! Теперь это автоматически сохранит все наши сгенерированные адреса и парольные фразы в файле с именем generate-address.json в нашей папке данных Core, и будет прозрачно загружать их обратно в наш объект адресов при каждом перезапуске Core. Это также импортировало другой пакет, delay, и объявило другую переменную, gameStates, в ожидании нашего следующего раздела. Записать ставку и убедиться, что наш партнер ей соответствуетДалее, нам нужно проверить все наши сгенерированные кошельки с игровыми адресами для любых входящих транзакций, чтобы записать любые ставки каждого участника. Для этого есть два подхода. Во-первых, всякий раз, когда загружается наш плагин, мы будем перебирать существующие сгенерированные игровые адреса, чтобы изначально создать состояние наших существующих игр. Во-вторых, мы добавим прослушивание событий для новых входящих транзакций, чтобы мы могли обновлять состояние существующих игр и добавлять новые по мере их появления. Для простоты мы собираемся создать функцию, которая будет перебирать все транзакции для данного кошелька, чтобы генерировать его состояние. Под состоянием мы подразумеваем адреса участников и суммы ставок, а также пошаговые данные, такие как состояние доски, хотя мы не будем переходить к пошаговым вкусностям до следующей части этой серии. Затем при запуске мы будем вызывать эту функцию для каждого из адресов, которые мы загрузили из нашего объекта FluiDB, и каждый раз, когда один из наших адресов получает новую транзакцию, мы будем восстанавливать состояние для этого адреса, чтобы убедиться, что он находится в синхронизации с тем, что хранит блокчейн. Найдите нашу строку здесь, где мы объявляем нашу функцию запуска: public start(options: any) {// Make it asynchronous by adding the async keyword, so it looks like this: public async start(options: any) {
Находим const networkData = JSON.stringify({ networkVersion: config.get(“network.pubKeyHash”) });
Меняем код const networkData = JSON.stringify({ networkVersion: config.get("network.pubKeyHash"), symbol: config.get("network.client.symbol") });//On the next line, add the following block of code: for (const address of Object.keys(this.addresses)) { this.generateState(address); }
|
|
|
Когда окупится M30S ++? если профит за минусом энергии 5 долларов в сутки?
Смотрю на сайтах AsicMinerValue и WhatToMine, там показывают, что и M30S++, и S17 имеют отрицательную доходность согласно текущей стоимости Bitcoin, равной примерно $9250. Поэтому я полагаю, что упомянутые устаревшие асики Antminer S9 могут использоваться разве что для майнинга криптовалюты Digibyte, которая тоже базируется на алгоритме SHA256 и у которой сейчас относительно низкий хешрейт сети, но более высокая цена монеты. Если вы пользуйтесь сайтами для калькуляции прибыли, то выставите правильно стоимость 1 киловатта. По умолчанию 0,1 или 0,12. При таких значениях майнинг убыточен даже на самом современном оборудовании. 0,03-0,045 это цены унас. Габариты наверное имеют самое последнее значение, если сравнивать M30S ++ и S9. В гаражах асики не ставят, соседи охренеют. Асикам нужна либо хорошая вентиляция, либо коридоры с холодным и горячим воздухом. расчет https://www.whattomine.com/asic?sha256f=true&factor%5Bsha256_hr%5D=112000.0&factor%5Bsha256_p%5D=3450.0&factor%5Bscrypt_hash_rate%5D=1100.0&factor%5Bscrypt_power%5D=1050.0&factor%5Bx11_hr%5D=336000.0&factor%5Bx11_p%5D=1800.0&factor%5Bsia_hr%5D=730.0&factor%5Bsia_p%5D=600.0&factor%5Bqk_hr%5D=56000.0&factor%5Bqk_p%5D=1600.0&factor%5Bqb_hr%5D=56000.0&factor%5Bqb_p%5D=1700.0&factor%5Bmg_hr%5D=56.0&factor%5Bmg_p%5D=700.0&factor%5Bsk_hr%5D=28.0&factor%5Bsk_p%5D=600.0&factor%5Blbry_hr%5D=210.0&factor%5Blbry_p%5D=3300.0&factor%5Bbk14_hr%5D=52000.0&factor%5Bbk14_p%5D=2200.0&factor%5Bx11g_hr%5D=7.0&factor%5Bx11g_p%5D=900.0&factor%5Bcn_hr%5D=360.0&factor%5Bcn_p%5D=720.0&factor%5Beq_hr%5D=135.0&factor%5Beq_p%5D=1420.0&factor%5Blrev2_hr%5D=13.0&factor%5Blrev2_p%5D=1100.0&factor%5Bbcd_hr%5D=185.0&factor%5Bbcd_p%5D=670.0&factor%5Bl2z_hr%5D=62.0&factor%5Bl2z_p%5D=670.0&factor%5Bphi_hr%5D=310.0&factor%5Bphi_p%5D=670.0&factor%5Bkec_hr%5D=29.0&factor%5Bkec_p%5D=430.0&factor%5Bgro_hr%5D=56.0&factor%5Bgro_p%5D=900.0&factor%5Besg_hr%5D=530.0&factor%5Besg_p%5D=170.0&factor%5Btsr_hr%5D=150.0&factor%5Btsr_p%5D=800.0&factor%5Bcost%5D=0.04&sort=Profit24&volume=0&revenue=24h&factor%5Bexchanges%5D%5B%5D=&factor%5Bexchanges%5D%5B%5D=binance&factor%5Bexchanges%5D%5B%5D=bitfinex&factor%5Bexchanges%5D%5B%5D=bitforex&factor%5Bexchanges%5D%5B%5D=bittrex&factor%5Bexchanges%5D%5B%5D=dove&factor%5Bexchanges%5D%5B%5D=exmo&factor%5Bexchanges%5D%5B%5D=gate&factor%5Bexchanges%5D%5B%5D=graviex&factor%5Bexchanges%5D%5B%5D=hitbtc&factor%5Bexchanges%5D%5B%5D=hotbit&factor%5Bexchanges%5D%5B%5D=ogre&factor%5Bexchanges%5D%5B%5D=poloniex&factor%5Bexchanges%5D%5B%5D=stex&dataset=&commit=Calculateкул ссылка, но чтобы понимали как правильно считать небольшие колебания в калькуляторе не на что не влияют
|
|
|
Если в Китае асик стоит 4121 доллар, то доставка его к нам увеличит стоимость до 4800 долларов 9 долларов в день с него профит, и 4 доллара оплатим свет. по 2,8 рубля посчитал.
Когда окупится M30S ++? если профит за минусом энергии 5 долларов в сутки?
Налоги, зарплата инженерам, проводка ..... если все это посчитать, не вижу профита, за 4800 можно собрать риги сбольшим профитом и 3х летней гарантией
|
|
|
3080? которая выйдет на рынок к концу года и будет стоить состояние. Я наоборот посмотрю что будет до конца этого года и помайню на том что есть.
кефир копает сейчас 8 милионов видеокарт примерно. если он сменит алгоритм, то топовые видюхи никогда не окупятся
Да, клин на эфире не сошелся. У меня например 2080 майнят kawpow. Я тоже не сильно расширяюсь,уже чуть осталось до края потребления по квартире в kw/h Это верно. Пока есть эфир, его копают красные. А так kawpow неплохо майнится и на АМД. Не так хорошо, возможно, но когда эфир кончится, выиграет тот, у кого свет нулевой. Я копаю эфир с зиликой в дуале. Как и все обленился и переключаться лишний раз желания нет
|
|
|
3080? которая выйдет на рынок к концу года и будет стоить состояние. Я наоборот посмотрю что будет до конца этого года и помайню на том что есть.
кефир копает сейчас 8 милионов видеокарт примерно. если он сменит алгоритм, то топовые видюхи никогда не окупятся
|
|
|
|