Skip to content

Commit

Permalink
feat: fetch details with get_bridge_transfer_details view function
Browse files Browse the repository at this point in the history
  • Loading branch information
andygolay committed Oct 14, 2024
1 parent 4c077a0 commit ba1864f
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -66,27 +66,27 @@ async fn test_movement_client_initiate_transfer() -> Result<(), anyhow::Error> {
.await
.expect("Failed to initiate bridge transfer");

let details: ([u8; 32], String, Vec<u8>, u64, [u8; 32], u64) =
let initial_details: ([u8; 32], String, Vec<u8>, u64, [u8; 32], u64) =
test_utils::extract_bridge_transfer_details_framework(
&mut mvt_client_harness.movement_client,
)
.await?;
info!("Bridge transfer details: {:?}", details);
info!("Bridge transfer details: {:?}", initial_details);


let details = BridgeContract::get_bridge_transfer_details_initiator(
&mut mvt_client_harness.movement_client,
BridgeTransferId(MovementHash(details.0)),
BridgeTransferId(initial_details.0),
)
.await
.expect("Failed to get bridge transfer details")
.expect("Expected to find bridge transfer details, but got None");

assert_eq!(details.state, 2, "Bridge transfer should be completed.");
assert_eq!(details.state, 1, "Bridge transfer should be initiated.");

test_utils::assert_bridge_transfer_details_framework(
&details,
details.0,
&initial_details,
details.bridge_transfer_id.0,
sender_address.to_string(),
args.recipient.clone(),
args.amount,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -332,7 +332,7 @@ impl BridgeContract<MovementAddress> for MovementClientFramework {
bridge_transfer_id: BridgeTransferId,
) -> BridgeContractResult<Option<BridgeTransferDetails<MovementAddress>>> {
let bridge_transfer_id_hex = format!("0x{}", hex::encode(bridge_transfer_id.0));

let view_request = ViewRequest {
function: EntryFunctionId {
module: MoveModuleId {
Expand All @@ -350,41 +350,50 @@ impl BridgeContract<MovementAddress> for MovementClientFramework {
type_arguments: vec![],
arguments: vec![serde_json::json!(bridge_transfer_id_hex)],
};

debug!("View request: {:?}", view_request);


let response: Response<Vec<serde_json::Value>> = self
.rest_client
.view(&view_request, None)
.await
.map_err(|_| BridgeContractError::CallError)?;

let values = response.inner();

if values.len() != 6 {
if values.len() != 1 {
return Err(BridgeContractError::InvalidResponseLength);
}

let originator = utils::val_as_str_initiator(values.first())?;
let recipient = utils::val_as_str_initiator(values.get(1))?;
let amount = utils::val_as_str_initiator(values.get(2))?
.parse::<u64>()
.map_err(|_| BridgeContractError::SerializationError)?;
let hash_lock = utils::val_as_str_initiator(values.get(3))?;
let time_lock = utils::val_as_str_initiator(values.get(4))?

let value = &values[0];

let originator_address = AccountAddress::from_hex_literal(
value["addresses"]["initiator"].as_str().ok_or(BridgeContractError::SerializationError)?
).map_err(|_| BridgeContractError::SerializationError)?;

let recipient_address_bytes = hex::decode(
&value["addresses"]["recipient"]["inner"].as_str().ok_or(BridgeContractError::SerializationError)?[2..]
).map_err(|_| BridgeContractError::SerializationError)?;

let amount = value["amount"]
.as_str()
.ok_or(BridgeContractError::SerializationError)?
.parse::<u64>()
.map_err(|_| BridgeContractError::SerializationError)?;
let state = utils::val_as_u64_initiator(values.get(5))? as u8;

let originator_address = AccountAddress::from_hex_literal(originator)

let hash_lock_array: [u8; 32] = hex::decode(
&value["hash_lock"].as_str().ok_or(BridgeContractError::SerializationError)?[2..]
).map_err(|_| BridgeContractError::SerializationError)?.try_into()
.map_err(|_| BridgeContractError::SerializationError)?;
let recipient_address_bytes =
hex::decode(&recipient[2..]).map_err(|_| BridgeContractError::SerializationError)?;
let hash_lock_array: [u8; 32] = hex::decode(&hash_lock[2..])
.map_err(|_| BridgeContractError::SerializationError)?
.try_into()

let time_lock = value["time_lock"]
.as_str()
.ok_or(BridgeContractError::SerializationError)?
.parse::<u64>()
.map_err(|_| BridgeContractError::SerializationError)?;


let state = value["state"]
.as_u64()
.ok_or(BridgeContractError::SerializationError)? as u8;

let details = BridgeTransferDetails {
bridge_transfer_id,
initiator_address: BridgeAddress(MovementAddress(originator_address)),
Expand All @@ -394,7 +403,7 @@ impl BridgeContract<MovementAddress> for MovementClientFramework {
time_lock: TimeLock(time_lock),
state,
};

Ok(Some(details))
}

Expand Down

0 comments on commit ba1864f

Please sign in to comment.