defmodule NearApi.Account do
@moduledoc """
NearApi Account struct
Contains account_id, e.g. `hellowworld.testnet`, and KeyPair (with public and secret keys)
"""
@type t :: %__MODULE__{
account_id: String.t(),
key_pair: NearApi.KeyPair.t() | nil
}
defstruct [
:account_id,
:key_pair
]
@doc """
Send money from one Near account to another.
Technically this is a wrapper around `Transfer` transaction
`from_account` - an account strut NearApi.Account where `account_id` and `key_pair`
- `key_pair` must be FullAccess key and Transfers only available with this permissions level
`receiver_id` - string value of the Near account ID, e.g. helloworld.testnet
`amount` - as String because in Yocto
"""
@spec send_money(from_account :: NearApi.Account.t(), receiver_id :: String.t(), amount :: String.t()) ::
{:ok, body :: map} | NearApi.RPC.Errors.t()
def send_money(from_account, receiver_id, amount) do
actions = [%NearApi.Actions.Transfer{deposit: amount}]
{:ok, tx} = NearApi.Transaction.create_transaction(from_account, receiver_id, actions)
tx
|> NearApi.Transaction.payload(from_account.key_pair)
|> NearApi.RPC.Transactions.send_transaction_commit()
end
def build_account(account_id, key_pair) do
%__MODULE__{account_id: account_id, key_pair: key_pair}
end
end