Author

Topic: Смарт контракт, нужен совет (Read 198 times)

jr. member
Activity: 39
Merit: 1
а зачем вы вообще его пишите? что за проект и как юридически он будет регулироваться?
newbie
Activity: 13
Merit: 0
С testrpc должно работать.

У меня работало все с таким truffle.js
Code:
module.exports = {
  networks: {
    development: {
      host: "localhost",
      port: 8545,
      network_id: "*", // Match any network id
      gas: 4600000
    }
  }
};

Хотя ругается на объект 'module'. Попробуй такую конфигурацию, может сработает.

неа( не проканало, та же ошибка

Погуглил немного, народ пишет, что сообщение 800A1391 может возникать из-за ошибок в окружении. Т.е. ошибки JavaScript, NodeJS и т.п. Даже пишут про ошибки в реестре Windows, хотя мне с трудом верится. Может стоит в эту сторону копнуть. Посмотреть версии, может чего-то обновить. А может все с начала попробовать поставить, как в этой статье написано.
На рисунке светится скрипт 1_inital_maigration.js. И красным выделены строки с 13 по 15. В них видно глубоко вложенные колбэки:
return deployer
   .then(() => {
        return deployer.deploy(token);
   })...

Может и на этом скрипт валится. Попробуйте упростить деплой
Code:
module.exports = function(deployer) {
  deployer.deploy(token);
};
Если отработает, то уже дальше копать.
newbie
Activity: 61
Merit: 0
С testrpc должно работать.

У меня работало все с таким truffle.js
Code:
module.exports = {
  networks: {
    development: {
      host: "localhost",
      port: 8545,
      network_id: "*", // Match any network id
      gas: 4600000
    }
  }
};

Хотя ругается на объект 'module'. Попробуй такую конфигурацию, может сработает.

неа( не проканало, та же ошибка
newbie
Activity: 13
Merit: 0
С testrpc должно работать.

У меня работало все с таким truffle.js
Code:
module.exports = {
  networks: {
    development: {
      host: "localhost",
      port: 8545,
      network_id: "*", // Match any network id
      gas: 4600000
    }
  }
};

Хотя ругается на объект 'module'. Попробуй такую конфигурацию, может сработает.
newbie
Activity: 61
Merit: 0

С такой настройкой трюфеля используется тестовая сеть ropsten. На сколько я знаю, Mist поднимает у себя на локалке ноду ropsten автоматически. Просто загружаете кошелек, подключаете его к тестовой сети ropsten и ждете. Кошелек синхронизируется с общим блокчейном, о чем он показывает на экране о процессе загрузки блоков. После окончания синхронизации вы подключаетесь через tryffle по licalhost:8545

Code:
truffle migrate --reset

Есть еще вариант через geth поднять ноду, на rinkeby это просто:
Code:
geth --rinkeby
Для быстрой синхронизации нужно использовать ключ -fast

Эта ошибка у вас вылазит потому, что не включен ни кошелек, ни geth, ничего.

может я конечно что то не догоняю ибо я не очень то программист Grin немножко шарю в php,html,css
но в testrpc  вроде как кошелек включен по умолчанию, если я правильно понял автора:

Quote
В testrpc, как правило, аккаунты создаются сразу при запуске и они сразу же разлочиваются; однако на тестовом и реальном блокчейне эфира стоит создать аккаунт через personal.newAccount() — дальше пополнить этот адрес через Faucet на тестовом блокчейне или реальным кефиром на реальном блокчейне. Не теряйте пароль и приватные ключи.

я же запускаю testrpc и он сразу показывает несколько кошельков, если не сложно взгляни на статью и подскажи что я делаю не так
newbie
Activity: 13
Merit: 0
еще вопросик, все делаю по этой инструкции Grin про пять минут это кончено бред какой то) уже третий день ковыряюсь, дошел до пункта

Code:
truffle migrate --reset

после этой команды выскакивает ошибка

https://i.imgur.com/uHGpXdt.jpg

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


вот так пробовал все равно ошибка:
Code:
module.exports = {
  networks: {
    localhost: {
      host: "localhost",
      port: 8545,
      network_id: "*"
    },  
    ropsten: {
      host: "localhost",
      port: 8545,
      gas: 4700000,
      gasPrice: 1000000000,
      network_id: "1"
    }
  }
};

С такой настройкой трюфеля используется тестовая сеть ropsten. На сколько я знаю, Mist поднимает у себя на локалке ноду ropsten автоматически. Просто загружаете кошелек, подключаете его к тестовой сети ropsten и ждете. Кошелек синхронизируется с общим блокчейном, о чем он показывает на экране о процессе загрузки блоков. После окончания синхронизации вы подключаетесь через tryffle по licalhost:8545

Code:
truffle migrate --reset

Есть еще вариант через geth поднять ноду, на rinkeby это просто:
Code:
geth --rinkeby
Для быстрой синхронизации нужно использовать ключ -fast

Эта ошибка у вас вылазит потому, что не включен ни кошелек, ни geth, ничего.
newbie
Activity: 13
Merit: 0
for (uint i = 0; i < parts.length; i++) {       // Идем по списку всех дольщиков
            totalPercent += parts.percent;           // Складываем общий процент каждого дольщика
        }

for - это и есть цикл

Но главное это массовая рассылка токенов, в конце ICO  инвесторам,  тут идет запись данных в блокчейн, очень по итогу дорогая операция

Я думаю это потому, что у вас изначально не определено количество дольщиков parts.length.
Поэтому не возможно изначально расчитать количество газа на все переводы токенов.

Спасибо, вроде очевидно, а не увидели этот момент. Но не совсем понятно как в Solidity  задавать массивы? Ни где не нашел инфу об этом?

Я встречал вот такую конструкцию в контракте StandardToken

contract StandardToken is ERC20, BasicToken {

  mapping (address => mapping (address => uint256)) allowed;
  ...

Потом этот allowed используют так:
allowed[msg.sender][_spender] = _value;

Это двумерный массив. Однако с большими объемами не советую связываться. Действительно потом нужно будет много газа на обработку транзакции. Есть в ютубе видеолекция хорошая по поводу распределения памяти при записи транзакции в блокчейн. Там много полезного рассказывается, что нужно хранить, что не нужно. А самое главное, сколько это стоит! Хотите, я найду ссылку.
newbie
Activity: 61
Merit: 0
еще вопросик, все делаю по этой инструкции Grin про пять минут это кончено бред какой то) уже третий день ковыряюсь, дошел до пункта

Code:
truffle migrate --reset

после этой команды выскакивает ошибка

https://i.imgur.com/uHGpXdt.jpg

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


вот так пробовал все равно ошибка:
Code:
module.exports = {
  networks: {
    localhost: {
      host: "localhost",
      port: 8545,
      network_id: "*"
    },  
    ropsten: {
      host: "localhost",
      port: 8545,
      gas: 4700000,
      gasPrice: 1000000000,
      network_id: "1"
    }
  }
};
copper member
Activity: 76
Merit: 1
for (uint i = 0; i < parts.length; i++) {       // Идем по списку всех дольщиков
            totalPercent += parts.percent;           // Складываем общий процент каждого дольщика
        }

for - это и есть цикл

Но главное это массовая рассылка токенов, в конце ICO  инвесторам,  тут идет запись данных в блокчейн, очень по итогу дорогая операция

Я думаю это потому, что у вас изначально не определено количество дольщиков parts.length.
Поэтому не возможно изначально расчитать количество газа на все переводы токенов.

Спасибо, вроде очевидно, а не увидели этот момент. Но не совсем понятно как в Solidity  задавать массивы? Ни где не нашел инфу об этом?
newbie
Activity: 13
Merit: 0
for (uint i = 0; i < parts.length; i++) {       // Идем по списку всех дольщиков
            totalPercent += parts.percent;           // Складываем общий процент каждого дольщика
        }

for - это и есть цикл

Но главное это массовая рассылка токенов, в конце ICO  инвесторам,  тут идет запись данных в блокчейн, очень по итогу дорогая операция

Я думаю это потому, что у вас изначально не определено количество дольщиков parts.length.
Поэтому не возможно изначально расчитать количество газа на все переводы токенов.
newbie
Activity: 61
Merit: 0

Похоже на Unix time, правда конвертор выдал для 1514764800 Mon, 01 Jan 2018 00:00:00 GMT http://www.onlineconversion.com/unix_time.htm

спасибо) будем колдовать дальше
full member
Activity: 1246
Merit: 138
Hodl DeepOnion
новую тему создавать не стал напишу в этой


