group proposed_transactions

Graphene allows users to propose a transaction which requires approval of multiple accounts in order to execute. The user proposes a transaction using proposal_create_operation, then signatory accounts use proposal_update_operations to add or remove their approvals from this operation. When a sufficient number of approvals have been granted, the operations in the proposal are used to create a virtual transaction which is subsequently evaluated. Even if the transaction fails, the proposal will be kept until the expiration time, at which point, if sufficient approval is granted, the transaction will be evaluated a final time. This allows transactions which will not execute successfully until a given time to still be executed through the proposal mechanism. The first time the proposed transaction succeeds, the proposal will be regarded as resolved, and all future updates will be invalid.

The proposal system allows for arbitrarily complex or recursively nested authorities. If a recursive authority (i.e. an authority which requires approval of 'nested' authorities on other accounts) is required for a proposal, then a second proposal can be used to grant the nested authority's approval. That is, a second proposal can be created which, when sufficiently approved, adds the approval of a nested authority to the first proposal. This multiple-proposal scheme can be used to acquire approval for an arbitrarily deep authority tree.

Note that at any time, a proposal can be approved in a single transaction if sufficient signatures are available on the proposal_update_operation, as long as the authority tree to approve the proposal does not exceed the maximum recursion depth. In practice, however, it is easier to use proposals to acquire all approvals, as this leverages on-chain notification of all relevant parties that their approval is required. Off-chain multi-signature approval requires some off-chain mechanism for acquiring several signatures on a single transaction. This off-chain synchronization can be avoided using proposals.

Summary

Members Descriptions
structgraphene::chain::proposal_create_operation The proposal_create_operation creates a transaction proposal, for use in multi-sig scenarios

Creates a transaction proposal. The operations which compose the transaction are listed in order in proposed_ops, and expiration_time specifies the time by which the proposal must be accepted or it will fail permanently. The expiration_time cannot be farther in the future than the maximum expiration time set in the global properties object.
structgraphene::chain::proposal_update_operation The proposal_update_operation updates an existing transaction proposal

This operation allows accounts to add or revoke approval of a proposed transaction. Signatures sufficient to satisfy the authority of each account in approvals are required on the transaction containing this operation.
structgraphene::chain::proposal_delete_operation The proposal_delete_operation deletes an existing transaction proposal

This operation allows the early veto of a proposed transaction. It may be used by any account which is a required authority on the proposed transaction, when that account's holder feels the proposal is ill-advised and he decides he will never approve of it and wishes to put an end to all discussion of the issue. Because he is a required authority, he could simply refuse to add his approval, but this would leave the topic open for debate until the proposal expires. Using this operation, he can prevent any further breath from being wasted on such an absurd proposal.

