Warning error encountered during contract execution out of gas что делать

Не дошли деньги на Ethereum кошелёк. Ошибка: Warning! An error occured during contract execution. Out Of Gas ?

На чтение 2 мин
Обновлено 11.04.2021

В десктопном кошельке Ethereum адреса кошелька: один базовый, который нужен для того, чтобы кошелёк просто работал и второй адрес — который мы создаём в ручную, с ним и нужно работать.

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

Для начала давайте договоримся, первый адрес кошелька, который нужен просто, чтобы всё работало, я буду называть Базовым. А тот адрес, который мы создавали в ручную буду далее называть Контрактным.

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

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

Warning! An error occured during contract execution. Out Of Gas ?

Что переводится дословно, как:

Произошла ошибка во время выполнения контракта. Не хватило GAS?

Как оказалось, GAS, это комиссия котортая платится за переводы в сети Ethereum. Так почему же произошла такая ошибка? А потому что сервисы пытаются сэкономить — выставляют минимальную комиссию на перевод. А минимальной комиссии часто недостаточно для того, чтобы отправить деньги на Контрактный кошелёк.

Что же случилось с моими деньгами, которые мне так и не пришли? Как мне сказали, на том же форуме — деньги вернулись отправителю.

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

Какие делаем выводы:

Лучше использовать Базовый адрес кошелька в тех сервисах с которыми вы недавно знакомы, а то деньги на Контрактный могут не дойти.

Если же вы сами пытаетесь перевести Эфир и вам выдаёт эту ошибку, значит нужно увеличить комиссию за перевод.

  • #1

