message: Pull out ContractMsg, rename Opaque -> Native
diff: @@ -12,25 +12,30 @@ use crate::types::HumanAddr;
  #[serde(rename_all = "snake_case")]
  pub enum CosmosMsg {
  Bank(BankMsg),
  + Contract(ContractMsg),
  + // this is dangerous to use, as it ties you to one particular runtime format.
  + // this makes the contract non-portable, and also fragile to break upon a hardfork
  + // only safe way is to receive it from a user and hold it temporarily.
  + Native { msg: Binary },
  +}
  +
  +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
  +#[serde(rename_all = "snake_case")]
  +pub enum ContractMsg {
  // this dispatches a call to another contract at a known address (with known ABI)
  // msg is the json-encoded HandleMsg struct
  - Contract {
  + Execute {
  contract_addr: HumanAddr,
  msg: Binary, // we pass this in as Vec<u8> to the contract, so allow any binary encoding (later, limit to rawjson?)
  send: Option<Vec<Coin>>,
  },
  - // this should never be created here, just passed in from the user and later dispatched
  - Opaque {
  - data: Binary,
  + Instantiate {
  + code_id: u64,
  + msg: Binary, // we pass this in as Vec<u8> to the contract, so allow any binary encoding (later, limit to rawjson?)
  + send: Option<Vec<Coin>>,
  },
  }
  -#[derive(Serialize, Deserialize, Clone, Default, Debug, PartialEq, JsonSchema)]
  -pub struct LogAttribute {
  - pub key: String,
  - pub value: String,
  -}
  -
  #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
  #[serde(rename_all = "snake_case")]
  pub enum BankMsg {
  @@ -42,6 +47,12 @@ pub enum BankMsg {
  },
  }
  +#[derive(Serialize, Deserialize, Clone, Default, Debug, PartialEq, JsonSchema)]
  +pub struct LogAttribute {
  + pub key: String,
  + pub value: String,
  +}
  +
  /// A shorthand to produce log messages
  pub fn log(key: &str, value: &str) -> LogAttribute {
  LogAttribute {
  