Bitcoin Forum
July 07, 2024, 12:14:05 PM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: Проблема со смартконтрактом  (Read 190 times)
PayBack420 (OP)
Newbie
*
Offline Offline

Activity: 43
Merit: 0


View Profile
March 19, 2018, 11:06:41 AM
 #1

Ссылка на смартконтракт https://gist.github.com/Sexstasy/8e24da988c9fac98b19db0fe2edd3f9c
краудсейл запускается и работает адекватно, НО при попытке отправки купленных токенов на эфирскане выдает ошибку

https://etherscan.io/tx/0xd7ff1ef85b449b68e4363f9f912454fb1bf8a8b492ec4945e4f8585780baa4d4

Просто не осталось мыслей совсем, прошу помогитеWink
PayBack420 (OP)
Newbie
*
Offline Offline

Activity: 43
Merit: 0


View Profile
March 19, 2018, 12:04:07 PM
 #2

И да, токены доходят до адресата Cheesy
Snasey
Jr. Member
*
Offline Offline

Activity: 87
Merit: 1


View Profile
March 19, 2018, 03:54:56 PM
 #3

Что-то у вас всё в перемешку, не смотря на наследования от OpenZeppelin.

Не погружаясь в код, могу порекомендовать:
  • Как минимум стоит разнести эмиссию токена и краудйсел на два разных (физически) контракта.
  • Ownable - в Crowdsale используется как модификатор, хотя таковым не является. Есть модификатор onlyOwner
  • Эмиссия чего происходит в конструкторе crowdsale? O_o

А токены не переводятся, потому что они привязаны к маппингу не из crowdsale)))
(в transfer обращение к balances[], а в crowdsale переопределяется balanceOf[]; Токены которые дошли до адресата - это к owner'у?)

Рекомендую заказать смарт-контракт у специалистов или хотя бы консультацию.

P.s.  Судя по истории на ethercsan - тренироваться лучше на тестовой сети, типа Rinkeby, Ropsten или с помощью testRPC. + пользоваться IDE для СК (к примеру Remix, или Atom).
PayBack420 (OP)
Newbie
*
Offline Offline

Activity: 43
Merit: 0


View Profile
March 20, 2018, 07:45:08 AM
 #4

Что-то у вас всё в перемешку, не смотря на наследования от OpenZeppelin.

Не погружаясь в код, могу порекомендовать:
  • Как минимум стоит разнести эмиссию токена и краудйсел на два разных (физически) контракта.
  • Ownable - в Crowdsale используется как модификатор, хотя таковым не является. Есть модификатор onlyOwner
  • Эмиссия чего происходит в конструкторе crowdsale? O_o

А токены не переводятся, потому что они привязаны к маппингу не из crowdsale)))
(в transfer обращение к balances[], а в crowdsale переопределяется balanceOf[]; Токены которые дошли до адресата - это к owner'у?)

Рекомендую заказать смарт-контракт у специалистов или хотя бы консультацию.

P.s.  Судя по истории на ethercsan - тренироваться лучше на тестовой сети, типа Rinkeby, Ropsten или с помощью testRPC. + пользоваться IDE для СК (к примеру Remix, или Atom).

Спасибо, я учту эти моменты. Есть еще один вариант , он стабилен и работает как надо и ремикс не ругается даже ,все зеленое. Cheesy Но он создает смарт контракт внутри смартконтракта! Насколько это плохо/хорошо?
Snasey
Jr. Member
*
Offline Offline

Activity: 87
Merit: 1


View Profile
March 20, 2018, 08:15:17 AM
 #5


Спасибо, я учту эти моменты. Есть еще один вариант , он стабилен и работает как надо и ремикс не ругается даже ,все зеленое. Cheesy Но он создает смарт контракт внутри смартконтракта! Насколько это плохо/хорошо?

Надо бы код увидеть)
PayBack420 (OP)
Newbie
*
Offline Offline

Activity: 43
Merit: 0


View Profile
March 20, 2018, 09:05:19 AM
 #6


Спасибо, я учту эти моменты. Есть еще один вариант , он стабилен и работает как надо и ремикс не ругается даже ,все зеленое. Cheesy Но он создает смарт контракт внутри смартконтракта! Насколько это плохо/хорошо?

Надо бы код увидеть)

https://gist.github.com/Sexstasy/9dff7ed727e149569fe28677fc050dea

https://rinkeby.etherscan.io/address/0x00a1ffa2b3d00c5888fd6c04bccf3bfca9beaeab#code задеплоин и верифицирован
Snasey
Jr. Member
*
Offline Offline

Activity: 87
Merit: 1


View Profile
March 20, 2018, 11:01:41 AM
 #7


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

Код сложно читать, потому что он не соответствует стандартам "чистого кода", а именно название функций не соответствуют тому, что они делают.
PayBack420 (OP)
Newbie
*
Offline Offline

Activity: 43
Merit: 0


