-
Notifications
You must be signed in to change notification settings - Fork 1
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
Conversation
@@ -320,6 +320,12 @@ pub enum RewardsDistribution { | |||
DistributeFunds {}, | |||
} | |||
|
|||
#[derive(Serialize, Deserialize, Clone, PartialEq, JsonSchema, Debug)] | |||
#[serde(rename_all = "snake_case")] | |||
pub struct InstantiateResponse { |
There was a problem hiding this comment.
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
.
There was a problem hiding this comment.
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).
There was a problem hiding this comment.
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).
There was a problem hiding this comment.
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
... :-/
There was a problem hiding this comment.
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)
Oh, I thought this already passed tests (and that it wasn't a Draft). Will take another look later on. |
09f4f33
to
8ee3b77
Compare
8ee3b77
to
f215032
Compare
let resp = Response::new().set_data( | ||
resp.write_to_bytes() | ||
.map_err(|err| ContractError::Proto(err.to_string()))?, | ||
); |
There was a problem hiding this comment.
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.
There was a problem hiding this 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(); |
There was a problem hiding this comment.
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}")] |
There was a problem hiding this comment.
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 { |
There was a problem hiding this comment.
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)
Closes #248