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

fix: deprecated store::UnorderedMap and store::UnorderedSet due to not meeting the original requirements (iteration over a collection of more than 2k elements runs out of gas) #1139

Merged
merged 14 commits into from
Feb 12, 2024
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

## [Unreleased]

### Fixed
- renamed `store::UnorderedMap` to `FrangibleUnorderedMap` to reflect its fragmentation property([#1139](https://github.com/near/near-sdk-rs/pull/1139))

## [5.0.0-alpha.2](https://github.com/near/near-sdk-rs/compare/near-sdk-v5.0.0-alpha.1...near-sdk-v5.0.0-alpha.2) - 2024-01-16

### Fixed
Expand Down
14 changes: 7 additions & 7 deletions examples/versioned/src/lib.rs
frol marked this conversation as resolved.
Show resolved Hide resolved
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use near_sdk::borsh::{BorshDeserialize, BorshSerialize};
use near_sdk::store::UnorderedMap;
use near_sdk::store::FrangibleMap;
use near_sdk::{env, log, near_bindgen, AccountId, NearToken};

/// An example of a versioned contract. This is a simple contract that tracks how much
Expand Down Expand Up @@ -33,7 +33,7 @@ impl VersionedContract {
}
}

fn funders(&self) -> &UnorderedMap<AccountId, NearToken> {
fn funders(&self) -> &FrangibleMap<AccountId, NearToken> {
match self {
Self::V0(contract) => &contract.funders,
Self::V1(contract) => &contract.funders,
Expand All @@ -50,25 +50,25 @@ impl Default for VersionedContract {
#[derive(BorshDeserialize, BorshSerialize)]
#[borsh(crate = "near_sdk::borsh")]
pub struct ContractV0 {
funders: UnorderedMap<AccountId, NearToken>,
funders: FrangibleMap<AccountId, NearToken>,
}

impl Default for ContractV0 {
fn default() -> Self {
Self { funders: UnorderedMap::new(b"f") }
Self { funders: FrangibleMap::new(b"f") }
}
}

#[derive(BorshDeserialize, BorshSerialize)]
#[borsh(crate = "near_sdk::borsh")]
pub struct Contract {
funders: UnorderedMap<AccountId, NearToken>,
funders: FrangibleMap<AccountId, NearToken>,
nonce: u64,
}

impl Default for Contract {
fn default() -> Self {
Self { funders: UnorderedMap::new(b"f"), nonce: 0 }
Self { funders: FrangibleMap::new(b"f"), nonce: 0 }
}
}

Expand Down Expand Up @@ -133,7 +133,7 @@ mod tests {
#[test]
fn contract_v0_interactions() {
let mut contract = {
let mut funders = UnorderedMap::new(b"f");
let mut funders = FrangibleMap::new(b"f");
funders.insert(bob(), NearToken::from_yoctonear(8));
VersionedContract::V0(ContractV0 { funders })
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,9 @@ where
/// # Examples
///
/// ```
/// use near_sdk::store::UnorderedMap;
/// use near_sdk::store::FrangibleUnorderedMap;
///
/// let mut map: UnorderedMap<String, u32> = UnorderedMap::new(b"m");
/// let mut map: FrangibleUnorderedMap<String, u32> = FrangibleUnorderedMap::new(b"m");
/// assert_eq!(map.entry("poneyland".to_string()).key(), "poneyland");
/// ```
pub fn key(&self) -> &K {
Expand All @@ -59,9 +59,9 @@ where
/// # Examples
///
/// ```
/// use near_sdk::store::UnorderedMap;
/// use near_sdk::store::FrangibleUnorderedMap;
///
/// let mut map: UnorderedMap<String, u32> = UnorderedMap::new(b"m");
/// let mut map: FrangibleUnorderedMap<String, u32> = FrangibleUnorderedMap::new(b"m");
///
/// map.entry("poneyland".to_string()).or_insert(3);
/// assert_eq!(map["poneyland"], 3);
Expand All @@ -79,9 +79,9 @@ where
/// # Examples
///
/// ```
/// use near_sdk::store::UnorderedMap;
/// use near_sdk::store::FrangibleUnorderedMap;
///
/// let mut map: UnorderedMap<String, String> = UnorderedMap::new(b"m");
/// let mut map: FrangibleUnorderedMap<String, String> = FrangibleUnorderedMap::new(b"m");
/// let s = "hoho".to_string();
///
/// map.entry("poneyland".to_string()).or_insert_with(|| s);
Expand All @@ -102,9 +102,9 @@ where
/// # Examples
///
/// ```
/// use near_sdk::store::UnorderedMap;
/// use near_sdk::store::FrangibleUnorderedMap;
///
/// let mut map: UnorderedMap<String, u32> = UnorderedMap::new(b"m");
/// let mut map: FrangibleUnorderedMap<String, u32> = FrangibleUnorderedMap::new(b"m");
///
/// map.entry("poneyland".to_string()).or_insert_with_key(|key| key.chars().count() as u32);
///
Expand All @@ -130,9 +130,9 @@ where
///
/// ```
/// # fn main() {
/// use near_sdk::store::UnorderedMap;
/// use near_sdk::store::FrangibleUnorderedMap;
///
/// let mut map: UnorderedMap<String, Option<u32>> = UnorderedMap::new(b"m");
/// let mut map: FrangibleUnorderedMap<String, Option<u32>> = FrangibleUnorderedMap::new(b"m");
/// map.entry("poneyland".to_string()).or_default();
///
/// assert_eq!(map["poneyland"], None);
Expand All @@ -154,9 +154,9 @@ where
/// # Examples
///
/// ```
/// use near_sdk::store::UnorderedMap;
/// use near_sdk::store::FrangibleUnorderedMap;
///
/// let mut map: UnorderedMap<String, u32> = UnorderedMap::new(b"m");
/// let mut map: FrangibleUnorderedMap<String, u32> = FrangibleUnorderedMap::new(b"m");
///
/// map.entry("poneyland".to_string())
/// .and_modify(|e| { *e += 1 })
Expand All @@ -179,7 +179,7 @@ where
}
}

/// View into an occupied entry in a [`UnorderedMap`](super::UnorderedMap).
/// View into an occupied entry in a [`UnorderedMap`](super::FrangibleUnorderedMap).
/// This is part of the [`Entry`] enum.
pub struct OccupiedEntry<'a, K, V>
where
Expand All @@ -203,10 +203,10 @@ where
/// # Examples
///
/// ```
/// use near_sdk::store::UnorderedMap;
/// use near_sdk::store::unordered_map::Entry;
/// use near_sdk::store::FrangibleUnorderedMap;
/// use near_sdk::store::frangible_map::Entry;
///
/// let mut map: UnorderedMap<String, u32> = UnorderedMap::new(b"m");
/// let mut map: FrangibleUnorderedMap<String, u32> = FrangibleUnorderedMap::new(b"m");
/// map.entry("poneyland".to_string()).or_insert(12);
///
/// if let Entry::Occupied(o) = map.entry("poneyland".to_string()) {
Expand All @@ -230,10 +230,10 @@ where
/// # Examples
///
/// ```
/// use near_sdk::store::UnorderedMap;
/// use near_sdk::store::unordered_map::Entry;
/// use near_sdk::store::FrangibleUnorderedMap;
/// use near_sdk::store::frangible_map::Entry;
///
/// let mut map: UnorderedMap<String, u32> = UnorderedMap::new(b"m");
/// let mut map: FrangibleUnorderedMap<String, u32> = FrangibleUnorderedMap::new(b"m");
/// map.entry("poneyland".to_string()).or_insert(12);
///
/// if let Entry::Occupied(o) = map.entry("poneyland".to_string()) {
Expand All @@ -254,10 +254,10 @@ where
/// # Examples
///
/// ```
/// use near_sdk::store::UnorderedMap;
/// use near_sdk::store::unordered_map::Entry;
/// use near_sdk::store::FrangibleUnorderedMap;
/// use near_sdk::store::frangible_map::Entry;
///
/// let mut map: UnorderedMap<String, u32> = UnorderedMap::new(b"m");
/// let mut map: FrangibleUnorderedMap<String, u32> = FrangibleUnorderedMap::new(b"m");
/// map.entry("poneyland".to_string()).or_insert(12);
///
/// assert_eq!(map["poneyland"], 12);
Expand Down Expand Up @@ -285,10 +285,10 @@ where
/// # Examples
///
/// ```
/// use near_sdk::store::UnorderedMap;
/// use near_sdk::store::unordered_map::Entry;
/// use near_sdk::store::FrangibleUnorderedMap;
/// use near_sdk::store::frangible_map::Entry;
///
/// let mut map: UnorderedMap<String, u32> = UnorderedMap::new(b"m");
/// let mut map: FrangibleUnorderedMap<String, u32> = FrangibleUnorderedMap::new(b"m");
/// map.entry("poneyland".to_string()).or_insert(12);
///
/// assert_eq!(map["poneyland"], 12);
Expand All @@ -307,10 +307,10 @@ where
/// # Examples
///
/// ```
/// use near_sdk::store::UnorderedMap;
/// use near_sdk::store::unordered_map::Entry;
/// use near_sdk::store::FrangibleUnorderedMap;
/// use near_sdk::store::frangible_map::Entry;
///
/// let mut map: UnorderedMap<String, u32> = UnorderedMap::new(b"m");
/// let mut map: FrangibleUnorderedMap<String, u32> = FrangibleUnorderedMap::new(b"m");
/// map.entry("poneyland".to_string()).or_insert(12);
///
/// if let Entry::Occupied(mut o) = map.entry("poneyland".to_string()) {
Expand All @@ -328,10 +328,10 @@ where
/// # Examples
///
/// ```
/// use near_sdk::store::UnorderedMap;
/// use near_sdk::store::unordered_map::Entry;
/// use near_sdk::store::FrangibleUnorderedMap;
/// use near_sdk::store::frangible_map::Entry;
///
/// let mut map: UnorderedMap<String, u32> = UnorderedMap::new(b"m");
/// let mut map: FrangibleUnorderedMap<String, u32> = FrangibleUnorderedMap::new(b"m");
/// map.entry("poneyland".to_string()).or_insert(12);
///
/// if let Entry::Occupied(o) = map.entry("poneyland".to_string()) {
Expand All @@ -348,7 +348,7 @@ where
}
}

/// View into a vacant entry in a [`UnorderedMap`](super::UnorderedMap).
/// View into a vacant entry in a [`UnorderedMap`](super::FrangibleUnorderedMap).
/// This is part of the [`Entry`] enum.
pub struct VacantEntry<'a, K, V>
where
Expand All @@ -373,10 +373,10 @@ where
/// # Examples
///
/// ```
/// use near_sdk::store::UnorderedMap;
/// use near_sdk::store::unordered_map::Entry;
/// use near_sdk::store::FrangibleUnorderedMap;
/// use near_sdk::store::frangible_map::Entry;
///
/// let mut map: UnorderedMap<String, u32> = UnorderedMap::new(b"m");
/// let mut map: FrangibleUnorderedMap<String, u32> = FrangibleUnorderedMap::new(b"m");
///
/// if let Entry::Vacant(v) = map.entry("poneyland".to_string()) {
/// v.into_key();
Expand All @@ -392,10 +392,10 @@ where
/// # Examples
///
/// ```
/// use near_sdk::store::UnorderedMap;
/// use near_sdk::store::unordered_map::Entry;
/// use near_sdk::store::FrangibleUnorderedMap;
/// use near_sdk::store::frangible_map::Entry;
///
/// let mut map: UnorderedMap<String, u32> = UnorderedMap::new(b"m");
/// let mut map: FrangibleUnorderedMap<String, u32> = FrangibleUnorderedMap::new(b"m");
///
/// if let Entry::Vacant(o) = map.entry("poneyland".to_string()) {
/// o.insert(37);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ use std::borrow::Borrow;

use borsh::{BorshDeserialize, BorshSerialize};

use super::{ToKey, UnorderedMap, ERR_NOT_EXIST};
use super::{FrangibleUnorderedMap, ToKey, ERR_NOT_EXIST};
use crate::env;

impl<K, V, H> Extend<(K, V)> for UnorderedMap<K, V, H>
impl<K, V, H> Extend<(K, V)> for FrangibleUnorderedMap<K, V, H>
where
K: BorshSerialize + Ord + BorshDeserialize + Clone,
V: BorshSerialize + BorshDeserialize,
Expand All @@ -21,7 +21,7 @@ where
}
}

impl<K, V, H, Q: ?Sized> core::ops::Index<&Q> for UnorderedMap<K, V, H>
impl<K, V, H, Q: ?Sized> core::ops::Index<&Q> for FrangibleUnorderedMap<K, V, H>
where
K: BorshSerialize + Ord + Clone + Borrow<Q>,
V: BorshSerialize + BorshDeserialize,
Expand Down
Loading
Loading