wevm-core 0.4.1

Waves Enterprise Virtual Machine for WASM smart-contracts
Documentation
use crate::error::{Error, Result, RuntimeError};

pub enum Type {
    Account = 0,
    Contract = 1,
}

impl TryFrom<u32> for Type {
    type Error = Error;

    fn try_from(type_: u32) -> Result<Self, Self::Error> {
        match type_ {
            0 => Ok(Type::Account),
            1 => Ok(Type::Contract),
            _ => Err(Error::Runtime(RuntimeError::AssetHolderTypeNotFound)),
        }
    }
}

pub enum AddressVersion {
    Address = 1,
    Alias = 2,
}

impl TryFrom<u32> for AddressVersion {
    type Error = Error;

    fn try_from(type_: u32) -> Result<Self, Self::Error> {
        match type_ {
            1 => Ok(AddressVersion::Address),
            2 => Ok(AddressVersion::Alias),
            _ => Err(Error::Runtime(RuntimeError::AddressVersionNotFound)),
        }
    }
}

pub struct AssetHolder(Vec<u8>);

impl AssetHolder {
    pub fn from_bytes(type_: Type, version: AddressVersion, chain_id: u8, bytes: Vec<u8>) -> Self {
        let mut result: Vec<u8> = vec![];

        match type_ {
            Type::Account => match version {
                AddressVersion::Address => result.push(0),
                AddressVersion::Alias => result.extend(vec![0, 2, chain_id]),
            },
            Type::Contract => result.push(1),
        }

        result.extend(bytes);
        AssetHolder(result)
    }

    pub fn as_bytes(&self) -> Vec<u8> {
        self.0.clone()
    }
}