Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Chore: Bugfix and add missing vintage metadata #68

Merged
merged 3 commits into from
Jan 6, 2025
Merged
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
1 change: 1 addition & 0 deletions assets/generated/vintages/BanegasFarm.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions assets/generated/vintages/Karathuru.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions assets/generated/vintages/LasDelicias.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions assets/generated/vintages/Manjarisoa.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
15 changes: 15 additions & 0 deletions src/lib.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,21 @@ mod metadata {
mod static;
}

mod las_delicias {
mod contract;
mod static;
}

mod karathuru {
mod contract;
mod static;
}

mod manjarisoa {
mod contract;
mod static;
}

mod models;
}
}
Expand Down
38 changes: 38 additions & 0 deletions src/metadata/vintages/karathuru/contract.cairo
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#[starknet::interface]
trait IMetadataDescriptor<TContractState> {
fn construct_uri(self: @TContractState, token_id: u256) -> Span<felt252>;
}

#[starknet::contract]
mod KarathuruCPV3Uri {
use starknet::{get_contract_address, ContractAddress};

use metadata::metadata::vintages::template::{svg, storage, data as template_data};
use metadata::metadata::vintages::template::json::generate_json;
use metadata::metadata::vintages::karathuru::static::get_static_data;

use openzeppelin::introspection::interface::{ISRC5Dispatcher, ISRC5DispatcherTrait, ISRC5_ID};

#[storage]
struct Storage {}

#[external(v0)]
impl CPV3Metadata of super::IMetadataDescriptor<ContractState> {
fn construct_uri(self: @ContractState, token_id: u256) -> Span<felt252> {
// [Check] calling contract is compatible
let contract = get_contract_address();
self.compatible(contract);
let static_data = get_static_data();
generate_json(contract, token_id, static_data)
}
}
#[generate_trait]
impl CPV3MetadataInternal of IInternal {
fn compatible(self: @ContractState, contract_address: ContractAddress) {
let src5 = ISRC5Dispatcher { contract_address };
let is_SRC5 = src5.supports_interface(ISRC5_ID);
assert(src5.supports_interface(ISRC5_ID), 'ISRC5 not supported');
}
}
}

77 changes: 77 additions & 0 deletions src/metadata/vintages/karathuru/static.cairo
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
use metadata::metadata::common::models::{ProjectStaticData, String, Shortstring};

const NAME: Shortstring = 'Karathuru';
const DEVELOPER: Shortstring = 'Wordview Intl Foundation';
const CERTIFIER: Shortstring = 'Verra';
const AREA: u32 = 86;
const COUNTRY: Shortstring = 'Myanmar';
const END_YEAR: u32 = 2047; // get from project
const END_MONTH: u8 = 12; // get from project
const DURATION_IN_YEARS: u32 = consteval_int!(2047 - 2024); // get from project
const TOTAL_CU: u64 = 70589; // get from project
const PROJECTED_CU: u64 = 70589; // get from project
const COLOR: Shortstring = 'Blue';
const TYPE: Shortstring = 'ARR';
const CATEGORY: Shortstring = 'Mangrove';
const SOURCE: Shortstring = 'Carbonable';
const PAUSED: u8 = 0;

#[inline(always)]
fn get_sdgs_() -> Span<u8> {
array![4, 5, 8, 13, 14, 15].span()
}

#[inline(always)]
fn get_static_data() -> ProjectStaticData {
ProjectStaticData {
name: array![NAME].span(),
description: get_description_(),
developer: array![DEVELOPER].span(),
certifier: array![CERTIFIER].span(),
area: AREA,
country: array![COUNTRY].span(),
end_year: END_YEAR,
end_month: END_MONTH,
duration_in_years: DURATION_IN_YEARS,
total_cu: TOTAL_CU,
projected_cu: PROJECTED_CU,
color: array![COLOR].span(),
type_: array![TYPE].span(),
category: array![CATEGORY].span(),
source: array![SOURCE].span(),
sdgs: get_sdgs_(),
background_component: 'bg.Karathuru.jpg.b64',
external_url: get_external_url_(),
paused: PAUSED,
}
}

#[inline(always)]
fn get_external_url_() -> Span<felt252> {
array!['https://app.carbonable.io/', 'launchpad/', 'mangroves-regeneration-', 'karathuru']
.span()
}

#[inline(always)]
fn get_description_() -> Span<felt252> {
let mut data = Default::default();
add_description_(ref data);
data.span()
}

#[inline(always)]
fn add_description_(ref data: Array<felt252>) {
data.append('The project involves the');
data.append(' regeneration of 228 ha in 2023');
data.append(' with the planting of 570,000');
data.append(' trees (2,500 per ha), and the');
data.append(' restoration of a carbon sink t');
data.append('hat will result in a forecasted');
data.append(' amount of 374,285 certified');
data.append(' carbon units amongst which');
data.append(' 187,142 Carbon Units will be');
data.append(' reserved for investors and the');
data.append(' other half to local');
data.append(' communities.');
}

