Skip to content

Commit

Permalink
Remove Mergeable and rename Exclusive to Persistent (#855)
Browse files Browse the repository at this point in the history
* Remove Mergeable and rename Exclusive to Persistent

* update test wasms

* Update Cargo.toml

---------

Co-authored-by: Graydon Hoare <graydon@pobox.com>
  • Loading branch information
sisuresh and graydon committed Jun 16, 2023
1 parent bf7b93a commit e64000d
Show file tree
Hide file tree
Showing 28 changed files with 95 additions and 116 deletions.
2 changes: 1 addition & 1 deletion Cargo.lock

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

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ soroban-native-sdk-macros = { version = "0.0.16", path = "soroban-native-sdk-mac
[workspace.dependencies.stellar-xdr]
version = "0.0.16"
git = "https://github.com/stellar/rs-stellar-xdr"
rev = "134a6f1809c41ce250e605dae7614cfe1d691679"
rev = "60ea4cda01f1deba2ae7db5657e502e8f4381826"
default-features = false

[workspace.dependencies.wasmi]
Expand Down
7 changes: 2 additions & 5 deletions soroban-env-common/src/storage_type.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,8 @@ impl StorageType {
pub const TEMPORARY: StorageType =
unsafe { StorageType::from_major_minor(ContractDataType::Temporary as u32, 0) };

pub const MERGEABLE: StorageType =
unsafe { StorageType::from_major_minor(ContractDataType::Mergeable as u32, 0) };

pub const EXCLUSIVE: StorageType =
unsafe { StorageType::from_major_minor(ContractDataType::Exclusive as u32, 0) };
pub const PERSISTENT: StorageType =
unsafe { StorageType::from_major_minor(ContractDataType::Persistent as u32, 0) };
}

impl TryFrom<StorageType> for ContractDataType {
Expand Down
4 changes: 2 additions & 2 deletions soroban-env-host/src/host.rs
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ pub struct LedgerInfo {
pub network_id: [u8; 32],
pub base_reserve: u32,
pub min_temp_entry_expiration: u32,
pub min_restorable_entry_expiration: u32,
pub min_persistent_entry_expiration: u32,
}

#[derive(Clone, Default)]
Expand Down Expand Up @@ -557,7 +557,7 @@ impl Host {
body,
ext: ExtensionPoint::V0,
expiration_ledger_seq: self
.get_min_expiration_ledger(ContractDataType::Mergeable)?,
.get_min_expiration_ledger(ContractDataType::Persistent)?,
});
storage.put(
&code_key,
Expand Down
2 changes: 1 addition & 1 deletion soroban-env-host/src/host/comparison.rs
Original file line number Diff line number Diff line change
Expand Up @@ -777,7 +777,7 @@ mod tests {
&ScVal::Address(xdr::ScAddress::Contract(xdr::Hash([0; 32]))),
)
.unwrap(),
Tag::StorageType => RawVal::from(StorageType::MERGEABLE),
Tag::StorageType => RawVal::from(StorageType::PERSISTENT),
Tag::LedgerKeyNonceObject => panic!(),
Tag::ObjectCodeUpperBound => panic!(),
Tag::Bad => panic!(),
Expand Down
6 changes: 3 additions & 3 deletions soroban-env-host/src/host/data_helper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ impl Host {
let contract_id = contract_id.metered_clone(self.as_budget())?;
Ok(Rc::new(LedgerKey::ContractData(LedgerKeyContractData {
key: ScVal::LedgerKeyContractExecutable,
type_: ContractDataType::Exclusive,
type_: ContractDataType::Persistent,
le_type: ContractLedgerEntryType::DataEntry,
contract: ScAddress::Contract(contract_id),
})))
Expand Down Expand Up @@ -143,11 +143,11 @@ impl Host {
contract: ScAddress::Contract(contract_id),
key: ScVal::LedgerKeyContractExecutable,
body,
type_: ContractDataType::Exclusive,
type_: ContractDataType::Persistent,
expiration_ledger_seq: self.with_ledger_info(|li| {
Ok(li
.sequence_number
.saturating_add(li.min_restorable_entry_expiration))
.saturating_add(li.min_persistent_entry_expiration))
})?,
});
self.0.storage.borrow_mut().put(
Expand Down
4 changes: 2 additions & 2 deletions soroban-env-host/src/host/ledger_info_helper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ impl Host {
ContractDataType::Temporary => {
self.with_ledger_info(|li| Ok(li.min_temp_entry_expiration))?
}
ContractDataType::Mergeable | ContractDataType::Exclusive => {
self.with_ledger_info(|li: &LedgerInfo| Ok(li.min_restorable_entry_expiration))?
ContractDataType::Persistent => {
self.with_ledger_info(|li: &LedgerInfo| Ok(li.min_persistent_entry_expiration))?
}
};
Ok(ledger_seq.saturating_add(min_expiration))
Expand Down
4 changes: 2 additions & 2 deletions soroban-env-host/src/native_contract/token/admin.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ use soroban_env_common::{Env, StorageType, TryIntoVal};
// Metering: covered by components
pub fn read_administrator(e: &Host) -> Result<Address, HostError> {
let key = DataKey::Admin;
let rv = e.get_contract_data(key.try_into_val(e)?, StorageType::MERGEABLE)?;
let rv = e.get_contract_data(key.try_into_val(e)?, StorageType::PERSISTENT)?;
rv.try_into_val(e)
}

Expand All @@ -17,7 +17,7 @@ pub fn write_administrator(e: &Host, id: Address) -> Result<(), HostError> {
e.put_contract_data(
key.try_into_val(e)?,
id.try_into_val(e)?,
StorageType::MERGEABLE,
StorageType::PERSISTENT,
().into(),
)?;
Ok(())
Expand Down
4 changes: 2 additions & 2 deletions soroban-env-host/src/native_contract/token/allowance.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use soroban_env_common::{Env, StorageType, TryIntoVal};
// Metering: covered by components
pub fn read_allowance(e: &Host, from: Address, spender: Address) -> Result<i128, HostError> {
let key = DataKey::Allowance(AllowanceDataKey { from, spender });
if let Ok(allowance) = e.get_contract_data(key.try_into_val(e)?, StorageType::MERGEABLE) {
if let Ok(allowance) = e.get_contract_data(key.try_into_val(e)?, StorageType::PERSISTENT) {
Ok(allowance.try_into_val(e)?)
} else {
Ok(0)
Expand All @@ -26,7 +26,7 @@ pub fn write_allowance(
e.put_contract_data(
key.try_into_val(e)?,
amount.try_into_val(e)?,
StorageType::MERGEABLE,
StorageType::PERSISTENT,
().into(),
)?;
Ok(())
Expand Down
6 changes: 3 additions & 3 deletions soroban-env-host/src/native_contract/token/asset_info.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,20 @@ pub fn write_asset_info(e: &Host, asset_info: AssetInfo) -> Result<(), HostError
e.put_contract_data(
key.try_into_val(e)?,
asset_info.try_into_val(e)?,
StorageType::EXCLUSIVE,
StorageType::PERSISTENT,
().into(),
)?;
Ok(())
}

pub fn read_asset_info(e: &Host) -> Result<AssetInfo, HostError> {
let key = DataKey::AssetInfo;
let rv = e.get_contract_data(key.try_into_val(e)?, StorageType::EXCLUSIVE)?;
let rv = e.get_contract_data(key.try_into_val(e)?, StorageType::PERSISTENT)?;
rv.try_into_val(e)
}

pub fn has_asset_info(e: &Host) -> Result<bool, HostError> {
let key = DataKey::AssetInfo;
let rv = e.has_contract_data(key.try_into_val(e)?, StorageType::EXCLUSIVE)?;
let rv = e.has_contract_data(key.try_into_val(e)?, StorageType::PERSISTENT)?;
Ok(rv.try_into()?)
}
14 changes: 7 additions & 7 deletions soroban-env-host/src/native_contract/token/balance.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ pub fn read_balance(e: &Host, addr: Address) -> Result<i128, HostError> {
ScAddress::Contract(_) => {
let key = DataKey::Balance(addr);
if let Ok(raw_balance) =
e.get_contract_data(key.try_into_val(e)?, StorageType::MERGEABLE)
e.get_contract_data(key.try_into_val(e)?, StorageType::PERSISTENT)
{
let balance: BalanceValue = raw_balance.try_into_val(e)?;
Ok(balance.amount)
Expand All @@ -56,7 +56,7 @@ fn write_balance(e: &Host, addr: Address, balance: BalanceValue) -> Result<(), H
e.put_contract_data(
key.try_into_val(e)?,
balance.try_into_val(e)?,
StorageType::MERGEABLE,
StorageType::PERSISTENT,
().into(),
)?;
Ok(())
Expand Down Expand Up @@ -86,7 +86,7 @@ pub fn receive_balance(e: &Host, addr: Address, amount: i128) -> Result<(), Host
ScAddress::Contract(_) => {
let key = DataKey::Balance(addr.clone());
let mut balance = if let Ok(raw_balance) =
e.get_contract_data(key.try_into_val(e)?, StorageType::MERGEABLE)
e.get_contract_data(key.try_into_val(e)?, StorageType::PERSISTENT)
{
raw_balance.try_into_val(e)?
} else {
Expand Down Expand Up @@ -134,7 +134,7 @@ pub fn spend_balance_no_authorization_check(
// this can be used to clawback when deauthorized.
let key = DataKey::Balance(addr.clone());
if let Ok(raw_balance) =
e.get_contract_data(key.try_into_val(e)?, StorageType::MERGEABLE)
e.get_contract_data(key.try_into_val(e)?, StorageType::PERSISTENT)
{
let mut balance: BalanceValue = raw_balance.try_into_val(e)?;
if balance.amount < amount {
Expand Down Expand Up @@ -190,7 +190,7 @@ pub fn is_authorized(e: &Host, addr: Address) -> Result<bool, HostError> {
ScAddress::Contract(_) => {
let key = DataKey::Balance(addr);
if let Ok(raw_balance) =
e.get_contract_data(key.try_into_val(e)?, StorageType::MERGEABLE)
e.get_contract_data(key.try_into_val(e)?, StorageType::PERSISTENT)
{
let balance: BalanceValue = raw_balance.try_into_val(e)?;
Ok(balance.authorized)
Expand All @@ -216,7 +216,7 @@ pub fn write_authorization(e: &Host, addr: Address, authorize: bool) -> Result<(
ScAddress::Contract(_) => {
let key = DataKey::Balance(addr.clone());
if let Ok(raw_balance) =
e.get_contract_data(key.try_into_val(e)?, StorageType::MERGEABLE)
e.get_contract_data(key.try_into_val(e)?, StorageType::PERSISTENT)
{
let mut balance: BalanceValue = raw_balance.try_into_val(e)?;
balance.authorized = authorize;
Expand Down Expand Up @@ -284,7 +284,7 @@ pub fn check_clawbackable(e: &Host, addr: Address) -> Result<(), HostError> {
ScAddress::Contract(_) => {
let key = DataKey::Balance(addr);
if let Ok(raw_balance) =
e.get_contract_data(key.try_into_val(e)?, StorageType::MERGEABLE)
e.get_contract_data(key.try_into_val(e)?, StorageType::PERSISTENT)
{
let balance: BalanceValue = raw_balance.try_into_val(e)?;
if !balance.clawback {
Expand Down
6 changes: 3 additions & 3 deletions soroban-env-host/src/native_contract/token/metadata.rs
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ pub fn set_metadata(e: &Host) -> Result<(), HostError> {
e.put_contract_data(
key.try_into_val(e)?,
metadata.try_into_val(e)?,
StorageType::MERGEABLE,
StorageType::PERSISTENT,
().into(),
)?;
Ok(())
Expand All @@ -69,15 +69,15 @@ pub fn set_metadata(e: &Host) -> Result<(), HostError> {
pub fn read_name(e: &Host) -> Result<String, HostError> {
let key = SymbolSmall::try_from_str(METADATA_KEY)?;
let metadata: TokenMetadata = e
.get_contract_data(key.try_into_val(e)?, StorageType::MERGEABLE)?
.get_contract_data(key.try_into_val(e)?, StorageType::PERSISTENT)?
.try_into_val(e)?;
Ok(metadata.name)
}

pub fn read_symbol(e: &Host) -> Result<String, HostError> {
let key = SymbolSmall::try_from_str(METADATA_KEY)?;
let metadata: TokenMetadata = e
.get_contract_data(key.try_into_val(e)?, StorageType::MERGEABLE)?
.get_contract_data(key.try_into_val(e)?, StorageType::PERSISTENT)?
.try_into_val(e)?;
Ok(metadata.symbol)
}
8 changes: 4 additions & 4 deletions soroban-env-host/src/storage.rs
Original file line number Diff line number Diff line change
Expand Up @@ -307,7 +307,7 @@ mod test_footprint {
let key = Rc::new(LedgerKey::ContractData(LedgerKeyContractData {
contract: ScAddress::Contract([0; 32].into()),
key: ScVal::I32(0),
type_: ContractDataType::Mergeable,
type_: ContractDataType::Persistent,
le_type: ContractLedgerEntryType::DataEntry,
}));
fp.record_access(&key, AccessType::ReadOnly, &budget)?;
Expand Down Expand Up @@ -336,7 +336,7 @@ mod test_footprint {
let key = Rc::new(LedgerKey::ContractData(LedgerKeyContractData {
contract: ScAddress::Contract([0; 32].into()),
key: ScVal::I32(0),
type_: ContractDataType::Mergeable,
type_: ContractDataType::Persistent,
le_type: ContractLedgerEntryType::DataEntry,
}));
let om = [(Rc::clone(&key), AccessType::ReadOnly)].into();
Expand All @@ -357,7 +357,7 @@ mod test_footprint {
let key = Rc::new(LedgerKey::ContractData(LedgerKeyContractData {
contract: ScAddress::Contract([0; 32].into()),
key: ScVal::I32(0),
type_: ContractDataType::Mergeable,
type_: ContractDataType::Persistent,
le_type: ContractLedgerEntryType::DataEntry,
}));
let res = fp.enforce_access(&key, AccessType::ReadOnly, &budget);
Expand All @@ -374,7 +374,7 @@ mod test_footprint {
let key = Rc::new(LedgerKey::ContractData(LedgerKeyContractData {
contract: ScAddress::Contract([0; 32].into()),
key: ScVal::I32(0),
type_: ContractDataType::Mergeable,
type_: ContractDataType::Persistent,
le_type: ContractLedgerEntryType::DataEntry,
}));
let om = [(Rc::clone(&key), AccessType::ReadOnly)].into();
Expand Down
2 changes: 1 addition & 1 deletion soroban-env-host/src/test/complex.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ fn run_complex() -> Result<(), HostError> {
timestamp: 1234,
network_id: [7; 32],
base_reserve: 1,
min_restorable_entry_expiration: 4096,
min_persistent_entry_expiration: 4096,
min_temp_entry_expiration: 16,
};
let id: Hash = [0; 32].into();
Expand Down
2 changes: 1 addition & 1 deletion soroban-env-host/src/test/ledger.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ fn ledger_network_id() -> Result<(), HostError> {
timestamp: 0,
network_id: [7; 32],
base_reserve: 0,
min_restorable_entry_expiration: 4096,
min_persistent_entry_expiration: 4096,
min_temp_entry_expiration: 16,
});
let obj = host.get_ledger_network_id()?;
Expand Down

0 comments on commit e64000d

Please sign in to comment.