Check emitter for wAsset creation on terra
Addresses audit comment Change-Id: Icf6b1e52e58f5cab6e39db1ed663dc6f6a2c2476
This commit is contained in:
parent
904cb25e91
commit
895e40578c
|
@ -1,5 +1,8 @@
|
||||||
use crate::msg::WrappedRegistryResponse;
|
use crate::msg::WrappedRegistryResponse;
|
||||||
use cosmwasm_std::{log, to_binary, Api, CanonicalAddr, CosmosMsg, Env, Extern, HandleResponse, HumanAddr, InitResponse, Querier, QueryRequest, StdError, StdResult, Storage, Uint128, WasmMsg, WasmQuery, Binary};
|
use cosmwasm_std::{
|
||||||
|
log, to_binary, Api, Binary, CanonicalAddr, CosmosMsg, Env, Extern, HandleResponse, HumanAddr,
|
||||||
|
InitResponse, Querier, QueryRequest, StdError, StdResult, Storage, Uint128, WasmMsg, WasmQuery,
|
||||||
|
};
|
||||||
|
|
||||||
use crate::msg::{HandleMsg, InitMsg, QueryMsg};
|
use crate::msg::{HandleMsg, InitMsg, QueryMsg};
|
||||||
use crate::state::{
|
use crate::state::{
|
||||||
|
@ -17,7 +20,7 @@ use cw20_base::msg::QueryMsg as TokenQuery;
|
||||||
use wormhole::msg::HandleMsg as WormholeHandleMsg;
|
use wormhole::msg::HandleMsg as WormholeHandleMsg;
|
||||||
use wormhole::msg::QueryMsg as WormholeQueryMsg;
|
use wormhole::msg::QueryMsg as WormholeQueryMsg;
|
||||||
|
|
||||||
use wormhole::state::{GovernancePacket, ParsedVAA, vaa_archive_add, vaa_archive_check};
|
use wormhole::state::{vaa_archive_add, vaa_archive_check, GovernancePacket, ParsedVAA};
|
||||||
|
|
||||||
use cw20::TokenInfoResponse;
|
use cw20::TokenInfoResponse;
|
||||||
|
|
||||||
|
@ -27,7 +30,7 @@ use cw20_wrapped::msg::QueryMsg as WrappedQuery;
|
||||||
use cw20_wrapped::msg::{InitHook, WrappedAssetInfoResponse};
|
use cw20_wrapped::msg::{InitHook, WrappedAssetInfoResponse};
|
||||||
|
|
||||||
use sha3::{Digest, Keccak256};
|
use sha3::{Digest, Keccak256};
|
||||||
use std::cmp::{min, max};
|
use std::cmp::{max, min};
|
||||||
|
|
||||||
// Chain ID of Terra
|
// Chain ID of Terra
|
||||||
const CHAIN_ID: u16 = 3;
|
const CHAIN_ID: u16 = 3;
|
||||||
|
@ -134,9 +137,20 @@ fn handle_register_asset<S: Storage, A: Api, Q: Querier>(
|
||||||
fn handle_attest_meta<S: Storage, A: Api, Q: Querier>(
|
fn handle_attest_meta<S: Storage, A: Api, Q: Querier>(
|
||||||
deps: &mut Extern<S, A, Q>,
|
deps: &mut Extern<S, A, Q>,
|
||||||
env: Env,
|
env: Env,
|
||||||
|
emitter_chain: u16,
|
||||||
|
emitter_address: Vec<u8>,
|
||||||
data: &Vec<u8>,
|
data: &Vec<u8>,
|
||||||
) -> StdResult<HandleResponse> {
|
) -> StdResult<HandleResponse> {
|
||||||
let meta = AssetMeta::deserialize(data)?;
|
let meta = AssetMeta::deserialize(data)?;
|
||||||
|
|
||||||
|
let expected_contract =
|
||||||
|
bridge_contracts_read(&deps.storage).load(&emitter_chain.to_be_bytes())?;
|
||||||
|
|
||||||
|
// must be sent by a registered token bridge contract
|
||||||
|
if expected_contract != emitter_address {
|
||||||
|
return Err(StdError::unauthorized());
|
||||||
|
}
|
||||||
|
|
||||||
if CHAIN_ID == meta.token_chain {
|
if CHAIN_ID == meta.token_chain {
|
||||||
return Err(StdError::generic_err(
|
return Err(StdError::generic_err(
|
||||||
"this asset is native to this chain and should not be attested",
|
"this asset is native to this chain and should not be attested",
|
||||||
|
@ -261,7 +275,13 @@ fn submit_vaa<S: Storage, A: Api, Q: Querier>(
|
||||||
vaa.emitter_address,
|
vaa.emitter_address,
|
||||||
&message.payload,
|
&message.payload,
|
||||||
),
|
),
|
||||||
Action::ATTEST_META => handle_attest_meta(deps, env, &message.payload),
|
Action::ATTEST_META => handle_attest_meta(
|
||||||
|
deps,
|
||||||
|
env,
|
||||||
|
vaa.emitter_chain,
|
||||||
|
vaa.emitter_address,
|
||||||
|
&message.payload,
|
||||||
|
),
|
||||||
_ => ContractError::InvalidVAAAction.std_err(),
|
_ => ContractError::InvalidVAAAction.std_err(),
|
||||||
};
|
};
|
||||||
return result;
|
return result;
|
||||||
|
|
Loading…
Reference in New Issue