From 54a1d052674e0c5f8f0eb7f605efd787ad7a3d41 Mon Sep 17 00:00:00 2001 From: Semen Medvedev Date: Fri, 25 Jan 2019 15:00:09 +0700 Subject: [PATCH] Add sending events into charge smart-contract #380 --- golos.charge/golos.charge.abi | 33 +++++++++++++++++++++++++++++++++ golos.charge/golos.charge.cpp | 8 ++++++++ golos.charge/golos.charge.hpp | 4 ++++ 3 files changed, 45 insertions(+) diff --git a/golos.charge/golos.charge.abi b/golos.charge/golos.charge.abi index 7cbded38..46ee51a0 100644 --- a/golos.charge/golos.charge.abi +++ b/golos.charge/golos.charge.abi @@ -192,6 +192,36 @@ } ] }, + { + "name": "chargestate", + "base": "", + "fields": [ + { + "name": "user", + "type": "name" + }, + { + "name": "charge_symbol", + "type": "uint64" + }, + { + "name": "token_code", + "type": "symbol_code" + }, + { + "name": "charge_id", + "type": "uint8" + }, + { + "name": "last_update", + "type": "uint64" + }, + { + "name": "value", + "type": "base_t" + } + ] + }, { "name": "stored", "base": "", @@ -245,6 +275,9 @@ ] }, ], + "events": [ + {"name": "chargestate", "type": "chargestate"}, + ], "actions": [ { "name": "setrestorer", diff --git a/golos.charge/golos.charge.cpp b/golos.charge/golos.charge.cpp index abe75259..b8c72504 100644 --- a/golos.charge/golos.charge.cpp +++ b/golos.charge/golos.charge.cpp @@ -1,4 +1,5 @@ #include "golos.charge.hpp" +#include namespace golos { using namespace eosio; @@ -33,6 +34,7 @@ fixp_t charge::consume_charge(name issuer, name user, symbol_code token_code, ui item.charge_id = charge_id; item.last_update = current_time(); item.value = new_val.data(); + send_charge_event(user, item); }); return new_val; } @@ -40,6 +42,7 @@ fixp_t charge::consume_charge(name issuer, name user, symbol_code token_code, ui balances_table.modify(*itr, name(), [&]( auto &item ) { item.last_update = current_time(); item.value = new_val.data(); + send_charge_event(user, item); }); else balances_table.erase(itr); @@ -117,6 +120,11 @@ void charge::setrestorer(symbol_code token_code, uint8_t charge_id, std::string item.max_elapsed = to_fixp(max_elapsed).data(); }); } + +void charge::send_charge_event(name user, const balance& state) { + eosio::event(_self, "chargestate"_n, std::make_tuple(user, state)).send(); +} + EOSIO_DISPATCH(charge, (use)(useandstore)(removestored)(setrestorer) ) } /// namespace golos diff --git a/golos.charge/golos.charge.hpp b/golos.charge/golos.charge.hpp index 21bebda5..efc1133c 100644 --- a/golos.charge/golos.charge.hpp +++ b/golos.charge/golos.charge.hpp @@ -113,6 +113,10 @@ class charge : public contract { return std::max(fp_cast((elap_t(FP(user_balance.value)) - elap_t(restored)) + elap_t(price)), fixp_t(0)); } + +private: + void send_charge_event(name user, const balance& state); + public: static inline int64_t get_current_value(name code, name user, symbol_code token_code, uint8_t charge_id = 0) { balances balances_table(code, user.value);