🌐 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, &{ 
                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, & {
              a.owner = to;
              a.balance = q;
           });
         } else {
           _accounts.modify( toitr, 0, & {
              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


Comments 4


Вы получили 100.00 % апвоут от @uplift. Проект @whalepunk

You have received a 100.00 % vote from @uplift. Powered by @whalepunk

06.04.2018 19:16
0
Good afternoon. I have a request for you.Could you sign for me, and in return, I'll sign for you.
)
06.04.2018 19:54
0

no

06.04.2018 19:57
0