Skip to content

Requirements to run the Owner API

Wallet data does not exist until the user runs epic-wallet init. The init command creates epic-wallet.toml, prompts the user for a password, creates a seed file, stores the resulting data files in the directory specified in epic-wallet.toml and initialises the wallet database.

This will allow to run epic-wallet owner_api command to start a web server listening for API calls done via POST requests with JSON payload.


Security Model

Documentation of the Secure API workflow source: docs.grin.mw.

Author: Michael Cordner


Given that the Wallet's Owner API needs to deal with sensitive data such as passwords and seed phrases, the API is enhanced with a ECDH and Token-based security model, the primary goals of which are to:

  • Ensure sensitive data such as passwords or seed phrases are always end-to-end encrypted between the client and the Owner API server, regardless of what higher-level protocols are used during the exchange.

  • Minimize the potential for damage that can be done by a third party listening on the exchange between a wallet client and its corresponding server.

  • Ensure that sensitive data such as passwords or seed phrases are not resident in server-side memory any longer than they absolutely need to be.

Note that the "SecureAPI" mode and all lifecycle functions are implemented in a V3 API, with the V2 API maintained for a time for backwards compatibility. The V3 API requires all JSON-RPC communication to be encrypted, except for the init_secure_api function.

SecureAPI Mode consists of an ECDH key agreement followed by the establishment of an API Token that's used to XOR encrypt the wallet seed on the server side. The negotiated ECDH shared key is used to encrypt all requests and responses between the client and the JSON-RPC layer, while the token must be included in all API requests to allow the wallet backend to decrypt the seed. 'Open' wallets store their in-memory seeds XORed against the token, which is temporarily XORed against the supplied token during each request to reproduce the master seed.

ECDH will use secp256k1 for key agreement.

Encryption of JSON-RPC requests and responses will be performed using AEAD in GCM mode with 128-bit tags, 96 bit nonces, a 16 byte suffix length and an empty vector for the additional data. A 12 byte nonce will be applied in the encryption and included in each request/response to use on the decrypting side.

Encrypted requests
{
    "jsonrpc": "2.0",
    "method": "encrypted_request_v3",
    "id": "1",
    "params": {
       "nonce": "ef32...",
       "body_enc": "e0bcd..."
    }
}

Security Mode: Initialization

To initialize the Secure API, clients will generate an EC keypair using the secp256k1 curve, and provide the public key to the Owner API server via a new init_secure_api method. Both client and server will calculate the shared key, and store this key for the remainder of the session. The sequence of operations is outlined below:

img.png

The Secure API assumes that all requests (other than the actual call to init_secure_api itself) will be encrypted with the shared secret and presented in the above JSON-RPC format. All API calls other than open_wallet will be accompanied by a valid encrypted token derived during the call to the open_wallet function. This assumption will remain until the server process exits or a call to a corresponding close_wallet function is called.

The shared secret can be refreshed by the client at any time with another call to init_secure_api (either encrypted or unencrypted). Closing a wallet via the close_wallet function does not regenerate the shared secret but does invalidate the token and drops the XORed seed from memory.

Security Mode: Opening The Wallet

Opening a wallet in SecureAPI mode consists of encrypting a request to open_wallet (which contains the wallet password) with the shared secret s. The request is decrypted in the JSON-RPC layer and the password is used in the wallet backend to unlock the wallet master seed. The master seed is stored XORed against a randomly-generated token T, which is returned to the client in an encrypted response for inclusion in all further API calls. T is valid for the lifetime of the process, or until a corresponding call to close_wallet.

img_1.png

Security Mode: Calling API Functions

Calls to each API function proceed as per a call to open_wallet, however each encrypted request must contain the token provided by the open_wallet call. The token is XORed against the stored XORed seed to recover the original seed by the backend for the duration of each call, and the seed value is dropped and zeroed from memory when each call returns.

Basic Authentication

Each API call by default is also secured with the basic authentication, default credentials:

  • user: epic
  • password saved in .owner_api_secret file by default placed in the main waller directory.

You can change the path of the .owner_api_secret file ine the epic-wallet.toml configuration file.

Commenting out line starting with api_secret_path will disable the basic authentication.


API Endpoint

When running epic-wallet with defaults, owner API URL is available at localhost:3420/v3/owner.


Code Examples

Before running the code make sure your epic-wallet web server is running:

epic-wallet owner_api

Requires Python 3.10+ and following packages:

python3 -m pip install coincurve pycryptodome requests
Retrieve wallet balance code example
secure_api_example.py
from typing import Union
import base64
import json
import os

from coincurve import PublicKey, PrivateKey
from Crypto.Cipher import AES
import requests


# DEFAULT VALUES
api_url = f"http://127.0.0.1:3420/v3/owner"
auth_user = 'epic'
owner_api_secret_path = f"{os.environ['HOME']}/.epic/main/.owner_api_secret"
wallet_password = "your_password"

with open(owner_api_secret_path, 'r') as f:
    owner_api_secret = f.read()

basic_auth = (auth_user, owner_api_secret)


def parse_api_response(response: Union[dict, requests.Response]):
    """
    Parse EPIC API responses, handle different errors
    and extract the data from different response formats.
    """
    if isinstance(response, requests.Response):
        if response.status_code not in [200, 201]:
            if response.status_code == 401:
                raise SystemExit("Unauthorized to access API")
            else:
                raise SystemExit(f"Error: {response.status_code}, {response.reason}")
        try:
            response = response.json()
        except ValueError as e:
            raise SystemExit(f"Error while reading api response: '{str(e)}'\n"
                             f"Make sure your auth credentials are valid.")

    if "error" in response:
        raise SystemExit(f'{response["error"]}')

    elif "Err" in response:
        raise SystemExit(f'{response["result"]}')

    elif 'Ok' in response['result']:
        return response['result']['Ok']

    else:
        return response


def init_secure_api() -> str:
    """
    This is the first step in epic-wallet Secure API workflow
    Initialize process of computing encryption_key to encrypt payloads
    :return: encryption key
    """

    # Randomly created encryption key valid during the session
    secret_key = PrivateKey(os.urandom(32))

    # Prepare payload for the API call
    payload = {
        'jsonrpc': '2.0',
        'id': 1,
        'method': "init_secure_api",
        'params': {'ecdh_pubkey': secret_key.public_key.format().hex()}
        }

    # POST your secret_key.public_key and receive new api_public_key
    response = requests.post(api_url, json=payload, auth=basic_auth)
    api_public_key_hex = parse_api_response(response)

    # Parse received api_public_key from hex to bytes
    api_public_key_bytes = PublicKey(bytes.fromhex(api_public_key_hex)).format()

    # Compute new encryption_key used for further encryption every api_call in this session
    encryption_key_ = PublicKey(api_public_key_bytes).multiply(secret_key.secret)

    # Format to hex and remove first 2 bits
    encryption_key_ = encryption_key_.format().hex()[2:]
    print(f"✅  Encryption key successfully generated")

    return encryption_key_


def encrypt(key: str, payload: dict) -> dict:
    """
    :param key: 32bit `secp256k1` ecdh encryption key computed via init_secure_api() func
    :param payload: json payload to encrypt
    :return: dict with base64 encoded AES-256-GMC encrypted payload and nonce as hex string

    Encrypt api_call JSON payload with:
     - encryption_key
     - 12bit nonce,
     - 16bit tag
    """
    nonce = os.urandom(12)
    message = json.dumps(payload).encode()
    aes_cipher = AES.new(bytes.fromhex(key), AES.MODE_GCM, nonce=nonce)
    ciphertext, tag = aes_cipher.encrypt_and_digest(message)
    encrypted_params = {'nonce': nonce.hex(), 'body_enc': base64.b64encode(ciphertext + tag).decode()}

    return encrypted_params


def decrypt(key: str, data: dict, nonce: bytes) -> str:
    """ Decrypt base64 encoded string
    :param key: 32bit `secp256k1` ecdh encryption key computed via init_secure_api() func
    :param data: encrypted message
    :param nonce: 12bit nonce as hex string
    :return: decoded string with JSON response
    """
    data = base64.b64decode(data)
    ciphertext = data[:-16]
    aesCipher = AES.new(bytes.fromhex(key), AES.MODE_GCM, nonce=nonce)
    plaintext = aesCipher.decrypt(ciphertext)

    return plaintext.decode()


def secure_api_call(key: str, method: str, params: dict):
    """
    Execute secure `owner_api` call, payload is encrypted
    :param key: 32bit secp256k1 ecdh encryption key computed via init_secure_api() func
    :param method: api call method name
    :param params: dict with api_call params
    :return: dict with decrypted data
    """

    payload = {
        'jsonrpc': '2.0',
        'id': 1,
        'method': method,
        'params': params
        }

    # Encrypt payload with computed encryption key
    encrypted_payload = encrypt(key, payload)

    # Execute owner_api call with encrypted payload
    payload = {
        'jsonrpc': '2.0',
        'id': 1,
        'method': 'encrypted_request_v3',
        'params': encrypted_payload
        }

    encrypted_response = requests.post(
        url=api_url,
        json=payload,
        auth=basic_auth
        )

    encrypted_response = parse_api_response(encrypted_response)

    # Decrypt response and return dict with response data
    nonce = bytes.fromhex(encrypted_response['nonce'])
    encrypted_response = encrypted_response['body_enc']

    decrypted_response = decrypt(
        encryption_key,
        encrypted_response,
        nonce
        )

    return parse_api_response(json.loads(decrypted_response))


def open_wallet(password, key) -> str:
    """
    This is the second step in epic-wallet API workflow
    Make an `open_wallet` API call, get authentication token and use it
    in all calls for this wallet instance during this session.
    """

    open_wallet_params = {
        'name': 'default',
        'password': password,
        }

    response = secure_api_call(
        key=key,
        method='open_wallet',
        params=open_wallet_params
        )

    print(f"✅  Secure token successfully generated")
    return response


"""
In the example below we will use defined functions to generate secure token 
and retrieve wallet balance. Different API endpoint will use different params
but the workflow will be the same.
"""

# Call `init_secure_api` API endpoint to initialize Secure API workflow,
# and generate encryption_key used to encrypt data payload
encryption_key = init_secure_api()

# Call `open_wallet` API endpoint to generate authentication token
token = open_wallet(
    password=wallet_password,
    key=encryption_key
    )

# Prepare `retrieve_summary_info` API call params
info_params = {
    "token": token,
    "refresh_from_node": True,
    "minimum_confirmations": 3
    }

# Call `retrieve_summary_info` endpoint and print the result
balance = secure_api_call(
    key=encryption_key,
    method='retrieve_summary_info',
    params=info_params)

print(balance)

NodeJS and NPM package manager is required

npm i jayson
Retrieve wallet balance and transactions code example
secure_api_example.js
/* Sample Code for connecting to the V3 Secure API via Node
 *
 * With thanks to xiaojay of Niffler Wallet:
 * https://github.com/epicfans/Niffler/blob/gw3/src/shared/walletv3.js
 *
 */

let password = ""; // your wallet pass
let port = "3420"; // :13420 = default floonet port, :3420 default mainnet port
let api_secret = ""; //`cat ~/.epic/main/.owner_api_secret` or `cat ~/.epic/floo/.owner_api_secret`

const jayson = require('jayson/promise');
const crypto = require('crypto');



const client = jayson.client.http('http://epic:'+ api_secret +'@127.0.0.1:' + port + '/v3/owner');