Code:
const openingTime = 1514764800; // 15 Июня 2018

что это за херня как написать 11 Июля в таком виде чот вкурить не могу Grin
Похоже на Unix time, правда конвертор выдал для 1514764800 Mon, 01 Jan 2018 00:00:00 GMT http://www.onlineconversion.com/unix_time.htm
newbie
Activity: 61
Merit: 0
новую тему создавать не стал напишу в этой


Code:
const openingTime = 1514764800; // 15 Июня 2018

что это за херня как написать 11 Июля в таком виде чот вкурить не могу Grin
copper member
Activity: 76
Merit: 1
Добрый день.  Готовим смарт контракт ICO,при компиляции контракта на вкладке Analyse в ремиксе есть сообщения о том, что какие-то функции требуют бесконечного газа, а где то  потенциальная уязвимость.


1) У нас три этапа ICO, Мы решили написать функцию с простановкой паузы при завершении любого этапа и финализации.

Мы идем по списку дольщиков, у нас там массив и мы его в цикле перебираем, чтобы всем отправить  токены. А так же начисляем
бонус за этап. 1 этап +20% токенов, 2 этап +15% токенов и т.д.
Вот:

for (uint i = 0; i < parts.length; i++) {       // Идем по списку всех дольщиков
            totalPercent += parts.percent;           // Складываем общий процент каждого дольщика
        }

