Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
blockchained
6 лет назад

🌐 EOSIO — Новый образец валютного контракта (Daniel Larimer)

Команда block.one работает почти круглосуточно, чтобы закончить EOS Dawn 3.0 в рамках подготовки к нескольким месяцам тестирования перед июньским релизом EOSIO 1.0. Разработчики отмечают значительные улучшения по сравнению с предыдущими релизами. Одно из этих усовершенствований касается того, как определяются контракты.

Ниже я представил минимально жизнеспособный контракт токена. Он позволяет создателю выпускать токены, а пользователям – передавать их друг другу. Следует отметить, что данный минимально жизнеспособный контракт токена не соответствует предлагаемому нами стандарту токена. Это просто пример.

#include <eosiolib/eosio.hpp>

class simpletoken : public eosio::contract {
   public:
      simpletoken( account_name self )
      :contract(self),_accounts(self, self){}

      /** User's call this method to transfer tokens */
      void transfer( account_name from, account_name to, uint64_t quantity ) {
         require_auth( from );

         const auto& fromacnt = _accounts.get( from );
         eosio_assert( fromacnt.balance >= quantity, "overdrawn balance" );
         _accounts.modify( fromacnt, from, [&]( auto& a ){ 
                a.balance -= quantity; 
         } );

         add_balance( from, to, quantity );
      }

      /** Contract owner can issue new tokens */
      void issue( account_name to, uint64_t quantity ) {
         require_auth( _self );
         add_balance( _self, to, quantity );
      }

   private:
      struct account {
         account_name owner;
         uint64_t     balance;

         uint64_t primary_key()const { return owner; }
      };
      /** account database maps owner to their balance */
      eosio::multi_index<N(accounts), account> _accounts;

      void add_balance( account_name payer, account_name to, uint64_t q ) {
         auto toitr = _accounts.find( to );
         if( toitr == _accounts.end() ) {
           _accounts.emplace( payer, [&]( auto& a ) {
              a.owner = to;
              a.balance = q;
           });
         } else {
           _accounts.modify( toitr, 0, [&]( auto& a ) {
              a.balance += q;
              eosio_assert( a.balance >= q, "overflow detected" );
           });
         }
      }
};

EOSIO_ABI( simpletoken, (transfer)(issue) )

Важные нововведения

  • Теперь действия являются простыми методами класса
  • Нет необходимости использовать макросы сериализации
  • Значительно более короткий код
  • Макрос EOSIO_ABI отображает ваши действия
  • Доступ к базе данных теперь boost:: multi_index_container

Переведено @blockchained

Оригинал поста: ЗДЕСЬ


Телеграм чат: https://t.me/EOS_RU


Вы можете торговать токенами EOS на RuDEX

1
38.737 GOLOS
На Golos с January 2017
Комментарии (4)
Сортировать по:
Сначала старые