struct graphene::chain::proposal_create_operation {#structgraphene_1_1chain_1_1proposalcreateoperation}

struct graphene::chain::proposal_create_operation
  : public graphene::chain::base_operation

The proposal_create_operation creates a transaction proposal, for use in multi-sig scenarios

Creates a transaction proposal. The operations which compose the transaction are listed in order in proposed_ops, and expiration_time specifies the time by which the proposal must be accepted or it will fail permanently. The expiration_time cannot be farther in the future than the maximum expiration time set in the global properties object.

Summary

Members Descriptions
publicassetfee
publicaccount_id_typefee_paying_account
public vector<op_wrapper>proposed_ops
public time_point_secexpiration_time
public optional< uint32_t >review_period_seconds
publicextensions_typeextensions
public inlineaccount_id_typefee_payer() const
public voidvalidate() const
publicshare_typecalculate_fee(constfee_parameters_type& k) const

Members

publicassetfee {#structgraphene_1_1chain_1_1proposalcreateoperation_1a44dcdd9bdf2198de039700f72c3be51e}

publicaccount_id_typefee_paying_account {#structgraphene_1_1chain_1_1proposalcreateoperation_1add9469f87efe146c498a2ec15c0794a3}

public vector<op_wrapper>proposed_ops {#structgraphene_1_1chain_1_1proposalcreateoperation_1afd72e778d7983044526ee06ddb1a72be}

public time_point_secexpiration_time {#structgraphene_1_1chain_1_1proposalcreateoperation_1a139682525efeb84af7f1816c42b26ef3}

public optional< uint32_t >review_period_seconds {#structgraphene_1_1chain_1_1proposalcreateoperation_1af2fc94e217169c77500111593a89403f}

publicextensions_typeextensions {#structgraphene_1_1chain_1_1proposalcreateoperation_1a6e90f6317b32815f5bd500911197162d}

public inlineaccount_id_typefee_payer() const {#structgraphene_1_1chain_1_1proposalcreateoperation_1a87cbd7d7c3f35d0ae643029d010b1398}

public voidvalidate() const {#structgraphene_1_1chain_1_1proposalcreateoperation_1a461648231991c2b74e8efdeab4d7134c}

publicshare_typecalculate_fee(constfee_parameters_type& k) const {#structgraphene_1_1chain_1_1proposalcreateoperation_1ab6c89f4b39277c2c362050fd1e76c9b1}

struct graphene::chain::proposal_update_operation {#structgraphene_1_1chain_1_1proposalupdateoperation}

struct graphene::chain::proposal_update_operation
  : public graphene::chain::base_operation

The proposal_update_operation updates an existing transaction proposal

This operation allows accounts to add or revoke approval of a proposed transaction. Signatures sufficient to satisfy the authority of each account in approvals are required on the transaction containing this operation.

If an account with a multi-signature authority is listed in approvals_to_add or approvals_to_remove, either all required signatures to satisfy that account's authority must be provided in the transaction containing this operation, or a secondary proposal must be created which contains this operation.

NOTE: If the proposal requires only an account's active authority, the account must not update adding its owner authority's approval. This is considered an error. An owner approval may only be added if the proposal requires the owner's authority.

If an account's owner and active authority are both required, only the owner authority may approve. An attempt to add or remove active authority approval to such a proposal will fail.

Summary

Members Descriptions
publicaccount_id_typefee_paying_account
publicassetfee
publicproposal_id_typeproposal
public flat_set<account_id_type>active_approvals_to_add
public flat_set<account_id_type>active_approvals_to_remove
public flat_set<account_id_type>owner_approvals_to_add
public flat_set<account_id_type>owner_approvals_to_remove
public flat_set<public_key_type>key_approvals_to_add
public flat_set<public_key_type>key_approvals_to_remove
publicextensions_typeextensions
public inlineaccount_id_typefee_payer() const
public voidvalidate() const
publicshare_typecalculate_fee(constfee_parameters_type& k) const
public voidget_required_authorities(vector<authority> &) const
public voidget_required_active_authorities(flat_set<account_id_type> &) const
public voidget_required_owner_authorities(flat_set<account_id_type> &) const

Members

publicaccount_id_typefee_paying_account {#structgraphene_1_1chain_1_1proposalupdateoperation_1a4f3284294f4724f7d66aa059f0d027c7}

publicassetfee {#structgraphene_1_1chain_1_1proposalupdateoperation_1a4790bb13f5e7ac19a798acf0e25d4959}

publicproposal_id_typeproposal {#structgraphene_1_1chain_1_1proposalupdateoperation_1a36f5310eb2928c2cae666619e42aee7e}

public flat_set<account_id_type>active_approvals_to_add {#structgraphene_1_1chain_1_1proposalupdateoperation_1a6acdcf6146d827d859fbfae26f9afb45}

public flat_set<account_id_type>active_approvals_to_remove {#structgraphene_1_1chain_1_1proposalupdateoperation_1a6eb5829db2d206536b3a4e7f93a1dc19}

public flat_set<account_id_type>owner_approvals_to_add {#structgraphene_1_1chain_1_1proposalupdateoperation_1a7d1d4deb7f8bc312c33d94a0b1611a39}

public flat_set<account_id_type>owner_approvals_to_remove {#structgraphene_1_1chain_1_1proposalupdateoperation_1a7981b23ac84ea7c9e24fc76d0ee36cae}

public flat_set<public_key_type>key_approvals_to_add {#structgraphene_1_1chain_1_1proposalupdateoperation_1ae3c7c971edf76280305cca51594fd930}

public flat_set<public_key_type>key_approvals_to_remove {#structgraphene_1_1chain_1_1proposalupdateoperation_1afdff730295abd4aa27b05569a4cf0862}

publicextensions_typeextensions {#structgraphene_1_1chain_1_1proposalupdateoperation_1a8e91e115e4021d4c0872cad92626ab33}

public inlineaccount_id_typefee_payer() const {#structgraphene_1_1chain_1_1proposalupdateoperation_1af014bfa7dbaa0ede7824d737fcaa0f88}

public voidvalidate() const {#structgraphene_1_1chain_1_1proposalupdateoperation_1aaac80473fb87f8bd0c50de0bb48c6359}

publicshare_typecalculate_fee(constfee_parameters_type& k) const {#structgraphene_1_1chain_1_1proposalupdateoperation_1ae9937a64ef56790d4519844c8f85f85a}

public voidget_required_authorities(vector<authority> &) const {#structgraphene_1_1chain_1_1proposalupdateoperation_1ad780512f494d893c2146cad105685e72}

public voidget_required_active_authorities(flat_set<account_id_type> &) const {#structgraphene_1_1chain_1_1proposalupdateoperation_1a1bd1cdd4394f8107dc3d254462a18e15}

public voidget_required_owner_authorities(flat_set<account_id_type> &) const {#structgraphene_1_1chain_1_1proposalupdateoperation_1aca017bf8df5c8a2f4bb8cc8be55c6d18}

struct graphene::chain::proposal_delete_operation {#structgraphene_1_1chain_1_1proposaldeleteoperation}

struct graphene::chain::proposal_delete_operation
  : public graphene::chain::base_operation

The proposal_delete_operation deletes an existing transaction proposal

This operation allows the early veto of a proposed transaction. It may be used by any account which is a required authority on the proposed transaction, when that account's holder feels the proposal is ill-advised and he decides he will never approve of it and wishes to put an end to all discussion of the issue. Because he is a required authority, he could simply refuse to add his approval, but this would leave the topic open for debate until the proposal expires. Using this operation, he can prevent any further breath from being wasted on such an absurd proposal.

Summary

Members Descriptions
publicaccount_id_typefee_paying_account
public boolusing_owner_authority
publicassetfee
publicproposal_id_typeproposal
publicextensions_typeextensions
public inlineaccount_id_typefee_payer() const
public voidvalidate() const

Members

publicaccount_id_typefee_paying_account {#structgraphene_1_1chain_1_1proposaldeleteoperation_1a5b65f25e2b54c4ecd21e2ce825f1283f}

public boolusing_owner_authority {#structgraphene_1_1chain_1_1proposaldeleteoperation_1ae5cc9076404b09c7a3c5825d4d3ff025}

publicassetfee {#structgraphene_1_1chain_1_1proposaldeleteoperation_1af5bf40db61f4bab76d07449a2b38dd82}

publicproposal_id_typeproposal {#structgraphene_1_1chain_1_1proposaldeleteoperation_1af4ec611b85149f07f98240341a770bae}

publicextensions_typeextensions {#structgraphene_1_1chain_1_1proposaldeleteoperation_1a4a313fb6e619ced0061fed0325629771}

public inlineaccount_id_typefee_payer() const {#structgraphene_1_1chain_1_1proposaldeleteoperation_1a54780b2f0fb82699d2a8f10bc2821861}

public voidvalidate() const {#structgraphene_1_1chain_1_1proposaldeleteoperation_1adcd74a59f3359ac7aa280c30540c8b27}