SLP is getting more interest benefiting IMHO from lower fees, token creation simplicity and the special decentralization BCH offers.
If you are a python developer there are not many choices to build using SLP. I believe Bitcash python lib SLP support is still under development with help from ActorForth. However there is a great work have been done in Electron Cash SLP version by James Cramer. I've tried to utilize that and use its' python code to do all the awesome stuff the wallet does from my own Paython application using the CLI interface.
Features
I'm a beginner programmer but wanted to share this code with the community so it may inspire senior devs to build on it or create a better alternative. I've added the following functionalities.
Check daemon state
Check wallet load state
Get unused BCH and SLP address
Get BCH address balance
Prepare and broadcast BCH and SLP transactions
You may need to apply an SLP validation fix before you can create transactions, the fix was done by a senior dev that I've worked with to fix the issue.
The code
import json
import subprocess
# Check if daemon is connected
def check_daemon(electron_cash_path):
"""Check daemon running
Checks if Electron Cash daemon is running
"""
daemon_status = subprocess.run(
[electron_cash_path,"daemon", "status"],
capture_output=True, text=True
)
json_output = json.loads(daemon_status.stdout)
connected = json_output["connected"]
return connected
# Doesn't support multiple loaded wallet
def check_wallet_loaded(electron_cash_path, wallet_path):
"""Check wallet loaded
Checks if the wallet is loaded in Electron Cash daemon
"""
daemon_status = subprocess.run(
[electron_cash_path,"daemon", "status"],
capture_output=True, text=True
)
json_output = json.loads(daemon_status.stdout)
wallet_output = json_output["wallets"]
wallet_loaded = list(wallet_output)[0]
if wallet_loaded == wallet_path:
return True
else:
return False
def get_unused_bch_address(electron_cash_path, wallet_path):
"""Get unused BCH address
"""
unused_bch_address = subprocess.run(
[electron_cash_path,"-w", wallet_path, "getunusedaddress"],
capture_output=True, text=True
)
return unused_bch_address
def get_unused_slp_address(electron_cash_path, wallet_path):
"""Get unused SLP address
"""
receive_address = subprocess.run(
[electron_cash_path,"-w", wallet_path, "getunusedaddress_slp"],
capture_output=True, text=True
)
return unused_slp_address
def get_address_balance_bch(electron_cash_path, wallet_path, address):
"""Get the balance of a BCH address
"""
bch_address_balance = subprocess.run(
[electron_cash_path, "-w", wallet_path, "getaddressbalance",
address], capture_output=True, text=True
)
bch_address_balance_final = json.loads((bch_address_balance.stdout).strip())
return bch_address_balance_final
def prepare_transaction(electron_cash_path, wallet_path, tokenIdHex, address, token_amount):
"""Prepare transaction
Creates the raw transaction data
"""
tx_data = subprocess.run(
[electron_cash_path, "-w", wallet_path, "payto",
address, bch_amount],
capture_output=True, text=True
)
tx_data_json = json.loads(tx_data.stdout)
tx_hex = tx_data_json['hex']
return tx_hex
def prepare_slp_transaction(electron_cash_path, wallet_path, tokenIdHex, address, token_amount):
"""Prepare SLP transaction
Creates the raw SLP transaction data
"""
tx_data = subprocess.run(
[electron_cash_path, "-w", wallet_path, "payto_slp",
tokenIdHex, address, token_amount],
capture_output=True, text=True
)
tx_data_json = json.loads(tx_data.stdout)
tx_hex = tx_data_json['hex']
return tx_hex
def broadcast_tx(electron_cash_path, wallet_path, tx_hex):
"""Broadcast transaction
Send the transaction to the network
"""
broadcast = subprocess.run(
[electron_cash_path, "-w", wallet_path, "broadcast", tx_hex], capture_output=True, text=True
)
tx_id_json = json.loads(broadcast.stdout)
tx_id = tx_id_json[1]
return tx_id
Gitlab repo
You can fork the code and contribute to the following repo
https://gitlab.com/uak/electron-cash-slp-cli-python-basic-lib/-/blob/master/ec_slp_lib.py
You can get Electron Cash SLP version from this repo:
https://github.com/simpleledger/Electron-Cash-SLP