|
|
@@ -22,10 +22,13 @@ use wormhole::{
|
|
|
state::{vaa_archive_add, vaa_archive_check, GovernancePacket, ParsedVAA},
|
|
|
};
|
|
|
|
|
|
+#[cfg(not(feature = "library"))]
|
|
|
+use cosmwasm_std::entry_point;
|
|
|
+
|
|
|
use cosmwasm_std::{
|
|
|
- coin, entry_point, to_binary, BankMsg, Binary, CanonicalAddr, Coin, CosmosMsg, Decimal, Deps,
|
|
|
- DepsMut, Empty, Env, MessageInfo, Order, QuerierWrapper, QueryRequest, Reply, Response,
|
|
|
- StdError, StdResult, SubMsg, Uint128, WasmMsg, WasmQuery,
|
|
|
+ coin, to_binary, BankMsg, Binary, CanonicalAddr, Coin, CosmosMsg, Decimal, Deps, DepsMut,
|
|
|
+ Empty, Env, MessageInfo, Order, QuerierWrapper, QueryRequest, Reply, Response, StdError,
|
|
|
+ StdResult, SubMsg, Uint128, WasmMsg, WasmQuery,
|
|
|
};
|
|
|
|
|
|
use crate::{
|
|
|
@@ -259,7 +262,7 @@ pub fn coins_after_tax(deps: DepsMut, coins: Vec<Coin>) -> StdResult<Vec<Coin>>
|
|
|
let mut res = vec![];
|
|
|
for coin in coins {
|
|
|
let asset = Asset {
|
|
|
- amount: coin.amount.clone(),
|
|
|
+ amount: coin.amount,
|
|
|
info: AssetInfo::NativeToken {
|
|
|
denom: coin.denom.clone(),
|
|
|
},
|
|
|
@@ -285,7 +288,7 @@ fn parse_vaa(deps: Deps, block_time: u64, data: &Binary) -> StdResult<ParsedVAA>
|
|
|
pub fn execute(deps: DepsMut, env: Env, info: MessageInfo, msg: ExecuteMsg) -> StdResult<Response> {
|
|
|
match msg {
|
|
|
ExecuteMsg::RegisterAssetHook { asset_id } => {
|
|
|
- handle_register_asset(deps, env, info, &asset_id.as_slice())
|
|
|
+ handle_register_asset(deps, env, info, asset_id.as_slice())
|
|
|
}
|
|
|
ExecuteMsg::InitiateTransfer {
|
|
|
asset,
|
|
|
@@ -391,13 +394,13 @@ fn handle_register_asset(
|
|
|
let mut bucket = wrapped_asset(deps.storage);
|
|
|
let result = bucket.load(asset_id);
|
|
|
let result = result.map_err(|_| ContractError::RegistrationForbidden.std())?;
|
|
|
- if result != HumanAddr::from(WRAPPED_ASSET_UPDATING) {
|
|
|
+ if result != WRAPPED_ASSET_UPDATING {
|
|
|
return ContractError::AssetAlreadyRegistered.std_err();
|
|
|
}
|
|
|
|
|
|
bucket.save(asset_id, &info.sender.to_string())?;
|
|
|
|
|
|
- let contract_address: CanonicalAddr = deps.api.addr_canonicalize(&info.sender.as_str())?;
|
|
|
+ let contract_address: CanonicalAddr = deps.api.addr_canonicalize(info.sender.as_str())?;
|
|
|
wrapped_asset_address(deps.storage).save(contract_address.as_slice(), &asset_id.to_vec())?;
|
|
|
|
|
|
Ok(Response::new()
|
|
|
@@ -431,7 +434,7 @@ fn handle_attest_meta(
|
|
|
}
|
|
|
|
|
|
let cfg = config_read(deps.storage).load()?;
|
|
|
- let asset_id = build_asset_id(meta.token_chain, &meta.token_address.as_slice());
|
|
|
+ let asset_id = build_asset_id(meta.token_chain, meta.token_address.as_slice());
|
|
|
|
|
|
// If a CW20 wrapped already exists and this message has a newer sequence ID
|
|
|
// we allow updating the metadata. If not, we create a brand new token.
|
|
|
@@ -532,7 +535,7 @@ fn handle_create_asset_meta_token(
|
|
|
nonce,
|
|
|
})?,
|
|
|
// forward coins sent to this message
|
|
|
- funds: coins_after_tax(deps, info.funds.clone())?,
|
|
|
+ funds: coins_after_tax(deps, info.funds)?,
|
|
|
}))
|
|
|
.add_attribute("meta.token_chain", CHAIN_ID.to_string())
|
|
|
.add_attribute("meta.token", asset_address)
|
|
|
@@ -570,7 +573,7 @@ fn handle_create_asset_meta_native_token(
|
|
|
nonce,
|
|
|
})?,
|
|
|
// forward coins sent to this message
|
|
|
- funds: coins_after_tax(deps, info.funds.clone())?,
|
|
|
+ funds: coins_after_tax(deps, info.funds)?,
|
|
|
}))
|
|
|
.add_attribute("meta.token_chain", CHAIN_ID.to_string())
|
|
|
.add_attribute("meta.symbol", symbol)
|
|
|
@@ -662,8 +665,8 @@ fn submit_vaa(deps: DepsMut, env: Env, info: MessageInfo, data: &Binary) -> StdR
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-fn handle_governance_payload(deps: DepsMut, env: Env, data: &Vec<u8>) -> StdResult<Response> {
|
|
|
- let gov_packet = GovernancePacket::deserialize(&data)?;
|
|
|
+fn handle_governance_payload(deps: DepsMut, env: Env, data: &[u8]) -> StdResult<Response> {
|
|
|
+ let gov_packet = GovernancePacket::deserialize(data)?;
|
|
|
let module = get_string_from_32(&gov_packet.module);
|
|
|
|
|
|
if module != "TokenBridge" {
|
|
|
@@ -684,7 +687,7 @@ fn handle_governance_payload(deps: DepsMut, env: Env, data: &Vec<u8>) -> StdResu
|
|
|
}
|
|
|
|
|
|
fn handle_upgrade_contract(_deps: DepsMut, env: Env, data: &Vec<u8>) -> StdResult<Response> {
|
|
|
- let UpgradeContract { new_contract } = UpgradeContract::deserialize(&data)?;
|
|
|
+ let UpgradeContract { new_contract } = UpgradeContract::deserialize(data)?;
|
|
|
|
|
|
Ok(Response::new()
|
|
|
.add_message(CosmosMsg::Wasm(WasmMsg::Migrate {
|
|
|
@@ -699,7 +702,7 @@ fn handle_register_chain(deps: DepsMut, _env: Env, data: &Vec<u8>) -> StdResult<
|
|
|
let RegisterChain {
|
|
|
chain_id,
|
|
|
chain_address,
|
|
|
- } = RegisterChain::deserialize(&data)?;
|
|
|
+ } = RegisterChain::deserialize(data)?;
|
|
|
|
|
|
let existing = bridge_contracts_read(deps.storage).load(&chain_id.to_be_bytes());
|
|
|
if existing.is_ok() {
|
|
|
@@ -716,6 +719,7 @@ fn handle_register_chain(deps: DepsMut, _env: Env, data: &Vec<u8>) -> StdResult<
|
|
|
.add_attribute("chain_address", hex::encode(chain_address)))
|
|
|
}
|
|
|
|
|
|
+#[allow(clippy::too_many_arguments)]
|
|
|
fn handle_complete_transfer(
|
|
|
deps: DepsMut,
|
|
|
env: Env,
|
|
|
@@ -726,7 +730,7 @@ fn handle_complete_transfer(
|
|
|
data: &Vec<u8>,
|
|
|
relayer_address: &HumanAddr,
|
|
|
) -> StdResult<Response> {
|
|
|
- let transfer_info = TransferInfo::deserialize(&data)?;
|
|
|
+ let transfer_info = TransferInfo::deserialize(data)?;
|
|
|
let marker_byte = transfer_info.token_address.as_slice()[0];
|
|
|
if transfer_info.token_chain == CHAIN_ID {
|
|
|
match marker_byte {
|
|
|
@@ -766,6 +770,7 @@ fn handle_complete_transfer(
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+#[allow(clippy::too_many_arguments)]
|
|
|
fn handle_complete_transfer_token(
|
|
|
deps: DepsMut,
|
|
|
_env: Env,
|
|
|
@@ -777,9 +782,9 @@ fn handle_complete_transfer_token(
|
|
|
relayer_address: &HumanAddr,
|
|
|
) -> StdResult<Response> {
|
|
|
let transfer_info = match transfer_type {
|
|
|
- TransferType::WithoutPayload => TransferInfo::deserialize(&data)?,
|
|
|
+ TransferType::WithoutPayload => TransferInfo::deserialize(data)?,
|
|
|
TransferType::WithPayload { payload: _ } => {
|
|
|
- TransferWithPayloadInfo::deserialize(&data)?.as_transfer_info()
|
|
|
+ TransferWithPayloadInfo::deserialize(data)?.as_transfer_info()
|
|
|
}
|
|
|
};
|
|
|
|
|
|
@@ -826,7 +831,7 @@ fn handle_complete_transfer_token(
|
|
|
// Check if this asset is already deployed
|
|
|
let contract_addr = wrapped_asset_read(deps.storage).load(&asset_id).ok();
|
|
|
|
|
|
- return if let Some(contract_addr) = contract_addr {
|
|
|
+ if let Some(contract_addr) = contract_addr {
|
|
|
// Asset already deployed, just mint
|
|
|
|
|
|
let mut messages = vec![CosmosMsg::Wasm(WasmMsg::Execute {
|
|
|
@@ -858,7 +863,7 @@ fn handle_complete_transfer_token(
|
|
|
.add_attribute("fee", fee.to_string()))
|
|
|
} else {
|
|
|
Err(StdError::generic_err("Wrapped asset not deployed. To deploy, invoke CreateWrapped with the associated AssetMeta"))
|
|
|
- };
|
|
|
+ }
|
|
|
} else {
|
|
|
let token_address = transfer_info.token_address.as_slice().get_address(0);
|
|
|
|
|
|
@@ -911,6 +916,7 @@ fn handle_complete_transfer_token(
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+#[allow(clippy::too_many_arguments)]
|
|
|
fn handle_complete_transfer_token_native(
|
|
|
mut deps: DepsMut,
|
|
|
_env: Env,
|
|
|
@@ -922,9 +928,9 @@ fn handle_complete_transfer_token_native(
|
|
|
relayer_address: &HumanAddr,
|
|
|
) -> StdResult<Response> {
|
|
|
let transfer_info = match transfer_type {
|
|
|
- TransferType::WithoutPayload => TransferInfo::deserialize(&data)?,
|
|
|
+ TransferType::WithoutPayload => TransferInfo::deserialize(data)?,
|
|
|
TransferType::WithPayload { payload: () } => {
|
|
|
- TransferWithPayloadInfo::deserialize(&data)?.as_transfer_info()
|
|
|
+ TransferWithPayloadInfo::deserialize(data)?.as_transfer_info()
|
|
|
}
|
|
|
};
|
|
|
|
|
|
@@ -964,7 +970,7 @@ fn handle_complete_transfer_token_native(
|
|
|
}
|
|
|
|
|
|
// Wipe the native byte marker and extract the serialized denom.
|
|
|
- let mut token_address = transfer_info.token_address.clone();
|
|
|
+ let mut token_address = transfer_info.token_address;
|
|
|
let token_address = token_address.as_mut_slice();
|
|
|
token_address[0] = 0;
|
|
|
|
|
|
@@ -999,6 +1005,7 @@ fn handle_complete_transfer_token_native(
|
|
|
.add_attribute("fee", fee.to_string()))
|
|
|
}
|
|
|
|
|
|
+#[allow(clippy::too_many_arguments)]
|
|
|
fn handle_initiate_transfer(
|
|
|
deps: DepsMut,
|
|
|
env: Env,
|
|
|
@@ -1038,6 +1045,7 @@ fn handle_initiate_transfer(
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+#[allow(clippy::too_many_arguments)]
|
|
|
fn handle_initiate_transfer_token(
|
|
|
mut deps: DepsMut,
|
|
|
env: Env,
|
|
|
@@ -1067,7 +1075,7 @@ fn handle_initiate_transfer_token(
|
|
|
let mut submessages: Vec<SubMsg> = vec![];
|
|
|
|
|
|
// we'll only need this for payload 3 transfers
|
|
|
- let sender_address = deps.api.addr_canonicalize(&info.sender.to_string())?;
|
|
|
+ let sender_address = deps.api.addr_canonicalize(info.sender.as_ref())?;
|
|
|
let sender_address = extend_address_to_32_array(&sender_address);
|
|
|
|
|
|
match wrapped_asset_address_read(deps.storage).load(asset_canonical.as_slice()) {
|
|
|
@@ -1134,7 +1142,7 @@ fn handle_initiate_transfer_token(
|
|
|
nonce,
|
|
|
})?,
|
|
|
// forward coins sent to this message
|
|
|
- funds: coins_after_tax(deps.branch(), info.funds.clone())?,
|
|
|
+ funds: coins_after_tax(deps.branch(), info.funds)?,
|
|
|
}));
|
|
|
}
|
|
|
Err(_) => {
|
|
|
@@ -1206,7 +1214,7 @@ fn handle_initiate_transfer_token(
|
|
|
TransferType::WithoutPayload => {
|
|
|
let transfer_info = TransferInfo {
|
|
|
amount: (0, amount.u128()),
|
|
|
- token_address: asset_address.clone(),
|
|
|
+ token_address: asset_address,
|
|
|
token_chain: asset_chain,
|
|
|
recipient,
|
|
|
recipient_chain,
|
|
|
@@ -1220,7 +1228,7 @@ fn handle_initiate_transfer_token(
|
|
|
TransferType::WithPayload { payload } => {
|
|
|
let transfer_info = TransferWithPayloadInfo {
|
|
|
amount: (0, amount.u128()),
|
|
|
- token_address: asset_address.clone(),
|
|
|
+ token_address: asset_address,
|
|
|
token_chain: asset_chain,
|
|
|
recipient,
|
|
|
recipient_chain,
|
|
|
@@ -1255,7 +1263,7 @@ fn handle_initiate_transfer_token(
|
|
|
.add_attribute(
|
|
|
"transfer.sender",
|
|
|
hex::encode(extend_address_to_32(
|
|
|
- &deps.api.addr_canonicalize(&info.sender.as_str())?,
|
|
|
+ &deps.api.addr_canonicalize(info.sender.as_str())?,
|
|
|
)),
|
|
|
)
|
|
|
.add_attribute("transfer.recipient_chain", recipient_chain.to_string())
|
|
|
@@ -1275,6 +1283,7 @@ fn format_native_denom_symbol(denom: &str) -> String {
|
|
|
denom.to_uppercase()[1..3].to_string() + "T"
|
|
|
}
|
|
|
|
|
|
+#[allow(clippy::too_many_arguments)]
|
|
|
fn handle_initiate_transfer_native_token(
|
|
|
deps: DepsMut,
|
|
|
env: Env,
|
|
|
@@ -1333,7 +1342,7 @@ fn handle_initiate_transfer_native_token(
|
|
|
}
|
|
|
}
|
|
|
TransferType::WithPayload { payload } => {
|
|
|
- let sender_address = deps.api.addr_canonicalize(&info.sender.to_string())?;
|
|
|
+ let sender_address = deps.api.addr_canonicalize(info.sender.as_ref())?;
|
|
|
let sender_address = extend_address_to_32_array(&sender_address);
|
|
|
let transfer_info = TransferWithPayloadInfo {
|
|
|
amount: (0, amount.u128()),
|
|
|
@@ -1351,14 +1360,14 @@ fn handle_initiate_transfer_native_token(
|
|
|
}
|
|
|
};
|
|
|
|
|
|
- let sender = deps.api.addr_canonicalize(&info.sender.as_str())?;
|
|
|
+ let sender = deps.api.addr_canonicalize(info.sender.as_str())?;
|
|
|
messages.push(CosmosMsg::Wasm(WasmMsg::Execute {
|
|
|
contract_addr: cfg.wormhole_contract,
|
|
|
msg: to_binary(&WormholeExecuteMsg::PostMessage {
|
|
|
message: Binary::from(token_bridge_message.serialize()),
|
|
|
nonce,
|
|
|
})?,
|
|
|
- funds: coins_after_tax(deps, info.funds.clone())?,
|
|
|
+ funds: coins_after_tax(deps, info.funds)?,
|
|
|
}));
|
|
|
|
|
|
Ok(Response::new()
|
|
|
@@ -1465,8 +1474,8 @@ pub fn build_native_id(denom: &str) -> Vec<u8> {
|
|
|
asset_address
|
|
|
}
|
|
|
|
|
|
-fn is_governance_emitter(cfg: &ConfigInfo, emitter_chain: u16, emitter_address: &Vec<u8>) -> bool {
|
|
|
- cfg.gov_chain == emitter_chain && cfg.gov_address == emitter_address.clone()
|
|
|
+fn is_governance_emitter(cfg: &ConfigInfo, emitter_chain: u16, emitter_address: &[u8]) -> bool {
|
|
|
+ cfg.gov_chain == emitter_chain && cfg.gov_address == emitter_address
|
|
|
}
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|