Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

tg-valset: Returning created rewards contract address #261

Merged
merged 3 commits into from
Oct 27, 2021

Conversation

hashedone
Copy link
Contributor

@hashedone hashedone commented Oct 26, 2021

Closes #248

@hashedone hashedone marked this pull request as draft October 26, 2021 14:38
maurolacy
maurolacy approved these changes Oct 27, 2021
@@ -320,6 +320,12 @@ pub enum RewardsDistribution {
DistributeFunds {},
}

#[derive(Serialize, Deserialize, Clone, PartialEq, JsonSchema, Debug)]
#[serde(rename_all = "snake_case")]
pub struct InstantiateResponse {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

<nit> This would better be called InstantiateReplyResponse, or perhaps ReplyInstantiateResponse.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why? It is response for instantiate (from the caller point of view). Internally it comes from the reply function but it is only because of how we model responding, but semantically it is just async handler for the subcall, which is not relevant to whoever triggered initial instantiation (there would not be any other response from instantiation than this one).

Copy link
Contributor

@maurolacy maurolacy Oct 27, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You are right. I've just realised they are the same, while working on the multitest executor (see CosmWasm/cw-plus#515).

Copy link
Contributor

@maurolacy maurolacy Oct 27, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not use the standard MsgInstantiateContractResponse then, by the way?

It's defined in the recent cw-plus 0.10.1. And under parse_reply... :-/

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is different. It is not MsgInstantiateContractResponse, which is data returned by x/wasm.

This is the JSON data the contract returns to the runtime. (To be parsed by the Go module)

@maurolacy
Copy link
Contributor

maurolacy commented Oct 27, 2021

Oh, I thought this already passed tests (and that it wasn't a Draft). Will take another look later on.

@hashedone hashedone marked this pull request as ready for review October 27, 2021 08:21
@hashedone hashedone force-pushed the 248-distribution-contract-addr-improvement branch from 09f4f33 to 8ee3b77 Compare October 27, 2021 08:21
@hashedone hashedone force-pushed the 248-distribution-contract-addr-improvement branch from 8ee3b77 to f215032 Compare October 27, 2021 08:34
@hashedone hashedone merged commit 2e6f2ae into main Oct 27, 2021
@hashedone hashedone deleted the 248-distribution-contract-addr-improvement branch October 27, 2021 08:39
let resp = Response::new().set_data(
resp.write_to_bytes()
.map_err(|err| ContractError::Proto(err.to_string()))?,
);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is tricky. We have three nested levels of data here.

Copy link
Contributor

@ethanfrey ethanfrey left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think there is too much prootbuf here. No need to encode at that level

rewards_contract: Addr::unchecked(res.get_contract_address()),
};

let mut resp = MsgInstantiateContractResponse::new();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh, you don't need to add this info. This is added by x/wasm. Just encode your contract info. The following is sufficient:

let data = InstantiateResponse {
    rewards_contract: Addr::unchecked(res.get_contract_address()),
};
let resp = Response::new().set_data(to_binary(&data));
Ok(resp)

The contract doesn't have full access. It is run in a sandbox and it's output (data, events) are processed before shown to consumers.

@@ -12,6 +12,9 @@ pub enum ContractError {
#[error("{0}")]
AdminError(#[from] AdminError),

#[error("{0}")]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can be removed, we don't need to proto encode.

@@ -320,6 +320,12 @@ pub enum RewardsDistribution {
DistributeFunds {},
}

#[derive(Serialize, Deserialize, Clone, PartialEq, JsonSchema, Debug)]
#[serde(rename_all = "snake_case")]
pub struct InstantiateResponse {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is different. It is not MsgInstantiateContractResponse, which is data returned by x/wasm.

This is the JSON data the contract returns to the runtime. (To be parsed by the Go module)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

tgrade-valset: return distribution contract address
4 participants