View Profile
March 20, 2018, 11:07:22 AM
 #8


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

Код сложно читать, потому что он не соответствует стандартам "чистого кода", а именно название функций не соответствуют тому, что они делают.

немножко не понимаю как разнести их на 2 физических, типо импортом вызывать?) И что это даст подскажи пожалуйста)
Snasey
Jr. Member
*
Offline Offline

Activity: 87
Merit: 1


View Profile
March 20, 2018, 11:48:11 AM
 #9


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

Код сложно читать, потому что он не соответствует стандартам "чистого кода", а именно название функций не соответствуют тому, что они делают.

немножко не понимаю как разнести их на 2 физических, типо импортом вызывать?) И что это даст подскажи пожалуйста)

Нет, в плане по отдельности задеплоить, как два разных контракта.

Обычно сначала эмитируют токен, и пользуются им. Затем создают контракт для краудсейла и шлют на него токены для продажи по заданным условиям.

Зачем? - соблюдение принципа "разделение ответственности" и к примеру, ситуации, когда токен нужен уже сегодня, а даты проведения ico, ещё не уточнены.

PayBack420 (OP)
Newbie
*
Offline Offline

Activity: 43
Merit: 0


View Profile
March 20, 2018, 11:52:45 AM
 #10


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

Код сложно читать, потому что он не соответствует стандартам "чистого кода", а именно название функций не соответствуют тому, что они делают.

немножко не понимаю как разнести их на 2 физических, типо импортом вызывать?) И что это даст подскажи пожалуйста)

Нет, в плане по отдельности задеплоить, как два разных контракта.

Обычно сначала эмитируют токен, и пользуются им. Затем создают контракт для краудсейла и шлют на него токены для продажи по заданным условиям.

Зачем? - соблюдение принципа "разделение ответственности" и к примеру, ситуации, когда токен нужен уже сегодня, а даты проведения ico, ещё не уточнены.


Понял что нужно создать контракт токена, затем создать контракт крауд сейла, не понимаю как заставить контракт крауд сейла продавать токены, задать sale agent в крауд сейле и на него отправить токены?)
Snasey
Jr. Member
*
Offline Offline

Activity: 87
Merit: 1


View Profile
March 20, 2018, 12:25:24 PM
 #11

Понял что нужно создать контракт токена, затем создать контракт крауд сейла, не понимаю как заставить контракт крауд сейла продавать токены, задать sale agent в крауд сейле и на него отправить токены?)

Для того что бы работать с токеном из другого контракта, необходимо в новом контракте создать контракт с интерфейсами(или сигнатурами функций) вашего токена и в конструктор контракта интерфейсами положить адрес контракта с токенами.
Пример кода "нового" контракта:

Code:
//контракт с сигнатурами функций, ранее выпущенного СК с токенами
contract Token{
    function transfer(address to, uint256 value) public returns (bool);
}

//новый контракт
contract Crowdsale{
    Token public tokens;
    
    //после вызова этой функции, можно обращаться к методам tokens, как к выпущенному контракту
    function init(address myTokens) external {
        tokens = Token(myTokens);
    }
    
    //продает токены с вашего смарт-контракта
    function anotherTransfer(address to, uint256 value) external {
        tokens.transfer(to, value);
    }
    
    // и т.д.
}
PayBack420 (OP)
Newbie
*
Offline Offline

Activity: 43
Merit: 0


View Profile
March 20, 2018, 01:52:29 PM
 #12

Понял что нужно создать контракт токена, затем создать контракт крауд сейла, не понимаю как заставить контракт крауд сейла продавать токены, задать sale agent в крауд сейле и на него отправить токены?)

Для того что бы работать с токеном из другого контракта, необходимо в новом контракте создать контракт с интерфейсами(или сигнатурами функций) вашего токена и в конструктор контракта интерфейсами положить адрес контракта с токенами.
Пример кода "нового" контракта:

Code:
//контракт с сигнатурами функций, ранее выпущенного СК с токенами
contract Token{
    function transfer(address to, uint256 value) public returns (bool);
}

//новый контракт
contract Crowdsale{
    Token public tokens;
    
    //после вызова этой функции, можно обращаться к методам tokens, как к выпущенному контракту
    function init(address myTokens) external {
        tokens = Token(myTokens);
    }
    
    //продает токены с вашего смарт-контракта
    function anotherTransfer(address to, uint256 value) external {
        tokens.transfer(to, value);
    }
    
    // и т.д.
}


Не до конца понимаю что нужно делать, у вас не будет случайно примера готово такого решения?)
Snasey
Jr. Member
*
Offline Offline

Activity: 87
Merit: 1


View Profile
March 20, 2018, 02:01:33 PM
 #13

Не до конца понимаю что нужно делать, у вас не будет случайно примера готово такого решения?)

Готовое решение у меня есть, но мне обычно за него платят)

Но я могу Вам помочь самим доделать начатое, если сможете четко сформулировать свои места недопонимания.
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!