Skip to content

Commit 679df5f

Browse files
author
Josh Hardy
committed
feat: parse oracle-url from YAML order config (Phase 6)
Adds optional oracle-url field to OrderCfg, parsed from the YAML front matter orders section. When present, this URL identifies a signed context oracle server for the order. Changes: - Add oracle_url: Option<String> to OrderCfg struct - Parse oracle-url via optional_string in YAML parsing - Add oracle-url to ALLOWED_ORDER_KEYS - Update Default and PartialEq impls - Add test for oracle-url parsing (present + absent) Spec: rainlanguage/specs#45 Chained on: #2459 (Phase 4)
1 parent e375cee commit 679df5f

4 files changed

Lines changed: 65 additions & 1 deletion

File tree

‎crates/common/src/add_order.rs‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -683,6 +683,7 @@ price: 2e18;
683683
network: network_arc.clone(),
684684
deployer: None,
685685
orderbook: None,
686+
oracle_url: None,
686687
};
687688
let deployment = DeploymentCfg {
688689
document: Arc::new(RwLock::new(StrictYaml::String("".to_string()))),
@@ -803,6 +804,7 @@ _ _: 0 0;
803804
network: network_arc.clone(),
804805
deployer: None,
805806
orderbook: None,
807+
oracle_url: None,
806808
};
807809
let deployment = DeploymentCfg {
808810
document: Arc::new(RwLock::new(StrictYaml::String("".to_string()))),
@@ -966,6 +968,7 @@ _ _: 0 0;
966968
network: network_arc.clone(),
967969
deployer: None,
968970
orderbook: None,
971+
oracle_url: None,
969972
};
970973
let deployment = DeploymentCfg {
971974
document: Arc::new(RwLock::new(StrictYaml::String("".to_string()))),
@@ -1307,6 +1310,7 @@ _ _: 16 52;
13071310
network: network_arc.clone(),
13081311
deployer: None,
13091312
orderbook: None,
1313+
oracle_url: None,
13101314
};
13111315
DeploymentCfg {
13121316
document: default_document(),

‎crates/settings/src/gui.rs‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1196,6 +1196,7 @@ mod tests {
11961196
network: mock_network(),
11971197
deployer: None,
11981198
orderbook: None,
1199+
oracle_url: None,
11991200
};
12001201
let deployment = DeploymentCfg {
12011202
document: Arc::new(RwLock::new(StrictYaml::String("".to_string()))),

‎crates/settings/src/order.rs‎

Lines changed: 57 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use std::{
99
use strict_yaml_rust::{strict_yaml::Hash, StrictYaml};
1010
use thiserror::Error;
1111

12-
const ALLOWED_ORDER_KEYS: [&str; 4] = ["deployer", "inputs", "orderbook", "outputs"];
12+
const ALLOWED_ORDER_KEYS: [&str; 5] = ["deployer", "inputs", "oracle-url", "orderbook", "outputs"];
1313
const ALLOWED_ORDER_IO_KEYS: [&str; 2] = ["token", "vault-id"];
1414
#[cfg(target_family = "wasm")]
1515
use wasm_bindgen_utils::{impl_wasm_traits, prelude::*};
@@ -59,6 +59,9 @@ pub struct OrderCfg {
5959
pub deployer: Option<Arc<DeployerCfg>>,
6060
#[cfg_attr(target_family = "wasm", tsify(optional))]
6161
pub orderbook: Option<Arc<OrderbookCfg>>,
62+
#[cfg_attr(target_family = "wasm", tsify(optional))]
63+
#[serde(rename = "oracle-url")]
64+
pub oracle_url: Option<String>,
6265
}
6366
#[cfg(target_family = "wasm")]
6467
impl_wasm_traits!(OrderCfg);
@@ -813,6 +816,8 @@ impl YamlParsableHash for OrderCfg {
813816
})
814817
.collect::<Result<Vec<_>, YamlError>>()?;
815818

819+
let oracle_url = optional_string(order_yaml, "oracle-url");
820+
816821
let order = OrderCfg {
817822
document: document.clone(),
818823
key: order_key.clone(),
@@ -823,6 +828,7 @@ impl YamlParsableHash for OrderCfg {
823828
)?,
824829
deployer,
825830
orderbook,
831+
oracle_url,
826832
};
827833

828834
if orders.contains_key(&order_key) {
@@ -932,6 +938,7 @@ impl Default for OrderCfg {
932938
network: Arc::new(NetworkCfg::default()),
933939
deployer: None,
934940
orderbook: None,
941+
oracle_url: None,
935942
}
936943
}
937944
}
@@ -944,6 +951,7 @@ impl PartialEq for OrderCfg {
944951
&& self.network == other.network
945952
&& self.deployer == other.deployer
946953
&& self.orderbook == other.orderbook
954+
&& self.oracle_url == other.oracle_url
947955
}
948956
}
949957

@@ -1479,4 +1487,52 @@ orders:
14791487
.unwrap();
14801488
assert_eq!(inputs.len(), 1);
14811489
}
1490+
1491+
#[test]
1492+
fn test_parse_order_with_oracle_url() {
1493+
let yaml = r#"
1494+
networks:
1495+
mainnet:
1496+
rpcs:
1497+
- "https://mainnet.infura.io"
1498+
chain-id: "1"
1499+
deployers:
1500+
mainnet:
1501+
address: 0x0000000000000000000000000000000000000001
1502+
network: mainnet
1503+
tokens:
1504+
token-one:
1505+
network: mainnet
1506+
address: 0x1234567890123456789012345678901234567890
1507+
token-two:
1508+
network: mainnet
1509+
address: 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1510+
orders:
1511+
oracle-order:
1512+
deployer: mainnet
1513+
oracle-url: https://my-oracle.example.com/context
1514+
inputs:
1515+
- token: token-one
1516+
outputs:
1517+
- token: token-two
1518+
plain-order:
1519+
deployer: mainnet
1520+
inputs:
1521+
- token: token-one
1522+
outputs:
1523+
- token: token-two
1524+
"#;
1525+
let orders = OrderCfg::parse_all_from_yaml(vec![get_document(yaml)], None).unwrap();
1526+
1527+
assert_eq!(orders.len(), 2);
1528+
1529+
let oracle_order = orders.get("oracle-order").unwrap();
1530+
assert_eq!(
1531+
oracle_order.oracle_url.as_deref(),
1532+
Some("https://my-oracle.example.com/context")
1533+
);
1534+
1535+
let plain_order = orders.get("plain-order").unwrap();
1536+
assert!(plain_order.oracle_url.is_none());
1537+
}
14821538
}

‎crates/settings/src/yaml/context.rs‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,7 @@ mod tests {
437437
network: mock_network(),
438438
deployer: None,
439439
orderbook: None,
440+
oracle_url: None,
440441
})
441442
}
442443

@@ -453,6 +454,7 @@ mod tests {
453454
network: mock_network(),
454455
deployer: None,
455456
orderbook: None,
457+
oracle_url: None,
456458
})
457459
}
458460

@@ -587,6 +589,7 @@ mod tests {
587589
network: mock_network(),
588590
deployer: Some(mock_deployer()),
589591
orderbook: Some(mock_orderbook()),
592+
oracle_url: None,
590593
};
591594
context.add_order(Arc::new(order));
592595

0 commit comments

Comments
 (0)