public-awesome / cw-nfts

Examples and helpers to build NFT contracts on CosmWasm
Apache License 2.0
189 stars 181 forks source link

linking with `rust-lld` failed: exit status: 1 #175

Closed iamthe-nerdyDev closed 1 week ago

iamthe-nerdyDev commented 1 week ago
# Cargo.toml
[package]
name = "raffle-contract"
version = "0.1.0"
authors = ["nerdyDev <141498118+iamthe-nerdyDev@users.noreply.github.com>"]
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[lib]
crate-type = ["cdylib", "rlib"]

[profile.release]
opt-level = 3
debug = false
rpath = false
lto = true
debug-assertions = false
codegen-units = 1
panic = 'abort'
incremental = false
overflow-checks = true

[features]
# use library feature to disable all instantiate/execute/query exports
library = []

[package.metadata.scripts]
optimize = """docker run --rm -v "$(pwd)":/code \
  --mount type=volume,source="$(basename "$(pwd)")_cache",target=/target \
  --mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \
  cosmwasm/optimizer:0.15.0
"""

[dependencies]
cosmwasm-schema = "2.0.1"
cosmwasm-std = { version = "2.0.1", features = [
  "cosmwasm_1_3",
  # Enable this if you only deploy to chains that have CosmWasm 1.4 or higher
  # "cosmwasm_1_4",
] }
cw-storage-plus = "2.0.0"
cw2 = "2.0.0"
cw721 = "0.18.0"
cw-utils = "2.0.0"
schemars = "0.8.16"
serde = { version = "1.0.197", default-features = false, features = ["derive"] }
thiserror = { version = "1.0.58" }
sha2 = "0.10.8"

[dev-dependencies]
cw-multi-test = "2.0.0"
// msg.rs
use cosmwasm_schema::cw_serde;
use cw721::Cw721ReceiveMsg;

#[cw_serde]
pub enum ExecuteMsg {
    ReceiveNft(Cw721ReceiveMsg),
}
// contract.rs
use cosmwasm_std::{DepsMut, Env, MessageInfo, Response};
use crate::error::ContractError;
use crate::execute::create_raffle;
use crate::msg::ExecuteMsg;

#[cfg_attr(not(feature = "library"), entry_point)]
pub fn execute(
    deps: DepsMut,
    env: Env,
    info: MessageInfo,
    msg: ExecuteMsg,
) -> Result<Response, ContractError> {
    match msg {
        ExecuteMsg::ReceiveNft(msg) => create_raffle(deps, env, info),
    }
}
// execute.rs
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub struct CreateRaffleMsg {
    pub max_ticket_per_user: Option<u64>,
    pub raffle_end_time: Option<u64>,
    pub total_tickets_available_for_sale: Option<u64>,
}

pub fn create_raffle(
    deps: DepsMut,
    env: Env,
    info: MessageInfo,
    msg: Cw721ReceiveMsg,
) -> Result<Response, ContractError> {
    let owner = deps.api.addr_validate(&msg.sender)?;
    let token_id = msg.token_id;
    let cw721_contract_addr = info.sender;

    let config = CONFIG.load(deps.storage)?;
    if config.is_whitelist_enabled && !config.is_in_whitelist(&owner) {
        return Err(ContractError::NotInWhitelist {});
    }

    let receive_msg: CreateRaffleMsg =
        from_json(&msg.msg).map_err(|_| ContractError::InvalidRaffleInfo {})?;

    let last_id = RAFFLE_SEQ.load(deps.storage)?;
    let raffle_id = Uint64::new(last_id)
        .checked_add(Uint64::new(1))
        .unwrap()
        .u64();

    let mut raffle: Raffle = Raffle {
        raffle_id,
        cw721_contract_addr: cw721_contract_addr.clone(),
        token_id: token_id.clone(),
        owner: owner.clone(),
        has_ended: false,
        total_coins_collected: 0,
        total_tickets_bought: 0,
        winner: None,
        max_ticket_per_user: receive_msg.max_ticket_per_user,
        raffle_end_time: receive_msg.raffle_end_time,
        total_tickets_available_for_sale: receive_msg.total_tickets_available_for_sale,
        timestamp: env.block.time.seconds(),
    };

    if receive_msg.total_tickets_available_for_sale.is_none()
        && receive_msg.raffle_end_time.is_none()
    {
        raffle.raffle_end_time = Some(env.block.time.seconds() + 86400); // 24hrs = 86400s
    }

    RAFFLE_SEQ.save(deps.storage, &raffle_id)?;
    RAFFLES.save(deps.storage, raffle_id, &raffle)?;

    Ok(Response::new()
        .add_attribute("method", "create_raffle")
        .add_attribute("cw721_contract_addr", cw721_contract_addr.to_string())
        .add_attribute("token_id", token_id)
        .add_attribute("owner", owner.to_string())
        .add_attribute("raffle_id", raffle_id.to_string()))
}