for - это и есть цикл

Но главное это массовая рассылка токенов, в конце ICO  инвесторам,  тут идет запись данных в блокчейн, очень по итогу дорогая операция:



Сейчас вот это

function finalize() onlyOwner NotFinalized public {
        uint totalPercent = 0;                          // Итоговый процент всех дольщиков
        for (uint i = 0; i < parts.length; i++) {       // Идем по списку всех дольщиков
            totalPercent += parts.percent;           // Складываем общий процент каждого дольщика
        }

        uint256 totalSupply = token.totalSupply();
        totalSupply = totalSupply +    // Добавляем сумму токенов дольщиков к общей сумме выпущенных токенов
            // Рассчитываем включенный процент в итоговую сумму
            (totalSupply - (totalSupply / (1 - (1 * totalPercent / 100))));  // Сумму рассчитаных доп токенов

        for ( i = 0; i < parts.length; i++) {       // Идем по списку всех дольщиков
            token.publicAsyncSend(parts.addr, (totalSupply * parts.percent) / 100);// Перечисляем всем токены
        }

        for ( i = 0; i < bounty.length; i++) {       // Идем по списку всех баунти
            token.publicAsyncSend(bounty.addr, (totalSupply * bounty.percent) / 100);// Перечисляем всем токены
        }

        emit Finalize();    // Дергаем логгирование закрытия ICO
        isFinalized = true; // Ставим флаг закрытия ICO
    }



Есть  конечно примеры уже опробованные которые можно использовать, конечно можно подергать с гетхаба, но хотелось бы услышать мнение тех кто знаком с данным вопросом, кто сталкивался, как наиболее разумно это реализовать .Спасибо.
Jump to: