multisig

Type: class

The eosio.msig system contract allows for creation of proposed transactions which require authorization from a list of accounts, approval of the proposed transactions by those accounts required to approve it, and finally, it also allows the execution of the approved transactions on the blockchain.

In short, the workflow to propose, review, approve and then executed a transaction it can be described by the following:

  • first you create a transaction json file,
  • then you submit this proposal to the eosio.msig contract, and you also insert the account permissions required to approve this proposal into the command that submits the proposal to the blockchain,
  • the proposal then gets stored on the blockchain by the eosio.msig contract, and is accessible for review and approval to those accounts required to approve it,
  • after each of the appointed accounts required to approve the proposed transactions reviews and approves it, you can execute the proposed transaction. The eosio.msig contract will execute it automatically, but not before validating that the transaction has not expired, it is not cancelled, and it has been signed by all the permissions in the initial proposal's required permission list.

propose

Type: void

Create proposal

Creates a proposal containing one transaction. Allows an account proposer to make a proposal proposal_name which has requested permission levels expected to approve the proposal, and if approved by all expected permission levels then trx transaction can we executed by this proposal. The proposer account is authorized and the trx transaction is verified if it was authorized by the provided keys and permissions, and if the proposal name doesn’t already exist; if all validations pass the proposal_name and trx trasanction are saved in the proposals table and the requested permission levels to the approvals table (for the proposer context). Storage changes are billed to proposer.

Parameter Name Description
proposer - The account proposing a transaction
proposal_name - The name of the proposal (should be unique for proposer)
requested - Permission levels expected to approve the proposal
trx - Proposed transaction

approve

Type: void

Approve proposal

Approves an existing proposal Allows an account, the owner of level permission, to approve a proposal proposal_name proposed by proposer. If the proposal's requested approval list contains the level permission then the level permission is moved from internal requested_approvals list to internal provided_approvals list of the proposal, thus persisting the approval for the proposal_name proposal. Storage changes are billed to proposer.

Parameter Name Description
proposer - The account proposing a transaction
proposal_name - The name of the proposal (should be unique for proposer)
level - Permission level approving the transaction
proposal_hash - Transaction's checksum

unapprove

Type: void

Revoke proposal

Revokes an existing proposal This action is the reverse of the approve action: if all validations pass the level permission is erased from internal provided_approvals and added to the internal requested_approvals list, and thus un-approve or revoke the proposal.

Parameter Name Description
proposer - The account proposing a transaction
proposal_name - The name of the proposal (should be an existing proposal)
level - Permission level revoking approval for proposal

cancel

Type: void

Cancel proposal

Cancels an existing proposal

Parameter Name Description
proposer - The account proposing a transaction
proposal_name - The name of the proposal (should be an existing proposal)
canceler - The account cancelling the proposal (only the proposer can cancel an unexpired transaction, and the canceler has to be different than the proposer) Allows the canceler account to cancel the proposal_name proposal, created by a proposer, only after time has expired on the proposed transaction. It removes corresponding entries from internal proptable and from approval (or old approvals) tables as well.

exec

Type: void

Execute proposal

Allows an executer account to execute a proposal.

Preconditions:

  • executer has authorization,
  • proposal_name is found in the proposals table,
  • all requested approvals are received,
  • proposed transaction is not expired,
  • and approval accounts are not found in invalidations table.

If all preconditions are met the transaction is executed as a deferred transaction, and the proposal is erased from the proposals table.

Parameter Name Description
proposer - The account proposing a transaction
proposal_name - The name of the proposal (should be an existing proposal)
executer - The account executing the transaction

invalidate

Type: void

Invalidate proposal

Allows an account to invalidate itself, that is, its name is added to the invalidations table and this table will be cross referenced when exec is performed.

Parameter Name Description
account - The account invalidating the transaction