[{"data":1,"prerenderedAt":964},["ShallowReactive",2],{"games":3,"levels:poisoned-review":107,"level:poisoned-review:wallet-transfer":124},[4,17,30,41,52,63,74,85,96],{"id":5,"order":6,"domain":7,"glyph":8,"requiresSandbox":9,"title":10,"tagline":13,"levelCount":6,"status":16},"legacy-nightmare",1,"refactoring","{ }",true,{"fr":11,"en":12},"Le cauchemar du Legacy","Legacy Nightmare",{"fr":14,"en":15},"Corrige le bug caché dans un code spaghetti, sans rien casser.","Fix the bug buried in spaghetti code without breaking anything.","available",{"id":18,"order":19,"domain":20,"glyph":20,"requiresSandbox":21,"title":22,"tagline":25,"levelCount":28,"status":29},"git-untangle",2,"git",false,{"fr":23,"en":24},"Démêlage d'historique","History Untangling",{"fr":26,"en":27},"Transforme un graphe de commits chaotique en historique propre.","Turn a chaotic commit graph into a clean history.",0,"coming-soon",{"id":31,"order":32,"domain":33,"glyph":34,"requiresSandbox":21,"title":35,"tagline":38,"levelCount":28,"status":29},"prod-pressure",3,"devops","RPS",{"fr":36,"en":37},"Pression en Prod","Prod Pressure",{"fr":39,"en":40},"Fais tenir la prod pendant le Black Friday, sans exploser le budget.","Keep production alive through Black Friday, on budget.",{"id":42,"order":43,"domain":44,"glyph":45,"requiresSandbox":9,"title":46,"tagline":49,"levelCount":28,"status":29},"the-heist",4,"security","0day",{"fr":47,"en":48},"Le braquage","The Heist",{"fr":50,"en":51},"Lis l'API, trouve la faille logique, exploite-la.","Read the API, find the logic flaw, exploit it.",{"id":53,"order":54,"domain":55,"glyph":56,"requiresSandbox":21,"title":57,"tagline":60,"levelCount":6,"status":16},"tech-dilemmas",5,"product","A|B",{"fr":58,"en":59},"Dilemmes","Tech Dilemmas",{"fr":61,"en":62},"Survis à un sprint d'arbitrages impossibles.","Survive a sprint of impossible trade-offs.",{"id":64,"order":65,"domain":66,"glyph":67,"requiresSandbox":21,"title":68,"tagline":71,"levelCount":28,"status":29},"cap-workshop",6,"distributed","CAP",{"fr":69,"en":70},"L'Atelier du Théorème CAP","CAP Workshop",{"fr":72,"en":73},"Choisis les bons compromis avant que le réseau ne se coupe.","Pick the right trade-offs before the network splits.",{"id":75,"order":76,"domain":77,"glyph":78,"requiresSandbox":9,"title":79,"tagline":82,"levelCount":28,"status":29},"feature-creeps",7,"patterns","\u003CT>",{"fr":80,"en":81},"L'attaque des Feature Creeps","Attack of the Feature Creeps",{"fr":83,"en":84},"Absorbe des règles métier sans fin sans réécrire ton cœur.","Absorb endless business rules without rewriting your core.",{"id":86,"order":87,"domain":88,"glyph":89,"requiresSandbox":21,"title":90,"tagline":93,"levelCount":32,"status":16},"poisoned-review",8,"review","PR",{"fr":91,"en":92},"La Code Review Empoisonnée","Poisoned Code Review",{"fr":94,"en":95},"Une PR parfaite en apparence cache une bombe. Trouve la ligne.","A flawless-looking PR hides a time bomb. Find the line.",{"id":97,"order":98,"domain":99,"glyph":100,"requiresSandbox":21,"hidden":9,"title":101,"tagline":104,"levelCount":6,"status":16},"engine-demo",99,"demo","?",{"fr":102,"en":103},"Démo du moteur de niveaux","Level engine demo",{"fr":105,"en":106},"Niveau factice qui exerce le moteur de bout en bout : indices, validation, score, débrief.","Dummy level exercising the engine end to end: hints, validation, score, debrief.",[108,113,118],{"id":109,"gameId":86,"order":6,"title":110,"difficulty":19,"estimatedMinutes":65},"store-dashboard",{"fr":111,"en":112},"Le dashboard des magasins","The store dashboard",{"id":114,"gameId":86,"order":19,"title":115,"difficulty":32,"estimatedMinutes":87},"wallet-transfer",{"fr":116,"en":117},"Virements entre portefeuilles","Wallet transfers",{"id":119,"gameId":86,"order":32,"title":120,"difficulty":32,"estimatedMinutes":123},"fx-rates-client",{"fr":121,"en":122},"Le client de taux de change","The FX rates client",10,{"id":114,"gameId":86,"order":19,"title":125,"difficulty":32,"estimatedMinutes":87,"context":126,"objective":129,"tools":132,"initialState":135,"hints":954,"scoring":961},{"fr":116,"en":117},{"fr":127,"en":128},"Une marketplace crédite les vendeurs sur des portefeuilles internes. Le ticket #311 signale des **soldes négatifs** quand deux paiements tombent en même temps.\n\nChaque nuit, la finance rapproche le **grand livre** (`ledger_entries`) avec les soldes des portefeuilles. Un écart bloque les versements du lendemain.\n\nCette PR corrige le #311. Les nouveaux tests d'intégration (vraie base PostgreSQL) sont verts.","A marketplace credits sellers on internal wallets. Ticket #311 reports **negative balances** when two payments land at the same time.\n\nEvery night, finance reconciles the **ledger** (`ledger_entries`) with the wallet balances. Any mismatch blocks the next day's payouts.\n\nThis PR fixes #311. The new integration tests (real PostgreSQL database) are green.",{"fr":130,"en":131},"Le correctif est-il sûr ? Trouve la ligne qui peut encore corrompre les comptes, puis nomme le problème.","Is the fix safe? Find the line that can still corrupt the books, then name the problem.",[133,134],"diff-viewer","justification-menu",{"pr":136,"justificationOptions":147,"files":178},{"number":137,"title":138,"author":141,"description":142,"base":145,"head":146},317,{"fr":139,"en":140},"fix(wallet) : virements atomiques, plus de solde négatif (#311)","fix(wallet): atomic transfers, no more negative balances (#311)","samir-b",{"fr":143,"en":144},"## Contexte\nFixes #311 : deux virements simultanés pouvaient lire le même solde et passer tous les deux.\n\n## Changements\n- Débit **atomique** : `UPDATE … WHERE balance >= amount` au lieu de lire puis écrire\n- Tout le virement s'exécute dans une **transaction** `db.transaction()`\n- Erreurs métier typées : `InsufficientFundsError`, `WalletNotFoundError`\n\n## Tests\n- ✅ Solde insuffisant : aucun portefeuille modifié\n- ✅ 20 virements concurrents : le solde ne passe jamais sous zéro","## Context\nFixes #311: two simultaneous transfers could read the same balance and both go through.\n\n## Changes\n- **Atomic** debit: `UPDATE … WHERE balance >= amount` instead of read-then-write\n- The whole transfer runs inside a `db.transaction()` **transaction**\n- Typed business errors: `InsufficientFundsError`, `WalletNotFoundError`\n\n## Testing\n- ✅ Insufficient balance: no wallet is modified\n- ✅ 20 concurrent transfers: the balance never goes below zero","main","fix\u002F311-concurrent-transfers",[148,153,158,163,168,173],{"id":149,"label":150},"race-condition",{"fr":151,"en":152},"Condition de course","Race condition",{"id":154,"label":155},"missing-transaction",{"fr":156,"en":157},"Atomicité non garantie (transaction)","Atomicity not guaranteed (transaction)",{"id":159,"label":160},"sql-injection",{"fr":161,"en":162},"Injection SQL","SQL injection",{"id":164,"label":165},"n-plus-one",{"fr":166,"en":167},"Requête N+1","N+1 query",{"id":169,"label":170},"float-money",{"fr":171,"en":172},"Montants en virgule flottante","Floating-point money",{"id":174,"label":175},"memory-leak",{"fr":176,"en":177},"Fuite mémoire","Memory leak",[179,785],{"path":180,"language":181,"status":182,"hunks":183},"src\u002Fwallet\u002Fwallet.service.ts","typescript","modified",[184],{"header":185,"lines":186},"@@ -1,17 +1,35 @@",[187,203,215,225,235,245,255,258,268,282,307,310,343,380,406,430,466,483,489,496,501,506,511,543,564,572,587,596,614,631,640,665,669,689,693,707,714,730,739,746,768,774,779],{"id":188,"type":189,"oldNo":6,"newNo":6,"tokens":190},"d7ab2c2ea4","ctx",[191,194,196,198,200],{"content":192,"color":193},"import","#FF7B72",{"content":195}," { Injectable } ",{"content":197,"color":193},"from",{"content":199}," ",{"content":201,"color":202},"'@nestjs\u002Fcommon'","#A5D6FF",{"id":204,"type":205,"oldNo":19,"newNo":206,"tokens":207},"fd94ac0259","del",null,[208,209,211,212,213],{"content":192,"color":193},{"content":210}," { eq, sql } ",{"content":197,"color":193},{"content":199},{"content":214,"color":202},"'drizzle-orm'",{"id":216,"type":217,"oldNo":206,"newNo":19,"tokens":218},"2b79824a0b","add",[219,220,222,223,224],{"content":192,"color":193},{"content":221}," { and, eq, gte, sql } ",{"content":197,"color":193},{"content":199},{"content":214,"color":202},{"id":226,"type":189,"oldNo":32,"newNo":32,"tokens":227},"b2adcf0957",[228,229,231,232,233],{"content":192,"color":193},{"content":230}," { Database } ",{"content":197,"color":193},{"content":199},{"content":234,"color":202},"'..\u002Fdb\u002Fdatabase'",{"id":236,"type":189,"oldNo":43,"newNo":43,"tokens":237},"fa3cebf491",[238,239,241,242,243],{"content":192,"color":193},{"content":240}," { ledgerEntries, wallets } ",{"content":197,"color":193},{"content":199},{"content":244,"color":202},"'..\u002Fdb\u002Fschema'",{"id":246,"type":217,"oldNo":206,"newNo":54,"tokens":247},"a5b67cdc57",[248,249,251,252,253],{"content":192,"color":193},{"content":250}," { InsufficientFundsError, WalletNotFoundError } ",{"content":197,"color":193},{"content":199},{"content":254,"color":202},"'.\u002Fwallet.errors'",{"id":256,"type":189,"oldNo":54,"newNo":65,"tokens":257},"257c255f9d",[],{"id":259,"type":189,"oldNo":65,"newNo":76,"tokens":260},"6f2db1cbfb",[261,263,266],{"content":262},"@",{"content":264,"color":265},"Injectable","#D2A8FF",{"content":267},"()",{"id":269,"type":189,"oldNo":76,"newNo":87,"tokens":270},"e80268d136",[271,273,274,276,277,280],{"content":272,"color":193},"export",{"content":199},{"content":275,"color":193},"class",{"content":199},{"content":278,"color":279},"WalletService","#FFA657",{"content":281}," {",{"id":283,"type":189,"oldNo":87,"newNo":284,"tokens":285},"c38e824caf",9,[286,288,290,292,294,295,297,298,300,302,303,305],{"content":287},"  ",{"content":289,"color":193},"constructor",{"content":291},"(",{"content":293,"color":193},"private",{"content":199},{"content":296,"color":193},"readonly",{"content":199},{"content":299,"color":279},"db",{"content":301,"color":193},":",{"content":199},{"content":304,"color":279},"Database",{"content":306},") {}",{"id":308,"type":189,"oldNo":284,"newNo":123,"tokens":309},"1e838d1f27",[],{"id":311,"type":205,"oldNo":123,"newNo":206,"tokens":312},"419734b958",[313,314,316,317,319,320,322,323,324,327,329,331,332,333,334,335,337,338,339,341],{"content":287},{"content":315,"color":193},"async",{"content":199},{"content":318,"color":265},"transfer",{"content":291},{"content":321,"color":279},"fromId",{"content":301,"color":193},{"content":199},{"content":325,"color":326},"string","#79C0FF",{"content":328},", ",{"content":330,"color":279},"toId",{"content":301,"color":193},{"content":199},{"content":325,"color":326},{"content":328},{"content":336,"color":279},"amountCents",{"content":301,"color":193},{"content":199},{"content":340,"color":326},"number",{"content":342},") {",{"id":344,"type":205,"oldNo":345,"newNo":206,"tokens":346},"38f8451eb7",11,[347,349,351,353,354,356,358,359,361,362,364,366,368,370,371,373,375,376,378],{"content":348},"    ",{"content":350,"color":193},"const",{"content":352}," [",{"content":197,"color":326},{"content":355},"] ",{"content":357,"color":193},"=",{"content":199},{"content":360,"color":193},"await",{"content":199},{"content":363,"color":326},"this",{"content":365},".db.",{"content":367,"color":265},"select",{"content":369},"().",{"content":197,"color":265},{"content":372},"(wallets).",{"content":374,"color":265},"where",{"content":291},{"content":377,"color":265},"eq",{"content":379},"(wallets.id, fromId))",{"id":381,"type":205,"oldNo":382,"newNo":206,"tokens":383},"ef36e532cc",12,[384,385,387,389,391,393,395,396,398,399,401,402,404],{"content":348},{"content":386,"color":193},"if",{"content":388}," (from.balanceCents ",{"content":390,"color":193},"\u003C",{"content":392}," amountCents) ",{"content":394,"color":193},"throw",{"content":199},{"content":397,"color":193},"new",{"content":199},{"content":400,"color":265},"Error",{"content":291},{"content":403,"color":202},"'Insufficient funds'",{"content":405},")",{"id":407,"type":205,"oldNo":408,"newNo":206,"tokens":409},"a3eca86e65",13,[410,411,412,413,414,415,417,418,420,422,424,426,427,428,429],{"content":348},{"content":360,"color":193},{"content":199},{"content":363,"color":326},{"content":365},{"content":416,"color":265},"update",{"content":372},{"content":419,"color":265},"set",{"content":421},"({ balanceCents: from.balanceCents ",{"content":423,"color":193},"-",{"content":425}," amountCents }).",{"content":374,"color":265},{"content":291},{"content":377,"color":265},{"content":379},{"id":431,"type":205,"oldNo":432,"newNo":206,"tokens":433},"aa3652282c",14,[434,435,436,437,438,439,440,441,442,444,446,448,450,452,454,456,457,459,461,462,463,464],{"content":348},{"content":360,"color":193},{"content":199},{"content":363,"color":326},{"content":365},{"content":416,"color":265},{"content":372},{"content":419,"color":265},{"content":443},"({ balanceCents: ",{"content":445,"color":265},"sql",{"content":447,"color":202},"`${",{"content":449},"wallets",{"content":451,"color":202},".",{"content":453},"balanceCents",{"content":455,"color":202},"} + ${",{"content":336},{"content":458,"color":202},"}`",{"content":460}," }).",{"content":374,"color":265},{"content":291},{"content":377,"color":265},{"content":465},"(wallets.id, toId))",{"id":467,"type":205,"oldNo":468,"newNo":206,"tokens":469},"29fc14f1b2",15,[470,471,472,473,474,475,477,479,481],{"content":348},{"content":360,"color":193},{"content":199},{"content":363,"color":326},{"content":365},{"content":476,"color":265},"insert",{"content":478},"(ledgerEntries).",{"content":480,"color":265},"values",{"content":482},"({ fromId, toId, amountCents })",{"id":484,"type":205,"oldNo":485,"newNo":206,"tokens":486},"7c23d29388",16,[487],{"content":488},"  }",{"id":490,"type":217,"oldNo":206,"newNo":345,"tokens":491},"a63592bef4",[492,493],{"content":287},{"content":494,"color":495},"\u002F**","#8B949E",{"id":497,"type":217,"oldNo":206,"newNo":382,"tokens":498},"74b0a504e2",[499],{"content":500,"color":495},"   * Moves money between two wallets and records the movement in the ledger,",{"id":502,"type":217,"oldNo":206,"newNo":408,"tokens":503},"f068118f35",[504],{"content":505,"color":495},"   * which finance reconciles every night against the bank statements.",{"id":507,"type":217,"oldNo":206,"newNo":432,"tokens":508},"6c8f43b65a",[509],{"content":510,"color":495},"   *\u002F",{"id":512,"type":217,"oldNo":206,"newNo":468,"tokens":513},"d0b5ea40b0",[514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,538,539,541],{"content":287},{"content":315,"color":193},{"content":199},{"content":318,"color":265},{"content":291},{"content":321,"color":279},{"content":301,"color":193},{"content":199},{"content":325,"color":326},{"content":328},{"content":330,"color":279},{"content":301,"color":193},{"content":199},{"content":325,"color":326},{"content":328},{"content":336,"color":279},{"content":301,"color":193},{"content":199},{"content":340,"color":326},{"content":405},{"content":301,"color":193},{"content":199},{"content":537,"color":279},"Promise",{"content":390},{"content":540,"color":326},"void",{"content":542},"> {",{"id":544,"type":217,"oldNo":206,"newNo":485,"tokens":545},"8aba884800",[546,547,548,549,550,551,553,554,555,557,559,561,563],{"content":348},{"content":360,"color":193},{"content":199},{"content":363,"color":326},{"content":365},{"content":552,"color":265},"transaction",{"content":291},{"content":315,"color":193},{"content":556}," (",{"content":558,"color":279},"tx",{"content":560},") ",{"content":562,"color":193},"=>",{"content":281},{"id":565,"type":217,"oldNo":206,"newNo":566,"tokens":567},"b84a941509",17,[568,570],{"content":569},"      ",{"content":571,"color":495},"\u002F\u002F Atomic check-and-debit: two concurrent transfers cannot overdraw the wallet",{"id":573,"type":217,"oldNo":206,"newNo":574,"tokens":575},"810bc27d81",18,[576,577,578,579,581,582,583,584,585],{"content":569},{"content":350,"color":193},{"content":199},{"content":580,"color":326},"debited",{"content":199},{"content":357,"color":193},{"content":199},{"content":360,"color":193},{"content":586}," tx",{"id":588,"type":217,"oldNo":206,"newNo":589,"tokens":590},"8aa25fbe0f",19,[591,593,594],{"content":592},"        .",{"content":416,"color":265},{"content":595},"(wallets)",{"id":597,"type":217,"oldNo":206,"newNo":598,"tokens":599},"c6b1ff35da",20,[600,601,602,603,604,605,606,607,608,610,611,612],{"content":592},{"content":419,"color":265},{"content":443},{"content":445,"color":265},{"content":447,"color":202},{"content":449},{"content":451,"color":202},{"content":453},{"content":609,"color":202},"} - ${",{"content":336},{"content":458,"color":202},{"content":613}," })",{"id":615,"type":217,"oldNo":206,"newNo":616,"tokens":617},"814d4dfe6f",21,[618,619,620,621,623,624,625,627,629],{"content":592},{"content":374,"color":265},{"content":291},{"content":622,"color":265},"and",{"content":291},{"content":377,"color":265},{"content":626},"(wallets.id, fromId), ",{"content":628,"color":265},"gte",{"content":630},"(wallets.balanceCents, amountCents)))",{"id":632,"type":217,"oldNo":206,"newNo":633,"tokens":634},"64714effbd",22,[635,636,638],{"content":592},{"content":637,"color":265},"returning",{"content":639},"({ id: wallets.id })",{"id":641,"type":217,"oldNo":206,"newNo":642,"tokens":643},"1ea935227a",23,[644,645,646,648,650,651,653,654,656,657,658,659,660,661,663],{"content":569},{"content":386,"color":193},{"content":647}," (debited.",{"content":649,"color":326},"length",{"content":199},{"content":652,"color":193},"===",{"content":199},{"content":655,"color":326},"0",{"content":560},{"content":394,"color":193},{"content":199},{"content":397,"color":193},{"content":199},{"content":662,"color":265},"InsufficientFundsError",{"content":664},"(fromId, amountCents)",{"id":666,"type":217,"oldNo":206,"newNo":667,"tokens":668},"adfce44713",24,[],{"id":670,"type":217,"oldNo":206,"newNo":671,"tokens":672},"10dab629e4",25,[673,674,675,676,677,678,679,680,681,683,684,685,687],{"content":569},{"content":360,"color":193},{"content":199},{"content":363,"color":326},{"content":365},{"content":476,"color":265},{"content":478},{"content":480,"color":265},{"content":682},"({ fromId, toId, amountCents, createdAt: ",{"content":397,"color":193},{"content":199},{"content":686,"color":265},"Date",{"content":688},"() })",{"id":690,"type":217,"oldNo":206,"newNo":691,"tokens":692},"4fd0ee478e",26,[],{"id":694,"type":217,"oldNo":206,"newNo":695,"tokens":696},"0e40a489c2",27,[697,698,699,700,702,703,704,705,706],{"content":569},{"content":350,"color":193},{"content":199},{"content":701,"color":326},"credited",{"content":199},{"content":357,"color":193},{"content":199},{"content":360,"color":193},{"content":586},{"id":708,"type":217,"oldNo":206,"newNo":709,"tokens":710},"1a9c63cee6",28,[711,712,713],{"content":592},{"content":416,"color":265},{"content":595},{"id":715,"type":217,"oldNo":206,"newNo":716,"tokens":717},"be6f217034",29,[718,719,720,721,722,723,724,725,726,727,728,729],{"content":592},{"content":419,"color":265},{"content":443},{"content":445,"color":265},{"content":447,"color":202},{"content":449},{"content":451,"color":202},{"content":453},{"content":455,"color":202},{"content":336},{"content":458,"color":202},{"content":613},{"id":731,"type":217,"oldNo":206,"newNo":732,"tokens":733},"0e5686ee9f",30,[734,735,736,737,738],{"content":592},{"content":374,"color":265},{"content":291},{"content":377,"color":265},{"content":465},{"id":740,"type":217,"oldNo":206,"newNo":741,"tokens":742},"c879ddc7c9",31,[743,744,745],{"content":592},{"content":637,"color":265},{"content":639},{"id":747,"type":217,"oldNo":206,"newNo":748,"tokens":749},"7fe474cbb5",32,[750,751,752,754,755,756,757,758,759,760,761,762,763,764,766],{"content":569},{"content":386,"color":193},{"content":753}," (credited.",{"content":649,"color":326},{"content":199},{"content":652,"color":193},{"content":199},{"content":655,"color":326},{"content":560},{"content":394,"color":193},{"content":199},{"content":397,"color":193},{"content":199},{"content":765,"color":265},"WalletNotFoundError",{"content":767},"(toId)",{"id":769,"type":217,"oldNo":206,"newNo":770,"tokens":771},"e6f8a31c98",33,[772],{"content":773},"    })",{"id":775,"type":217,"oldNo":206,"newNo":776,"tokens":777},"fd91bd9ff5",34,[778],{"content":488},{"id":780,"type":189,"oldNo":566,"newNo":781,"tokens":782},"8dc6159220",35,[783],{"content":784},"}",{"path":786,"language":181,"status":182,"hunks":787},"src\u002Fwallet\u002Fwallet.service.spec.ts",[788],{"header":789,"lines":790},"@@ -12,3 +12,14 @@ describe('WalletService.transfer', () => {",[791,810,815,818,833,853,869,883,887,890,903,931,945,949],{"id":792,"type":189,"oldNo":382,"newNo":382,"tokens":793},"cda4a2470b",[794,795,797,798,799,800,802,804,806,807,809],{"content":348},{"content":796,"color":265},"expect",{"content":291},{"content":360,"color":193},{"content":199},{"content":801,"color":265},"balanceOf",{"content":803},"(bob)).",{"content":805,"color":265},"toBe",{"content":291},{"content":808,"color":326},"1_500",{"content":405},{"id":811,"type":189,"oldNo":408,"newNo":408,"tokens":812},"f99da3a21a",[813],{"content":814},"  })",{"id":816,"type":217,"oldNo":206,"newNo":432,"tokens":817},"9af5ce47f9",[],{"id":819,"type":217,"oldNo":206,"newNo":468,"tokens":820},"1f0310c08f",[821,822,824,825,827,828,829,831,832],{"content":287},{"content":823,"color":265},"it",{"content":291},{"content":826,"color":202},"'rejects a transfer above the balance and leaves both wallets untouched'",{"content":328},{"content":315,"color":193},{"content":830}," () ",{"content":562,"color":193},{"content":281},{"id":834,"type":217,"oldNo":206,"newNo":485,"tokens":835},"c463a7db4d",[836,837,838,839,840,842,843,845,847,849,851],{"content":348},{"content":360,"color":193},{"content":199},{"content":796,"color":265},{"content":841},"(service.",{"content":318,"color":265},{"content":844},"(alice, bob, ",{"content":846,"color":326},"10_000",{"content":848},")).rejects.",{"content":850,"color":265},"toThrow",{"content":852},"(InsufficientFundsError)",{"id":854,"type":217,"oldNo":206,"newNo":566,"tokens":855},"98240d3f71",[856,857,858,859,860,861,862,864,865,866,868],{"content":348},{"content":796,"color":265},{"content":291},{"content":360,"color":193},{"content":199},{"content":801,"color":265},{"content":863},"(alice)).",{"content":805,"color":265},{"content":291},{"content":867,"color":326},"500",{"content":405},{"id":870,"type":217,"oldNo":206,"newNo":574,"tokens":871},"26923d2b13",[872,873,874,875,876,877,878,879,880,881,882],{"content":348},{"content":796,"color":265},{"content":291},{"content":360,"color":193},{"content":199},{"content":801,"color":265},{"content":803},{"content":805,"color":265},{"content":291},{"content":808,"color":326},{"content":405},{"id":884,"type":217,"oldNo":206,"newNo":589,"tokens":885},"df8db9e079",[886],{"content":814},{"id":888,"type":217,"oldNo":206,"newNo":598,"tokens":889},"c1328220ac",[],{"id":891,"type":217,"oldNo":206,"newNo":616,"tokens":892},"6c108a93df",[893,894,895,896,898,899,900,901,902],{"content":287},{"content":823,"color":265},{"content":291},{"content":897,"color":202},"'never overdraws a wallet under concurrent transfers'",{"content":328},{"content":315,"color":193},{"content":830},{"content":562,"color":193},{"content":281},{"id":904,"type":217,"oldNo":206,"newNo":633,"tokens":905},"0d26e1b348",[906,907,908,909,910,911,913,915,916,918,920,922,923,925,926,927,929],{"content":348},{"content":360,"color":193},{"content":199},{"content":537,"color":326},{"content":451},{"content":912,"color":265},"allSettled",{"content":914},"(Array.",{"content":197,"color":265},{"content":917},"({ length: ",{"content":919,"color":326},"20",{"content":921}," }, () ",{"content":562,"color":193},{"content":924}," service.",{"content":318,"color":265},{"content":844},{"content":928,"color":326},"100",{"content":930},")))",{"id":932,"type":217,"oldNo":206,"newNo":642,"tokens":933},"34cf65229c",[934,935,936,937,938,939,940,941,942,943,944],{"content":348},{"content":796,"color":265},{"content":291},{"content":360,"color":193},{"content":199},{"content":801,"color":265},{"content":863},{"content":805,"color":265},{"content":291},{"content":655,"color":326},{"content":405},{"id":946,"type":217,"oldNo":206,"newNo":667,"tokens":947},"38b8dcc257",[948],{"content":814},{"id":950,"type":189,"oldNo":432,"newNo":671,"tokens":951},"5c5277e387",[952],{"content":953},"})",[955,957,959],{"type":956},"observation",{"type":958},"reflection",{"type":960},"focus",{"base":962,"parTimeSeconds":963},120,360,1790619204036]