Comments 9
Синтакс солидити конечно хромает :(.
Был класс стал контракт, при этом в контракте-классе функции, а не методы.Больше всего удивляет throw.
Из-за магии в бекграунде немного непонятно, что вирт машина делает, откуда берет все эти данные и куда их сохраняет и как сдает...
Видимо у меня это все пролетает мимо в голове.
Чтобы писать смарт контракты не обязательно понимать, как оно хранится, важнее понимать, что и сколько стОит:)
Есть вещь, на которую я хотел бы обратить внимание. Не знаю, где вы искали описание стандарта на токен, самой главной ссылки у вас нет: ERC20. Отсюда видно, что balanceOf
— необязательно mapping, по стандарту это function balanceOf(address _owner) constant returns (uint256 balance)
. Вы можете объявить это просто как mapping (address => uint256)
только потому, что компилятор Solidity создаёт для этой карты геттер с указанной в стандарте сигнатурой (пруф из документации).
Это всё к чему: вместо лишнего уровня обёрток можно было просто объявить приватный mapping (address => TokenHolder)
, написать balanceOf и всё остальное, что требуется по ERC20, поверх этого маппинга и очень существенно упростить исходник.
Не забывайте, что тут ещё чисто финансовый вопрос, лишний mapping — лишний расход места в блокчейне, которое стоит денег. Время, которое выделяется на все телодвижения по перекладыванию баланса из одного места в другое, тоже стоит денег. Может и несущественно дороже, но раз — копейка рубль бережёт, два — избыточные данные в публичном блокчейне не есть хорошо.
следом, после того, как запустил сам контракт — mist сказал, что «It seems this transaction will fail.If you submit it, it may consune all the gas you provide», то есть сожрёт весь газ. В чём может быть трабла?

Смарт контракты Ethereum: структурируем токены как акции