create_accounts
Create one or more Account
s.
Event
The account to create. See Account
for constraints.
Result
Results are listed in this section in order of descending precedence — that is, if more than one error is applicable to the account being created, only the result listed first is returned.
ok
The account was successfully created; it did not previously exist.
Note that ok
is generated by the client implementation;
the network protocol does not include a result when the account was
successfully created.
linked_event_failed
The account was not created. One or more of the accounts in the linked chain is invalid, so the whole chain failed.
linked_event_chain_open
The account was not created. The Account.flags.linked
flag was set on the last event in the batch, which is not legal.
(flags.linked
indicates that the chain continues to the
next operation).
imported_event_expected
The account was not created. The Account.flags.imported
was set on the first account of the batch, but not all accounts in the
batch. Batches cannot mix imported accounts with non-imported
accounts.
imported_event_not_expected
The account was not created. The Account.flags.imported
was expected to not be set, as it’s not allowed to mix accounts
with different imported
flag in the same batch. The first
account determines the entire operation.
timestamp_must_be_zero
This result only applies when Account.flags.imported
is not set.
The account was not created. The Account.timestamp
is
nonzero, but must be zero. The cluster is responsible for setting this
field.
The Account.timestamp
can
only be assigned when creating accounts with Account.flags.imported
set.
imported_event_timestamp_out_of_range
This result only applies when Account.flags.imported
is set.
The account was not created. The Account.timestamp
is out
of range, but must be a user-defined timestamp greater than
0
and less than 2^63
.
imported_event_timestamp_must_not_advance
This result only applies when Account.flags.imported
is set.
The account was not created. The user-defined Account.timestamp
is
greater than the current cluster
time, but it must be a past timestamp.
reserved_field
The account was not created. Account.reserved
is
nonzero, but must be zero.
reserved_flag
The account was not created. Account.flags.reserved
is
nonzero, but must be zero.
id_must_not_be_zero
The account was not created. Account.id
is zero, which is a
reserved value.
id_must_not_be_int_max
The account was not created. Account.id
is
2^128 - 1
, which is a reserved value.
exists_with_different_flags
An account with the same id
already exists, but with
different flags
.
exists_with_different_user_data_128
An account with the same id
already exists, but with
different user_data_128
.
exists_with_different_user_data_64
An account with the same id
already exists, but with
different user_data_64
.
exists_with_different_user_data_32
An account with the same id
already exists, but with
different user_data_32
.
exists_with_different_ledger
An account with the same id
already exists, but with
different ledger
.
exists_with_different_code
An account with the same id
already exists, but with
different code
.
exists
An account with the same id
already exists.
With the possible exception of the following fields, the existing account is identical to the account in the request:
timestamp
debits_pending
debits_posted
credits_pending
credits_posted
To correctly recover from
application crashes, many applications should handle
exists
exactly as ok
.
flags_are_mutually_exclusive
The account was not created. An account cannot be created with the
specified combination of Account.flags
.
The following flags are mutually exclusive:
debits_pending_must_be_zero
The account was not created. Account.debits_pending
is nonzero, but must be zero.
An account’s debits and credits are only modified by transfers.
debits_posted_must_be_zero
The account was not created. Account.debits_posted
is nonzero, but must be zero.
An account’s debits and credits are only modified by transfers.
credits_pending_must_be_zero
The account was not created. Account.credits_pending
is nonzero, but must be zero.
An account’s debits and credits are only modified by transfers.
credits_posted_must_be_zero
The account was not created. Account.credits_posted
is nonzero, but must be zero.
An account’s debits and credits are only modified by transfers.
ledger_must_not_be_zero
The account was not created. Account.ledger
is zero, but
must be nonzero.
code_must_not_be_zero
The account was not created. Account.code
is zero, but
must be nonzero.
imported_event_timestamp_must_not_regress
This result only applies when Account.flags.imported
is set.
The account was not created. The user-defined Account.timestamp
regressed, but it must be greater than the last timestamp assigned to
any Account
in the cluster and cannot be equal to the
timestamp of any existing Transfer
.
Client libraries
For language-specific docs see:
Internals
If you’re curious and want to learn more, you can find the source
code for creating an account in src/state_machine.zig.
Search for fn create_account(
and
fn execute(
.