|
PayBack420 (OP)
Newbie
Offline
Activity: 43
Merit: 0
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
March 19, 2018, 12:04:07 PM |
|
И да, токены доходят до адресата ![Cheesy](https://bitcointalk.org/Smileys/default/cheesy.gif)
|
|
|
|
Snasey
Jr. Member
Offline
Activity: 87
Merit: 1
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
March 19, 2018, 03:54:56 PM |
|
Что-то у вас всё в перемешку, не смотря на наследования от 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
Activity: 43
Merit: 0
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
March 20, 2018, 07:45:08 AM |
|
Что-то у вас всё в перемешку, не смотря на наследования от OpenZeppelin. Не погружаясь в код, могу порекомендовать: - Как минимум стоит разнести эмиссию токена и краудйсел на два разных (физически) контракта.
- Ownable - в Crowdsale используется как модификатор, хотя таковым не является. Есть модификатор onlyOwner
- Эмиссия чего происходит в конструкторе crowdsale? O_o
А токены не переводятся, потому что они привязаны к маппингу не из crowdsale))) (в transfer обращение к balances[], а в crowdsale переопределяется balanceOf[]; Токены которые дошли до адресата - это к owner'у?) Рекомендую заказать смарт-контракт у специалистов или хотя бы консультацию. P.s. Судя по истории на ethercsan - тренироваться лучше на тестовой сети, типа Rinkeby, Ropsten или с помощью testRPC. + пользоваться IDE для СК (к примеру Remix, или Atom). Спасибо, я учту эти моменты. Есть еще один вариант , он стабилен и работает как надо и ремикс не ругается даже ,все зеленое. ![Cheesy](https://bitcointalk.org/Smileys/default/cheesy.gif) Но он создает смарт контракт внутри смартконтракта! Насколько это плохо/хорошо?
|
|
|
|
Snasey
Jr. Member
Offline
Activity: 87
Merit: 1
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
March 20, 2018, 08:15:17 AM |
|
Спасибо, я учту эти моменты. Есть еще один вариант , он стабилен и работает как надо и ремикс не ругается даже ,все зеленое. ![Cheesy](https://bitcointalk.org/Smileys/default/cheesy.gif) Но он создает смарт контракт внутри смартконтракта! Насколько это плохо/хорошо? Надо бы код увидеть)
|
|
|
|
|
Snasey
Jr. Member
Offline
Activity: 87
Merit: 1
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
March 20, 2018, 11:01:41 AM |
|
В целом создавать экземпляры контракта в внутри контракта это нормально, т.к. это по сути аналог классов в ооп. В данном случае, рекомендовал бы разнести на два физических. (первый контракт - эмитирует токены, потом создается второй контракт, который "общается" с ним по адресу, через интерфейс). Но я могу ошибаться, т.к. замысел контракта до конца не понимаю, хотя понятно что это про краудсейл) Код сложно читать, потому что он не соответствует стандартам "чистого кода", а именно название функций не соответствуют тому, что они делают.
|
|
|
|
PayBack420 (OP)
Newbie
Offline
Activity: 43
Merit: 0
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
March 20, 2018, 11:07:22 AM |
|
В целом создавать экземпляры контракта в внутри контракта это нормально, т.к. это по сути аналог классов в ооп. В данном случае, рекомендовал бы разнести на два физических. (первый контракт - эмитирует токены, потом создается второй контракт, который "общается" с ним по адресу, через интерфейс). Но я могу ошибаться, т.к. замысел контракта до конца не понимаю, хотя понятно что это про краудсейл) Код сложно читать, потому что он не соответствует стандартам "чистого кода", а именно название функций не соответствуют тому, что они делают. немножко не понимаю как разнести их на 2 физических, типо импортом вызывать?) И что это даст подскажи пожалуйста)
|
|
|
|
Snasey
Jr. Member
Offline
Activity: 87
Merit: 1
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
March 20, 2018, 11:48:11 AM |
|
В целом создавать экземпляры контракта в внутри контракта это нормально, т.к. это по сути аналог классов в ооп. В данном случае, рекомендовал бы разнести на два физических. (первый контракт - эмитирует токены, потом создается второй контракт, который "общается" с ним по адресу, через интерфейс). Но я могу ошибаться, т.к. замысел контракта до конца не понимаю, хотя понятно что это про краудсейл) Код сложно читать, потому что он не соответствует стандартам "чистого кода", а именно название функций не соответствуют тому, что они делают. немножко не понимаю как разнести их на 2 физических, типо импортом вызывать?) И что это даст подскажи пожалуйста) Нет, в плане по отдельности задеплоить, как два разных контракта. Обычно сначала эмитируют токен, и пользуются им. Затем создают контракт для краудсейла и шлют на него токены для продажи по заданным условиям. Зачем? - соблюдение принципа "разделение ответственности" и к примеру, ситуации, когда токен нужен уже сегодня, а даты проведения ico, ещё не уточнены.
|
|
|
|
PayBack420 (OP)
Newbie
Offline
Activity: 43
Merit: 0
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
March 20, 2018, 11:52:45 AM |
|
В целом создавать экземпляры контракта в внутри контракта это нормально, т.к. это по сути аналог классов в ооп. В данном случае, рекомендовал бы разнести на два физических. (первый контракт - эмитирует токены, потом создается второй контракт, который "общается" с ним по адресу, через интерфейс). Но я могу ошибаться, т.к. замысел контракта до конца не понимаю, хотя понятно что это про краудсейл) Код сложно читать, потому что он не соответствует стандартам "чистого кода", а именно название функций не соответствуют тому, что они делают. немножко не понимаю как разнести их на 2 физических, типо импортом вызывать?) И что это даст подскажи пожалуйста) Нет, в плане по отдельности задеплоить, как два разных контракта. Обычно сначала эмитируют токен, и пользуются им. Затем создают контракт для краудсейла и шлют на него токены для продажи по заданным условиям. Зачем? - соблюдение принципа "разделение ответственности" и к примеру, ситуации, когда токен нужен уже сегодня, а даты проведения ico, ещё не уточнены. Понял что нужно создать контракт токена, затем создать контракт крауд сейла, не понимаю как заставить контракт крауд сейла продавать токены, задать sale agent в крауд сейле и на него отправить токены?)
|
|
|
|
Snasey
Jr. Member
Offline
Activity: 87
Merit: 1
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
March 20, 2018, 12:25:24 PM |
|
Понял что нужно создать контракт токена, затем создать контракт крауд сейла, не понимаю как заставить контракт крауд сейла продавать токены, задать sale agent в крауд сейле и на него отправить токены?)
Для того что бы работать с токеном из другого контракта, необходимо в новом контракте создать контракт с интерфейсами(или сигнатурами функций) вашего токена и в конструктор контракта интерфейсами положить адрес контракта с токенами. Пример кода "нового" контракта: //контракт с сигнатурами функций, ранее выпущенного СК с токенами 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
Activity: 43
Merit: 0
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
March 20, 2018, 01:52:29 PM |
|
Понял что нужно создать контракт токена, затем создать контракт крауд сейла, не понимаю как заставить контракт крауд сейла продавать токены, задать sale agent в крауд сейле и на него отправить токены?)
Для того что бы работать с токеном из другого контракта, необходимо в новом контракте создать контракт с интерфейсами(или сигнатурами функций) вашего токена и в конструктор контракта интерфейсами положить адрес контракта с токенами. Пример кода "нового" контракта: //контракт с сигнатурами функций, ранее выпущенного СК с токенами 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
Activity: 87
Merit: 1
|
![](https://bitcointalk.org/Themes/custom1/images/post/xx.gif) |
March 20, 2018, 02:01:33 PM |
|
Не до конца понимаю что нужно делать, у вас не будет случайно примера готово такого решения?)
Готовое решение у меня есть, но мне обычно за него платят) Но я могу Вам помочь самим доделать начатое, если сможете четко сформулировать свои места недопонимания.
|
|
|
|
|