Всем доброго времени суток. Возникла проблема при отправке USDT со счета ERC-20, транзакция не уходит. Ошибка возникает сегодня уже не первый раз (Warning: Error encountered during contract execution [out of gas]
ERC-20 Token Transfer Error (unable to locate corresponding Transfer Event Logs), Check with sender.

Скрин прикрепил. Может кто-то сталкивался с подобным? ETH для исполнения транзакции вроде достаточно. Отправка идет с аппаратного кошелька (Ledger).

  • photo_2022-12-21 17.24.39.jpeg

    photo_2022-12-21 17.24.39.jpeg

    72,3 КБ · Просмотры: 63

  • #2

Через Ledger Live транзакция создается? лимит газа там можно задавать?

P.S. сам USDT ERC-20 в Ledger не пользовался, но судя по сообщению вроде бы очевидная проблема

  • #3

Попробовал — можно лимит газа в LL самому выставить. Попробуй в два раза увеличить

  • #4

Попробовал — можно лимит газа в LL самому выставить. Попробуй в два раза увеличить

Спасибо, это сработало. Я думал, что затраты на транзакцию регулируются прямым увеличением стоимости транзакции в ETH и ставил самую быструю, но этого оказалось недостаточно.

Непонятно только, как управлять этим лимитом (Gas) — он будет всегда по повышенному лимиту списываться? Плохо понимаю эту связь Gas и ETH.

  • #5

Непонятно только, как управлять этим лимитом (Gas) — он будет всегда по повышенному лимиту списываться? Плохо понимаю эту связь Gas и ETH.

это лучше погуглить и почитать. Есть количество газа, необходимое для транзакции (стандартно 21000) и есть текущая стоимость газа, измеряется в Gwei
текущая стоимость газа здесь:

если текущая стоимость транзакций <1 USD, не вижу смысла экономить — можно и в два раза дороже заплатить, когда-то транзакции и 20 USD стоили, вот тогда можно было задумываться и ждать когда
стоимость газа дешевле будет

cemehbl4


  • #6

Спасибо, это сработало. Я думал, что затраты на транзакцию регулируются прямым увеличением стоимости транзакции в ETH и ставил самую быструю, но этого оказалось недостаточно.

Непонятно только, как управлять этим лимитом (Gas) — он будет всегда по повышенному лимиту списываться? Плохо понимаю эту связь Gas и ETH.

Каждая функция или математическая операция в смарт контракте стоит определённого количества единиц газа. Стоимость одной единицы вы устанавливаете в гвеях. USDT — это токен, а значит, смарт-контракт. Прикол в том, что в разное время обычный трансфер усдт будет тратить разное количество единиц газа из-за измений в логике смарт контракта. Лимит нужен для того, чтобы транзакция не могла потратить больше единиц газа, чем желает пользователь, например баг в контракте может потратить безумное количество. Транзакция трансфера токена потратит столько единиц, сколько ей нужно в данный момент, не больше, поэтому лимит можно смело задирать. То есть лимит не влияет никак на конечную комиссию. Для usdt ставьте 100000 и не парьтесь. К сожалению, невозможно точно определить, сколько газа сожрет транза, это вы увидите только по факту выполнения этой самой транзакции. Какие-то кошельки прикидывают более менее правильно и накидывают лимита сверху, какие-то нет. В данном случае столкнулись два фактора — кривой леджер лайв, который очевидно хреново прикидывает лимит, и непредсказуемость комиссий в поделке Витальки

cemehbl4


  • #7

это лучше погуглить и почитать. Есть количество газа, необходимое для транзакции (стандартно 21000) и есть текущая стоимость газа, измеряется в Gwei
текущая стоимость газа здесь:

если текущая стоимость транзакций <1 USD, не вижу смысла экономить — можно и в два раза дороже заплатить, когда-то транзакции и 20 USD стоили, вот тогда можно было задумываться и ждать когда
стоимость газа дешевле будет

21000 — это только для трансфера эфира с адреса на адрес, для смарт контрактов всегда больше, чаще всего намного больше

  • #8

Каждая функция или математическая операция в смарт контракте стоит определённого количества единиц газа. Стоимость одной единицы вы устанавливаете в гвеях. USDT — это токен, а значит, смарт-контракт. Прикол в том, что в разное время обычный трансфер усдт будет тратить разное количество единиц газа из-за измений в логике смарт контракта. Лимит нужен для того, чтобы транзакция не могла потратить больше единиц газа, чем желает пользователь, например баг в контракте может потратить безумное количество. Транзакция трансфера токена потратит столько единиц, сколько ей нужно в данный момент, не больше, поэтому лимит можно смело задирать. То есть лимит не влияет никак на конечную комиссию. Для usdt ставьте 100000 и не парьтесь. К сожалению, невозможно точно определить, сколько газа сожрет транза, это вы увидите только по факту выполнения этой самой транзакции. Какие-то кошельки прикидывают более менее правильно и накидывают лимита сверху, какие-то нет. В данном случае столкнулись два фактора — кривой леджер лайв, который очевидно хреново прикидывает лимит, и непредсказуемость комиссий в поделке Витальки

Спасибо за детальные уточнения. Сейчас еще одну отправлял, тоже токены USDT. Газ поставил 75 000 (изначальный в Леджере был 39000), так pending висит уже 15 минут на момент написания, т.е. не происходит подтверждение транзакции, но и ошибки не возникает.

Последнее редактирование: 21 Дек 2022

cemehbl4


  • #9

Спасибо за детальные уточнения. Сейчас еще одну отправлял, тоже токены USDT. Газ поставил 75 000 (изначальный в Леджере был 39000), так pending висит уже 15 минут на момент написания, т.е. не происходит подтверждение транзакции, но и ошибки не возникает.

Вот скорость обработки как раз от цены газа зависит, чем больше гвей, тем приоритетнее

  • #10

А в сети TRC нет возможности отправить? Там вроде как подешевле…

cemehbl4


  • #11

А в сети TRC нет возможности отправить? Там вроде как подешевле…

Да сейчас в троне чет тоже подорожало

  • #13

Да сейчас в троне чет тоже подорожало

вчера выносил. взяли 0.6$ в тронах… вроде как не тема для выхода в окно.
з.ы. возможно я нуб, но вроде как от суммы не зависит. не?
з.з.ы. выносил TRC20.

cemehbl4


  • #14

вчера выносил. взяли 0.6$ в тронах… вроде как не тема для выхода в окно.
з.ы. возможно я нуб, но вроде как от суммы не зависит. не?
з.з.ы. выносил TRC20.

Не зависит

Hi,

I’m getting a Tx Receipt fail with the error message: Warning! Error encountered during contract execution [contract creation code storage out of gas], when trying to deploy a contract creation on Rinkeby with the script deploy-ethers.js bellow.

https://rinkeby.etherscan.io/tx/0xb06380de0996e5b90661e8fcf53bf49cf6f76eae4fc3d5cda1431769f37d17cd

But actually if I go directly on Remix, using an account with Injected Web3, the deployment of the Factory works, and also it works the deployment of child contracts using the Factory.

https://rinkeby.etherscan.io/tx/0xb4f73b2a361693159b1a009967a42947c126a48bc23c5d193933c2415a5b1430

Ps. If I change the script to deploy straight a child futureContract (but not the factory), it ideed works.

Should I set manually some override for Gas ?

Thank you for any help

++++++++++deploy-ethers.js+++++++++++

require(«../config/config.js»);
const ethers = require(«ethers»);

// ps. build/FutureContractFactory.json was generated with solc in a previous step
const compiledFactory = require(«./build/FutureContractFactory.json»);
const NETWORK = process.env.NETWORK;
const bytecode = compiledFactory.bytecode;
const abi = JSON.parse(compiledFactory.interface);

const deploy = function() {
var deployTransaction = ethers.Contract.getDeployTransaction(
«0x» + bytecode, abi
);
var provider = ethers.providers.getDefaultProvider(NETWORK);
var pk = «0x797336cf22a6171b4cb179d6a9c08e5848cbd1748563bc44ea66c506fb0aef8c»; // Only on test network
var wallet = new ethers.Wallet(pk, provider);
var sendPromise = wallet.sendTransaction(deployTransaction);
sendPromise.then(function(transaction) {
console.log(«DEPLOYED TO: «, transaction);
});
};

deploy();

++++++++++Solidity Contracts Fabric and Child+++++++++++

pragma solidity 0.4.24;

contract FutureContractFactory {
    address[] public deployedContracts;

function createFutureContract(string _title, uint _contractSize, uint _endDate) public returns (FutureContract) {
    FutureContract newContract = new FutureContract(_title, _contractSize, _endDate, msg.sender);
    deployedContracts.push(newContract);
    return newContract;
}

function getContractsAmount() public view returns (uint) {
    return deployedContracts.length;
}

}

contract FutureContract {
enum State { Created, Settled, Closed }

struct BuyOrder {
    address buyer;
    bytes32 key;
    uint contractsAmount;
    uint depositedEther; //wei
    uint margin;
    uint dealPrice; //* 100
    uint fees; //wei
}

struct SellOrder {
    address seller;
    bytes32 key;
    uint contractsAmount;
    uint depositedEther; //wei
    uint margin;
    uint dealPrice; //* 100
    uint fees; //wei
}

struct Trade {
    bytes32 key;
    bytes32 buyOrderKey;
    bytes32 sellOrderKey;
    uint sellerExitEtherAmount; //wei
    uint buyerExitEtherAmount; //wei
    State status;
}

struct ContractParams {
    address owner;
    uint endDate;
    uint contractSize; //in wei
    string title;
}

ContractParams public contractParams;
mapping(address => uint) public balance;
mapping(bytes32 => Trade) private tradesMap;
mapping(bytes32 => SellOrder) private sellOrdersMap;
mapping(bytes32 => BuyOrder) private buyOrdersMap;

modifier restricted() {
    require(msg.sender == contractParams.owner, "Only allowed to manager");
    _;
}

modifier isValid() {
    require(contractParams.endDate <= now, "Wait for expiration date");
    _;
}

constructor(string _title, uint _contractSize, uint _endDate, address manager) public {
    contractParams.owner = manager;
    contractParams.contractSize = _contractSize;
    contractParams.endDate = _endDate;
    contractParams.title = _title;
}

function createBuyOrder(
    string key,
    uint contractsAmount,
    uint margin,
    uint dealPrice
    ) payable public {

    require(msg.value >= contractsAmount * contractParams.contractSize, "Insufficient deposit");
    require(msg.sender != contractParams.owner, "Manager can not bid");
    require (now < contractParams.endDate, "End date expired");

    bytes32 keyByte = keccak256(bytes(key));
    uint fees = calculateFee(msg.value);
    createBuyOrder(keyByte, contractsAmount, margin, dealPrice, msg.value, fees);
}

function createBuyOrder(
    bytes32 key,
    uint contractsAmount,
    uint margin,
    uint dealPrice,
    uint depositedEther,
    uint fees
    ) private {

    BuyOrder memory newBuyOrder = BuyOrder({
        buyer: msg.sender,
        key: key,
        contractsAmount: contractsAmount,
        dealPrice: dealPrice,
        margin: margin,
        depositedEther: depositedEther,
        fees: fees
    });
    buyOrdersMap[key] = newBuyOrder;
    balance[contractParams.owner] += fees;
}

function getBuyOrder(string key) public view returns(address, uint, uint, uint, uint) {
    bytes32 keyByte = keccak256(bytes(key));
    return (buyOrdersMap[keyByte].buyer, buyOrdersMap[keyByte].contractsAmount, buyOrdersMap[keyByte].depositedEther, buyOrdersMap[keyByte].fees, buyOrdersMap[keyByte].dealPrice);

}

function createSellOrder(
    string key,
    uint contractsAmount,
    uint margin,
    uint dealPrice
    ) payable public {

    require(msg.value >= contractsAmount * contractParams.contractSize, "Insufficient deposit");
    require(msg.sender != contractParams.owner, "Manager can not bid");
    require (now < contractParams.endDate, "End date expired");

    bytes32 keyByte = keccak256(bytes(key));
    uint fees = calculateFee(msg.value);
    createSellOrder(keyByte, contractsAmount, margin, dealPrice, msg.value, fees);
}

function createSellOrder(
    bytes32 key,
    uint contractsAmount,
    uint margin,
    uint dealPrice,
    uint depositedEther,
    uint fees
    ) private {

    SellOrder memory newSellOrder = SellOrder({
        seller: msg.sender,
        key: key,
        contractsAmount: contractsAmount,
        dealPrice: dealPrice,
        margin: margin,
        depositedEther: depositedEther,
        fees: fees
    });
    sellOrdersMap[key] = newSellOrder;
    balance[contractParams.owner] += fees;
}

function getSellOrder(string key) public view returns(address, uint, uint, uint, uint) {
    bytes32 keyByte = keccak256(bytes(key));
    return (sellOrdersMap[keyByte].seller, sellOrdersMap[keyByte].contractsAmount, sellOrdersMap[keyByte].depositedEther, sellOrdersMap[keyByte].fees, sellOrdersMap[keyByte].dealPrice);

}

function createTrade(string tradeKey, string buyOrderKey, string sellOrderKey) restricted public  {
  bytes32 tradeByte = keccak256(bytes(tradeKey));
  bytes32 buyByte = keccak256(bytes(buyOrderKey));
  bytes32 sellByte = keccak256(bytes(sellOrderKey));
  createTrade(tradeByte, buyByte, sellByte);
}

function createTrade(bytes32 tradeKey, bytes32 buyOrderKey, bytes32 sellOrderKey) private {

    require(buyOrdersMap[buyOrderKey].depositedEther > 0, "Must have a buy order created");
    require(sellOrdersMap[sellOrderKey].depositedEther > 0, "Must have a sell order created");
    require(sellOrdersMap[sellOrderKey].dealPrice <= buyOrdersMap[buyOrderKey].dealPrice, "DealPrice does not match");
    require(sellOrdersMap[sellOrderKey].seller != buyOrdersMap[buyOrderKey].buyer, "Buyer and seller must be different");
    require (now <= contractParams.endDate, "End date expired");

    Trade memory newTrade = Trade({
        key: tradeKey,
        buyOrderKey: buyOrderKey,
        sellOrderKey: sellOrderKey,
        sellerExitEtherAmount: 1,
        buyerExitEtherAmount: 1,
        status: State.Created
    });

    tradesMap[tradeKey] = newTrade;
}

function getTrade(string key) public view returns(uint, uint, uint) {
    bytes32 keyByte = keccak256(bytes(key));
    return (
      tradesMap[keyByte].sellerExitEtherAmount,
      tradesMap[keyByte].buyerExitEtherAmount,
      uint(tradesMap[keyByte].status));
}

function getStorageVars() public view returns(uint, uint, string) {
    return (contractParams.endDate, contractParams.contractSize, contractParams.title);
}

function calculateFee(uint etherValue) private pure returns(uint) {
    return (etherValue/1000);
}

}

INSUFFICIENT_OUTPUT_AMOUNT

The transaction cannot succeed due to error: PancakeRouter: INSUFFICIENT_OUTPUT_AMOUNT. This is probably an issue with one of the tokens you are swapping.

Вы пытаетесь обменять токен, но выставили слишком низкий коэфициент проскальзивания. Сделка также может не пройти из-за низкой ликвидности..

  1. 1.

    Обновите страницу и попробуйте снова.

  2. 2.

    Попробуйте обменять меньшую сумму за раз.

  3. 3.

    Увеличьте проскальзывание:

    1. 1.

      Нажмите значок настроек на странице ликвидности.

    2. 2.

      Увеличьте проскальзывание в большую сторону и повторите попытку.

  4. 4.

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

Обычно это происходит при торговле токенами с низкой ликвидностью.

Это означает, что не хватает одного из токенов, которые вы пытаетесь обменять в Пуле Ликвидности: это, вероятно токен которым мало кто торгует.

Тем не менее, есть также шанс, что вы пытаетесь торговать мошенническим токеном, который не может быть продан. В этом случае PancakeSwap не может заблокировать токен или вернуть средства.

INSUFFICIENT_A_AMOUNT or INSUFFICIENT_B_AMOUNT

Fail with error ‘PancakeRouter: INSUFFICIENT_A_AMOUNT’
or
Fail with error ‘PancakeRouter: INSUFFICIENT_B_AMOUNT’

Вы пытаетесь добавить/убрать ликвидность из пула ликвидности (LP), но вам не хватает одного из двух токенов в паре.

Обновите страницу и попробуйте снова

  1. 1.

    Нажмите значок настроек на странице ликвидности.

  2. 2.

    Увеличьте проскальзывание в большую сторону и повторите попытку.

Причиной ошибки является попытка добавить/убрать ликвидность из пула ликвидности (LP), но не хватает одного из двух токенов в паре token A или token B

Возможно, что цены изменяются слишком быстро, а допуск на проскальзывание слишком мал.

Хорошо, значит, ты действительно полон решимости что-то исправить. Мы не советуем делать это, если ты не знаешь, что делаешь.

В настоящее время нет простого способа решить этот вопрос с сайта PancakeSwap: вам нужно будет напрямую взаимодействовать с контрактом. Вы можете добавлять ликвидность непосредственно через контракт Рутера, устанавливая при этом сумму в размере небольшого объема, а затем снимать всю ликвидность.

  1. 1.

    Нажмите Write Contract, потом Connect to Web3 и подключите кошелек.

  2. 2.

    В секции «1. approve», подтвердите LP токен рутеру вводя следующее

    1. 1.

      spender (address): введите адрес контракта LP токена с которым вы пытаетесь взаимодействовать

  1. 1.

    Выберите пункт Read Contract.

  2. 2.

    строка 5. balanceOf, введите адрес своего кошелька и нажмите Query.

  3. 3.

    Запомните число, которое экспортируется. Оно показывает ваш баланс в пределах LP в формате uint256, которое понадобится в следующем шаге.

Добавить или извлечь Ликвидность

  1. 1.

    Выберите Write Contract и Connect to Web3 как было описано выше.

  2. 2.

    Найдите addLiquidity или removeLiquidity (что бы вы ни пытались сделать)

  3. 3.

    Введите адреса обоих токенов LP.

  4. 4.

    В liquidity (uint256), введите uint256 который вы получили в «balanceOf» ранее.

  5. 5.

    Установите amountAMin или amountBMin: «1» должно получится.

  6. 6.

    Добавьте адрес вашего кошелька в to (address).

  7. 7.

    Крайний срок (deadline) должен быть epoch (Unix-время) больше чем время исполнении транзакции.

Это может привести к очень высокому проскальзыванию, и может привести к потере пользователем средств, в случае фронтрана ботом.

The transaction cannot succeed due to error: PancakeRouter: EXPIRED. This is probably an issue with one of the tokens you are swapping.

Попробуйте еще раз, но при этом подтвердите (подпишите и отправьте в сеть) транзакцию как только её сгенерируете.

Подобное может случиться, если вы начали сделку, но не закончили её вовремя. Постарайтесь сразу нажать кнопку «Confirm».

The transaction cannot succeed due to error: Pancake: K. This is probably an issue with one of the tokens you are swapping.

Обновите страницу и попробуйте снова. Увеличьте коэфициент проскальзывания.

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

BEP20: burn amount exceeds balance

Fail with error ‘BEP20: burn amount exceeds balance’

Вам не хватает токенов SYRUP для снятия CAKE из пула.

Количество токенов SYRUP на вашем балансе должно соответствовать количеству CAKE в пуле.

  1. 1.

    Купить SYRUP на бирже. Если вы хотите снять 100 CAKE, вам необходимо 100 SYRUP.

Если первый пункт не получился, вы можете выполнить “emergencyWithdraw” напрямую с контрактом чтоб получить токены что были использованы.

  1. 2.

    Нажмите “Connect to Web3” и подключите кошелёк.

  2. 3.

    Секция “4. emergencyWithdraw”, введите «0» нажмите “Write”.

Это снимет ваши токены и вы потеряете не собранные CAKE.

Это потеряет любой доход, который вы еще не собрали.

Чтобы это больше не повторилось, не продавай свои SYRUP. Тебе он нужен чтобы снять саке из “Stake CAKE Earn CAKE” пула.

Эта ошибка произошла из-за того, что вы продали или отправили токены SYRUP. SYRUP печатается в соотношении 1:1 к CAKE, когда вы делаете вклад в пул CAKE-CAKE. SYRUP должен быть сожжен в соотношении 1:1 к CAKE при запросе функции leaveStaking (снятие из пула CAKE), так что если тебе не хватает, ты не можешь выйти из пула.

Warning! Error encountered during contract execution [out of gas]

Вы установили слишкий низкий лимит газа для проведения сделки.

Попробуйте вручную увеличить gas limit (не трогайте gas price (gwei)!) в вашем кошельке перед тем, как подписать транзакцию.

Лимита в 200000 почти всегда достаточно.

Пример выше из Metamask; Если вы не уверены, как настроить лимит газа, то проверьте документацию кошелька, которым вы пользуетесь.

Все просто, твой кошелек (Metamask, Trust Wallet и т.д.) не может завершить то, что он пытается сделать.

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

BEP20: transfer amount exceeds balance

Fail with error ‘BEP20: transfer amount exceeds balance’

Вы пытаетесь выйти из SYRUP пула с низким вознаграждением (не хватает наград).

Чтобы получить свои токены, выполните “emergencyWithdraw” напрямую с адресом контракта.

  1. 1.

    Найдите адрес контракта пула, от которого вы пытаетесь выйти. Вы можете найти его в журнале транзакций вашего кошелька..

  2. 4.

    Нажмите “Connect to Web3” и подключите кошелек.

  3. 5.

    Открыв секцию “4. emergencyWithdraw”, введите «0» и нажмите “Write”.

Это действие снимет токен САКЕ, но не соберет награду.

Это потеряет любой доход, который вы еще не собрали.

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

Понравилась статья? Поделить с друзьями:
  • Warning error encountered during contract execution out of gas ledger
  • Warning error creating lldb target at path
  • Warning error compiling scripts try to disable казаки 3
  • Warning division by zero in как исправить
  • Warning detected opengl error invalid enumerant at after renderbin draw