40 changes: 40 additions & 0 deletions src/metadata/vintages/las_delicias/contract.cairo
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
#[starknet::interface]
trait IMetadataDescriptor<TContractState> {
fn construct_uri(self: @TContractState, token_id: u256) -> Span<felt252>;
}

#[starknet::contract]
mod LasDeliciasCPV3Uri {
use starknet::{get_contract_address, ContractAddress};

use metadata::metadata::vintages::template::{svg, storage, data as template_data};
use metadata::metadata::vintages::template::json::generate_json;
use metadata::metadata::vintages::las_delicias::static::get_static_data;

use debug::PrintTrait;

use openzeppelin::introspection::interface::{ISRC5Dispatcher, ISRC5DispatcherTrait, ISRC5_ID};

#[storage]
struct Storage {}

#[external(v0)]
impl CPV3Metadata of super::IMetadataDescriptor<ContractState> {
fn construct_uri(self: @ContractState, token_id: u256) -> Span<felt252> {
// [Check] calling contract is compatible
let contract = get_contract_address();
self.compatible(contract);
let static_data = get_static_data();
generate_json(contract, token_id, static_data)
}
}
#[generate_trait]
impl CPV3MetadataInternal of IInternal {
fn compatible(self: @ContractState, contract_address: ContractAddress) {
let src5 = ISRC5Dispatcher { contract_address };
let is_SRC5 = src5.supports_interface(ISRC5_ID);
assert(src5.supports_interface(ISRC5_ID), 'ISRC5 not supported');
}
}
}

78 changes: 78 additions & 0 deletions src/metadata/vintages/las_delicias/static.cairo
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
use metadata::metadata::common::models::{ProjectStaticData, String, Shortstring};

const NAME: Shortstring = 'Las Delicias';
const DEVELOPER: Shortstring = 'Fundacion Naturaleza Panama';
const CERTIFIER: Shortstring = 'Wildsense';
const AREA: u32 = 18;
const COUNTRY: Shortstring = 'Panama';
const END_YEAR: u32 = 2042; // get from project
const END_MONTH: u8 = 12; // get from project
const DURATION_IN_YEARS: u32 = consteval_int!(2042 - 2022); // get from project
const TOTAL_CU: u64 = 3603; // get from project
const PROJECTED_CU: u64 = 3603; // get from project
const COLOR: Shortstring = 'Blue';
const TYPE: Shortstring = 'ARR';
const CATEGORY: Shortstring = 'Mangrove';
const SOURCE: Shortstring = 'Carbonable';
const PAUSED: u8 = 0;

#[inline(always)]
fn get_sdgs_() -> Span<u8> {
array![8, 13, 14, 15].span()
}

#[inline(always)]
fn get_static_data() -> ProjectStaticData {
ProjectStaticData {
name: array![NAME].span(),
description: get_description_(),
developer: array![DEVELOPER].span(),
certifier: array![CERTIFIER].span(),
area: AREA,
country: array![COUNTRY].span(),
end_year: END_YEAR,
end_month: END_MONTH,
duration_in_years: DURATION_IN_YEARS,
total_cu: TOTAL_CU,
projected_cu: PROJECTED_CU,
color: array![COLOR].span(),
type_: array![TYPE].span(),
category: array![CATEGORY].span(),
source: array![SOURCE].span(),
sdgs: get_sdgs_(),
background_component: 'bg.LasDelicias.jpg.b64',
external_url: get_external_url_(),
paused: PAUSED,
}
}

#[inline(always)]
fn get_external_url_() -> Span<felt252> {
array![
'https://app.carbonable.io/', 'launchpad/', 'mangroves-regeneration-', 'las-delicias-panama'
]
.span()
}

#[inline(always)]
fn get_description_() -> Span<felt252> {
let mut data = Default::default();
add_description_(ref data);
data.span()
}

#[inline(always)]
fn add_description_(ref data: Array<felt252>) {
data.append('Carbonable\'s Las Delicias NFTs');
data.append(': Dive into Nature\'s VIP Club!');
data.append(' Unlock a world of green and bl');
data.append('ue with Panama\'s mangrove rest');
data.append('orers! By securing an NFT, you');
data.append('\'re not only backing an eco-mi');
data.append('ssion, but you\'re also claimin');
data.append('g prime carbon credits. Stay ah');
data.append('ead, make waves, and grab yours');
data.append(' now. Nature\'s red carpet is r');
data.append('olling out!');
}

40 changes: 40 additions & 0 deletions src/metadata/vintages/manjarisoa/contract.cairo
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
#[starknet::interface]
trait IMetadataDescriptor<TContractState> {
fn construct_uri(self: @TContractState, token_id: u256) -> Span<felt252>;
}

