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
)