// Demo implementation of using `aes-256-gcm` with node.js's `crypto` lib.
const aes256gcm = (shared_secret) => {
    const ALGO = 'aes-256-gcm';

    // encrypt returns base64-encoded ciphertext
    const encrypt = (str, nonce) => {
        let key = Buffer.from(shared_secret, 'hex')
        const cipher = crypto.createCipheriv(ALGO, key, nonce)
        const enc = Buffer.concat([cipher.update(str, 'utf8'), cipher.final()])
        const tag = cipher.getAuthTag()
        return Buffer.concat([enc, tag]).toString('base64')
    };

    // decrypt decodes base64-encoded ciphertext into a utf8-encoded string
    const decrypt = (enc, nonce) => {
        //key,nonce is all buffer type; data is base64-encoded string
        let key = Buffer.from(shared_secret, 'hex')
        const data_ = Buffer.from(enc, 'base64')
        const decipher = crypto.createDecipheriv(ALGO, key, nonce)
        const len = data_.length
        const tag = data_.slice(len-16, len)
        const text = data_.slice(0, len-16)
        decipher.setAuthTag(tag)
        const dec = decipher.update(text, 'binary', 'utf8') + decipher.final('utf8');
        return dec
    };

    return {
        encrypt,
        decrypt,
    };
};

class JSONRequestEncrypted {
    constructor(id, method, params) {
        this.jsonrpc = '2.0'
        this.method = method
        this.id = id
        this.params = params
    }

    async send(key){
        const aesCipher = aes256gcm(key);
        const nonce = new Buffer.from(crypto.randomBytes(12));
        let enc = aesCipher.encrypt(JSON.stringify(this), nonce);
        console.log("Encrypted: " + enc)
        let params = {
            'nonce': nonce.toString('hex'),
            'body_enc': enc,
        }
        let response = await client.request('encrypted_request_v3', params);

        if (response.err) {
            throw response.err
        }

        const nonce2 = Buffer.from(response.result.Ok.nonce, 'hex');
        const data = Buffer.from(response.result.Ok.body_enc, 'base64');

        let dec = aesCipher.decrypt(data, nonce2)
        return dec
    }
}

async function initSecure() {
    let ecdh = crypto.createECDH('secp256k1')
    ecdh.generateKeys()
    let publicKey = ecdh.getPublicKey('hex', 'compressed')
    const params = {
        'ecdh_pubkey': publicKey
    }
    let response = await client.request('init_secure_api', params);
    if (response.err) {
        throw response.err
    }

    return ecdh.computeSecret(response.result.Ok, 'hex', 'hex')
}

function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

async function main() {
    let shared_key = await initSecure();

    let response = await new JSONRequestEncrypted(1, 'open_wallet', {
        "name": null,
        "password": password,
    }).send(shared_key);


    let token = JSON.parse(response).result.Ok;

    let iterations = 1;

    for (i=0; i<iterations*2; i+=2)  {
        let info_response = await new JSONRequestEncrypted(i, 'retrieve_summary_info', {
            "token": token,
            "refresh_from_node": true,
            "minimum_confirmations": 1,
        }).send(shared_key)

        console.log("Info Response: ", info_response);
        await sleep(2000)

        let txs_response = await new JSONRequestEncrypted(i+1, 'retrieve_txs', {
            "token": token,
            "refresh_from_node": true,
            "tx_id": null,
            "tx_slate_id": null,
        }).send(shared_key)

        console.log("Txs Response: ", txs_response);
        await sleep(2000)
    }
}


main();
Get transaction proof code example
secure_api_example.js
/* Sample Code for connecting to the V3 Secure API via Node
 *
 * With thanks to xiaojay of Niffler Wallet:
 * https://github.com/epicfans/Niffler/blob/gw3/src/shared/walletv3.js
 *
 */

let password = ""; // your wallet pass
let port = "3420"; // :13420 = default floonet port, :3420 default mainnet port
let api_secret = ""; //`cat ~/.epic/main/.owner_api_secret` or `cat ~/.epic/floo/.owner_api_secret`

const jayson = require('jayson/promise');
const crypto = require('crypto');



const client = jayson.client.http('http://epic:'+ api_secret +'@127.0.0.1:' + port + '/v3/owner');

// Demo implementation of using `aes-256-gcm` with node.js's `crypto` lib.
const aes256gcm = (shared_secret) => {
    const ALGO = 'aes-256-gcm';

    // encrypt returns base64-encoded ciphertext
    const encrypt = (str, nonce) => {
        let key = Buffer.from(shared_secret, 'hex')
        const cipher = crypto.createCipheriv(ALGO, key, nonce)
        const enc = Buffer.concat([cipher.update(str, 'utf8'), cipher.final()])
        const tag = cipher.getAuthTag()
        return Buffer.concat([enc, tag]).toString('base64')
    };

    // decrypt decodes base64-encoded ciphertext into a utf8-encoded string
    const decrypt = (enc, nonce) => {
        //key,nonce is all buffer type; data is base64-encoded string
        let key = Buffer.from(shared_secret, 'hex')
        const data_ = Buffer.from(enc, 'base64')
        const decipher = crypto.createDecipheriv(ALGO, key, nonce)
        const len = data_.length
        const tag = data_.slice(len-16, len)
        const text = data_.slice(0, len-16)
        decipher.setAuthTag(tag)
        const dec = decipher.update(text, 'binary', 'utf8') + decipher.final('utf8');
        return dec
    };

    return {
        encrypt,
        decrypt,
    };
};

class JSONRequestEncrypted {
    constructor(id, method, params) {
        this.jsonrpc = '2.0'
        this.method = method
        this.id = id
        this.params = params
    }

    async send(key){
        const aesCipher = aes256gcm(key);
        const nonce = new Buffer.from(crypto.randomBytes(12));
        let enc = aesCipher.encrypt(JSON.stringify(this), nonce);
        console.log("Encrypted: " + enc)
        let params = {
            'nonce': nonce.toString('hex'),
            'body_enc': enc,
        }
        let response = await client.request('encrypted_request_v3', params);

        if (response.err) {
            throw response.err
        }

        const nonce2 = Buffer.from(response.result.Ok.nonce, 'hex');
        const data = Buffer.from(response.result.Ok.body_enc, 'base64');

        let dec = aesCipher.decrypt(data, nonce2)
        return dec
    }
}

async function initSecure() {
    let ecdh = crypto.createECDH('secp256k1')
    ecdh.generateKeys()
    let publicKey = ecdh.getPublicKey('hex', 'compressed')
    const params = {
        'ecdh_pubkey': publicKey
    }
    let response = await client.request('init_secure_api', params);
    if (response.err) {
        throw response.err
    }

    return ecdh.computeSecret(response.result.Ok, 'hex', 'hex')
}

async function main() {
    let shared_key = await initSecure();

    let response = await new JSONRequestEncrypted(1, 'open_wallet', {
        "name": null,
        "password": password,
    }).send(shared_key);

  console.log(response);
    let token = JSON.parse(response).result.Ok;
    /* get data from a export with command ./epic-wallet export_proof -i 17 testproof.txt */
    let info_response = await new JSONRequestEncrypted(2, 'verify_payment_proof', {
            "token": token,
            "proof": {
              "amount": "232400000",
              "excess": "08a551b3b06fcac53fc719c08640a216839133438d313e7c7e5c0ce0b31c3056e1",
              "recipient_address": "qjrfkoysp4mulzbxiyhsvik5t4yb4636hpuoxqveylg5dovm4nosx7id",//Receiver Address (Onion V3)
              "recipient_sig": "ab6c4f6434a1f66d7106aa830d4784de428105754465ba864199690764c910d4ff425aefda04c16934311a9414eb9baf3da18b77b55e9c25ee15fdf998419a0d",
              "sender_address": "v7yeumerch3svoeqomn2likjrucfhg2m3moucb5bcohxktmcbzmw2bqd",//Sender Address (Onion V3)
              "sender_sig": "aa29e81034ae8a0764e3a20e3c3cdee37b5d86ba42e3cbc391c00517c5529c8f23b8cd1369582b72852a76815b1131b7b217ae06b4e35d40f13c451a1cd74400"
            }
    }).send(shared_key)

    console.log("Info Response: ", info_response);

}


main();

Methods

accounts

Returns a list of accounts stored in the wallet (i.e. mappings between user-specified labels and BIP32 derivation paths).

{
    "jsonrpc": "2.0",
    "method": "accounts",
    "params": {
        "token": "<token_obtained_via_open_wallet>"
},
"id": 1
}
    {
        "jsonrpc": "2.0",
        "result": {
            "Ok": [
                {
                    "label": "default",
                    "path": "0200000000000000000000000000000000"
                }
            ]
        },
        "id": 1
    }

create_account_path

Creates a new ‘account’, which is a mapping of a user-specified label to a BIP32 path

{
    "jsonrpc": "2.0",
    "method": "create_account_path",
    "params": {
        "token": "<token_obtained_via_open_wallet>",
        "label": "account1"
},
"id": 1
}
    {
        "jsonrpc": "2.0",
        "result": {
            "Ok": "0200000001000000000000000000000000"
        },
        "id": 1
    }

set_active_account

Sets the wallet’s currently active account. This sets the BIP32 parent path used for most key-derivation operations.

    {
    "jsonrpc": "2.0",
    "method": "set_active_account",
    "params": {
        "token": "<token_obtained_via_open_wallet>",
        "label": "default"
    },
    "id": 1
}
    {
        "jsonrpc": "2.0",
        "result": {
            "Ok": null
        },
        "id": 1
    }

retrieve_outputs

Returns a list of outputs from the active account in the wallet.

{
    "jsonrpc": "2.0",
    "method": "retrieve_outputs",
    "params": {
        "token": "<token_obtained_via_open_wallet>",
        "include_spent": false,
        "refresh_from_node": true,
        "tx_id": null
    },
    "id": 1
}
    {
        "id": 1,
        "jsonrpc": "2.0",
        "result": {
            "Ok": [
                true,
                [
                    {
                        "commit": "089be87c488db1e7c783b19272a83b23bce56a5263163554b345c6f7ffedac517e",
                        "output": {
                            "commit": "089be87c488db1e7c783b19272a83b23bce56a5263163554b345c6f7ffedac517e",
                            "height": "1",
                            "is_coinbase": true,
                            "key_id": "0300000000000000000000000000000000",
                            "lock_height": "4",
                            "mmr_index": null,
                            "n_child": 0,
                            "root_key_id": "0200000000000000000000000000000000",
                            "status": "Unspent",
                            "tx_log_entry": 0,
                            "value": "1457920000"
                        }
                    },
                    {
                        "commit": "09d8836ffd38ffca42567ef965fdcf1f35b05aeb357664d70cd482438ca0ca0c9e",
                        "output": {
                            "commit": "09d8836ffd38ffca42567ef965fdcf1f35b05aeb357664d70cd482438ca0ca0c9e",
                            "height": "2",
                            "is_coinbase": true,
                            "key_id": "0300000000000000000000000100000000",
                            "lock_height": "5",
                            "mmr_index": null,
                            "n_child": 1,
                            "root_key_id": "0200000000000000000000000000000000",
                            "status": "Unspent",
                            "tx_log_entry": 1,
                            "value": "1457920000"
                        }
                    }
                ]
            ]
        }
    }

retrieve_txs

Returns a list of Transaction Log Entries from the active account in the wallet.

