Skip to content
53 changes: 40 additions & 13 deletions bindings/uniffi/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use std::{

use rgb_lib::{
AssetSchema, Assignment as RgbLibAssignment, CloseMethod, Error as RgbLibError, TransferStatus,
TransportType,
TransportType, WalletTransactionType,
keys::{Keys, WitnessVersion},
utils::BitcoinNetwork,
wallet::{
Expand All @@ -19,18 +19,19 @@ use rgb_lib::{
InvoiceData as RgbLibInvoiceData, Media, Metadata, MultisigKeys, MultisigOnlineOptions,
MultisigVotingStatus as RgbLibMultisigVotingStatus, MultisigWallet as RgbLibMultisigWallet,
Online, OnlineOptions, Operation as RgbLibOperation, OperationInfo as RgbLibOperationInfo,
OperationResult, Outpoint, ProofOfReserves, PsbtInputInfo, PsbtInspection, PsbtOutputInfo,
ReceiveData, Recipient as RgbLibRecipient, RecipientInfo as RgbLibRecipientInfo,
RecipientType, RefreshFilter, RefreshTransferStatus, RefreshedTransfer,
RespondToOperation as RgbLibRespondToOperation, RgbAllocation as RgbLibRgbAllocation,
RgbInputInfo as RgbLibRgbInputInfo, RgbInspection as RgbLibRgbInspection,
RgbOperationInfo as RgbLibRgbOperationInfo, RgbOutputInfo as RgbLibRgbOutputInfo,
RgbTransitionInfo as RgbLibRgbTransitionInfo, RgbWalletOpsOffline, RgbWalletOpsOnline,
SendBeginResult, SendDetails, SinglesigKeys, SyncKeychain as RgbLibSyncKeychain,
SyncOptions as RgbLibSyncOptions, SyncStrategy, Token, TokenLight, Transaction,
TransactionType, Transfer as RgbLibTransfer, TransferKind, TransferTransportEndpoint,
TransportEndpoint as RgbLibTransportEndpoint, TypeOfTransition, Unspent as RgbLibUnspent,
UserRole, Utxo, Wallet as RgbLibWallet, WalletData, WalletDescriptors, WitnessData,
OperationResult, Outpoint, PendingVanillaTx, ProofOfReserves, PsbtInputInfo,
PsbtInspection, PsbtOutputInfo, ReceiveData, Recipient as RgbLibRecipient,
RecipientInfo as RgbLibRecipientInfo, RecipientType, RefreshFilter, RefreshTransferStatus,
RefreshedTransfer, RespondToOperation as RgbLibRespondToOperation,
RgbAllocation as RgbLibRgbAllocation, RgbInputInfo as RgbLibRgbInputInfo,
RgbInspection as RgbLibRgbInspection, RgbOperationInfo as RgbLibRgbOperationInfo,
RgbOutputInfo as RgbLibRgbOutputInfo, RgbTransitionInfo as RgbLibRgbTransitionInfo,
RgbWalletOpsOffline, RgbWalletOpsOnline, SendBeginResult, SendDetails, SinglesigKeys,
SyncKeychain as RgbLibSyncKeychain, SyncOptions as RgbLibSyncOptions, SyncStrategy, Token,
TokenLight, Transaction, TransactionType, Transfer as RgbLibTransfer, TransferKind,
TransferTransportEndpoint, TransportEndpoint as RgbLibTransportEndpoint, TypeOfTransition,
Unspent as RgbLibUnspent, UserRole, Utxo, Wallet as RgbLibWallet, WalletData,
WalletDescriptors, WitnessData,
},
};

Expand Down Expand Up @@ -201,6 +202,7 @@ pub struct Transfer {
pub transport_endpoints: Vec<TransferTransportEndpoint>,
pub invoice_string: Option<String>,
pub consignment_path: Option<String>,
pub psbt_path: Option<String>,
}
impl From<RgbLibTransfer> for Transfer {
fn from(orig: RgbLibTransfer) -> Self {
Expand All @@ -221,6 +223,7 @@ impl From<RgbLibTransfer> for Transfer {
transport_endpoints: orig.transport_endpoints,
invoice_string: orig.invoice_string.clone(),
consignment_path: orig.consignment_path.clone(),
psbt_path: orig.psbt_path.clone(),
}
}
}
Expand All @@ -243,6 +246,7 @@ impl From<Transfer> for RgbLibTransfer {
transport_endpoints: orig.transport_endpoints,
invoice_string: orig.invoice_string.clone(),
consignment_path: orig.consignment_path.clone(),
psbt_path: orig.psbt_path.clone(),
}
}
}
Expand Down Expand Up @@ -1405,6 +1409,14 @@ impl Wallet {
.inspect_rgb_transfer(psbt, fascia_path, entropy)?
.into())
}

