Pull to refresh

Comments 9

Синтакс солидити конечно хромает :(.


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


Видимо у меня это все пролетает мимо в голове.

Очень рекомендую ресурс learnxinyminutes.com/docs/solidity, где очень концентрированно «в кучу» приводится вся информация о Solitidy. Для более упорядоченных знаний имеет смысл обратиться к оригинальной документации https://solidity.readthedocs.io/en/latest/.
Чтобы писать смарт контракты не обязательно понимать, как оно хранится, важнее понимать, что и сколько стОит:)

Есть вещь, на которую я хотел бы обратить внимание. Не знаю, где вы искали описание стандарта на токен, самой главной ссылки у вас нет: ERC20. Отсюда видно, что balanceOf — необязательно mapping, по стандарту это function balanceOf(address _owner) constant returns (uint256 balance). Вы можете объявить это просто как mapping (address => uint256) только потому, что компилятор Solidity создаёт для этой карты геттер с указанной в стандарте сигнатурой (пруф из документации).


Это всё к чему: вместо лишнего уровня обёрток можно было просто объявить приватный mapping (address => TokenHolder), написать balanceOf и всё остальное, что требуется по ERC20, поверх этого маппинга и очень существенно упростить исходник.

Вы совершенно правы, но существенного упрощения исходников я не вижу. Но, возможно, будет чуть понятнее код.

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

Это существенный аргумент!
Компилятор сначала заявил, что restReward не объявлен
следом, после того, как запустил сам контракт — mist сказал, что «It seems this transaction will fail.If you submit it, it may consune all the gas you provide», то есть сожрёт весь газ. В чём может быть трабла?

image
restReward поправил. Касательно ошибки загрузки можно попробовать сделать конструктор payable (https://ethereum.stackexchange.com/questions/11726/mist-testnet-error-it-seems-this-transaction-will-fail)
Может я ошибаюсь, но в withdrawReward() естть уязвимость с fallback функцией.
Sign up to leave a comment.

Articles