Proposing a Transaction¶
Proposed transactions can be used everywhere multiple parties have to agree for a transaction to become valid.
Table of Contents
Crafting a Transaction¶
It is recommended that the reader first reads through the following tutorial:
Proposing a Transaction¶
A proposed transaction is encapsulated within another operation type. We can achieve this by slightly modifying our procedure:
>>> begin_builder_transaction
>>> add_operation_to_builder_transaction $HANDLE [opId, {operation}]
# New:
>>> propose_builder_transaction2 $HANDLE <proposing-account-name> <expiration> <review-period-secs> false
>>> set_fees_on_builder_transaction $HANDLE BTS
>>> sign_builder_transaction $HANDLE true
Definition¶
-
signed_transaction
graphene::wallet::wallet_api
::
propose_builder_transaction
(transaction_handle_type handle, const time_point_sec &expiration = time_point::now() + fc::minutes(1), uint32_t review_period_seconds = 0, bool broadcast = true) const Create a proposal containing the operations in a transaction builder (create a new proposal_create operation, then replace the transaction builder with the new operation), then sign the transaction and optionally broadcast to the network.
Note: this command is buggy because unable to specify proposer. It will be deprecated in a future release. Please use
propose_builder_transaction2()
instead.- Return
a signed transaction
- Parameters
handle
: handle of the transaction builderexpiration
: when the proposal will expirereview_period_seconds
: review period of the proposal in secondsbroadcast
: whether to broadcast the signed transaction to the network
-
signed_transaction
graphene::wallet::wallet_api
::
propose_builder_transaction2
(transaction_handle_type handle, const string &account_name_or_id, const time_point_sec &expiration = time_point::now() + fc::minutes(1), uint32_t review_period_seconds = 0, bool broadcast = true) const Create a proposal containing the operations in a transaction builder (create a new proposal_create operation, then replace the transaction builder with the new operation), then sign the transaction and optionally broadcast to the network.
- Return
a signed transaction
- Parameters
handle
: handle of the transaction builderaccount_name_or_id
: name or ID of the account who would pay fees for creating the proposalexpiration
: when the proposal will expirereview_period_seconds
: review period of the proposal in secondsbroadcast
: whether to broadcast the signed transaction to the network
Approving a Proposal¶
A proposal can be approved simply by:
approve_proposal <proposing-account> <proposal_id> {"active_approvals_to_add" : ["<account-name-required-for-approval>"]} false
When replacing the final false
with true, the transaction will be
broadcasted!
Available approval options are:
active_approvals_to_add
active_approvals_to_remove
owner_approvals_to_add
owner_approvals_to_remove
key_approvals_to_add
key_approvals_to_remove
Definition¶
-
signed_transaction
graphene::wallet::wallet_api
::
approve_proposal
(const string &fee_paying_account, const string &proposal_id, const approval_delta &delta, bool broadcast) const Approve or disapprove a proposal.
- Return
the signed version of the transaction
- Parameters
fee_paying_account
: The account paying the fee for the op.proposal_id
: The proposal to modify.delta
: Members contain approvals to create or remove. In JSON you can leave empty members undefined.broadcast
: true if you wish to broadcast the transaction
Example: Setting Smartcoin parameter¶
A simple asset_update takes the following form:
get_prototype_operation asset_update_bitasset_operation
[
12,{
"fee": {
"amount": 0,
"asset_id": "1.3.0"
},
"issuer": "1.2.0",
"asset_to_update": "1.3.0",
"new_options": {
"feed_lifetime_sec": 86400,
"minimum_feeds": 1,
"force_settlement_delay_sec": 86400,
"force_settlement_offset_percent": 0,
"maximum_force_settlement_volume": 2000,
"short_backing_asset": "1.3.0",
"extensions": []
},
"extensions": []
}
]
The operation id for the asset_update_bitasset_operation
is thus 12
(third line) and the core elements (removing fee) of this operation take the
form:
{
"issuer": "1.2.0",
"asset_to_update": "1.3.0",
"new_options": {
"feed_lifetime_sec": 86400,
"minimum_feeds": 1,
"force_settlement_delay_sec": 86400,
"force_settlement_offset_percent": 0,
"maximum_force_settlement_volume": 2000,
"short_backing_asset": "1.3.0",
"extensions": []
},
"extensions": []
}
We add an operation to a transaction as follows (line breaks inserted for readability):
>>> begin_builder_transaction
0
>>> add_operation_to_builder_transaction
0
[12, {
"asset_to_update": "1.3.113",
"issuer": "1.2.0",
"extensions": [],
"new_options": {
"feed_lifetime_sec": 86400,
"force_settlement_delay_sec": 86400,
"short_backing_asset": "1.3.0",
"maximum_force_settlement_volume": 200,
"force_settlement_offset_percent": 0,
"minimum_feeds": 7,
"extensions": []
},
}]
The corresponding asset id
can be obtained with get_asset
.
Now let’s make it a proposal for the committee members to sign:
>>> propose_builder_transaction2 0 init0 "2015-12-10T14:55:00" 3600 false
We add a fee payed in BTS, sign and broadcast the transaction (if valid):
>>> set_fees_on_builder_transaction 0 BTS
>>> sign_builder_transaction 0 true