19   class [[sysio::contract(
"sysio.msig")]] 
multisig : 
public contract {
 
   21         using contract::contract;
 
   40         void propose(ignore<name> proposer, ignore<name> proposal_name,
 
   41               ignore<std::vector<permission_level>> requested, ignore<transaction> trx);
 
   56                       const sysio::binary_extension<sysio::checksum256>& proposal_hash );
 
   80         void cancel( 
name proposer, 
name proposal_name, 
name canceler );
 
   99         void exec( 
name proposer, 
name proposal_name, 
name executer );
 
  107         void invalidate( 
name account );
 
  113         using exec_action = sysio::action_wrapper<
"exec"_n, &multisig::exec>;
 
  117         struct [[sysio::table]] proposal {
 
  121            uint64_t primary_key()
const { 
return proposal_name.value; }
 
  124         typedef sysio::multi_index< 
"proposal"_n, proposal > proposals;
 
  126         struct [[sysio::table]] old_approvals_info {
 
  128            std::vector<permission_level>   requested_approvals;
 
  129            std::vector<permission_level>   provided_approvals;
 
  131            uint64_t primary_key()
const { 
return proposal_name.value; }
 
  133         typedef sysio::multi_index< 
"approvals"_n, old_approvals_info > old_approvals;
 
  136            permission_level 
level;
 
  140         struct [[sysio::table]] approvals_info {
 
  146            std::vector<approval>   requested_approvals;
 
  147            std::vector<approval>   provided_approvals;
 
  149            uint64_t primary_key()
const { 
return proposal_name.value; }
 
  151         typedef sysio::multi_index< 
"approvals2"_n, approvals_info > approvals;
 
  153         struct [[sysio::table]] invalidation {
 
  157            uint64_t primary_key()
 const { 
return account.value; }
 
  160         typedef sysio::multi_index< 
"invals"_n, invalidation > invalidations;