|
|
@@ -123,6 +123,24 @@ pub const MONEY_ALIASES_COL_TOKEN_ID: &str = "token_id";
|
|
|
|
|
|
pub const BALANCE_BASE10_DECIMALS: usize = 8;
|
|
|
|
|
|
+const MONEY_FEE_PREFIX_LEN: usize = 9;
|
|
|
+
|
|
|
+fn parse_money_function(data: &[u8]) -> Result<MoneyFunction> {
|
|
|
+ let Some(func) = data.first() else {
|
|
|
+ return Err(Error::ParseFailed("money call data is empty"))
|
|
|
+ };
|
|
|
+
|
|
|
+ Ok(MoneyFunction::try_from(*func)?)
|
|
|
+}
|
|
|
+
|
|
|
+async fn parse_money_fee_params(data: &[u8]) -> Result<MoneyFeeParamsV1> {
|
|
|
+ if data.len() < MONEY_FEE_PREFIX_LEN {
|
|
|
+ return Err(Error::ParseFailed("money fee call data is too short"))
|
|
|
+ }
|
|
|
+
|
|
|
+ Ok(deserialize_async(&data[MONEY_FEE_PREFIX_LEN..]).await?)
|
|
|
+}
|
|
|
+
|
|
|
impl Drk {
|
|
|
/// Initialize wallet with tables for the Money contract.
|
|
|
pub async fn initialize_money(&self, output: &mut Vec<String>) -> WalletDbResult<()> {
|
|
|
@@ -770,10 +788,10 @@ impl Drk {
|
|
|
|
|
|
let call = &calls[*call_idx];
|
|
|
let data = &call.data.data;
|
|
|
- match MoneyFunction::try_from(data[0])? {
|
|
|
+ match parse_money_function(data)? {
|
|
|
MoneyFunction::FeeV1 => {
|
|
|
scan_cache_log!(scan_cache, "[parse_money_call] Found Money::FeeV1 call");
|
|
|
- let params: MoneyFeeParamsV1 = deserialize_async(&data[9..]).await?;
|
|
|
+ let params = parse_money_fee_params(data).await?;
|
|
|
nullifiers.push(params.input.nullifier);
|
|
|
if !params.output.tx_local {
|
|
|
coins.push((params.output.coin, params.output.note, false));
|
|
|
@@ -1080,9 +1098,9 @@ impl Drk {
|
|
|
let mut nullifiers: Vec<Nullifier> = vec![];
|
|
|
|
|
|
let data = &call.data.data;
|
|
|
- match MoneyFunction::try_from(data[0])? {
|
|
|
+ match parse_money_function(data)? {
|
|
|
MoneyFunction::FeeV1 => {
|
|
|
- let params: MoneyFeeParamsV1 = deserialize_async(&data[9..]).await?;
|
|
|
+ let params = parse_money_fee_params(data).await?;
|
|
|
nullifiers.push(params.input.nullifier);
|
|
|
}
|
|
|
MoneyFunction::TransferV1 => {
|
|
|
@@ -1402,7 +1420,7 @@ impl Drk {
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
- match MoneyFunction::try_from(call.data.data[0])? {
|
|
|
+ match parse_money_function(&call.data.data)? {
|
|
|
MoneyFunction::FeeV1 => {
|
|
|
return Err(Error::Custom("Fee call already exists".to_string()))
|
|
|
}
|