@@ -1047,20 +1047,29 @@ pub mod nns {
10471047 use super :: * ;
10481048 use icp_ledger:: { Memo , TransferArgs } ;
10491049
1050- pub async fn icrc1_transfer (
1050+ pub async fn icrc1_transfer_request (
10511051 pocket_ic : & PocketIc ,
10521052 sender : PrincipalId ,
10531053 transfer_arg : TransferArg ,
1054- ) -> Result < Nat , TransferError > {
1055- let result = pocket_ic
1056- . update_call (
1054+ ) -> pocket_ic :: common :: rest :: RawMessageId {
1055+ pocket_ic
1056+ . submit_call (
10571057 LEDGER_CANISTER_ID . into ( ) ,
10581058 Principal :: from ( sender) ,
10591059 "icrc1_transfer" ,
10601060 Encode ! ( & transfer_arg) . unwrap ( ) ,
10611061 )
10621062 . await
1063- . unwrap ( ) ;
1063+ . unwrap ( )
1064+ }
1065+
1066+ pub async fn icrc1_transfer (
1067+ pocket_ic : & PocketIc ,
1068+ sender : PrincipalId ,
1069+ transfer_arg : TransferArg ,
1070+ ) -> Result < Nat , TransferError > {
1071+ let call_id = icrc1_transfer_request ( pocket_ic, sender, transfer_arg) . await ;
1072+ let result = pocket_ic. await_call ( call_id) . await . unwrap ( ) ;
10641073 let result = match result {
10651074 WasmResult :: Reply ( result) => result,
10661075 WasmResult :: Reject ( s) => panic ! ( "Call to icrc1_transfer failed: {:#?}" , s) ,
@@ -1974,21 +1983,32 @@ pub mod sns {
19741983 Decode ! ( & result, Nat ) . unwrap ( )
19751984 }
19761985
1977- pub async fn icrc1_transfer (
1986+ pub async fn icrc1_transfer_request (
19781987 pocket_ic : & PocketIc ,
19791988 canister_id : PrincipalId ,
19801989 sender : PrincipalId ,
19811990 transfer_arg : TransferArg ,
1982- ) -> Result < Nat , TransferError > {
1983- let result = pocket_ic
1984- . update_call (
1991+ ) -> pocket_ic :: common :: rest :: RawMessageId {
1992+ pocket_ic
1993+ . submit_call (
19851994 canister_id. into ( ) ,
19861995 Principal :: from ( sender) ,
19871996 "icrc1_transfer" ,
19881997 Encode ! ( & transfer_arg) . unwrap ( ) ,
19891998 )
19901999 . await
1991- . unwrap ( ) ;
2000+ . unwrap ( )
2001+ }
2002+
2003+ pub async fn icrc1_transfer (
2004+ pocket_ic : & PocketIc ,
2005+ canister_id : PrincipalId ,
2006+ sender : PrincipalId ,
2007+ transfer_arg : TransferArg ,
2008+ ) -> Result < Nat , TransferError > {
2009+ let call_id =
2010+ icrc1_transfer_request ( pocket_ic, canister_id, sender, transfer_arg) . await ;
2011+ let result = pocket_ic. await_call ( call_id) . await . unwrap ( ) ;
19922012 let result = match result {
19932013 WasmResult :: Reply ( result) => result,
19942014 WasmResult :: Reject ( s) => panic ! ( "Call to icrc1_transfer failed: {:#?}" , s) ,
@@ -2232,15 +2252,17 @@ pub mod sns {
22322252 const NUM_TRANSACTIONS_NEEDED_TO_SPAWN_FIRST_ARCHIVE : u64 = 2000 ;
22332253
22342254 // Generate a bunch of SNS token transactions.
2235- stream:: iter ( 0 ..NUM_TRANSACTIONS_NEEDED_TO_SPAWN_FIRST_ARCHIVE )
2255+ // Sending all the requests, then awaiting all the responses, is much faster than sending each request in
2256+ // serial.
2257+ let transfer_requests = stream:: iter ( 0 ..NUM_TRANSACTIONS_NEEDED_TO_SPAWN_FIRST_ARCHIVE )
22362258 . map ( |i| {
22372259 async move {
22382260 let user_principal_id = PrincipalId :: new_user_test_id ( i) ;
22392261 let direct_participant_swap_account = Account {
22402262 owner : user_principal_id. 0 ,
22412263 subaccount : None ,
22422264 } ;
2243- let _block_height = ledger:: icrc1_transfer (
2265+ ledger:: icrc1_transfer_request (
22442266 pocket_ic,
22452267 sns_ledger_canister_id,
22462268 sns_governance_canister_id,
@@ -2254,12 +2276,16 @@ pub mod sns {
22542276 } ,
22552277 )
22562278 . await
2257- . unwrap ( ) ;
22582279 }
22592280 } )
22602281 . buffer_unordered ( 100 )
22612282 . collect :: < Vec < _ > > ( )
22622283 . await ;
2284+ let _transfer_responses = stream:: iter ( transfer_requests)
2285+ . map ( |call_id| async move { pocket_ic. await_call ( call_id) . await . unwrap ( ) } )
2286+ . buffer_unordered ( 100 )
2287+ . collect :: < Vec < _ > > ( )
2288+ . await ;
22632289
22642290 let mut archives = ledger:: archives ( pocket_ic, sns_ledger_canister_id) . await ;
22652291
0 commit comments