Concordium/concordium-rust-smart-contracts

Make the `invoke_contract` public in `cis2client` so that custom methods can be called from cis2 contract.

dhruvja opened this issue · 3 comments

Description
With cis2client, we can only call a handful of methods like transfer, balanceOf etc. But ideally we would wanna call burn, mint and many more. This would help users call any method from the token contract which implements cis2. Users can use the invoke_contract implemented by Host but the error handling is better in cis2client which is customized for it.

Solution
Make the invoke_contract found in cis2client as public.
Here:

fn invoke_contract<State, P: Serial, R: Deserial, E: Deserial>(

The similar can be done for invoke_contract_read_only method as well.

Well we can always implement the conversion by ourselves, but its a feature thats good to have.

I don't think it's right to make this public since invoking other methods does not have anything to do with cis2.

However if I read your feedback more broadly, it would make sense to add a method to HasHost that automatically parses the response into a type you provide instead of returning the raw return value.

This seems like it would accomplish what you want, right?

oh yes indeed. Yes thats what i would love to achieve. Looking at cis2 invoke contract, i was able to do the same. But having it done by invoke_contract would be ideal. Thanks