Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Binary file modified artifacts/auction_english.wasm
Binary file not shown.
26 changes: 13 additions & 13 deletions artifacts/checksums.txt
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
62ba5fa32ed8bbd6a43b8442906c6a98ad1a593bdce4af6a2485fd32aeff2d16 auction_english.wasm
dccfd7a9fe6f8c292280b79980dd6941738c2c56d5af194db9b3d94bdad6fc4d follow.wasm
d7ac0e7b68abd1b3b4ed8612ccce373b066fba044e8fda2186047a438073112a friend.wasm
61820208f932ac3e771cfbcc7115ca624e555e466b98ab6c17e134a5d6237399 marketplace_legacy.wasm
995fbd52328256930296561c8a486272cd7998761fe0cf99cf087ed923178193 marketplace_v2.wasm
aa8d7ca456732db687f93a859a882e57814a5f78c8836066a8454c22e657d522 minter.wasm
d82a4bcc8ef51dca7005851d0c059e548e1a1e1b7357158428d868b23f391138 minter_metadata_onchain.wasm
287715682a760726656e8366e6123077ee279048cad1b2a60ac17da1e7d539c0 nft_vault.wasm
0b4543555b4f053fa49e0a8d37a2f5fe0f18a2ca29c6b2243d8d3da8b9967f6b pg721.wasm
b8a55d471bd2713e2594a15077a58326b935c43ae75e4eddb8167da0c0163c41 pg721_legacy.wasm
9438a8062fcfbca53c76b76f60491112cba2edbc1a0e9532c71bb4c30091957d pg721_metadata_onchain.wasm
6e7dd43e8463f81d91bcbb83d175a1531cab72e4011fce5b4b5ea311ec87ebdc royalty_group.wasm
26cbdb6e116866c1981438185ae6198e0719708d8b735b851521eb15525c4872 whitelist.wasm
fe934edfcf99bf4af810b231303d8e8b9a09ebb7336e64de6e53483f1dea9f14 auction_english.wasm
33a363a84e22c7c1ce3ade7aeb84470969fc97b10e1c55f7ce9953f7efc9538a follow.wasm
061a91b100a07b1579f7aa27f10f3e8366d6096d4aee69a262c90c459fd4fb75 friend.wasm
67ec741014187717a9e19cb223a29f07a0f39e98764cf463a400fd9ae62e0f59 marketplace_legacy.wasm
d99776cdae47400d9285a456ed6d7d574bc7c5d6bcbbe4cc1a2900305dc84f63 marketplace_v2.wasm
4b1438a62a1d592ec68e73088e4c7a8fc5f2074e6a169fe862ee12ef0ed07a27 minter.wasm
efa70314a99cf60cb489966ab820826369b3e610e308f04b4e9f861974f35c44 minter_metadata_onchain.wasm
edc05bdc8e88efd75c61292bff809eefe0d6c03348e6ca13f0fea2caf5b89acd nft_vault.wasm
4d88c7ae224740c51ef44beb274dd71099083452c721d8d7cd909a9a1b62934b pg721.wasm
4588a67cf26c795f11e144a8e1a5f7cf4600f338a1a99df36aace992b60279d1 pg721_legacy.wasm
91329fc2ffca493dc6c0e78d7031450b7a1230ad2625d3067bfea8cb2d1a1b6f pg721_metadata_onchain.wasm
94e7a93ffd69544da9fe94302bff86769ac57ea3d8859cb2fb4761d2005a4a82 royalty_group.wasm
02057f47efaf01601a1979923d22b26c658384765ef6c382b660186760dfc88b whitelist.wasm
26 changes: 13 additions & 13 deletions artifacts/checksums_intermediate.txt
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
58735af4e08bb118cb6b4b9bb7819e5084ea5e7e98127253abc7ad068d169017 target/wasm32-unknown-unknown/release/auction_english.wasm
f1e2847148b2a634a40b57fabdfcbd5e752c1c742921743cf8598d9f5b44a0a3 target/wasm32-unknown-unknown/release/follow.wasm
296431e5b33aa80993f41c86aa166cf037a301e6aa50dfe54493fd73f4d88055 target/wasm32-unknown-unknown/release/friend.wasm
8541049c3e169da495d0cdaa6da5aa1fc2430b4a32e4795099a3106686b79949 target/wasm32-unknown-unknown/release/marketplace_legacy.wasm
13d870b87cc2582a3323d1dd44780ff79c17550e5951f31409637703ab5fe1ba target/wasm32-unknown-unknown/release/marketplace_v2.wasm
d31e544b669e61af2ae1942b0ac5e94c6d51472a69c7b80f92365aa8004c9436 target/wasm32-unknown-unknown/release/minter.wasm
ca2003c7fdadc10be1bdbe2164dcddcee4f13c5f43e0678dafc72e7a66747375 target/wasm32-unknown-unknown/release/minter_metadata_onchain.wasm
fb8de512291ddda27e24a222d698ac3b15e778261d50d8479c741d43e740f47c target/wasm32-unknown-unknown/release/nft_vault.wasm
06108ce86ec17b8debedcac200b1e8d1be025037883269ff39107cc1c5998b80 target/wasm32-unknown-unknown/release/pg721.wasm
6635fc111eae087bb33610bb14aed0bfe7e347567442030eabb45209f3928e4f target/wasm32-unknown-unknown/release/pg721_legacy.wasm
8222b3586f55473b30ccec1a80e798e04f05b7ce491f9f3911f4c1eeaeb5ed25 target/wasm32-unknown-unknown/release/pg721_metadata_onchain.wasm
8873c4e7fc6d73b74b7abf057707d77feea7a139dad12d74a662de192e903c83 target/wasm32-unknown-unknown/release/royalty_group.wasm
9d571d50284840e4ce4895a4534a2f6424dd6e7056b0d8dd412580fd75e3386b target/wasm32-unknown-unknown/release/whitelist.wasm
4b6aef9a3a723313627d93ff61d61e5c6ec05aa35884d4e71554d2cc7f951ba4 target/wasm32-unknown-unknown/release/auction_english.wasm
f153cbb1a894b6c438847b14788fb4451b48a80dabfb56efbd51c8029e673eb2 target/wasm32-unknown-unknown/release/follow.wasm
da40aa647b5b9dfc3d8c8b0c1fbb2dc84d7926d13393c8af764b91104efccad6 target/wasm32-unknown-unknown/release/friend.wasm
51a1292ccf72cf65823bd2dd61be454dafe1e26fba346ebfae2f1fbb615f3fdb target/wasm32-unknown-unknown/release/marketplace_legacy.wasm
76644a7029667479508fec38c5c50b18ea849cef92923712be49df7833f5e7ef target/wasm32-unknown-unknown/release/marketplace_v2.wasm
6f82de16b47e7946d5b97632f2324320b14308903913ce66a22c2c3cf21ef1d3 target/wasm32-unknown-unknown/release/nft_vault.wasm
09fbc1368b7e6b8b12e82c639ce70ae85838ee10056ce2840391d8702b7f0b17 target/wasm32-unknown-unknown/release/royalty_group.wasm
565e37388c8783e229c89522fe69a49b8beb3f68cc029d9fdd55768c06d6fd67 target/wasm32-unknown-unknown/release/whitelist.wasm
e843ca3447ff9025fa41359478c9b5ffb3dce6af6035f8af7ff919bccd51e902 target/wasm32-unknown-unknown/release/minter.wasm
84c6af042ebb2c27e3804460aa2c84f9099711f430151e4b70f3a079bbcad84b target/wasm32-unknown-unknown/release/pg721.wasm
a5958ad5857e759f42083b2e43370db0e81d537231bebb877d38f1542dbf92d5 target/wasm32-unknown-unknown/release/pg721_legacy.wasm
54727af070dbd68ba61f0db5f741fb52cc9857b13a5c9680674317a12cc27f45 target/wasm32-unknown-unknown/release/minter_metadata_onchain.wasm
121aab9ab64e37bc66c3eb6260fa78dc5334f719aeb4883db4079ec007d6f773 target/wasm32-unknown-unknown/release/pg721_metadata_onchain.wasm
Binary file modified artifacts/follow.wasm
Binary file not shown.
Binary file modified artifacts/friend.wasm
Binary file not shown.
Binary file modified artifacts/marketplace_legacy.wasm
Binary file not shown.
Binary file modified artifacts/marketplace_v2.wasm
Binary file not shown.
Binary file modified artifacts/minter.wasm
Binary file not shown.
Binary file modified artifacts/minter_metadata_onchain.wasm
Binary file not shown.
Binary file modified artifacts/nft_vault.wasm
Binary file not shown.
Binary file modified artifacts/pg721.wasm
Binary file not shown.
Binary file modified artifacts/pg721_legacy.wasm
Binary file not shown.
Binary file modified artifacts/pg721_metadata_onchain.wasm
Binary file not shown.
Binary file modified artifacts/royalty_group.wasm
Binary file not shown.
Binary file modified artifacts/whitelist.wasm
Binary file not shown.
1 change: 1 addition & 0 deletions contracts/nft/minter-metadata-onchain/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ cw-utils = "0.16.0"
schemars = "0.8.8"
serde = { version = "1.0.133", default-features = false, features = ["derive"] }
pg721-metadata-onchain = { path = "../pg721-metadata-onchain", features = ["library"] }
pg721 = { path = "../pg721", features = ["library"] }
thiserror = { version = "1.0" }
whitelist = { path = "../whitelist", features = ["library"] }
cw721 = "0.13.1"
Expand Down
157 changes: 138 additions & 19 deletions contracts/nft/minter-metadata-onchain/src/contract.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,13 @@ use cw_utils::{may_pay, parse_reply_instantiate_data};
use pg721_metadata_onchain::msg::{
InstantiateMsg as Pg721InstantiateMsg, ExecuteMsg as Pg721ExecuteMsg, Metadata
};
use pg721::state::{MIGRATION_STATUS,MigrationStatus,migration_done,migration_status};

