Sources
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 = {
10% from {
@platform:marketing
@world
}
remaining from {
@users:001:wallet
@users:001:credit
}
}
destination = @orders:001
)