Skip to main content
Version: v2.0

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
)