Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.formance.com/llms.txt

Use this file to discover all available pages before exploring further.

There are several options when it comes to deciding where should the money come from. The send statement makes it handy by providing the following possibilities:

Single source

The simplest way of sending a monetary value is from a single source. Here, we draw COIN 100 from the world account:
send [COIN 100] (
  source = @world
  destination = @users:001
)

Ordered sources

Using an ordered source block, you can defined several accounts to draw from sequentially until the desired monetary value is reached.
send [COIN 100] (
  source = {
    @users:001:wallet
    @payments:001
  }
  destination = @orders:001
)
In example above, if the balance of COIN on the account users:001:wallet is 30, another 70 will be drawn from the payments:001 account. Ordered sources can also be maxed to a monetary, preventing them from being drawn more than the amount specified:
send [COIN 100] (
  source = {
    max [COIN 10] from @users:001:wallet
    @payments:001
  }
  destination = @orders:001
)

Portioned sources

In addition to sequential accounts, source blocks can also use fractions to split the expense onto multiple accounts. In any case, the summed total of fractions in a block needs to be equal to 1 and the remaining keyword can be used to reach that total.
send [COIN 100] (
  source = {
    10/100 from @platform:marketing
    remaining from @users:001:wallet
  }
  destination = @orders:001
)
Out of convenience, percentage notation is also available:
send [COIN 100] (
  source = {
    10% from @platform:marketing
    remaining from @users:001:wallet
  }
  destination = @orders:001
)

Nested sources

Source blocks can be nested with a combination of recursive ordered / portioned specifications:
send [COIN 100] (
  source = {
    50% from {
      max [COIN 10] from @users:001:wallet
      @users:001:chest
    }
    remaining from @payments:001
  }
  destination = @orders:001
)