@@ -171,11 +171,12 @@ async fn happy_path_returns_outcomes_sorted_by_id() {
171171 let Some ( ( service, pool, _kek, pn) ) = common:: setup ( ) . await else { return } ;
172172 let ( pmp, ob) = seed_market ( & pool, "happy-bal" ) . await ;
173173 let pn_addr = seeded_pn_address ( & pool) . await ;
174- seed_open_sell ( & pool, & ob, 1001 , 1 , & pn_addr, "100" ) . await ; // outcome 1: 1.00 locked
175- seed_open_sell ( & pool, & ob, 1002 , 1 , & pn_addr, "50" ) . await ; // outcome 1: +0.50 = 1.50 total
174+ // Token-atom scale (decimals=9), matching on-chain order amounts / _stakes.amount.
175+ seed_open_sell ( & pool, & ob, 1001 , 1 , & pn_addr, "1000000000" ) . await ; // outcome 1: 1.0 locked
176+ seed_open_sell ( & pool, & ob, 1002 , 1 , & pn_addr, "500000000" ) . await ; // outcome 1: +0.5 = 1.5 total
176177
177178 pn. set_stake ( Some ( PnStake {
178- amount : vec ! [ "1000 " . into( ) , "500 " . into( ) ] , // outcome 0=10.00 , 1=5.00
179+ amount : vec ! [ "10000000000 " . into( ) , "5000000000 " . into( ) ] , // outcome 0=10, 1=5 tokens
179180 debt_amount : vec ! [ "0" . into( ) , "0" . into( ) ] ,
180181 coupons_amount : vec ! [ "0" . into( ) , "0" . into( ) ] ,
181182 } ) ) ;
@@ -198,20 +199,20 @@ async fn happy_path_returns_outcomes_sorted_by_id() {
198199 assert_eq ! ( body. balances. len( ) , 2 ) ;
199200 assert_eq ! ( body. balances[ 0 ] . outcome_id, 0 ) ;
200201 assert_eq ! ( body. balances[ 0 ] . symbol, "happy-bal-NO" ) ;
201- assert_eq ! ( body. balances[ 0 ] . free, "10.00 " ) ;
202- assert_eq ! ( body. balances[ 0 ] . locked_in_orders, "0.00 " ) ;
202+ assert_eq ! ( body. balances[ 0 ] . free, "10.000000000 " ) ;
203+ assert_eq ! ( body. balances[ 0 ] . locked_in_orders, "0.000000000 " ) ;
203204 assert_eq ! ( body. balances[ 1 ] . outcome_id, 1 ) ;
204205 assert_eq ! ( body. balances[ 1 ] . symbol, "happy-bal-YES" ) ;
205- assert_eq ! ( body. balances[ 1 ] . free, "5.00 " ) ;
206- assert_eq ! ( body. balances[ 1 ] . locked_in_orders, "1.50 " ) ;
206+ assert_eq ! ( body. balances[ 1 ] . free, "5.000000000 " ) ;
207+ assert_eq ! ( body. balances[ 1 ] . locked_in_orders, "1.500000000 " ) ;
207208}
208209
209210#[ tokio:: test]
210211async fn no_stake_yields_zero_free_with_nonzero_locked ( ) {
211212 let Some ( ( service, pool, _kek, pn) ) = common:: setup ( ) . await else { return } ;
212213 let ( pmp, ob) = seed_market ( & pool, "nostake-bal" ) . await ;
213214 let pn_addr = seeded_pn_address ( & pool) . await ;
214- seed_open_sell ( & pool, & ob, 2001 , 0 , & pn_addr, "75 " ) . await ;
215+ seed_open_sell ( & pool, & ob, 2001 , 0 , & pn_addr, "750000000 " ) . await ; // 0.75 locked (atoms)
215216 pn. set_stake ( None ) ;
216217
217218 let ts = now_ms ( ) ;
@@ -227,11 +228,11 @@ async fn no_stake_yields_zero_free_with_nonzero_locked() {
227228 assert_eq ! ( resp. status_code, Some ( StatusCode :: OK ) ) ;
228229 let body = resp. take_json :: < BalancesBody > ( ) . await . expect ( "ok" ) ;
229230 assert_eq ! ( body. balances. len( ) , 2 ) ;
230- assert_eq ! ( body. balances[ 0 ] . free, "0.00 " ) ;
231- assert_eq ! ( body. balances[ 0 ] . locked_in_orders, "0.75 " ) ;
231+ assert_eq ! ( body. balances[ 0 ] . free, "0.000000000 " ) ;
232+ assert_eq ! ( body. balances[ 0 ] . locked_in_orders, "0.750000000 " ) ;
232233 assert_eq ! ( body. balances[ 1 ] . outcome_id, 1 ) ;
233- assert_eq ! ( body. balances[ 1 ] . free, "0.00 " ) ;
234- assert_eq ! ( body. balances[ 1 ] . locked_in_orders, "0.00 " ) ;
234+ assert_eq ! ( body. balances[ 1 ] . free, "0.000000000 " ) ;
235+ assert_eq ! ( body. balances[ 1 ] . locked_in_orders, "0.000000000 " ) ;
235236}
236237
237238#[ tokio:: test]
@@ -314,7 +315,7 @@ async fn terminal_market_serves_balances() {
314315 . await
315316 . unwrap ( ) ;
316317 pn. set_stake ( Some ( PnStake {
317- amount : vec ! [ "100 " . into( ) , "200 " . into( ) ] ,
318+ amount : vec ! [ "1000000000 " . into( ) , "2000000000 " . into( ) ] , // 1 / 2 tokens (atoms)
318319 debt_amount : vec ! [ "0" . into( ) , "0" . into( ) ] ,
319320 coupons_amount : vec ! [ "0" . into( ) , "0" . into( ) ] ,
320321 } ) ) ;
@@ -331,10 +332,10 @@ async fn terminal_market_serves_balances() {
331332 assert_eq ! ( resp. status_code, Some ( StatusCode :: OK ) ) ;
332333 let body = resp. take_json :: < BalancesBody > ( ) . await . expect ( "balances body" ) ;
333334 assert_eq ! ( body. balances. len( ) , 2 ) ;
334- // outcome 0: free = 100 scaled by quantity_precision=2 → "1.00 "
335- assert_eq ! ( body. balances[ 0 ] . free, "1.00 " ) ;
336- // outcome 1: free = 200 scaled → "2.00 "
337- assert_eq ! ( body. balances[ 1 ] . free, "2.00 " ) ;
335+ // outcome 0: free = 1e9 atoms scaled by decimals=9 → "1.000000000 "
336+ assert_eq ! ( body. balances[ 0 ] . free, "1.000000000 " ) ;
337+ // outcome 1: free = 2e9 atoms → "2.000000000 "
338+ assert_eq ! ( body. balances[ 1 ] . free, "2.000000000 " ) ;
338339}
339340
340341#[ tokio:: test]
@@ -386,8 +387,8 @@ async fn cross_tenant_isolation_excludes_other_owner_orders() {
386387 let pn1 = common:: seeded_pn_address_for_key ( & pool, SEED_API_KEY ) . await ;
387388 let pn2 = common:: seeded_pn_address_for_key ( & pool, SEED_API_KEY_2 ) . await ;
388389
389- seed_open_sell ( & pool, & ob, 9901 , 0 , & pn1, "100 " ) . await ;
390- seed_open_sell ( & pool, & ob, 9902 , 0 , & pn2, "999 " ) . await ;
390+ seed_open_sell ( & pool, & ob, 9901 , 0 , & pn1, "1000000000 " ) . await ; // 1.0 (atoms)
391+ seed_open_sell ( & pool, & ob, 9902 , 0 , & pn2, "999000000000 " ) . await ; // pn2, must be excluded
391392
392393 pn. set_stake_for (
393394 & pn1,
@@ -410,9 +411,9 @@ async fn cross_tenant_isolation_excludes_other_owner_orders() {
410411 . await ;
411412 assert_eq ! ( resp. status_code, Some ( StatusCode :: OK ) ) ;
412413 let body = resp. take_json :: < BalancesBody > ( ) . await . expect ( "ok" ) ;
413- // outcome 0: pn1 locked 100 / quantity_precision=2 → "1.00 "
414- // pn2's 999 must NOT contribute.
415- assert_eq ! ( body. balances[ 0 ] . locked_in_orders, "1.00 " ) ;
414+ // outcome 0: pn1 locked 1e9 atoms / decimals=9 → "1.000000000 "
415+ // pn2's amount must NOT contribute.
416+ assert_eq ! ( body. balances[ 0 ] . locked_in_orders, "1.000000000 " ) ;
416417}
417418
418419#[ tokio:: test]
@@ -426,8 +427,8 @@ async fn cross_tenant_isolation_symmetric_from_second_account() {
426427 let pn1 = common:: seeded_pn_address_for_key ( & pool, SEED_API_KEY ) . await ;
427428 let pn2 = common:: seeded_pn_address_for_key ( & pool, SEED_API_KEY_2 ) . await ;
428429
429- seed_open_sell ( & pool, & ob, 9911 , 0 , & pn1, "100 " ) . await ;
430- seed_open_sell ( & pool, & ob, 9912 , 0 , & pn2, "999 " ) . await ;
430+ seed_open_sell ( & pool, & ob, 9911 , 0 , & pn1, "1000000000 " ) . await ; // pn1, must be excluded
431+ seed_open_sell ( & pool, & ob, 9912 , 0 , & pn2, "9990000000 " ) . await ; // 9.99 (atoms)
431432
432433 pn. set_stake_for (
433434 & pn2,
@@ -450,9 +451,9 @@ async fn cross_tenant_isolation_symmetric_from_second_account() {
450451 . await ;
451452 assert_eq ! ( resp. status_code, Some ( StatusCode :: OK ) ) ;
452453 let body = resp. take_json :: < BalancesBody > ( ) . await . expect ( "ok" ) ;
453- // outcome 0: pn2 locked 999 / quantity_precision=2 → "9.99 "
454- // pn1's "1.00" must NOT appear; the value must be exactly "9.99 ".
455- assert_eq ! ( body. balances[ 0 ] . locked_in_orders, "9.99 " ) ;
454+ // outcome 0: pn2 locked 9.99e9 atoms / decimals=9 → "9.990000000 "
455+ // pn1's amount must NOT appear; the value must be exactly "9.990000000 ".
456+ assert_eq ! ( body. balances[ 0 ] . locked_in_orders, "9.990000000 " ) ;
456457}
457458
458459#[ tokio:: test]
@@ -490,9 +491,9 @@ async fn cross_tenant_isolation_free_side_does_not_leak_other_pn_stake() {
490491 . await ;
491492 assert_eq ! ( resp. status_code, Some ( StatusCode :: OK ) ) ;
492493 let body = resp. take_json :: < BalancesBody > ( ) . await . expect ( "ok" ) ;
493- // pn2 has no stake registered; pn1's "700"/"300" must NOT appear.
494- assert_eq ! ( body. balances[ 0 ] . free, "0.00 " ) ;
495- assert_eq ! ( body. balances[ 1 ] . free, "0.00 " ) ;
494+ // pn2 has no stake registered; pn1's amounts must NOT appear.
495+ assert_eq ! ( body. balances[ 0 ] . free, "0.000000000 " ) ;
496+ assert_eq ! ( body. balances[ 1 ] . free, "0.000000000 " ) ;
496497}
497498
498499#[ tokio:: test]
@@ -520,7 +521,7 @@ async fn production_hasher_is_wired_to_stake_lookup() {
520521 pn. set_stake_for_hash (
521522 & expected_hash,
522523 Some ( PnStake {
523- amount : vec ! [ "700 " . into( ) , "300 " . into( ) ] ,
524+ amount : vec ! [ "7000000000 " . into( ) , "3000000000 " . into( ) ] , // 7 / 3 tokens (atoms)
524525 debt_amount : vec ! [ "0" . into( ) , "0" . into( ) ] ,
525526 coupons_amount : vec ! [ "0" . into( ) , "0" . into( ) ] ,
526527 } ) ,
@@ -540,8 +541,8 @@ async fn production_hasher_is_wired_to_stake_lookup() {
540541 let body = resp. take_json :: < BalancesBody > ( ) . await . expect ( "balances body" ) ;
541542 // Non-zero free => the production hasher emitted exactly `expected_hash`
542543 // and the handler looked up `_stakes` with that key.
543- assert_eq ! ( body. balances[ 0 ] . free, "7.00 " ) ;
544- assert_eq ! ( body. balances[ 1 ] . free, "3.00 " ) ;
544+ assert_eq ! ( body. balances[ 0 ] . free, "7.000000000 " ) ;
545+ assert_eq ! ( body. balances[ 1 ] . free, "3.000000000 " ) ;
545546}
546547
547548#[ tokio:: test]
@@ -576,8 +577,8 @@ async fn stake_registered_at_wrong_hash_yields_zero_free() {
576577 . await ;
577578 assert_eq ! ( resp. status_code, Some ( StatusCode :: OK ) ) ;
578579 let body = resp. take_json :: < BalancesBody > ( ) . await . expect ( "balances body" ) ;
579- assert_eq ! ( body. balances[ 0 ] . free, "0.00 " ) ;
580- assert_eq ! ( body. balances[ 1 ] . free, "0.00 " ) ;
580+ assert_eq ! ( body. balances[ 0 ] . free, "0.000000000 " ) ;
581+ assert_eq ! ( body. balances[ 1 ] . free, "0.000000000 " ) ;
581582}
582583
583584#[ tokio:: test]
0 commit comments