From 782e3919a069ff1a294ea863ac9a2762f3126e05 Mon Sep 17 00:00:00 2001 From: kratosIII <1157962039@qq.com> Date: Fri, 8 Dec 2023 02:19:19 +0000 Subject: [PATCH] Add whitelist configuration --- .../include/mdao.meeting/mdao.meeting.db.hpp | 11 +++++++ .../include/mdao.meeting/mdao.meeting.hpp | 10 ++++-- contracts/mdao.meeting/src/mdao.meeting.cpp | 31 +++++++++++++++++-- 3 files changed, 48 insertions(+), 4 deletions(-) diff --git a/contracts/mdao.meeting/include/mdao.meeting/mdao.meeting.db.hpp b/contracts/mdao.meeting/include/mdao.meeting/mdao.meeting.db.hpp index 5f09d9f..47786d5 100644 --- a/contracts/mdao.meeting/include/mdao.meeting/mdao.meeting.db.hpp +++ b/contracts/mdao.meeting/include/mdao.meeting/mdao.meeting.db.hpp @@ -49,6 +49,17 @@ MEEING_TBL_NAME("global") global_t { typedef eosio::singleton< "global"_n, global_t > tbl_t; }; + +// _self +MEEING_TBL whitelist_t{ + name dao_code; + + uint64_t primary_key()const { return dao_code.value; } + + typedef eosio::multi_index< "whitelist"_n, whitelist_t + > tbl_t; +}; + // scope : self MEEING_TBL meeting_t{ name dao_code; diff --git a/contracts/mdao.meeting/include/mdao.meeting/mdao.meeting.hpp b/contracts/mdao.meeting/include/mdao.meeting/mdao.meeting.hpp index 65c188b..235e82a 100644 --- a/contracts/mdao.meeting/include/mdao.meeting/mdao.meeting.hpp +++ b/contracts/mdao.meeting/include/mdao.meeting/mdao.meeting.hpp @@ -14,7 +14,8 @@ class [[eosio::contract("mdao.meeting")]] mdaomeeting : public contract { private: global_t::tbl_t _global; global_t _gstate; - meeting_t::tbl_t _meeting_tbl; + meeting_t::tbl_t _meeting_tbl; + whitelist_t::tbl_t _whitelist_tbl; public: using contract::contract; @@ -22,7 +23,8 @@ class [[eosio::contract("mdao.meeting")]] mdaomeeting : public contract { mdaomeeting(name receiver, name code, datastream ds): contract(receiver, code, ds), _global(_self, _self.value), - _meeting_tbl(get_self(), get_self().value) + _meeting_tbl(get_self(), get_self().value), + _whitelist_tbl(get_self(), get_self().value) { _gstate = _global.exists() ? _global.get() : global_t{}; } @@ -36,6 +38,10 @@ class [[eosio::contract("mdao.meeting")]] mdaomeeting : public contract { ACTION setreceiver( const name& receiver); ACTION setsplit(const uint64_t& split_id); + + ACTION setwhitelist(const set& accounts); + + ACTION delwhitelist(const set& accounts); [[eosio::on_notify("*::transfer")]] void ontransfer(const name& from, const name& to, const asset& quant, const string& memo); diff --git a/contracts/mdao.meeting/src/mdao.meeting.cpp b/contracts/mdao.meeting/src/mdao.meeting.cpp index e0c0612..b5eed34 100644 --- a/contracts/mdao.meeting/src/mdao.meeting.cpp +++ b/contracts/mdao.meeting/src/mdao.meeting.cpp @@ -63,8 +63,34 @@ void mdaomeeting::ontransfer(const name& from, const name& to, const asset& quan } +void mdaomeeting::setwhitelist(const set& accounts){ + CHECKC( has_auth(_self) || has_auth(_gstate.admin), err::NO_AUTH,"no auth") + for ( name n : accounts ){ + auto itr = _whitelist_tbl.find( n.value ); + db::set( _whitelist_tbl, itr, _self, [&]( auto& p, bool is_new ){ + p.dao_code = n; + }); + } +} + +void mdaomeeting::delwhitelist(const set& accounts){ + + CHECKC( has_auth(_self) || has_auth(_gstate.admin), err::NO_AUTH,"no auth") + + for ( name n : accounts ){ + + auto itr = _whitelist_tbl.find( n.value ); + if ( itr != _whitelist_tbl.end() ) + _whitelist_tbl.erase(itr); + } +} + + void mdaomeeting::_create_renew_dao(const name& from, const name& dao_code, const string& group_id, const asset& quantity, const uint64_t& month){ + auto whitelist_itr = _whitelist_tbl.find( dao_code.value ); + CHECKC( whitelist_itr != _whitelist_tbl.end(), err::NO_AUTH,"Not yet open") + dao_info_t::idx_t dao_info(MDAO_INFO_ACCOUNT,MDAO_INFO_ACCOUNT.value); auto dao_itr = dao_info.find( dao_code.value ); CHECKC( dao_itr != dao_info.end(),err::PARAM_ERROR,"dao not found") @@ -85,10 +111,11 @@ void mdaomeeting::_create_renew_dao(const name& from, const name& dao_code, cons if ( is_new ){ p.created_at = now; p.dao_code = dao_code; - p.group_id = group_id; - p.creator = from; + p.expired_at = now; } + p.creator = from; + p.group_id = group_id; if ( p.expired_at < now ) p.expired_at = now; // p.expired_at = p.expired_at < now ? now : p.expired_at;