#[starknet::contract]
mod ManjarisoaCPV3Uri {
use starknet::{get_contract_address, ContractAddress};

use metadata::metadata::vintages::template::{svg, storage, data as template_data};
use metadata::metadata::vintages::template::json::generate_json;
use metadata::metadata::vintages::manjarisoa::static::get_static_data;

use debug::PrintTrait;

use openzeppelin::introspection::interface::{ISRC5Dispatcher, ISRC5DispatcherTrait, ISRC5_ID};

#[storage]
struct Storage {}

#[external(v0)]
impl CPV3Metadata of super::IMetadataDescriptor<ContractState> {
fn construct_uri(self: @ContractState, token_id: u256) -> Span<felt252> {
// [Check] calling contract is compatible
let contract = get_contract_address();
self.compatible(contract);
let static_data = get_static_data();
generate_json(contract, token_id, static_data)
}
}
#[generate_trait]
impl CPV3MetadataInternal of IInternal {
fn compatible(self: @ContractState, contract_address: ContractAddress) {
let src5 = ISRC5Dispatcher { contract_address };
let is_SRC5 = src5.supports_interface(ISRC5_ID);
assert(src5.supports_interface(ISRC5_ID), 'ISRC5 not supported');
}
}
}

75 changes: 75 additions & 0 deletions src/metadata/vintages/manjarisoa/static.cairo
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
use metadata::metadata::common::models::{ProjectStaticData, String, Shortstring};

const NAME: Shortstring = 'Manjarisoa';
const DEVELOPER: Shortstring = 'Forest Calling Action';
const CERTIFIER: Shortstring = 'Wildsense';
const AREA: u32 = 20;
const COUNTRY: Shortstring = 'Madagascar';
const END_YEAR: u32 = 2043; // get from project
const END_MONTH: u8 = 12; // get from project
const DURATION_IN_YEARS: u32 = consteval_int!(2043 - 2022); // get from project
const TOTAL_CU: u64 = 8000; // get from project
const PROJECTED_CU: u64 = 8000; // get from project
const COLOR: Shortstring = 'Green';
const TYPE: Shortstring = 'ARR';
const CATEGORY: Shortstring = 'Forest';
const SOURCE: Shortstring = 'Carbonable';
const PAUSED: u8 = 1;

#[inline(always)]
fn get_sdgs_() -> Span<u8> {
array![8, 13, 15].span()
}

#[inline(always)]
fn get_static_data() -> ProjectStaticData {
ProjectStaticData {
name: array![NAME].span(),
description: get_description_(),
developer: array![DEVELOPER].span(),
certifier: array![CERTIFIER].span(),
area: AREA,
country: array![COUNTRY].span(),
end_year: END_YEAR,
end_month: END_MONTH,
duration_in_years: DURATION_IN_YEARS,
total_cu: TOTAL_CU,
projected_cu: PROJECTED_CU,
color: array![COLOR].span(),
type_: array![TYPE].span(),
category: array![CATEGORY].span(),
source: array![SOURCE].span(),
sdgs: get_sdgs_(),
background_component: 'bg.Manjarisoa.jpg.b64',
external_url: get_external_url_(),
paused: PAUSED,
}
}

#[inline(always)]
fn get_external_url_() -> Span<felt252> {
array!['https://app.carbonable.io/', 'launchpad/', 'forest-regeneration-', 'madagascar'].span()
}

#[inline(always)]
fn get_description_() -> Span<felt252> {
let mut data = Default::default();
add_description_(ref data);
data.span()
}

#[inline(always)]
fn add_description_(ref data: Array<felt252>) {
data.append('Carbonable\'s Manjarisoa NFTs:');
data.append(' Join the forest-saving brigade');
data.append(' in Madagascar! Step into Madag');
data.append('ascar\'s vibrant forest symphon');
data.append('y! Your NFT not only champions');
data.append(' a biodiversity-rich mission bu');
data.append('t also earns you top-tier carbo');
data.append('n credits. Get ready for nature');
data.append('\'s grand performance, starring');
data.append(' lemurs, birds, and frogs. Natu');
data.append('re\'s encore is calling-be there');
data.append('!');
}
2 changes: 1 addition & 1 deletion src/metadata/vintages/template/storage.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ fn fetch_data(contract_address: ContractAddress, token_id: u256) -> StorageData
let mut start_year: u32 = 1970;
let mut end_year: u32 = 2999;
if num != 0 && token_id <= num.into() {
vintage = *all_vintages.at(token_id.try_into().unwrap());
vintage = *all_vintages.at((token_id - 1).try_into().unwrap());
start_year = *all_vintages.at(0).year;
end_year = *all_vintages.at(all_vintages.len() - 1).year;
}
Expand Down
Loading
Loading