BitShares-Core  7.0.2
BitShares blockchain node software and command-line wallet software
proposal.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2015 Cryptonomex, Inc., and contributors.
3  *
4  * The MIT License
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a copy
7  * of this software and associated documentation files (the "Software"), to deal
8  * in the Software without restriction, including without limitation the rights
9  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10  * copies of the Software, and to permit persons to whom the Software is
11  * furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in
14  * all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22  * THE SOFTWARE.
23  */
26 
27 #include <fc/io/raw.hpp>
28 
29 namespace graphene { namespace protocol {
30 
32 {
33  // TODO move this method to unit tests as it is not useful
35  op.expiration_time = head_block_time + global_params.maximum_proposal_lifetime;
37  return op;
38 }
39 
41 {
42  FC_ASSERT( !proposed_ops.empty() );
43  for( const auto& op : proposed_ops ) operation_validate( op.op );
44 }
45 
47 {
49 }
50 
52 {
53  FC_ASSERT(fee.amount >= 0);
56  key_approvals_to_add.empty() && key_approvals_to_remove.empty()));
57  for( auto a : active_approvals_to_add )
58  {
60  "Cannot add and remove approval at the same time.");
61  }
62  for( auto a : owner_approvals_to_add )
63  {
65  "Cannot add and remove approval at the same time.");
66  }
67  for( auto a : key_approvals_to_add )
68  {
70  "Cannot add and remove approval at the same time.");
71  }
72 }
73 
75 {
76  FC_ASSERT( fee.amount >= 0 );
77 }
78 
80 {
82 }
83 
84 void proposal_update_operation::get_required_authorities( vector<authority>& o )const
85 {
86  authority auth;
87  for( const auto& k : key_approvals_to_add )
88  auth.key_auths[k] = 1;
89  for( const auto& k : key_approvals_to_remove )
90  auth.key_auths[k] = 1;
91  auth.weight_threshold = auth.key_auths.size();
92 
93  if( auth.weight_threshold > 0 )
94  o.emplace_back( std::move(auth) );
95 }
96 
97 void proposal_update_operation::get_required_active_authorities( flat_set<account_id_type>& a )const
98 {
99  for( const auto& i : active_approvals_to_add ) a.insert(i);
100  for( const auto& i : active_approvals_to_remove ) a.insert(i);
101 }
102 
103 void proposal_update_operation::get_required_owner_authorities( flat_set<account_id_type>& a )const
104 {
105  for( const auto& i : owner_approvals_to_add ) a.insert(i);
106  for( const auto& i : owner_approvals_to_remove ) a.insert(i);
107 }
108 
109 } } // graphene::protocol
110 
graphene::protocol::chain_parameters::maximum_proposal_lifetime
uint32_t maximum_proposal_lifetime
maximum lifetime in seconds for proposed transactions to be kept, before expiring
Definition: chain_parameters.hpp:60
graphene::protocol::proposal_update_operation
The proposal_update_operation updates an existing transaction proposal.
Definition: proposal.hpp:119
graphene::protocol::proposal_update_operation::key_approvals_to_remove
flat_set< public_key_type > key_approvals_to_remove
Definition: proposal.hpp:134
graphene::protocol::authority::weight_threshold
uint32_t weight_threshold
Definition: authority.hpp:119
graphene::protocol::proposal_update_operation::fee_params_t
Definition: proposal.hpp:121
graphene::protocol::proposal_create_operation::fee_params_t::price_per_kbyte
uint32_t price_per_kbyte
Definition: proposal.hpp:74
graphene::protocol::authority::key_auths
flat_map< public_key_type, weight_type > key_auths
Definition: authority.hpp:121
graphene::protocol::operation_validate
void operation_validate(const operation &op)
Definition: operations.cpp:98
fee_schedule.hpp
graphene::protocol::proposal_update_operation::owner_approvals_to_add
flat_set< account_id_type > owner_approvals_to_add
Definition: proposal.hpp:131
GRAPHENE_IMPLEMENT_EXTERNAL_SERIALIZATION
#define GRAPHENE_IMPLEMENT_EXTERNAL_SERIALIZATION(type)
Definition: types.hpp:86
graphene::protocol::proposal_update_operation::fee_params_t::fee
uint64_t fee
Definition: proposal.hpp:122
graphene::protocol::proposal_update_operation::key_approvals_to_add
flat_set< public_key_type > key_approvals_to_add
Definition: proposal.hpp:133
graphene::protocol::proposal_create_operation::calculate_fee
share_type calculate_fee(const fee_params_t &k) const
Definition: proposal.cpp:46
graphene::protocol::base_operation::calculate_data_fee
static uint64_t calculate_data_fee(uint64_t bytes, uint64_t price_per_kbyte)
Definition: operations.cpp:33
operations.hpp
graphene::protocol::proposal_update_operation::calculate_fee
share_type calculate_fee(const fee_params_t &k) const
Definition: proposal.cpp:79
fc::time_point_sec
Definition: time.hpp:74
graphene::protocol::proposal_update_operation::get_required_authorities
void get_required_authorities(vector< authority > &) const
Definition: proposal.cpp:84
graphene::protocol::proposal_update_operation::fee
asset fee
Definition: proposal.hpp:127
fc::raw::pack_size
size_t pack_size(const T &v)
Definition: raw.hpp:757
graphene::protocol::proposal_create_operation::fee_params_t
Definition: proposal.hpp:72
graphene::protocol::proposal_create_operation::fee_params_t::fee
uint64_t fee
Definition: proposal.hpp:73
graphene::protocol::proposal_create_operation::validate
void validate() const
Definition: proposal.cpp:40
graphene::protocol::chain_parameters
Definition: chain_parameters.hpp:46
graphene::protocol::chain_parameters::committee_proposal_review_period
uint32_t committee_proposal_review_period
minimum time in seconds that a proposed transaction requiring committee authority may not be signed,...
Definition: chain_parameters.hpp:56
graphene::protocol::proposal_update_operation::active_approvals_to_add
flat_set< account_id_type > active_approvals_to_add
Definition: proposal.hpp:129
graphene::protocol::proposal_create_operation::expiration_time
time_point_sec expiration_time
Definition: proposal.hpp:80
graphene::protocol::proposal_delete_operation
The proposal_delete_operation deletes an existing transaction proposal.
Definition: proposal.hpp:156
graphene::protocol::proposal_delete_operation::fee_params_t
Definition: proposal.hpp:158
FC_ASSERT
#define FC_ASSERT(TEST,...)
Checks a condition and throws an assert_exception if the test is FALSE.
Definition: exception.hpp:345
graphene::protocol::proposal_update_operation::get_required_active_authorities
void get_required_active_authorities(flat_set< account_id_type > &) const
Definition: proposal.cpp:97
graphene::protocol::asset::amount
share_type amount
Definition: asset.hpp:36
graphene::protocol::proposal_update_operation::owner_approvals_to_remove
flat_set< account_id_type > owner_approvals_to_remove
Definition: proposal.hpp:132
graphene::protocol::proposal_update_operation::get_required_owner_authorities
void get_required_owner_authorities(flat_set< account_id_type > &) const
Definition: proposal.cpp:103
graphene::protocol::proposal_update_operation::validate
void validate() const
Definition: proposal.cpp:51
graphene::protocol::proposal_update_operation::active_approvals_to_remove
flat_set< account_id_type > active_approvals_to_remove
Definition: proposal.hpp:130
graphene::protocol::proposal_create_operation::review_period_seconds
optional< uint32_t > review_period_seconds
Definition: proposal.hpp:81
graphene::protocol::authority
Identifies a weighted set of keys and accounts that must approve operations.
Definition: authority.hpp:34
graphene::protocol::proposal_create_operation::proposed_ops
vector< op_wrapper > proposed_ops
Definition: proposal.hpp:79
graphene::protocol::proposal_create_operation::committee_proposal
static proposal_create_operation committee_proposal(const chain_parameters &param, fc::time_point_sec head_block_time)
Definition: proposal.cpp:31
graphene::protocol::proposal_create_operation
The proposal_create_operation creates a transaction proposal, for use in multi-sig scenarios.
Definition: proposal.hpp:70
graphene::protocol::proposal_delete_operation::validate
void validate() const
Definition: proposal.cpp:74
graphene::protocol::proposal_delete_operation::fee
asset fee
Definition: proposal.hpp:162
graphene::protocol::proposal_update_operation::fee_params_t::price_per_kbyte
uint32_t price_per_kbyte
Definition: proposal.hpp:123
graphene
Definition: api.cpp:48
raw.hpp
fc::safe
Definition: safe.hpp:26