Skip to content

Allow multiple transactions in one Proposal #18

@ya7on

Description

@ya7on

Is your feature request related to a problem

Currently, the Proposal contract supports only a single transaction via the ProposalData structure:

struct ProposalData {
  receiver: Address;
  body: Cell;
  ...
}

This limits each proposal to executing only one action (e.g., a transfer, a call, or config update). In practice, communities often need to bundle multiple operations under a single vote — for example:

  • Transfer tokens to multiple addresses
  • Change multiple parameters
  • Execute a series of contract calls

Describe the solution you'd like

Enable multiple transactions per proposal.

Each proposal should be able to store and execute an ordered list of transactions. During execution, the contract should iterate through them and process each action in sequence.


Implementation ideas

Two approaches to store multiple transactions:

1. Linked List

Each transaction contains an optional reference to the next one:

struct ProposalPayload {
  receiver: Address;
  body: Cell;
  next: ProposalPayload?  // or Cell?
}

2. Indexed Map (Dictionary)

Use a Map<Int, ProposalPayload> to store transactions by index:

Map<Int, ProposalPayload> // key = transaction index

Open questions

  • Should proposal execution fail on first error, or continue through all transactions?
  • Should individual payloads be limited in size?

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionFurther information is requested

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions