Skip to content

Commit cc355f8

Browse files
committed
Basis around collections
1 parent cf15b8f commit cc355f8

2 files changed

Lines changed: 33 additions & 3 deletions

File tree

contracts/collection/src/contract.rs

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//! NFC Collection
22
3-
use soroban_sdk::{contractimpl, contracttype, panic_with_error, Address, Bytes, BytesN, Env, String};
3+
use soroban_sdk::{contractimpl, contracttype, panic_with_error, Address, Bytes, BytesN, Env, String, Vec};
44
use soroban_sdk::xdr::ToXdr;
55
use crate::{errors, events, Collection, CollectionArgs, CollectionClient, CollectionTrait};
66

@@ -12,6 +12,8 @@ pub enum DataKey {
1212
#[contracttype]
1313
pub enum CollectionKey {
1414
NFTContract,
15+
Collections,
16+
Collectibles(Address),
1517
}
1618

1719

@@ -27,9 +29,31 @@ impl CollectionTrait for Collection {
2729
admin.require_auth();
2830

2931
e.deployer().update_current_contract_wasm(wasm_hash.clone());
32+
}
33+
34+
fn create_collection(e: &Env, wasm_hash: BytesN<32>, name: String, symbol: String, uri: String, max_tokens: u32) {
35+
let admin: Address = e.storage().instance().get(&DataKey::Admin).unwrap();
36+
admin.require_auth();
37+
38+
let salt: BytesN<32> = e.crypto().sha256(&symbol.to_bytes()).into();
39+
let deployer = e.deployer().with_current_contract(salt);
40+
let contract_address = deployer.deploy_v2(wasm_hash, (name, symbol, uri, max_tokens));
3041

31-
events::Upgrade { admin, wasm_hash: wasm_hash.into() }.publish(e);
42+
let mut collections: Vec<Address> = e.storage().instance().get(&CollectionKey::Collections).unwrap_or(Vec::new(&e));
43+
collections.push_back(contract_address.clone());
44+
e.storage().instance().set(&CollectionKey::Collections, &contract_address);
3245
}
3346

47+
fn assign_collectible(e: &Env, collection: Address, to: Address, token_id: u32) {
48+
collection.require_auth();
49+
50+
let mut collectibles: Vec<(Address, u32)> = e.storage().instance().get(&CollectionKey::Collectibles(to.clone())).unwrap_or(Vec::new(&e));
51+
collectibles.push_back((collection, token_id));
52+
e.storage().instance().set(&CollectionKey::Collectibles(to), &collectibles);
53+
}
54+
55+
fn collectibles(e: &Env, from: Address) -> Vec<(Address, u32)> {
56+
e.storage().instance().get(&CollectionKey::Collectibles(from.clone())).unwrap_or(Vec::new(&e))
57+
}
3458

3559
}

contracts/collection/src/lib.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#![no_std]
22
#![allow(dead_code)]
33

4-
use soroban_sdk::{contract, contractmeta, Env, Address, String, BytesN, Bytes};
4+
use soroban_sdk::{contract, contractmeta, Env, Address, String, BytesN, Bytes, Vec};
55

66
contractmeta!(key = "Description", val = "ChimpDAO Collection");
77

@@ -21,4 +21,10 @@ pub trait CollectionTrait {
2121

2222
fn upgrade(e: &Env, wasm_hash: BytesN<32>);
2323

24+
fn create_collection(e: &Env, wasm_hash: BytesN<32>, name: String, symbol: String, uri: String, max_tokens: u32);
25+
26+
fn assign_collectible(e: &Env, collection: Address, to: Address, token_id: u32);
27+
28+
fn collectibles(e: &Env, from: Address) -> Vec<(Address, u32)>;
29+
2430
}

0 commit comments

Comments
 (0)