{
    "jsonrpc": "2.0",
    "method": "retrieve_txs",
    "params": {
        "token": "<token_obtained_via_open_wallet>",
        "refresh_from_node": true,
        "tx_id": null,
        "tx_slate_id": null
    },
    "id": 1
}
    {
        "id": 1,
        "jsonrpc": "2.0",
    "result": {
        "Ok": [
        true,
        [
            {
            "amount_credited": "1457920000",
            "amount_debited": "0",
            "confirmation_ts": "2019-01-15T16:01:26Z",
            "confirmed": true,
            "creation_ts": "2019-01-15T16:01:26Z",
            "fee": null,
            "id": 0,
            "kernel_excess": "09a89280fa8d888358ab730383f00a3d990b7f2c6b17fc960501f30aac8e014478",
            "kernel_lookup_min_height": 1,
            "messages": null,
            "num_inputs": 0,
            "num_outputs": 1,
            "parent_key_id": "0200000000000000000000000000000000",
            "stored_tx": null,
            "ttl_cutoff_height": null,
            "tx_slate_id": null,
            "payment_proof": null,
            "tx_type": "ConfirmedCoinbase"
            },
            {
            "amount_credited": "1457920000",
            "amount_debited": "0",
            "confirmation_ts": "2019-01-15T16:01:26Z",
            "confirmed": true,
            "creation_ts": "2019-01-15T16:01:26Z",
            "fee": null,
            "id": 1,
            "kernel_excess": "08bae42ff7d5fa5aca058fd0889dd1e40df16bf3ee2eea6e5db720c0a6d638a7f8",
            "kernel_lookup_min_height": 2,
            "messages": null,
            "num_inputs": 0,
            "num_outputs": 1,
            "parent_key_id": "0200000000000000000000000000000000",
            "stored_tx": null,
            "ttl_cutoff_height": null,
            "payment_proof": null,
            "tx_slate_id": null,
            "tx_type": "ConfirmedCoinbase"
            }
        ]
        ]
    }
    }

retrieve_summary_info

Returns summary information from the active account in the wallet.

{
    "jsonrpc": "2.0",
    "method": "retrieve_summary_info",
    "params": {
        "token": "<token_obtained_via_open_wallet>",
        "refresh_from_node": true,
        "minimum_confirmations": 3
    },
    "id": 1
}
    {
    "id": 1,
        "jsonrpc": "2.0",
        "result": {
            "Ok": [
                true,
                {
                    "amount_awaiting_confirmation": "0",
                    "amount_awaiting_finalization": "0",
                    "amount_currently_spendable": "1457920000",
                    "amount_immature": "4373760000",
                    "amount_locked": "0",
                    "last_confirmed_height": "4",
                    "minimum_confirmations": 3",
                    "total": "5831680000"
                }

            ]
        }
    }

init_send_tx

Initiates a new transaction as the sender, creating a new Slate object containing the sender’s inputs, change outputs, and public signature data. This slate can then be sent to the recipient to continue the transaction via the Foreign API’s receive_tx method.

{
    "jsonrpc": "2.0",
    "method": "init_send_tx",
    "params": {
        "token": "<token_obtained_via_open_wallet>",
        "args": {
            "src_acct_name": null,
            "amount": "60000000",
            "minimum_confirmations": 3,
            "max_outputs": 500,
            "num_change_outputs": 1,
            "selection_strategy_is_use_all": true,
            "message": "my message",
            "target_slate_version": null,
            "payment_proof_recipient_address": "d03c09e9c19bb74aa9ea44e0fe5ae237a9bf40bddf0941064a80913a4459c8bb",
            "ttl_blocks": null,
            "send_args": {
                "method": "http",
                "dest": "http://127.0.0.1:3415",
                "finalize": true,
                "post_tx": true,
                "fluff": false
              }
        }
    },
    "id": 1
}
    {
    "id": 1,
    "jsonrpc": "2.0",
    "result": {
        "Ok": {
        "amount": "60000000",
        "fee": "800000",
        "height": "4",
        "id": "0436430c-2b02-624c-2032-570501212b00",
        "lock_height": "0",
        "num_participants": 2,

        "participant_data": [
            {
            "id": "0",
            "message": "my message",
            "message_sig": "8f07ddd5e9f5179cff19486034181ed76505baaad53e5d994064127b56c5841bea065fb74c27c31d611427ac5fa1459d1db340d7475e2967f19e2fa95687d88c",
            "part_sig": null,
            "public_blind_excess": "039fbac4782fa1600aa704c38073eece85e3a085a90446ded19a9fec90e432b330",
            "public_nonce": "031b84c5567b126440995d3ed5aaba0565d71e1834604819ff9c17f5e9d5dd078f"
            }
        ],
        "payment_proof": {
            "receiver_address": "d03c09e9c19bb74aa9ea44e0fe5ae237a9bf40bddf0941064a80913a4459c8bb",
            "receiver_signature": null,
            "sender_address": "32cdd63928854f8b2628b1dce4626ddcdf35d56cb7cfdf7d64cca5822b78d4d3"
            },
            "ttl_cutoff_height": null,
        "tx": {
            "body": {
            "inputs": [
            {
                "commit": "089be87c488db1e7c783b19272a83b23bce56a5263163554b345c6f7ffedac517e",
                "features": "Coinbase"
            }
            ],
            "kernels": [
            {
                "excess": "000000000000000000000000000000000000000000000000000000000000000000",
                "excess_sig": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
                "features": "Plain",
                "fee": "800000",
                "lock_height": "0"
            }
            ],
            "outputs": [
            {
                "commit": "0832ca73c2049ee0c8f555c6297aa3658eb3f8ce711dfd63d6d5234cf3191c7756",
                "features": "Plain",
                "proof": "1393386202b2ba345e131efb1dfc3730c000ee6b6f3cb8d56e3d0680796b11940abeaed75e18458b544d28765b530a7ca2ed170b42c8bd5e07d4451b0cfa59c20fee43c9107091a328a9f745a255702ea17ac50f5e92b2daf51a7851e8ffde5e11a6837b5b6058aee5ab1e68bcd756646f36b38c6262aa20ff9c194d2e3e155b608216186fee66ef8ca269d31a015c63cca3cf5f0d40e4cccd13d390ed1aeed7a7c7d0709e9b509844462098d97e983ba6963ee3a68955d5317ecec47caeb8911784598be71d319ba8441c36388bf4a10ba2538f4f54f648b22a8f1e1f713dec36376936100b0fc5fb5ad4f51811ec96a76b564c3ee08305f5a2ad79a80152a03eb86d4dcd854a23818621d80771ceb169e45a692b45db77667beecd545e08b8afe8f8a3d049ae18e1cee5522769cd6b0131e036ee81d70df4cd679959fd82684bf9e1f4784325ef271eec2fb73ef4a9569fd76f7b1e55d8e2e87a5daa5ad5357cb401af13c2c695afc4b6a8a2004da1b0f5ebe7cb70cb2e15f0f3ca41eaca969abcb452f7a15fe9d004e66ff646e423366713632f1dedcb33bac1abbc47f1cf2b280f04cf85a7291bb4ecb2c1c252d65e933f5819ba4984b1018ec11ae36d2445af56900b9b6e746f84ddd6b06baab9d7c8f82f0b0bc7a61ade6eabe762ac0d3afe4b2102518361a9e54a4d9d51e4a25ccf1d40c36f6444d2271d03d91eb0f1f6895345c8758a7375926cf0ab75212ef7b4a0efa59a31decd995be2933e3da51efec22365521b8942f997789f9618cbbb422607c2414fc64bc558eca27df5fe7156954b98335a5cc63e6bfe7e076149c93e2314dd626f48bf6721b506b81962b6ca81bff28c7e216f49fcbf989045f97452f3b4ccdcaa7ca5a4ce0bd3f5e16440c6c0b73a42bfa6cfe8e31265b73b81b81c2d54e4f7aefb16ebfa1273adbfd57c08a6"
            }
            ]
            },
            "offset": "<token_obtained_via_open_wallet>"
        },
        "version_info": {
                "orig_version": 3,
                "version": 3,
                "block_header_version": 6
        }
        }
    }
    }

issue_invoice_tx

Issues a new invoice transaction slate, essentially a request for payment.

{
    "jsonrpc": "2.0",
    "method": "issue_invoice_tx",
    "params": {
        "token": "<token_obtained_via_open_wallet>",
        "args": {
            "amount": "60000000",
            "message": "EPIC Invoice for...",
            "dest_acct_name": null,
            "target_slate_version": null
        }
    },
    "id": 1
}
    {
        "id": 1,
        "jsonrpc": "2.0",
        "result": {
            "Ok": {
                "amount": "60000000",
                "fee": "0",
                "height": "4",
                "id": "0436430c-2b02-624c-2032-570501212b00",
                "lock_height": "0",
                "ttl_cutoff_height": null,
                "num_participants": 2,
                "payment_proof": null,
                "participant_data": [
                    {
                        "id": "1",
                        "message": "EPIC Invoice for...",
                        "message_sig": "8f07ddd5e9f5179cff19486034181ed76505baaad53e5d994064127b56c5841bb06e3894e0db51e6015d2181f101d06722094128dbc316f7186b57edd68731cb",
                        "part_sig": null,
                        "public_blind_excess": "035ca9d2d82e0e31bc2add7ef9200066b257d9f72cb16c0e57455277b90e2b3503",
                        "public_nonce": "031b84c5567b126440995d3ed5aaba0565d71e1834604819ff9c17f5e9d5dd078f"
                    }
                ],
                "tx": {
                    "body": {
                        "inputs": [],
                        "kernels": [
                            {
                                "excess": "000000000000000000000000000000000000000000000000000000000000000000",
                                "excess_sig": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
                                "features": "Plain",
                                "fee": "0",
                                "lock_height": "0"
                            }
                        ],
                        "outputs": [
                            {
                                "commit": "083fe68fb96a0941f70e9412b4483621326abee9eccf10e7a7efef2a9b4e97df25",
                                "features": "Plain",
                                "proof": "2df8ba188baa701a7c07e23de108e8318797ba029319b4557db3c1c8af917f6361d9871520e33423131d5771b06566aba2469f1e9fcc8eda8203a5c241759e45041af26939c57946372bf330d09670eb30a08cae27b3015dac2efb518fbe2325487d8417f4014cb854aec9e4e1770d2f5d7a6e32e2bc904245505ebd952eda10b5c401f315a8cb969da4cc2dc1e656f33d870ca07ffbc45f58cae9f28b836d4bf3c1786b805ba9d8789cc211998981a8b4115aa7383ddbd10e656fc0a590c3e2cf8dd07e414217d9a1d1af32bcbd933448d0a89033cb93ba2eb0d3b973136d61ee7f109d0476ed3475b7328eff5e9d3362b5db4621682a443a382f7ef09304f9bff422885d23f62f9d7d1a9bbf888e5ba5678e347182770cbbf41cfb3002269607f085881ce0f0df01f34f34433ef04dd6008f9a0c13e47e6e386d62151386dfd20bdf812ae2fb580edc38f38bfc9cc543d1023889ee646d4e75a7382caa3bb00b970062ffdc1fc643ce56d25e2e73b556162c8441d5a667b36b840cc244f69395b46900dd1edc562ed741c239804588e94c071b621766b55f738802c376012fa577e0d82bdf7bf2f229a867d91ed177bacde44faadb6901066f84e21a5fb0b73ed7ef9ef4a1e2c65e6a28a0ae834a99ed1694889d885fc8e90c8e7507078603a9705cc3c57b8b0125ad385cb5ec564f9ca69b530307d91ef2c6bb49a39e30d9e68f2f67d99915d87d1a7776f4c0b61913ea661ebe320b8e99919c69d9dbdc527e787d46e772da9ab9f9cc60e43b41fb0981b6b882ed7a535451158c711210fe25e68d12719192c3d332aea9e047a0f7a292b8e6f13fd76ed47afbadf070392cc3f4a4ebb8ec9853587e30ad9b9794717c87bf962e2ab99ec543f5a24efda0cfc2bf51f23c8132aee6058189925febe1d9d3a145f580ef9835db3c1f3b6e97bd36331e"
                            }
                        ]
                    },
                    "offset": "<token_obtained_via_open_wallet>"
                },
                "version_info": {
                    "orig_version": 3,
                    "version": 3,
                    "block_header_version": 6
                }
            }
        }
    }