fn list_pending_vanilla_txs(&self) -> Result<Vec<PendingVanillaTx>, RgbLibError> {
self._get_wallet().list_pending_vanilla_txs()
}

fn abort_pending_vanilla_tx(&self, txid: String) -> Result<(), RgbLibError> {
self._get_wallet().abort_pending_vanilla_tx(txid)
}
}

fn _convert_recipient_map(
Expand Down Expand Up @@ -1448,6 +1460,10 @@ impl MultisigWallet {
self._get_wallet().get_descriptors()
}

fn get_local_last_processed_operation_idx(&self) -> Result<i32, RgbLibError> {
self._get_wallet().get_local_last_processed_operation_idx()
}

fn get_wallet_dir(&self) -> String {
self._get_wallet()
.get_wallet_dir()
Expand Down Expand Up @@ -1534,6 +1550,17 @@ impl MultisigWallet {
.delete_transfers(batch_transfer_idx, no_asset_only)
}

fn fail_transfers(
&self,
online: Online,
batch_transfer_idx: Option<i32>,
no_asset_only: bool,
skip_sync: bool,
) -> Result<bool, RgbLibError> {
self._get_wallet()
.fail_transfers(online, batch_transfer_idx, no_asset_only, skip_sync)
}

fn get_asset_balance(&self, asset_id: String) -> Result<Balance, RgbLibError> {
self._get_wallet().get_asset_balance(asset_id)
}
Expand Down
29 changes: 29 additions & 0 deletions bindings/uniffi/src/rgb-lib.udl
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ interface RgbLibError {
CannotFailBatchTransfer();
CannotFinalizePsbt();
CannotUseIfaOnMainnet();
Database(string details);
EmptyFile(string file_path);
FailedBdkSync(string details);
FailedBroadcast(string details);
Expand Down Expand Up @@ -513,6 +514,19 @@ enum TransactionType {
"Incoming",
};

[Remote]
enum WalletTransactionType {
"CreateUtxos",
"Drain",
"SendBtc",
};

[Remote]
dictionary PendingVanillaTx {
string txid;
WalletTransactionType type;
};

[Remote]
dictionary BlockTime {
u32 height;
Expand All @@ -536,6 +550,7 @@ dictionary Transfer {
sequence<TransferTransportEndpoint> transport_endpoints;
string? invoice_string;
string? consignment_path;
string? psbt_path;
};

dictionary Unspent {
Expand Down Expand Up @@ -965,6 +980,12 @@ interface Wallet {

[Throws=RgbLibError]
void sync(Online online, SyncOptions options);

[Throws=RgbLibError]
sequence<PendingVanillaTx> list_pending_vanilla_txs();

[Throws=RgbLibError]
void abort_pending_vanilla_tx(string txid);
};

interface MultisigWallet {
Expand All @@ -977,6 +998,9 @@ interface MultisigWallet {

WalletDescriptors get_descriptors();

[Throws=RgbLibError]
i32 get_local_last_processed_operation_idx();

string get_wallet_dir();

string get_media_dir();
Expand Down Expand Up @@ -1015,6 +1039,11 @@ interface MultisigWallet {
[Throws=RgbLibError]
boolean delete_transfers(i32? batch_transfer_idx, boolean no_asset_only);

[Throws=RgbLibError]
boolean fail_transfers(
Online online, i32? batch_transfer_idx, boolean no_asset_only,
boolean skip_sync);

[Throws=RgbLibError]
Balance get_asset_balance(string asset_id);

Expand Down
4 changes: 4 additions & 0 deletions src/database/enums.rs
Original file line number Diff line number Diff line change
Expand Up @@ -311,13 +311,17 @@ impl TransferStatus {
}
}

/// The type of a pending vanilla wallet transaction.
#[derive(Debug, Copy, Clone, PartialEq, Eq, EnumIter, DeriveActiveEnum, Deserialize, Serialize)]
#[sea_orm(rs_type = "u8", db_type = "TinyUnsigned")]
pub enum WalletTransactionType {
/// Transaction used to create UTXOs
#[sea_orm(num_value = 1)]
CreateUtxos = 1,
/// Transaction used to drain the RGB wallet
#[sea_orm(num_value = 2)]
Drain = 2,
/// Transaction used to perform a BTC send
#[sea_orm(num_value = 3)]
SendBtc = 3,
}
Expand Down
Loading
Loading