Using the Oyster CLI Wallet: Installing Pearl, Sending PRL, and Understanding Change

I used the Oyster command-line wallet to send 32.8 PRL to my SafeTrade deposit address. The transaction had two outputs, and the block explorer showed a smaller balance than my wallet. Here is how I installed and ran the wallet, and why those two balances differed.

Installing the Pearl tools

The install.sh script downloads Pearl release binaries from GitHub, verifies the archive against the release’s SHA-256 checksums, and installs pearld, prlctl, and oyster. It also installs oystercli when the selected release includes it. The script supports Linux and macOS on amd64 and arm64.

View the installation script on GitHub or download install.sh. These links follow the master branch, so the script may change over time.

To install the binaries in a working directory:

mkdir -p ~/pearl-wallet
cd ~/pearl-wallet
curl -fL https://raw.githubusercontent.com/pearl-research-labs/pearl/master/install.sh -o install.sh
less install.sh
sh install.sh --bin-dir "$PWD"

Without --bin-dir, the script uses $XDG_BIN_HOME if set, or ~/.local/bin otherwise. It selects the latest stable release by default; --version selects a specific release tag.

On Linux, the configuration files are ~/.pearld/pearld.conf, ~/.oyster/oyster.conf, and ~/.prlctl/prlctl.conf. The script generates RPC credentials when needed and preserves existing configurations that already contain credentials. The generated RPC listeners are bound to localhost, with TLS enabled by default.

Starting the wallet and its interactive interface

For a new wallet, run the creation command first and follow its prompts. Keep the wallet recovery information somewhere secure:

./oyster --create

For an existing wallet, skip creation. Start the wallet service:

cd ~/pearl-wallet
./oyster

Leave it running and open another terminal:

cd ~/pearl-wallet
./oystercli

The installer configures Oyster to synchronize using SPV by default, so a local pearld full node is not required for this setup. In my session, the wallet reported version 1.4.6+821c811.

The interactive menu includes Overview, Send, Receive, Transactions, Accounts, Coins, Security, and Node & sync. Wait for synchronization before checking balances or sending funds.

Sending PRL to SafeTrade

I selected Send, entered my SafeTrade PRL deposit address, and specified 32.8 PRL. Before confirming, check the address and network against the exchange’s deposit page. The wallet requested an unlock, then broadcast the transaction.

My transaction ID was:

7f2053bd7aab3a3a2d436c94c6c489dcd0387234f6be33ab39aab57a9d85e149

Why one payment produced two outputs

The transaction spent previously received outputs totaling 33.6731776 PRL. It split that amount as follows:

DestinationAmount (PRL)
SafeTrade deposit address32.80000000
Wallet change address0.87315873
Network fee0.00001887

The fee is the difference between the input and output totals; it is not a third output. The second output returns change to another address controlled by the wallet. I did not enter that address manually.

This is how a UTXO transaction works: selected outputs are spent in full, and the amount left after the payment and fee is returned as change. Two outputs do not mean that I made two separate payments.

Why the explorer showed 49.13 PRL while the wallet showed 50.00 PRL

Before sending, my balance was 82.80716578 PRL. After paying the exchange and the fee, the wallet balance was:

82.80716578 - 32.80000000 - 0.00001887 = 50.00714691 PRL

However, the explorer page I had opened displayed the balance of my original address, not the entire wallet:

LocationBalance (PRL)
Original address49.13398818
Change address0.87315873
Total in the wallet50.00714691

The difference was exactly the change amount. Even after confirmation, the original address page continued to show 49.13398818 PRL, because the change was at another address.

Immediately after broadcasting, the CLI header also showed 49.13398818 PRL. After confirmation and refresh, Overview and the header both showed 50.00714691 PRL. The screenshots establish that sequence, though they do not establish the precise internal reason for the temporary header value.

There was no need to send the change back to the original address: both addresses were already part of the same wallet. A wallet balance can include funds held at multiple addresses.

Leave a Reply

Your email address will not be published. Required fields are marked *