process_invoice_tx

Processes an invoice transaction created by another party, essentially a request for payment.

{
    "jsonrpc": "2.0",
    "method": "process_invoice_tx",
    "params": {
        "token": "<token_obtained_via_open_wallet>",
        "slate": {
            "amount": "60000000",
            "fee": "0",
            "height": "4",
            "id": "0436430c-2b02-624c-2032-570501212b00",
            "lock_height": "0",
            "ttl_cutoff_height": null,
            "num_participants": 2,
            "payment_proof": null,
            "participant_data": [
                {
                    "id": "1",
                    "message": "EPIC Invoice for...",
                    "message_sig": "1b84c5567b126440995d3ed5aaba0565d71e1834604819ff9c17f5e9d5dd078fd2599ab38942986602e943f684a85992893a6d34367dc7cc2b403a5dcfcdbcd9",
                    "part_sig": null,
                    "public_blind_excess": "028e95921cc0d5be5922362265d352c9bdabe51a9e1502a3f0d4a10387f1893f40",
                    "public_nonce": "031b84c5567b126440995d3ed5aaba0565d71e1834604819ff9c17f5e9d5dd078f"
                }
            ],
            "tx": {
                "body": {
                    "inputs": [],
                    "kernels": [
                        {
                            "excess": "000000000000000000000000000000000000000000000000000000000000000000",
                            "excess_sig": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
                            "features": "Plain",
                            "fee": "0",
                            "lock_height": "0"
                        }
                    ],
                    "outputs": [
                        {
                            "commit": "09cf47204446c326e361a1a92f34b174deff732daaedb80d7339fbe3db5ca2f6ba",
                            "features": "Plain",
                            "proof": "8f511614315626b5f39224482351d766f5a8ef136262befc050d839be8479b0a13470cd88f4436346d213d83847a4055c6e0ac63681556470349a1aab47034a3015eb64d8163955998e2dd4165dd24386b1e279974b05deb5d46ba2bc321f7000c0784f8f10690605ffe717119d045e02b141ed12d8fc6d20930483a8af889ef533495eb442fcff36d98ebc104f13fc645c28431b3296e4a11f7c991ff97f9abbc2f8886762d7f29fdacb31d52c6850e6ccf5386117d89e8ea4ca3071c56c218dd5d3bcd65f6c06ed9f51f848507ca1d594f41796d1cf99f68a5c3f0c5dd9873602284cff31269b102fcc6c68607565faaf0adb04ed4ff3ea5d41f3b5235ac6cb90e4046c808c9c48c27172c891b20085c56a99913ef47fd8b3dc4920cef50534b9319a7cefe0df10a0206a634ac837e11da92df83ff58b1a14de81313400988aa48b946fcbe1b81f0e79e13f7c6c639b1c10983b424bda08d0ce593a20f1f47e0aa01473e7144f116b76d9ebc60599053d8f1542d60747793d99064e51fce8f8866390325d48d6e8e3bbdbc1822c864303451525c6cb4c6902f105a70134186fb32110d8192fc2528a9483fc8a4001f4bdeab1dd7b3d1ccb9ae2e746a78013ef74043f0b2436f0ca49627af1768b7c791c669bd331fd18c16ef88ad0a29861db70f2f76f3e74fde5accb91b73573e31333333223693d6fbc786e740c085e4fc6e7bde0a3f54e9703f816c54f012d3b1f41ec4d253d9337af61e7f1f1383bd929421ac346e3d2771dfee0b60503b33938e7c83eb37af3b6bf66041a3519a2b4cb557b34e3b9afcf95524f9a011425a34d32e7b6e9f255291094930acae26e8f7a1e4e6bc405d0f88e919f354f3ba85356a34f1aba5f7da1fad88e2692f4129cc1fb80a2122b2d996c6ccf7f08d8248e511d92af9ce49039de728848a2dc74101f4e94a"
                        }
                    ]
                },
                "offset": "<token_obtained_via_open_wallet>"
            },
            "version_info": {
                "orig_version": 3,
                "version": 3,
                "block_header_version": 6
            }
        },
        "args": {
            "src_acct_name": null,
            "amount": "0",
            "minimum_confirmations": 3,
            "max_outputs": 500,
            "num_change_outputs": 1,
            "selection_strategy_is_use_all": true,
            "message": "Invoice paid.",
            "target_slate_version": null,
            "payment_proof_recipient_address": null,
            "ttl_blocks": null,
            "send_args": null
        }
    },
    "id": 1
}
    {
        "id": 1,
        "jsonrpc": "2.0",
        "result": {
            "Ok": {
                "amount": "60000000",
                "fee": "800000",
                "height": "4",
                "id": "0436430c-2b02-624c-2032-570501212b00",
                "lock_height": "0",
                "ttl_cutoff_height": null,
                "num_participants": 2,
                "payment_proof": null,
                "participant_data": [
                    {
                        "id": "1",
                        "message": "EPIC Invoice for...",
                        "message_sig": "1b84c5567b126440995d3ed5aaba0565d71e1834604819ff9c17f5e9d5dd078fd2599ab38942986602e943f684a85992893a6d34367dc7cc2b403a5dcfcdbcd9",
                        "part_sig": null,
                        "public_blind_excess": "028e95921cc0d5be5922362265d352c9bdabe51a9e1502a3f0d4a10387f1893f40",
                        "public_nonce": "031b84c5567b126440995d3ed5aaba0565d71e1834604819ff9c17f5e9d5dd078f"
                    },
                    {
                        "id": "0",
                        "message": "Invoice paid.",
                        "message_sig": "8f07ddd5e9f5179cff19486034181ed76505baaad53e5d994064127b56c5841bec8c1cac6cb5770a3c62c9bb95063581cc08bfccd72dac72be8ec4ba5374a9f3",
                        "part_sig": "8f07ddd5e9f5179cff19486034181ed76505baaad53e5d994064127b56c5841bcec20532cbe7ce0a3152b61566785684fea3534b7f834f02f733fa524123ee54",
                        "public_blind_excess": "02802124f21ba02769a3f05ecfe9662e8783fa0bd1a7b7d63cf3aea0ebc0d7af3a",
                        "public_nonce": "031b84c5567b126440995d3ed5aaba0565d71e1834604819ff9c17f5e9d5dd078f"
                    }
                ],
                "tx": {
                    "body": {
                        "inputs": [
                            {
                                "commit": "089be87c488db1e7c783b19272a83b23bce56a5263163554b345c6f7ffedac517e",
                                "features": "Coinbase"
                            }
                        ],
                        "kernels": [
                            {
                                "excess": "000000000000000000000000000000000000000000000000000000000000000000",
                                "excess_sig": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
                                "features": "Plain",
                                "fee": "800000",
                                "lock_height": "0"
                            }
                        ],
                        "outputs": [
                            {
                                "commit": "0832ca73c2049ee0c8f555c6297aa3658eb3f8ce711dfd63d6d5234cf3191c7756",
                                "features": "Plain",
                                "proof": "1393386202b2ba345e131efb1dfc3730c000ee6b6f3cb8d56e3d0680796b11940abeaed75e18458b544d28765b530a7ca2ed170b42c8bd5e07d4451b0cfa59c20fee43c9107091a328a9f745a255702ea17ac50f5e92b2daf51a7851e8ffde5e11a6837b5b6058aee5ab1e68bcd756646f36b38c6262aa20ff9c194d2e3e155b608216186fee66ef8ca269d31a015c63cca3cf5f0d40e4cccd13d390ed1aeed7a7c7d0709e9b509844462098d97e983ba6963ee3a68955d5317ecec47caeb8911784598be71d319ba8441c36388bf4a10ba2538f4f54f648b22a8f1e1f713dec36376936100b0fc5fb5ad4f51811ec96a76b564c3ee08305f5a2ad79a80152a03eb86d4dcd854a23818621d80771ceb169e45a692b45db77667beecd545e08b8afe8f8a3d049ae18e1cee5522769cd6b0131e036ee81d70df4cd679959fd82684bf9e1f4784325ef271eec2fb73ef4a9569fd76f7b1e55d8e2e87a5daa5ad5357cb401af13c2c695afc4b6a8a2004da1b0f5ebe7cb70cb2e15f0f3ca41eaca969abcb452f7a15fe9d004e66ff646e423366713632f1dedcb33bac1abbc47f1cf2b280f04cf85a7291bb4ecb2c1c252d65e933f5819ba4984b1018ec11ae36d2445af56900b9b6e746f84ddd6b06baab9d7c8f82f0b0bc7a61ade6eabe762ac0d3afe4b2102518361a9e54a4d9d51e4a25ccf1d40c36f6444d2271d03d91eb0f1f6895345c8758a7375926cf0ab75212ef7b4a0efa59a31decd995be2933e3da51efec22365521b8942f997789f9618cbbb422607c2414fc64bc558eca27df5fe7156954b98335a5cc63e6bfe7e076149c93e2314dd626f48bf6721b506b81962b6ca81bff28c7e216f49fcbf989045f97452f3b4ccdcaa7ca5a4ce0bd3f5e16440c6c0b73a42bfa6cfe8e31265b73b81b81c2d54e4f7aefb16ebfa1273adbfd57c08a6"
                            },
                            {
                                "commit": "09cf47204446c326e361a1a92f34b174deff732daaedb80d7339fbe3db5ca2f6ba",
                                "features": "Plain",
                                "proof": "8f511614315626b5f39224482351d766f5a8ef136262befc050d839be8479b0a13470cd88f4436346d213d83847a4055c6e0ac63681556470349a1aab47034a3015eb64d8163955998e2dd4165dd24386b1e279974b05deb5d46ba2bc321f7000c0784f8f10690605ffe717119d045e02b141ed12d8fc6d20930483a8af889ef533495eb442fcff36d98ebc104f13fc645c28431b3296e4a11f7c991ff97f9abbc2f8886762d7f29fdacb31d52c6850e6ccf5386117d89e8ea4ca3071c56c218dd5d3bcd65f6c06ed9f51f848507ca1d594f41796d1cf99f68a5c3f0c5dd9873602284cff31269b102fcc6c68607565faaf0adb04ed4ff3ea5d41f3b5235ac6cb90e4046c808c9c48c27172c891b20085c56a99913ef47fd8b3dc4920cef50534b9319a7cefe0df10a0206a634ac837e11da92df83ff58b1a14de81313400988aa48b946fcbe1b81f0e79e13f7c6c639b1c10983b424bda08d0ce593a20f1f47e0aa01473e7144f116b76d9ebc60599053d8f1542d60747793d99064e51fce8f8866390325d48d6e8e3bbdbc1822c864303451525c6cb4c6902f105a70134186fb32110d8192fc2528a9483fc8a4001f4bdeab1dd7b3d1ccb9ae2e746a78013ef74043f0b2436f0ca49627af1768b7c791c669bd331fd18c16ef88ad0a29861db70f2f76f3e74fde5accb91b73573e31333333223693d6fbc786e740c085e4fc6e7bde0a3f54e9703f816c54f012d3b1f41ec4d253d9337af61e7f1f1383bd929421ac346e3d2771dfee0b60503b33938e7c83eb37af3b6bf66041a3519a2b4cb557b34e3b9afcf95524f9a011425a34d32e7b6e9f255291094930acae26e8f7a1e4e6bc405d0f88e919f354f3ba85356a34f1aba5f7da1fad88e2692f4129cc1fb80a2122b2d996c6ccf7f08d8248e511d92af9ce49039de728848a2dc74101f4e94a"
                            }
                        ]
                    },
                    "offset": "<token_obtained_via_open_wallet>"
                },
                "version_info": {
                    "orig_version": 3,
                    "version": 3,
                    "block_header_version": 6
                }
            }
        }
    }

