Deposit Liquidity
Example of code that deposits liquidity into Aquarius pool
Executing Deposit: Step by Step Guide
# Distributor's secret key (ensure this is kept secure)
user_secret_key = "S..."
# XLM/AQUA pool address
pool_address = "CCY2PXGMKNQHO7WNYXEWX76L2C5BH3JUW3RCATGUYKY7QQTRILBZIFWV"
# 0.1 XLM in stroops
amount_a = 1_000000
# 25 AQUA in stroops
amount_b = 25_0000000// Distributor's secret key (ensure this is kept secure)
const userSecretKey = "S...";
// XLM/AQUA pool address
const poolAddress = "CCY2PXGMKNQHO7WNYXEWX76L2C5BH3JUW3RCATGUYKY7QQTRILBZIFWV"
// 0.1 XLM in stroops
const amountA = 1000000;
// 25 AQUA in stroops
const amountB = 250000000;def execute_deposit():
# Initialize Soroban and Horizon servers
server = SorobanServer(SOROBAN_SERVER_RPC)
horizon_server = Server(HORIZON_SERVER)
# Load distributor's keypair using the secret key
keypair = Keypair.from_secret(user_secret_key)
# Load the distributor's account information from Soroban server
account = server.load_account(keypair.public_key)
# Build the deposit transaction
tx_builder = TransactionBuilder(
source_account=account,
network_passphrase=NETWORK_PASSPHRASE,
base_fee=1000000 # Set base fee; adjust as necessary
).set_timeout(3600) # Set transaction timeout
# Append the invoke_contract_function operation for deposit
tx = tx_builder.append_invoke_contract_function_op(
contract_id=pool_address,
function_name="deposit",
parameters=[
Address(keypair.public_key).to_xdr_sc_val(), # Distributor's address
scval.to_vec([
scval.to_uint128(amount_a), # Amount of XLM to deposit
scval.to_uint128(amount_b), # Amount of AQUA to deposit
]),
scval.to_uint128(0), # Additional parameter (e.g., minimum shares)
],
).build()
# Prepare and sign the transaction
prepared_tx = server.prepare_transaction(tx)
prepared_tx.sign(keypair)
# Submit the transaction to the Horizon server
tx_response = horizon_server.submit_transaction(prepared_tx)
# Parse the transaction metadata to extract results
transaction_meta = xdr.TransactionMeta.from_xdr(tx_response['result_meta_xdr'])
tx_result = transaction_meta.v3.soroban_meta.return_value
if not tx_result:
raise RuntimeError("Transaction did not return a result. Deposit failed.")
# Extract deposited amounts and shares from the transaction result
deposit_a, deposit_b = map(u128_to_int, [r.u128 for r in tx_result.vec.sc_vec[0].vec.sc_vec])
shares_amount = u128_to_int(tx_result.vec.sc_vec[1].u128)
print("Deposit successful!")
print(f"Deposited Amounts: Token A = {deposit_a}, Token B = {deposit_b}")
print(f"Received Shares: {shares_amount}")Complete Code Examples
Last updated