Skip to content

Commit 5773665

Browse files
authored
Merge pull request #2684 from blockstack/feat/clarity-cli-serialized-output
Feat/clarity cli serialized output
2 parents 02ecae6 + 2efe18b commit 5773665

File tree

1 file changed

+35
-9
lines changed

1 file changed

+35
-9
lines changed

src/clarity.rs

Lines changed: 35 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ use rusqlite::{Connection, OpenFlags, NO_PARAMS};
3232
use address::c32::c32_address;
3333
use chainstate::stacks::index::{storage::TrieFileStorage, MarfTrieId};
3434
use util::db::FromColumn;
35-
use util::hash::Sha512Trunc256Sum;
35+
use util::hash::{bytes_to_hex, Sha512Trunc256Sum};
3636

3737
use util::log;
3838
use vm::ContractName;
@@ -65,6 +65,8 @@ use serde::Serialize;
6565
use serde_json::json;
6666
use util::strings::StacksString;
6767

68+
use codec::StacksMessageCodec;
69+
6870
use std::convert::TryFrom;
6971

7072
use crate::clarity_vm::database::marf::MarfedKV;
@@ -766,6 +768,14 @@ pub fn add_assets(result: &mut serde_json::Value, assets: bool, asset_map: Asset
766768
}
767769
}
768770

771+
pub fn add_serialized_output(result: &mut serde_json::Value, value: Value) {
772+
let result_raw = {
773+
let bytes = (&value).serialize_to_vec();
774+
bytes_to_hex(&bytes)
775+
};
776+
result["output_serialized"] = serde_json::to_value(result_raw.as_str()).unwrap();
777+
}
778+
769779
/// Returns (process-exit-code, Option<json-output>)
770780
pub fn invoke_command(invoked_by: &str, args: &[String]) -> (i32, Option<serde_json::Value>) {
771781
if args.len() < 1 {
@@ -1158,9 +1168,11 @@ pub fn invoke_command(invoked_by: &str, args: &[String]) -> (i32, Option<serde_j
11581168
match result_and_cost {
11591169
(Ok(result), cost) => {
11601170
let mut result_json = json!({
1161-
"output": serde_json::to_value(&result).unwrap()
1171+
"output": serde_json::to_value(&result).unwrap(),
1172+
"success": true,
11621173
});
11631174

1175+
add_serialized_output(&mut result_json, result);
11641176
add_costs(&mut result_json, costs, cost);
11651177

11661178
(0, Some(result_json))
@@ -1169,7 +1181,8 @@ pub fn invoke_command(invoked_by: &str, args: &[String]) -> (i32, Option<serde_j
11691181
let mut result_json = json!({
11701182
"error": {
11711183
"runtime": serde_json::to_value(&format!("{}", error)).unwrap()
1172-
}
1184+
},
1185+
"success": false,
11731186
});
11741187

11751188
add_costs(&mut result_json, costs, cost);
@@ -1208,9 +1221,11 @@ pub fn invoke_command(invoked_by: &str, args: &[String]) -> (i32, Option<serde_j
12081221
match result_and_cost {
12091222
(Ok(result), cost) => {
12101223
let mut result_json = json!({
1211-
"output": serde_json::to_value(&result).unwrap()
1224+
"output": serde_json::to_value(&result).unwrap(),
1225+
"success": true,
12121226
});
12131227

1228+
add_serialized_output(&mut result_json, result);
12141229
add_costs(&mut result_json, costs, cost);
12151230

12161231
(0, Some(result_json))
@@ -1219,7 +1234,8 @@ pub fn invoke_command(invoked_by: &str, args: &[String]) -> (i32, Option<serde_j
12191234
let mut result_json = json!({
12201235
"error": {
12211236
"runtime": serde_json::to_value(&format!("{}", error)).unwrap()
1222-
}
1237+
},
1238+
"success": false,
12231239
});
12241240

12251241
add_costs(&mut result_json, costs, cost);
@@ -1278,9 +1294,11 @@ pub fn invoke_command(invoked_by: &str, args: &[String]) -> (i32, Option<serde_j
12781294
match result_and_cost {
12791295
(Ok(result), cost) => {
12801296
let mut result_json = json!({
1281-
"output": serde_json::to_value(&result).unwrap()
1297+
"output": serde_json::to_value(&result).unwrap(),
1298+
"success": true,
12821299
});
12831300

1301+
add_serialized_output(&mut result_json, result);
12841302
add_costs(&mut result_json, costs, cost);
12851303

12861304
(0, Some(result_json))
@@ -1289,7 +1307,8 @@ pub fn invoke_command(invoked_by: &str, args: &[String]) -> (i32, Option<serde_j
12891307
let mut result_json = json!({
12901308
"error": {
12911309
"runtime": serde_json::to_value(&format!("{}", error)).unwrap()
1292-
}
1310+
},
1311+
"success": false,
12931312
});
12941313

12951314
add_costs(&mut result_json, costs, cost);
@@ -1480,8 +1499,10 @@ pub fn invoke_command(invoked_by: &str, args: &[String]) -> (i32, Option<serde_j
14801499
let mut result = json!({
14811500
"message": "Transaction executed and committed.",
14821501
"output": serde_json::to_value(&data.data).unwrap(),
1502+
"success": true,
14831503
});
14841504

1505+
add_serialized_output(&mut result, *data.data);
14851506
add_costs(&mut result, costs, cost);
14861507
add_assets(&mut result, assets, asset_map);
14871508

@@ -1496,9 +1517,12 @@ pub fn invoke_command(invoked_by: &str, args: &[String]) -> (i32, Option<serde_j
14961517
let mut result = json!({
14971518
"message": "Aborted.",
14981519
"output": serde_json::to_value(&data.data).unwrap(),
1520+
"success": false,
14991521
});
15001522

15011523
add_costs(&mut result, costs, cost);
1524+
add_serialized_output(&mut result, *data.data);
1525+
add_assets(&mut result, assets, asset_map);
15021526

15031527
(0, Some(result))
15041528
}
@@ -1507,7 +1531,8 @@ pub fn invoke_command(invoked_by: &str, args: &[String]) -> (i32, Option<serde_j
15071531
"error": {
15081532
"runtime": "Expected a ResponseType result from transaction.",
15091533
"output": serde_json::to_value(&x).unwrap()
1510-
}
1534+
},
1535+
"success": false,
15111536
});
15121537
(1, Some(result))
15131538
}
@@ -1517,7 +1542,8 @@ pub fn invoke_command(invoked_by: &str, args: &[String]) -> (i32, Option<serde_j
15171542
"error": {
15181543
"runtime": "Transaction execution error.",
15191544
"error": serde_json::to_value(&format!("{}", error)).unwrap()
1520-
}
1545+
},
1546+
"success": false,
15211547
});
15221548
(1, Some(result))
15231549
}

0 commit comments

Comments
 (0)