finalize_tx

Finalizes a transaction, after all parties have filled in both rounds of Slate generation.

{
    "jsonrpc": "2.0",
    "method": "finalize_tx",
    "id": 1,
    "params": {
        "token": "<token_obtained_via_open_wallet>",
        "slate": {
            "version_info": {
                "version": 3,
                "orig_version": 3,
                "block_header_version": 6
            },
            "num_participants": 2,
            "id": "0436430c-2b02-624c-2032-570501212b00",
            "payment_proof": null,
            "tx": {
                "offset": "<token_obtained_via_open_wallet>",
                "body": {
                    "inputs": [
                        {
                            "features": "Coinbase",
                            "commit": "09d8836ffd38ffca42567ef965fdcf1f35b05aeb357664d70cd482438ca0ca0c9e"
                        },
                        {
                            "features": "Coinbase",
                            "commit": "089be87c488db1e7c783b19272a83b23bce56a5263163554b345c6f7ffedac517e"
                        }
                    ],
                    "outputs": [
                        {
                            "features": "Plain",
                            "commit": "091454e23b4dbc71f546a41035d69f4c87d0f6efb5ceb119cc0d2eef80ba1928d7",
                            "proof": "1a32a93de1dad833b4ae66d042784c435f60ac452f769d2d778772b3e2f2ca9fb16191636222b35866f273935f657ff37e1d38b877e12b7bcce98b1aa71f47a701b9ed8c648e2d6ab18ac0f8f7cf4a7c0aebb2c15681a684ec6f4d385e5db20e7bf9e6f3d8554ada1b82ac2fa9b77cb0a4c4c6b6c740d938fc0c6031a1cc0c0839701e6dab439c4dcdb32ca87d510b582efbabe8f8b783a330bc2c4451d1c2949a6ad901d40f7abc6103fadebba22016a955eaec4a0215398afbc7d22a4ad5bf3103446f4fe5440ded3bd9db607a69b8ca7c005c09e82fa367febc532b8d5c573e2bcc65a972bf76cea98943d9baaf209c84b4b70d56444c22cd334c7299000122de110f957b7af1f4d7f3816e053c94731113fd098bd2c0ccbe4c19152dd07a8d137b453e5a9d19cca576b494f448c5673babf9122297e4d2f4bd4a5a768c4da040527816d6ff91edb57da4053df167a44d2d5cf194bf30a47bcdd4ff541638b3db02e8ac882fb00767bf50fe5bf1b6077c8ad4f163ce75f21c99f708a9bcc0676034351e5ca68894550fcca5ee868d3d9d87e164612f09c79f2676a4acd8a8266e0f794c49318f8a1595ee1ff4e55e9cf5f3361cc473a032bd3bbd36a085f0c03f9b451b472d6a6a7ea9d858fd42a49c2e68c25bf8f18dd8e691168fe6f10602c6ec04cbc2601afa479294da84ecb79bc9b225d8758f682a2df52882c586ead779711258a9443e43365df9d326ca9052615ce33efac4bd0452a18d5b294b9fcf86e860786a692bfbd84a8bf3a751adedd978b969177cd8897871c43cd28df40a4beefcc86b10e6822ba18673f396294c799e756c8a5f03c92499127ec567e9f5b794442c63be7119ce741e4e056f502ca4809f7c76dd6dad754a1b31201ca2e2540e125637e1da5d16c61e3bea90ded06892076268893c167e0faed26172f304900e"
                        },
                        {
                            "features": "Plain",
                            "commit": "09414416856d650cd42abad97943f8ea32ff19e7d5d10201ff790d1ca941f578ed",
                            "proof": "bdd12075099d53912b42073fd9c2841f2e21dff01656e7f909e1bbd30ada9a18b2f645128676ecddaecbffdcce43e9ff0e850acbce0f9a1e3fc525a7424d09040da752a8db0c8173f31ec4696bf007bf76801f63cedeadc66f4198836494de20a3d48150776c819d2e0a8ef376622d8a1cef78cd6928b3aa38883f51594fa50c3a772c539071c1c05ac4fce08768076618e2d5c7b3d46e28f1459f84f143a943957a4294011b093caf0e077020caf0668b379525df35f626641be6e81d7b711f1b32a98596c1829b9671d574f793e7f9f08c9118bdda60577053456caace5071cc14b10a67205e1c263bb53990fcf4fbcaea9cae652bd9e7ad6c1573ff96cd9271ecf0fabb895cea13b80d59bf7093fa03907911f526cb60df2bf0d3e2d4b81be4bbae55c466d6b221fa70cb145e6550e37856d080304e104fb23be97ae1499b4d3a2f7a4550545a03c20d374c081ac4f592477e23a20f418bcc59d9b02f665b898400a74350b88d793d383a0dc57618d58711e85e221383abb170c4a7f1640f30f2fc8258074f882b56453befecf3a61ed194a8ad98d1f6ab38c565b7cde60a7bb258066d9c5363c6bd618a9b3473b70a516ad4a67c2571e62fec4970eb4df902143aa130d333825f0a4cde9f93d8249c32f26bfadb26be8a5ceb6b5b6cdd076baa1cbde1973d83e64a1b35075dba69682e51cedfb82484276d56cf9e0601a272c0148ce070c6019ab2882405900164871f6b59d2c2a9f5d92674fe58cd9e036752eae8fb58e0fc29e3d59330ac92c1f263988f67add07a22770c381f29a602785244dbd46e4416ca56f25fe0cdd21714bcdf58c28329e22124247416b8de61297b6bd1630b93692a3a81c3107689f35cf4be5a8472b31552973ef2bcee5a298a858a768eefd0e31a3936790dd1c6e1379fffa0235c188b2c0f8b8b41abb84c32c608"
                        }
                    ],
                    "kernels": [
                        {
                            "features": "Plain",
                            "fee": "700000",
                            "lock_height": "0",
                            "excess": "000000000000000000000000000000000000000000000000000000000000000000",
                            "excess_sig": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
                        }
                    ]
                }
            },
            "amount": "600000000",
            "fee": "700000",
            "height": "5",
            "lock_height": "0",
            "ttl_cutoff_height": null,
            "participant_data": [
                {
                    "id": "0",
                    "public_blind_excess": "028e1bbb43e6038efc42054778d0a1aa184b2cf4d51acb40a2a8dc049788d97bd2",
                    "public_nonce": "031b84c5567b126440995d3ed5aaba0565d71e1834604819ff9c17f5e9d5dd078f",
                    "part_sig": null,
                    "message": null,
                    "message_sig": null
                },
                {
                    "id": "1",
                    "public_blind_excess": "03e14bacb4cfeda43edf6c1b0ffced9a358a119c7936bc68af724477eb91d9e4eb",
                    "public_nonce": "031b84c5567b126440995d3ed5aaba0565d71e1834604819ff9c17f5e9d5dd078f",
                    "part_sig": "8f07ddd5e9f5179cff19486034181ed76505baaad53e5d994064127b56c5841b129340313ed7db02f6fd9a16c23ae8d5801af4fdc2ea580e2dec26e3821d5c17",
                    "message": null,
                    "message_sig": null
                }
            ]
        }
    }
}
    {
        "jsonrpc": "2.0",
        "id": 1,
        "result": {
        "Ok": {
                "amount": "600000000",
                "fee": "700000",
                "height": "5",
                "id": "0436430c-2b02-624c-2032-570501212b00",
                "lock_height": "0",
                "ttl_cutoff_height": null,
                "num_participants": 2,
                "payment_proof": null,
                "participant_data": [
                    {
                        "id": "0",
                        "message": null,
                        "message_sig": null,
                        "part_sig": "8f07ddd5e9f5179cff19486034181ed76505baaad53e5d994064127b56c5841b93f888685e13250c5cb6b830ff898264ce247c73d3ab47845c01bcc6455ecbe5",
                        "public_blind_excess": "028e1bbb43e6038efc42054778d0a1aa184b2cf4d51acb40a2a8dc049788d97bd2",
                        "public_nonce": "031b84c5567b126440995d3ed5aaba0565d71e1834604819ff9c17f5e9d5dd078f"
                    },
                    {
                        "id": "1",
                        "message": null,
                        "message_sig": null,
                        "part_sig": "8f07ddd5e9f5179cff19486034181ed76505baaad53e5d994064127b56c5841b129340313ed7db02f6fd9a16c23ae8d5801af4fdc2ea580e2dec26e3821d5c17",
                        "public_blind_excess": "03e14bacb4cfeda43edf6c1b0ffced9a358a119c7936bc68af724477eb91d9e4eb",
                        "public_nonce": "031b84c5567b126440995d3ed5aaba0565d71e1834604819ff9c17f5e9d5dd078f"
                    }
                ],
                "tx": {
                    "body": {
                    "inputs": [
                        {
                            "commit": "09d8836ffd38ffca42567ef965fdcf1f35b05aeb357664d70cd482438ca0ca0c9e",
                            "features": "Coinbase"
                        },
                        {
                            "commit": "089be87c488db1e7c783b19272a83b23bce56a5263163554b345c6f7ffedac517e",
                            "features": "Coinbase"
                        }
                    ],
                    "kernels": [
                        {
                            "excess": "08d09187cb93cf5d6b97b28e8ca529912bf35ec8773d3e9af9b3c174a270dc7f05",
                            "excess_sig": "66074d25a751c4743342c90ad8ead9454daa00d9b9aed29bca321036d16c4b4da58bc9999cea000f52b45347c1c46a3a4f3f70719696a09289ede2a9c87b27fd",
                            "features": "Plain",
                            "fee": "700000",
                            "lock_height": "0"
                        }
                    ],
                    "outputs": [
                        {
                            "commit": "091454e23b4dbc71f546a41035d69f4c87d0f6efb5ceb119cc0d2eef80ba1928d7",
                            "features": "Plain",
                            "proof": "1a32a93de1dad833b4ae66d042784c435f60ac452f769d2d778772b3e2f2ca9fb16191636222b35866f273935f657ff37e1d38b877e12b7bcce98b1aa71f47a701b9ed8c648e2d6ab18ac0f8f7cf4a7c0aebb2c15681a684ec6f4d385e5db20e7bf9e6f3d8554ada1b82ac2fa9b77cb0a4c4c6b6c740d938fc0c6031a1cc0c0839701e6dab439c4dcdb32ca87d510b582efbabe8f8b783a330bc2c4451d1c2949a6ad901d40f7abc6103fadebba22016a955eaec4a0215398afbc7d22a4ad5bf3103446f4fe5440ded3bd9db607a69b8ca7c005c09e82fa367febc532b8d5c573e2bcc65a972bf76cea98943d9baaf209c84b4b70d56444c22cd334c7299000122de110f957b7af1f4d7f3816e053c94731113fd098bd2c0ccbe4c19152dd07a8d137b453e5a9d19cca576b494f448c5673babf9122297e4d2f4bd4a5a768c4da040527816d6ff91edb57da4053df167a44d2d5cf194bf30a47bcdd4ff541638b3db02e8ac882fb00767bf50fe5bf1b6077c8ad4f163ce75f21c99f708a9bcc0676034351e5ca68894550fcca5ee868d3d9d87e164612f09c79f2676a4acd8a8266e0f794c49318f8a1595ee1ff4e55e9cf5f3361cc473a032bd3bbd36a085f0c03f9b451b472d6a6a7ea9d858fd42a49c2e68c25bf8f18dd8e691168fe6f10602c6ec04cbc2601afa479294da84ecb79bc9b225d8758f682a2df52882c586ead779711258a9443e43365df9d326ca9052615ce33efac4bd0452a18d5b294b9fcf86e860786a692bfbd84a8bf3a751adedd978b969177cd8897871c43cd28df40a4beefcc86b10e6822ba18673f396294c799e756c8a5f03c92499127ec567e9f5b794442c63be7119ce741e4e056f502ca4809f7c76dd6dad754a1b31201ca2e2540e125637e1da5d16c61e3bea90ded06892076268893c167e0faed26172f304900e"
                        },
                        {
                            "commit": "09414416856d650cd42abad97943f8ea32ff19e7d5d10201ff790d1ca941f578ed",
                            "features": "Plain",
                            "proof": "bdd12075099d53912b42073fd9c2841f2e21dff01656e7f909e1bbd30ada9a18b2f645128676ecddaecbffdcce43e9ff0e850acbce0f9a1e3fc525a7424d09040da752a8db0c8173f31ec4696bf007bf76801f63cedeadc66f4198836494de20a3d48150776c819d2e0a8ef376622d8a1cef78cd6928b3aa38883f51594fa50c3a772c539071c1c05ac4fce08768076618e2d5c7b3d46e28f1459f84f143a943957a4294011b093caf0e077020caf0668b379525df35f626641be6e81d7b711f1b32a98596c1829b9671d574f793e7f9f08c9118bdda60577053456caace5071cc14b10a67205e1c263bb53990fcf4fbcaea9cae652bd9e7ad6c1573ff96cd9271ecf0fabb895cea13b80d59bf7093fa03907911f526cb60df2bf0d3e2d4b81be4bbae55c466d6b221fa70cb145e6550e37856d080304e104fb23be97ae1499b4d3a2f7a4550545a03c20d374c081ac4f592477e23a20f418bcc59d9b02f665b898400a74350b88d793d383a0dc57618d58711e85e221383abb170c4a7f1640f30f2fc8258074f882b56453befecf3a61ed194a8ad98d1f6ab38c565b7cde60a7bb258066d9c5363c6bd618a9b3473b70a516ad4a67c2571e62fec4970eb4df902143aa130d333825f0a4cde9f93d8249c32f26bfadb26be8a5ceb6b5b6cdd076baa1cbde1973d83e64a1b35075dba69682e51cedfb82484276d56cf9e0601a272c0148ce070c6019ab2882405900164871f6b59d2c2a9f5d92674fe58cd9e036752eae8fb58e0fc29e3d59330ac92c1f263988f67add07a22770c381f29a602785244dbd46e4416ca56f25fe0cdd21714bcdf58c28329e22124247416b8de61297b6bd1630b93692a3a81c3107689f35cf4be5a8472b31552973ef2bcee5a298a858a768eefd0e31a3936790dd1c6e1379fffa0235c188b2c0f8b8b41abb84c32c608"
                        }
                    ]
                    },
                    "offset": "<token_obtained_via_open_wallet>"
                },
                "version_info": {
                    "orig_version": 3,
                    "version": 3,
                    "block_header_version": 6
                }
            }
        }
    }