use crate::error::ContractError;
use crate::msg::{
ConfigResponse, ExecuteMsg, InstantiateMsg, MintCountResponse, MintPriceResponse,
QueryMsg, StartTimeResponse, TokenMetadata, TokenMintResponse, TokenMintsResponse,
NumMintedResponse, NumRemainingResponse, MigrateMsg
NumMintedResponse, NumRemainingResponse, MigrateMsg, Minter
};
use crate::state::{
CONFIG, MINTER_ADDRS, CW721_ADDRESS, MINTABLE_TOKEN_IDS,
Expand Down Expand Up @@ -89,6 +90,12 @@ pub fn instantiate(
};
CONFIG.save(deps.storage, &config)?;
MINTABLE_TOKEN_IDS.save(deps.storage, &vec![])?;

let migration_status=MigrationStatus{
done: false,
};

MIGRATION_STATUS.save(deps.storage, &migration_status)?;

let response = match msg.cw721_address {
Some(_addr) => {
Expand All @@ -108,8 +115,8 @@ pub fn instantiate(
minter: env.contract.address.to_string(),
collection_info: cw721_instantiate_msg.collection_info,
})?,
funds: info.funds,
admin: Some(info.sender.to_string()),
funds: info.funds.clone(),
admin: Some(info.sender.clone().to_string()),
label: String::from("Fixed price minter"),
}
.into(),
Expand Down Expand Up @@ -138,26 +145,58 @@ pub fn execute(
let api = deps.api;

match msg {
ExecuteMsg::UpsertTokenMetadatas { token_metadatas } => execute_upsert_token_metadatas(deps, info, token_metadatas ),
ExecuteMsg::Mint {} => execute_mint_sender(deps, env, info),
ExecuteMsg::UpdateStartTime(time) => execute_update_start_time(deps, env, info, time),
ExecuteMsg::UpdatePerAddressLimit { per_address_limit } => {
execute_update_per_address_limit(deps, env, info, per_address_limit)
}
ExecuteMsg::UpdateUnitPrice { unit_price } => execute_update_unit_price(deps, env, info, unit_price),
ExecuteMsg::MintTo { recipient } => execute_mint_to(deps, env, info, recipient),
ExecuteMsg::MintFor {
token_id,
recipient,
} => execute_mint_for(deps, env, info, token_id, recipient),
ExecuteMsg::SetAdmin { admin } => execute_set_admin(deps, info, api.addr_validate(&admin)?),
ExecuteMsg::SetWhitelist { whitelist } => {
execute_set_whitelist(deps, env, info, &whitelist)
ExecuteMsg::MigrateData { migrations } => migrate_tokens(deps, info, migrations.tokens, migrations.mintable_tokens, migrations.minters),
ExecuteMsg::MigrationDone { } => migrated(deps, info),
_ => {
if migration_status(deps.as_ref()){
match msg {
ExecuteMsg::UpsertTokenMetadatas { token_metadatas } => execute_upsert_token_metadatas(deps, info, token_metadatas ),
ExecuteMsg::Mint {} => execute_mint_sender(deps, env, info),
ExecuteMsg::UpdateStartTime(time) => execute_update_start_time(deps, env, info, time),
ExecuteMsg::UpdatePerAddressLimit { per_address_limit } => {
execute_update_per_address_limit(deps, env, info, per_address_limit)
}
ExecuteMsg::UpdateUnitPrice { unit_price } => execute_update_unit_price(deps, env, info, unit_price),
ExecuteMsg::MintTo { recipient } => execute_mint_to(deps, env, info, recipient),
ExecuteMsg::MintFor {
token_id,
recipient,
} => execute_mint_for(deps, env, info, token_id, recipient),
ExecuteMsg::SetAdmin { admin } => execute_set_admin(deps, info, api.addr_validate(&admin)?),
ExecuteMsg::SetWhitelist { whitelist } => {
execute_set_whitelist(deps, env, info, &whitelist)
}
ExecuteMsg::Withdraw { recipient } => execute_withdraw(deps, env, info, api.addr_validate(&recipient)?),
ExecuteMsg::MigrateData { migrations:_ } => return Err(ContractError::MigrationDone { }),
ExecuteMsg::MigrationDone { } => migrated(deps, info),
}
} else {
return Err(ContractError::MigrationInProgress { })
}
}
ExecuteMsg::Withdraw { recipient } => execute_withdraw(deps, env, info, api.addr_validate(&recipient)?),
}
}

fn migrated(
deps: DepsMut,
info: MessageInfo,
)->Result<Response,ContractError>{

let config = CONFIG.load(deps.storage)?;
if config.admin != info.sender {
return Err(ContractError::Unauthorized(
"Sender is not an admin".to_owned(),
));
};

migration_done(deps)?;

Ok(Response::new()
.add_attribute("action", "migration_done")
.add_attribute("marked done as", true.to_string())
)
}

pub fn execute_upsert_token_metadatas(
deps: DepsMut,
info: MessageInfo,
Expand Down Expand Up @@ -208,6 +247,86 @@ pub fn execute_upsert_token_metadatas(
Ok(response)
}

fn migrate_tokens(
deps: DepsMut,
info: MessageInfo,
tokens: Option<Vec<TokenMint>>,
mintable_ids: Option<Vec<u32>>,
minters: Option<Vec<Minter>>
) -> Result<Response, ContractError> {

if migration_status(deps.as_ref()){
return Err(ContractError::MigrationDone { });
}

let config = CONFIG.load(deps.storage)?;
if config.admin != info.sender {
return Err(ContractError::Unauthorized(
"Sender is not an admin".to_owned(),
));
};

// migrate token mints
let mut append_token_ids = vec![];
if tokens.is_some(){
for token in tokens.unwrap_or_default() {
if token.token_id == 0 {
return Err(ContractError::InvalidTokenId {});
}
token_mints().update(
deps.storage,
token.token_id.clone(),
|existing_token_mint| -> Result<TokenMint, ContractError> {
if let Some(_existing_token_mint) = existing_token_mint {
if let true = _existing_token_mint.is_minted {
return Err(ContractError::TokenAlreadyMinted { token_id: _existing_token_mint.token_id });
}
};
Ok(TokenMint {
token_id: token.clone().token_id,
metadata: token.clone().metadata,
is_minted: token.is_minted,
})
}
)?;
append_token_ids.push(token.token_id);
}
}

// migrate minters
if minters.is_some(){
for minter in minters.clone().unwrap_or_default() {
MINTER_ADDRS.save(deps.storage, Addr::unchecked(minter.address), &minter.mints)?;
}
}


// migrate mintable tokens
if mintable_ids.is_some(){
let mut mintable_token_ids = MINTABLE_TOKEN_IDS.load(deps.storage)?;
mintable_token_ids.append(&mut &mut mintable_ids.clone().unwrap_or_default());
MINTABLE_TOKEN_IDS.save(deps.storage, &mintable_token_ids)?;
}



// response
let mut response = Response::new();
let append_token_ids_fmt: Vec<String> = append_token_ids
.into_iter().map(|token_id| token_id.to_string()).collect();
let mut event = Event::new("migrate data")
.add_attribute("mintable-ids",mintable_ids.is_some().to_string())
.add_attribute("minters", minters.is_some().to_string());

if append_token_ids_fmt.len()>0{
event=event.add_attribute("token-ids",append_token_ids_fmt.join(","))
}

response.events.push(event);

Ok(response)
}

pub fn execute_withdraw(
deps: DepsMut,
env: Env,
Expand Down
6 changes: 6 additions & 0 deletions contracts/nft/minter-metadata-onchain/src/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -81,4 +81,10 @@ pub enum ContractError {

#[error("{0}")]
Payment(#[from] PaymentError),

#[error("Migration in progress")]
MigrationInProgress{},

#[error("Migration completed")]
MigrationDone{},
}
15 changes: 15 additions & 0 deletions contracts/nft/minter-metadata-onchain/src/msg.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ pub enum ExecuteMsg {
MintTo { recipient: String },
MintFor { token_id: u32, recipient: String },
Withdraw { recipient: String },
MigrateData {migrations: Migration},
MigrationDone{},
}

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
Expand Down Expand Up @@ -109,3 +111,16 @@ pub struct TokenMetadata {
pub token_id: u32,
pub metadata: Metadata
}

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct Migration{
pub tokens: Option<Vec<TokenMint>>,
pub mintable_tokens: Option<Vec<u32>>,
pub minters: Option<Vec<Minter>>,
}

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct Minter{
pub address: String,
pub mints: u32
}
2 changes: 1 addition & 1 deletion contracts/nft/pg721-metadata-onchain/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "pg721-metadata-onchain"
version = "0.2.0"
version = "0.3.0"
authors = ["Tasio Victoria <tasio@envadiv.com>"]
edition = "2018"
description = "Passage NFT collection contract with the metadata stored onchain"
Expand Down
1 change: 0 additions & 1 deletion contracts/nft/pg721-metadata-onchain/examples/schema.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ use cw721_base::{
MinterResponse
};
use pg721_metadata_onchain::msg::{CollectionInfoResponse, InstantiateMsg, QueryMsg, ExecuteMsg};

fn main() {
let mut out_dir = current_dir().unwrap();
out_dir.push("schema");
Expand Down
Loading