every time i run build --release --lib --target wasm32-unknown-unknown, I get this error and i think it is because cw721 uses a lower version of cosmwasm-std

 rust-lld: error: duplicate symbol: interface_version_8
          >>> defined in /Users/mac/Desktop/RugLeopoords/raffle-contract/contract/target/wasm32-unknown-unknown/release/deps/libcosmwasm_std-c02045f771b4de55.rlib(cosmwasm_std-c02045f771b4de55.cosmwasm_std.8cf00b2248613253-cgu.0.rcgu.o)
          >>> defined in /Users/mac/Desktop/RugLeopoords/raffle-contract/contract/target/wasm32-unknown-unknown/release/deps/libcosmwasm_std-8f670cf428ade49a.rlib(cosmwasm_std-8f670cf428ade49a.cosmwasm_std.891e3d3d0e2d1b47-cgu.0.rcgu.o)

          rust-lld: error: duplicate symbol: allocate
          >>> defined in /Users/mac/Desktop/RugLeopoords/raffle-contract/contract/target/wasm32-unknown-unknown/release/deps/libcosmwasm_std-c02045f771b4de55.rlib(cosmwasm_std-c02045f771b4de55.cosmwasm_std.8cf00b2248613253-cgu.0.rcgu.o)
          >>> defined in /Users/mac/Desktop/RugLeopoords/raffle-contract/contract/target/wasm32-unknown-unknown/release/deps/libcosmwasm_std-8f670cf428ade49a.rlib(cosmwasm_std-8f670cf428ade49a.cosmwasm_std.891e3d3d0e2d1b47-cgu.0.rcgu.o)

          rust-lld: error: duplicate symbol: deallocate
          >>> defined in /Users/mac/Desktop/RugLeopoords/raffle-contract/contract/target/wasm32-unknown-unknown/release/deps/libcosmwasm_std-c02045f771b4de55.rlib(cosmwasm_std-c02045f771b4de55.cosmwasm_std.8cf00b2248613253-cgu.0.rcgu.o)
          >>> defined in /Users/mac/Desktop/RugLeopoords/raffle-contract/contract/target/wasm32-unknown-unknown/release/deps/libcosmwasm_std-8f670cf428ade49a.rlib(cosmwasm_std-8f670cf428ade49a.cosmwasm_std.891e3d3d0e2d1b47-cgu.0.rcgu.o)

          rust-lld: error: duplicate symbol: requires_iterator
          >>> defined in /Users/mac/Desktop/RugLeopoords/raffle-contract/contract/target/wasm32-unknown-unknown/release/deps/libcosmwasm_std-c02045f771b4de55.rlib(cosmwasm_std-c02045f771b4de55.cosmwasm_std.8cf00b2248613253-cgu.0.rcgu.o)
          >>> defined in /Users/mac/Desktop/RugLeopoords/raffle-contract/contract/target/wasm32-unknown-unknown/release/deps/libcosmwasm_std-8f670cf428ade49a.rlib(cosmwasm_std-8f670cf428ade49a.cosmwasm_std.891e3d3d0e2d1b47-cgu.0.rcgu.o)

The error is actually longer, contains both errors and warnings I just felt this part explains the error better Will appreciate any help, thanks