post_tx

Posts a completed transaction to the listening node for validation and inclusion in a block for mining.

{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "post_tx",
    "params": {
        "token": "<token_obtained_via_open_wallet>",
        "tx": {
        "offset": "<token_obtained_via_open_wallet>",
        "body": {
            "inputs": [
                {
                    "features": "Coinbase",
                    "commit": "09d8836ffd38ffca42567ef965fdcf1f35b05aeb357664d70cd482438ca0ca0c9e"
                },
                {
                    "features": "Coinbase",
                    "commit": "089be87c488db1e7c783b19272a83b23bce56a5263163554b345c6f7ffedac517e"
                }
            ],
            "kernels": [
                {
                    "features": "Plain",
                    "fee": "700000",
                    "lock_height": "0",
                    "excess": "08d09187cb93cf5d6b97b28e8ca529912bf35ec8773d3e9af9b3c174a270dc7f05",
                    "excess_sig": "66074d25a751c4743342c90ad8ead9454daa00d9b9aed29bca321036d16c4b4da58bc9999cea000f52b45347c1c46a3a4f3f70719696a09289ede2a9c87b27fd"
                }
            ],
            "outputs": [
                {
                    "features": "Plain",
                    "commit": "091454e23b4dbc71f546a41035d69f4c87d0f6efb5ceb119cc0d2eef80ba1928d7",
                    "proof": "1a32a93de1dad833b4ae66d042784c435f60ac452f769d2d778772b3e2f2ca9fb16191636222b35866f273935f657ff37e1d38b877e12b7bcce98b1aa71f47a701b9ed8c648e2d6ab18ac0f8f7cf4a7c0aebb2c15681a684ec6f4d385e5db20e7bf9e6f3d8554ada1b82ac2fa9b77cb0a4c4c6b6c740d938fc0c6031a1cc0c0839701e6dab439c4dcdb32ca87d510b582efbabe8f8b783a330bc2c4451d1c2949a6ad901d40f7abc6103fadebba22016a955eaec4a0215398afbc7d22a4ad5bf3103446f4fe5440ded3bd9db607a69b8ca7c005c09e82fa367febc532b8d5c573e2bcc65a972bf76cea98943d9baaf209c84b4b70d56444c22cd334c7299000122de110f957b7af1f4d7f3816e053c94731113fd098bd2c0ccbe4c19152dd07a8d137b453e5a9d19cca576b494f448c5673babf9122297e4d2f4bd4a5a768c4da040527816d6ff91edb57da4053df167a44d2d5cf194bf30a47bcdd4ff541638b3db02e8ac882fb00767bf50fe5bf1b6077c8ad4f163ce75f21c99f708a9bcc0676034351e5ca68894550fcca5ee868d3d9d87e164612f09c79f2676a4acd8a8266e0f794c49318f8a1595ee1ff4e55e9cf5f3361cc473a032bd3bbd36a085f0c03f9b451b472d6a6a7ea9d858fd42a49c2e68c25bf8f18dd8e691168fe6f10602c6ec04cbc2601afa479294da84ecb79bc9b225d8758f682a2df52882c586ead779711258a9443e43365df9d326ca9052615ce33efac4bd0452a18d5b294b9fcf86e860786a692bfbd84a8bf3a751adedd978b969177cd8897871c43cd28df40a4beefcc86b10e6822ba18673f396294c799e756c8a5f03c92499127ec567e9f5b794442c63be7119ce741e4e056f502ca4809f7c76dd6dad754a1b31201ca2e2540e125637e1da5d16c61e3bea90ded06892076268893c167e0faed26172f304900e"
                },
                {
                    "features": "Plain",
                    "commit": "09414416856d650cd42abad97943f8ea32ff19e7d5d10201ff790d1ca941f578ed",
                    "proof": "bdd12075099d53912b42073fd9c2841f2e21dff01656e7f909e1bbd30ada9a18b2f645128676ecddaecbffdcce43e9ff0e850acbce0f9a1e3fc525a7424d09040da752a8db0c8173f31ec4696bf007bf76801f63cedeadc66f4198836494de20a3d48150776c819d2e0a8ef376622d8a1cef78cd6928b3aa38883f51594fa50c3a772c539071c1c05ac4fce08768076618e2d5c7b3d46e28f1459f84f143a943957a4294011b093caf0e077020caf0668b379525df35f626641be6e81d7b711f1b32a98596c1829b9671d574f793e7f9f08c9118bdda60577053456caace5071cc14b10a67205e1c263bb53990fcf4fbcaea9cae652bd9e7ad6c1573ff96cd9271ecf0fabb895cea13b80d59bf7093fa03907911f526cb60df2bf0d3e2d4b81be4bbae55c466d6b221fa70cb145e6550e37856d080304e104fb23be97ae1499b4d3a2f7a4550545a03c20d374c081ac4f592477e23a20f418bcc59d9b02f665b898400a74350b88d793d383a0dc57618d58711e85e221383abb170c4a7f1640f30f2fc8258074f882b56453befecf3a61ed194a8ad98d1f6ab38c565b7cde60a7bb258066d9c5363c6bd618a9b3473b70a516ad4a67c2571e62fec4970eb4df902143aa130d333825f0a4cde9f93d8249c32f26bfadb26be8a5ceb6b5b6cdd076baa1cbde1973d83e64a1b35075dba69682e51cedfb82484276d56cf9e0601a272c0148ce070c6019ab2882405900164871f6b59d2c2a9f5d92674fe58cd9e036752eae8fb58e0fc29e3d59330ac92c1f263988f67add07a22770c381f29a602785244dbd46e4416ca56f25fe0cdd21714bcdf58c28329e22124247416b8de61297b6bd1630b93692a3a81c3107689f35cf4be5a8472b31552973ef2bcee5a298a858a768eefd0e31a3936790dd1c6e1379fffa0235c188b2c0f8b8b41abb84c32c608"
                }
            ]

        }
    },
    "fluff": false
    }
}
    {
        "id": 1,
        "jsonrpc": "2.0",
        "result": {
            "Ok": null
        }
    }

cancel_tx

Cancels a transaction. This entails:

Setting the transaction status to either TxSentCancelled or TxReceivedCancelled Deleting all change outputs or recipient outputs associated with the transaction Setting the status of all associated inputs from Locked to Spent, so they can be used in new transactions.

{
    "jsonrpc": "2.0",
    "method": "cancel_tx",
    "params": {
        "token": "<token_obtained_via_open_wallet>",
        "tx_id": null,
        "tx_slate_id": "0436430c-2b02-624c-2032-570501212b00"
    },
    "id": 1
}
    {
        "id": 1,
        "jsonrpc": "2.0",
        "result": {
            "Ok": null
        }
    }

get_stored_tx

Retrieves the stored transaction associated with a TxLogEntry. Can be used even after the transaction has completed.

