David, Thanks a lot. 
Also thanks for accepting my PR recently: Hello world 
<https://github.com/capnproto/capnproto-rust/pull/175> example. 




On Sunday, May 10, 2020 at 1:28:52 AM UTC+8, David Renshaw wrote:
>
> Hi Mostafa,
>
> The problem is that you're creating an independent 
> futures::executor::LocalPool inside the method and then blocking on it. 
> That never yields control back to the main event loop.
>
> It should work if you set things up like this:
>
> impl executor::Server for ExecutorImpl {
>     fn execute(
>         &mut self,
>         params: executor::ExecuteParams,
>         mut results: executor::ExecuteResults,
>     ) -> Promise<(), Error> {
>         let provider = pry!(pry!(params.get()).get_provider());
>         Promise::from_future(async move {
>             let storage_req = provider.get_storage_request();
>             let storage_result = storage_req.send().promise.await?;
>             let storage = storage_result.get()?.get_storage()?;
>
>             // use storage here ...
>             println!("storage = {}", storage);
>             Ok(())
>         })
>     }
> }
>
>
>
>
> On Sat, May 9, 2020 at 10:44 AM Mostafa Sedaghat joo <[email protected] 
> <javascript:>> wrote:
>
>> Hello guys,
>>
>>
>> I hope you all are doing well
>>
>>
>> I am struggling with an issue for more than a week, I decided to ask you 
>> if you can help me. Currently I am working on a project for executing smart 
>> contracts based on Web-Assembly for Blockchains. The project is named 
>> Durian and you can check it here: https://github.com/b00f/durian
>>
>> Durian simply provides an interface for blockchains to execute smart 
>> contracts. A client can ask the Durian: "Hey please execute this smart 
>> contract for me", and then Durian tries to execute it. During the 
>> execution, Durian might ask the client to provide some information: 
>> "Blockchain please give me some information like storage, account, etc." 
>> Finally the execution will return with the final result.
>>
>> Locally everything works fine. I wanted to make it as a web service. So I 
>> have two choices:
>>
>> Pull model: Client asks blockchain to execute the smart contract and in 
>> a loop he asks Durian: Hey Durian do you need anything that I can provide 
>> for you”, Durian might say:” Yes please, Give me this storage” and so on. 
>> In this case I can use gRPC or CapnProto, Both works fine. 
>>
>> Push model: Client asks Durian to execute a smart contract, during the 
>> execution, Durian calls client several times to get some information. Like 
>> storage as an example. The point is that calling the client happens inside 
>> the execution call.
>> [image: durian_flows.png]
>>
>> I decided to implement the second model using CapnP Proto.  I tried and 
>> tried and again tried but unfortunately I failed. The difference between 
>> this model and PubSub is in the PubSub model, the publisher and the  
>> subscriber are running independently. 
>>
>> First of all I want to know do you think the Push model is something 
>> feasible and practical?
>>
>> If yes, Why can't I call the client from the server?
>> [image: durian_diagram.png]
>>
>> I have attached my work. I made it as simple as I could. I removed the 
>> Durian from it and just added only one method for getting storage. I want 
>> to get storage value from the client during the execution.
>>
>> I really appreciate it if you can take a look at it and let me know which 
>> part I was doing wrong?
>>
>> In advance I would like to thank you.
>>
>>
>> Regards,
>>
>> Mostafa
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Cap'n Proto" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] <javascript:>.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/capnproto/CAJr8eKtwcLa3f7tGiPvM39bQ8S7gqFptDZ1Zw47yRJHzqNr5DQ%40mail.gmail.com
>>  
>> <https://groups.google.com/d/msgid/capnproto/CAJr8eKtwcLa3f7tGiPvM39bQ8S7gqFptDZ1Zw47yRJHzqNr5DQ%40mail.gmail.com?utm_medium=email&utm_source=footer>
>> .
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Cap'n Proto" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/capnproto/a98d0c96-39ed-441c-a5cd-97a8ebe6f02d%40googlegroups.com.

Reply via email to