{
    "jsonrpc": "2.0",
    "method": "get_stored_tx",
    "id": 1,
    "params": {
        "token": "<token_obtained_via_open_wallet>",
        "tx": {
            "amount_credited": "59993000000",
            "amount_debited": "120000000000",
            "confirmation_ts": "2019-01-15T16:01:26Z",
            "confirmed": false,
            "creation_ts": "2019-01-15T16:01:26Z",
            "fee": "7000000",
            "id": 5,
            "messages": {
                "messages": [
                    {
                        "id": "0",
                        "message": null,
                        "message_sig": null,
                        "public_key": "033ac2158fa0077f087de60c19d8e431753baa5b63b6e1477f05a2a6e7190d4592"
                    },
                    {
                        "id": "1",
                        "message": null,
                        "message_sig": null,
                        "public_key": "024f9bc78c984c78d6e916d3a00746aa30fa1172124c8dbc0cbddcb7b486719bc7"
                    }
                ]
            },
            "num_inputs": 2,
            "num_outputs": 1,
            "parent_key_id": "0200000000000000000000000000000000",
            "stored_tx": "0436430c-2b02-624c-2032-570501212b00.epictx",
            "tx_slate_id": "0436430c-2b02-624c-2032-570501212b00",
            "tx_type": "TxSent",
            "kernel_excess": null,
            "kernel_lookup_min_height": null
        }
    }
}
    {
        "jsonrpc": "2.0",
        "id": 1,
        "result": {
            "Ok": {
                "body": {
                "inputs": [
                    {
                        "commit": "09d8836ffd38ffca42567ef965fdcf1f35b05aeb357664d70cd482438ca0ca0c9e",
                        "features": "Coinbase"
                    },
                    {
                        "commit": "089be87c488db1e7c783b19272a83b23bce56a5263163554b345c6f7ffedac517e",
                        "features": "Coinbase"
                    }
                ],
                "kernels": [
                    {
                        "excess": "000000000000000000000000000000000000000000000000000000000000000000",
                        "excess_sig": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
                        "features": "Plain",
                        "fee": "700000",
                        "lock_height": "0"
                    }
                ],
                "outputs": [
                    {
                        "commit": "091454e23b4dbc71f546a41035d69f4c87d0f6efb5ceb119cc0d2eef80ba1928d7",
                        "features": "Plain",
                        "proof": "1a32a93de1dad833b4ae66d042784c435f60ac452f769d2d778772b3e2f2ca9fb16191636222b35866f273935f657ff37e1d38b877e12b7bcce98b1aa71f47a701b9ed8c648e2d6ab18ac0f8f7cf4a7c0aebb2c15681a684ec6f4d385e5db20e7bf9e6f3d8554ada1b82ac2fa9b77cb0a4c4c6b6c740d938fc0c6031a1cc0c0839701e6dab439c4dcdb32ca87d510b582efbabe8f8b783a330bc2c4451d1c2949a6ad901d40f7abc6103fadebba22016a955eaec4a0215398afbc7d22a4ad5bf3103446f4fe5440ded3bd9db607a69b8ca7c005c09e82fa367febc532b8d5c573e2bcc65a972bf76cea98943d9baaf209c84b4b70d56444c22cd334c7299000122de110f957b7af1f4d7f3816e053c94731113fd098bd2c0ccbe4c19152dd07a8d137b453e5a9d19cca576b494f448c5673babf9122297e4d2f4bd4a5a768c4da040527816d6ff91edb57da4053df167a44d2d5cf194bf30a47bcdd4ff541638b3db02e8ac882fb00767bf50fe5bf1b6077c8ad4f163ce75f21c99f708a9bcc0676034351e5ca68894550fcca5ee868d3d9d87e164612f09c79f2676a4acd8a8266e0f794c49318f8a1595ee1ff4e55e9cf5f3361cc473a032bd3bbd36a085f0c03f9b451b472d6a6a7ea9d858fd42a49c2e68c25bf8f18dd8e691168fe6f10602c6ec04cbc2601afa479294da84ecb79bc9b225d8758f682a2df52882c586ead779711258a9443e43365df9d326ca9052615ce33efac4bd0452a18d5b294b9fcf86e860786a692bfbd84a8bf3a751adedd978b969177cd8897871c43cd28df40a4beefcc86b10e6822ba18673f396294c799e756c8a5f03c92499127ec567e9f5b794442c63be7119ce741e4e056f502ca4809f7c76dd6dad754a1b31201ca2e2540e125637e1da5d16c61e3bea90ded06892076268893c167e0faed26172f304900e"
                    },
                    {
                        "commit": "09414416856d650cd42abad97943f8ea32ff19e7d5d10201ff790d1ca941f578ed",
                        "features": "Plain",
                        "proof": "bdd12075099d53912b42073fd9c2841f2e21dff01656e7f909e1bbd30ada9a18b2f645128676ecddaecbffdcce43e9ff0e850acbce0f9a1e3fc525a7424d09040da752a8db0c8173f31ec4696bf007bf76801f63cedeadc66f4198836494de20a3d48150776c819d2e0a8ef376622d8a1cef78cd6928b3aa38883f51594fa50c3a772c539071c1c05ac4fce08768076618e2d5c7b3d46e28f1459f84f143a943957a4294011b093caf0e077020caf0668b379525df35f626641be6e81d7b711f1b32a98596c1829b9671d574f793e7f9f08c9118bdda60577053456caace5071cc14b10a67205e1c263bb53990fcf4fbcaea9cae652bd9e7ad6c1573ff96cd9271ecf0fabb895cea13b80d59bf7093fa03907911f526cb60df2bf0d3e2d4b81be4bbae55c466d6b221fa70cb145e6550e37856d080304e104fb23be97ae1499b4d3a2f7a4550545a03c20d374c081ac4f592477e23a20f418bcc59d9b02f665b898400a74350b88d793d383a0dc57618d58711e85e221383abb170c4a7f1640f30f2fc8258074f882b56453befecf3a61ed194a8ad98d1f6ab38c565b7cde60a7bb258066d9c5363c6bd618a9b3473b70a516ad4a67c2571e62fec4970eb4df902143aa130d333825f0a4cde9f93d8249c32f26bfadb26be8a5ceb6b5b6cdd076baa1cbde1973d83e64a1b35075dba69682e51cedfb82484276d56cf9e0601a272c0148ce070c6019ab2882405900164871f6b59d2c2a9f5d92674fe58cd9e036752eae8fb58e0fc29e3d59330ac92c1f263988f67add07a22770c381f29a602785244dbd46e4416ca56f25fe0cdd21714bcdf58c28329e22124247416b8de61297b6bd1630b93692a3a81c3107689f35cf4be5a8472b31552973ef2bcee5a298a858a768eefd0e31a3936790dd1c6e1379fffa0235c188b2c0f8b8b41abb84c32c608"
                    }
                ]
                },
                "offset": "<token_obtained_via_open_wallet>"
            }
        }
    }

verify_slate_messages

Verifies all messages in the slate match their public keys.

{
    "jsonrpc": "2.0",
    "method": "verify_slate_messages",
    "id": 1,
    "params": {
        "token": "<token_obtained_via_open_wallet>",
        "slate": {
            "amount": "1457920000",
            "fee": "8000000",
            "height": "4",
            "id": "0436430c-2b02-624c-2032-570501212b00",
            "lock_height": "4",
            "ttl_cutoff_height": null,
            "num_participants": 2,
            "participant_data": [
            {
                "id": "0",
                "message": "my message",
                "message_sig": "8f07ddd5e9f5179cff19486034181ed76505baaad53e5d994064127b56c5841b1d4c1358be398f801eb90d933774b5218fa7e769b11c4c640402253353656f75",
                "part_sig": null,
                "public_blind_excess": "034b4df2f0558b73ea72a1ca5c4ab20217c66bbe0829056fca7abe76888e9349ee",
                "public_nonce": "031b84c5567b126440995d3ed5aaba0565d71e1834604819ff9c17f5e9d5dd078f"
            }
            ],
            "tx": {
                "body": {
                    "inputs": [
                    {
                        "commit": "08e1da9e6dc4d6e808a718b2f110a991dd775d65ce5ae408a4e1f002a4961aa9e7",
                        "features": "Coinbase"
                    }
                    ],
                    "kernels": [
                    {
                        "excess": "000000000000000000000000000000000000000000000000000000000000000000",
                        "excess_sig": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
                        "features": "HeightLocked",
                        "fee": "8000000",
                        "lock_height": "4"
                    }
                    ],
                    "outputs": [
                    {
                        "commit": "094be57c91787fc2033d5d97fae099f1a6ddb37ea48370f1a138f09524c767fdd3",
                        "features": "Plain",
                        "proof": "2a42e9e902b70ce44e1fccb14de87ee0a97100bddf12c6bead1b9c5f4eb60300f29c13094fa12ffeee238fb4532b18f6b61cf51b23c1c7e1ad2e41560dc27edc0a2b9e647a0b3e4e806fced5b65e61d0f1f5197d3e2285c632d359e27b6b9206b2caffea4f67e0c7a2812e7a22c134b98cf89bd43d9f28b8bec25cce037a0ac5b1ae8f667e54e1250813a5263004486b4465ad4e641ab2b535736ea26535a11013564f08f483b7dab1c2bcc3ee38eadf2f7850eff7e3459a4bbabf9f0cf6c50d0c0a4120565cd4a2ce3e354c11721cd695760a24c70e0d5a0dfc3c5dcd51dfad6de2c237a682f36dc0b271f21bb3655e5333016aaa42c2efa1446e5f3c0a79ec417c4d30f77556951cb0f05dbfafb82d9f95951a9ea241fda2a6388f73ace036b98acce079f0e4feebccc96290a86dcc89118a901210b245f2d114cf94396e4dbb461e82aa26a0581389707957968c7cdc466213bb1cd417db207ef40c05842ab67a01a9b96eb1430ebc26e795bb491258d326d5174ad549401059e41782121e506744af8af9d8e493644a87d613600888541cbbe538c625883f3eb4aa3102c5cfcc25de8e97af8927619ce6a731b3b8462d51d993066b935b0648d2344ad72e4fd70f347fbd81041042e5ea31cc7b2e3156a920b80ecba487b950ca32ca95fae85b759c936246ecf441a9fdd95e8fee932d6782cdec686064018c857efc47fb4b2a122600d5fdd79af2486f44df7e629184e1c573bc0a9b3feb40b190ef2861a1ab45e2ac2201b9cd42e495deea247269820ed32389a2810ad6c0f9a296d2a2d9c54089fed50b7f5ecfcd33ab9954360e1d7f5598c32128cfcf2a1d8bf14616818da8a5343bfa88f0eedf392e9d4ab1ace1b60324129cd4852c2e27813a9cf71a6ae6229a4fcecc1a756b3e664c5f50af333082616815a3bec8fc0b75b8e4e767d719"
                    }
                    ]
                },
                "offset": "<token_obtained_via_open_wallet>",
                "payment_proof": null
            },
            "version_info": {
                "orig_version": 3,
                "version": 3,
                "block_header_version": 6
            }
        }
    }
}
    {
        "jsonrpc": "2.0",
        "id": 1,
        "result": {
            "Ok": null
        }
    }

scan

Scans the entire UTXO set from the node, identify which outputs belong to the given wallet, update the wallet state to be consistent with what’s currently in the UTXO set.

{
    "jsonrpc": "2.0",
    "method": "scan",
    "params": {
        "token": "<token_obtained_via_open_wallet>",
        "start_height": 1,
        "delete_unconfirmed": false
    },
    "id": 1
}
    {
        "id": 1,
        "jsonrpc": "2.0",
        "result": {
            "Ok": null
        }
    }

node_height

Retrieves the last known height known by the wallet. This is determined as follows:

{
    "jsonrpc": "2.0",
    "method": "node_height",
    "params": {
        "token": "<token_obtained_via_open_wallet>"
    },
    "id": 1
}
    {
        "id": 1,
        "jsonrpc": "2.0",
        "result": {
            "Ok": {
                "header_hash": "d4b3d3c40695afd8c7760f8fc423565f7d41310b7a4e1c4a4a7950a66f16240d",
                "height": "5",
                "updated_from_node": true
            }
        }
    }

init_secure_api

Initializes the secure JSON-RPC API. This function must be called and a shared key established before any other OwnerAPI JSON-RPC function can be called.

{
    "jsonrpc": "2.0",
    "method": "init_secure_api",
    "id": "1",
    "params": {
    "ecdh_pubkey": "03aac.........."
    }
}
    {
        "jsonrpc": "2.0",
        "id": "1",
        "result": {
            "Ok": "02359.........."
        }
    }

get_top_level_directory

Retrieve the top-level directory for the wallet. This directory should contain the epic-wallet.toml file and the wallet_data directory that contains the wallet seed + data files.

{
    "jsonrpc": "2.0",
    "method": "get_top_level_directory",
    "params": {
    },
    "id": 1
}
    {
        "id": 1,
        "jsonrpc": "2.0",
        "result": {
            "Ok": "/doctest/dir"
        }
    }

set_top_level_directory

Set the top-level directory for the wallet.

{
    "jsonrpc": "2.0",
    "method": "set_top_level_directory",
    "params": {
        "dir": "/home/wallet_user/my_wallet_dir"
    },
    "id": 1
}
    {
        "id": 1,
        "jsonrpc": "2.0",
        "result": {
            "Ok": null
        }
    }

create_config

Create na epic-wallet.toml configuration file in the top-level directory for the specified chain type.

{
    "jsonrpc": "2.0",
    "method": "create_config",
    "params": {
        "chain_type": "Mainnet",
        "wallet_config": {
            "epicbox_domain": "epicbox.io",
            "epicbox_address_index": 0,
            "chain_type": null,
            "api_listen_interface": "127.0.0.1",
            "api_listen_port": 3415,
            "owner_api_listen_port": 3420,
            "api_secret_path": null,
            "node_api_secret_path": null,
            "check_node_api_http_addr": "http://127.0.0.1:3413",
            "owner_api_include_foreign": false,
            "data_file_dir": "/path/to/data/file/dir",
            "no_commit_cache": null,
            "tls_certificate_file": null,
            "tls_certificate_key": null,
            "dark_background_color_scheme": null,
            "keybase_notify_ttl": null
        },
        "logging_config": {
            "log_to_stdout": false,
            "stdout_log_level": "Info",
            "log_to_file": true,
            "file_log_level": "Debug",
            "log_file_path": "/path/to/log/file",
            "log_file_append": true,
            "log_max_size": null,
            "log_max_files": null,
            "tui_running": null
        },
        "tor_config" : {
            "use_tor_listener": true,
            "socks_proxy_addr": "127.0.0.1:9050",
            "send_config_dir": "."
        },
        "epicbox_config" : {
            "epicbox_domain": "epicbox.io",
            "epicbox_port": 443,
            "epicbox_protocol_unsecure": false,
            "epicbox_address_index": 0
        }
    },
    "id": 1
}
    {
        "id": 1,
        "jsonrpc": "2.0",
        "result": {
            "Ok": null
        }
    }

create_wallet

Creates a new wallet seed and empty wallet database in the wallet_data directory of the top level directory.

{
    "jsonrpc": "2.0",
    "method": "create_wallet",
    "params": {
        "name": null,
        "mnemonic": null,
        "mnemonic_length": 0,
        "password": "my_secret_password"
    },
    "id": 1
}
    {
        "id": 1,
        "jsonrpc": "2.0",
        "result": {
            "Ok": null
        }
    }

open_wallet

Opens a wallet, populating the internal keychain with the encrypted seed, and optionally returning a keychain_mask token to the caller to provide in all future calls.

{
    "jsonrpc": "2.0",
    "method": "open_wallet",
    "params": {
        "name": null,
        "password": "my_secret_password"
    },
    "id": 1
}
    {
        "id": 1,
        "jsonrpc": "2.0",
        "result": {
            "Ok": "d096b3cb75986b3b13f80b8f5243a9edf0af4c74ac37578c5a12cfb5b59b1868"
        }
    }

close_wallet

Close a wallet, removing the master seed from memory.

{
    "jsonrpc": "2.0",
    "method": "close_wallet",
    "params": {
        "name": null
    },
    "id": 1
}
    {
        "id": 1,
        "jsonrpc": "2.0",
        "result": {
            "Ok": null
        }
    }

get_mnemonic

Return the BIP39 mnemonic for the given wallet.

{
    "jsonrpc": "2.0",
    "method": "get_mnemonic",
    "params": {
        "name": null,
        "password": ""
    },
    "id": 1
}
    {
        "id": 1,
        "jsonrpc": "2.0",
        "result": {
            "Ok": "fat twenty mean degree forget shell check candy immense awful flame next during february bulb bike sun wink theory day kiwi embrace peace lunch"
        }
    }

change_password

Changes a wallet’s password, meaning the old seed file is decrypted with the old password, and a new seed file is created with the same mnemonic and encrypted with the new password.

{
    "jsonrpc": "2.0",
    "method": "change_password",
    "params": {
        "name": null,
        "old": "",
        "new": "new_password"
    },
    "id": 1
}
    {
        "id": 1,
        "jsonrpc": "2.0",
        "result": {
            "Ok": null
        }
    }

delete_wallet

Deletes a wallet, removing the config file, seed file and all data files.

{
    "jsonrpc": "2.0",
    "method": "delete_wallet",
    "params": {
        "name": null
    },
    "id": 1
}
    {
        "id": 1,
        "jsonrpc": "2.0",
        "result": {
            "Ok": null
        }
    }

start_updater

Starts a background wallet update thread, which performs the wallet update process automatically at the frequency specified.

{
    "jsonrpc": "2.0",
    "method": "start_updater",
    "params": {
        "token": "<token_obtained_via_open_wallet>",
        "frequency": 30000
    },
    "id": 1
}
    {
        "id": 1,
        "jsonrpc": "2.0",
        "result": {
            "Ok": null
        }
    }

stop_updater

Stops the background update thread. If the updater is currently updating, the thread will stop after the next update

{
    "jsonrpc": "2.0",
    "method": "stop_updater",
    "params": null,
    "id": 1
}
    {
        "id": 1,
        "jsonrpc": "2.0",
        "result": {
            "Ok": null
        }
    }

get_updater_messages

Retrieve messages from the updater thread, up to count number of messages.

{
    "jsonrpc": "2.0",
    "method": "get_updater_messages",
    "params": {
        "count": 1
    },
    "id": 1
}
    {
        "id": 1,
        "jsonrpc": "2.0",
        "result": {
            "Ok": []
        }
    }

get_public_address

Retrieve the public “addresses” associated with the active account at the given derivation path.

{
    "jsonrpc": "2.0",
    "method": "get_public_address",
    "params": {
        "token": "<token_obtained_via_open_wallet>",
        "derivation_index": 0
    },
    "id": 1
}
    {
        "id": 1,
        "jsonrpc": "2.0",
        "result": {
            "Ok":  {
                "domain": "",
                "port": 0,
                "public_key": "esWVpwMwUyYoxta4EpGPQQEBYdm3wBqCcggVswNyquoLHaLjFdwq"
            }
        }
    }

get_public_proof_address

Retrieve the public proof “addresses” associated with the active account at the given derivation path.

{
    "jsonrpc": "2.0",
    "method": "get_public_proof_address",
    "params": {
        "token": "<token_obtained_via_open_wallet>",
        "derivation_index": 0
    },
    "id": 1
}
    {
        "id": 1,
        "jsonrpc": "2.0",
        "result": {
            "Ok": "32cdd63928854f8b2628b1dce4626ddcdf35d56cb7cfdf7d64cca5822b78d4d3"
        }
    }

proof_address_from_onion_v3

Helper function to convert an Onion v3 address to a payment proof address (essentially extracting and verifying the public key).

{
    "jsonrpc": "2.0",
    "method": "proof_address_from_onion_v3",
    "params": {
        "address_v3": "2a6at2obto3uvkpkitqp4wxcg6u36qf534eucbskqciturczzc5suyid"
    },
    "id": 1
}
    {
        "id": 1,
        "jsonrpc": "2.0",
        "result": {
            "Ok": "d03c09e9c19bb74aa9ea44e0fe5ae237a9bf40bddf0941064a80913a4459c8bb"
        }
    }

retrieve_payment_proof

Returns a single, exportable PaymentProof from a completed transaction within the wallet.

{
    "jsonrpc": "2.0",
    "method": "retrieve_payment_proof",
    "params": {
        "token": "<token_obtained_via_open_wallet>",
        "refresh_from_node": true,
        "tx_id": null,
        "tx_slate_id": "0436430c-2b02-624c-2032-570501212b00"
    },
    "id": 1
}
    {
        "id": 1,
        "jsonrpc": "2.0",
        "result": {
            "Ok": {
                "amount": "600000000",
                "excess": "08d09187cb93cf5d6b97b28e8ca529912bf35ec8773d3e9af9b3c174a270dc7f05",
                "recipient_address": "pa7wkkdgs5bkteha7lykl7ff2wztgdrxxo442xdcq2lnaphe5aidd4id",
                "recipient_sig": "b9ac5e18fd13ce72923cc47796bd5af09b5247c52da3634c9b934d4e111a43f53f1c55e3f3be36a79450e18f8989d81a0c21c4b2c16c208753a9971a5ffee406",
                "sender_address": "glg5mojiqvhywjriwhooiytn3tptlvlmw7h567lezssyek3y2tjzznad",
                "sender_sig": "d26fa48e9a32058b4dc9e9098edd3b98bf2e5286024adc5f7555aa4804acdb1c5506412dfae7d087c138d727da427e14c6c5b7dc2008fc7ed55ab95e8bac3e06"
            }
        }
    }

verify_payment_proof

Verifies a PaymentProof. This process entails:

Ensuring the kernel identified by the proof’s stored excess commitment exists in the kernel set. Reproducing the signed message amount|kernel_commitment|sender_address. Validating the proof’s recipient_sig against the message using the recipient’s address as the public key. Validating the proof’s sender_sig against the message using the sender's address as the public key.

{
    "jsonrpc": "2.0",
    "method": "verify_payment_proof",
    "params": {
        "token": "<token_obtained_via_open_wallet>",
        "proof": {
            "amount": "600000000",
            "excess": "08d09187cb93cf5d6b97b28e8ca529912bf35ec8773d3e9af9b3c174a270dc7f05",
            "recipient_address": "pa7wkkdgs5bkteha7lykl7ff2wztgdrxxo442xdcq2lnaphe5aidd4id",
            "recipient_sig": "b9ac5e18fd13ce72923cc47796bd5af09b5247c52da3634c9b934d4e111a43f53f1c55e3f3be36a79450e18f8989d81a0c21c4b2c16c208753a9971a5ffee406",
            "sender_address": "glg5mojiqvhywjriwhooiytn3tptlvlmw7h567lezssyek3y2tjzznad",
            "sender_sig": "d26fa48e9a32058b4dc9e9098edd3b98bf2e5286024adc5f7555aa4804acdb1c5506412dfae7d087c138d727da427e14c6c5b7dc2008fc7ed55ab95e8bac3e06"
        }
    },
    "id": 1
}
    {
        "id": 1,
        "jsonrpc": "2.0",
        "result": {
            "Ok": [
                true,
                false
            ]
        }
    }

set_tor_config

Set the TOR configuration for this instance of the OwnerAPI, used during init_send_tx when send args are present and a TOR address is specified.

{
    "jsonrpc": "2.0",
    "method": "set_tor_config",
    "params": {
        "tor_config": {
            "use_tor_listener": true,
            "socks_proxy_addr": "127.0.0.1:59050",
            "send_config_dir": "."
        }
    },
    "id": 1
}
    {
        "id": 1,
        "jsonrpc": "2.0",
        "result": {
            "Ok": null
        }
    }

set_epicbox_config

Set the Epicbox configuration for this instance of the OwnerAPI, used during init_send_tx when send args are present and an Epicbox address is specified.

{
    "jsonrpc": "2.0",
    "method": "set_epicbox_config",
    "params": {
        "epicbox_config": {
            "epicbox_domain": "epicbox.io",
            "epicbox_port": 443,
            "epicbox_protocol_unsecure": false,
            "epicbox_address_index": 0
        }
    },
    "id": 1
}
    {
        "id": 1,
        "jsonrpc": "2.0",
        "result": {
            "Ok": null
        }
    }