Merge branch 'mainnet' into update/from-testnet3

This commit is contained in:
Pranav Gaddamadugu 2024-05-13 10:10:31 -07:00
commit c378e090d7
29 changed files with 2199 additions and 366 deletions

1462
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -43,10 +43,14 @@ members = [
"utils/retriever"
]
[workspace.dependencies.snarkos-cli]
git = "https://github.com/AleoHQ/snarkos"
rev = "6ac2fe5"
[workspace.dependencies.snarkvm]
#version = "0.16.19"
git = "https://github.com/AleoHQ/snarkVM"
rev = "2cbf34a"
rev = "3ebe60c"
[lib]
path = "leo/lib.rs"
@ -149,6 +153,9 @@ version = "1.0"
[dependencies.serial_test]
version = "3.1.0"
[dependencies.snarkos-cli]
workspace = true
[dependencies.snarkvm]
workspace = true
features = [ "circuit", "console" ]

View File

@ -22,7 +22,7 @@ use super::*;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum Literal {
// todo: deserialize values here
/// An address literal, e.g., `aleo1qnr4dkkvkgfqph0vzc3y6z2eu975wnpz2925ntjccd5cfqxtyu8s7pyjh9`.
/// An address literal, e.g., `aleo1qnr4dkkvkgfqph0vzc3y6z2eu975wnpz2925ntjccd5cfqxtyu8s7pyjh9` or `hello.aleo`.
Address(String, #[serde(with = "leo_span::span_json")] Span, NodeID),
/// A boolean literal, either `true` or `false`.
Boolean(bool, #[serde(with = "leo_span::span_json")] Span, NodeID),

View File

@ -441,8 +441,8 @@ impl ParserContext<'_> {
// Parses an external function call `credits.aleo/transfer()` or locator `token.aleo/accounts`.
fn parse_external_resource(&mut self, expr: Expression, network_span: Span) -> Result<Expression> {
// Eat an external function call.
self.eat(&Token::Div); // todo: Make `/` a more general token.
// Parse `/`.
self.expect(&Token::Div)?;
// Parse name.
let name = self.expect_identifier()?;
@ -507,8 +507,35 @@ impl ParserContext<'_> {
} else if self.eat(&Token::Leo) {
return Err(ParserError::only_aleo_external_calls(expr.span()).into());
} else if self.eat(&Token::Aleo) {
expr = self.parse_external_resource(expr, self.prev_token.span)?;
if self.token.token == Token::Div {
expr = self.parse_external_resource(expr, self.prev_token.span)?;
} else {
// Parse as address literal, e.g. `hello.aleo`.
if !matches!(expr, Expression::Identifier(_)) {
self.emit_err(ParserError::unexpected(expr.to_string(), "an identifier", expr.span()))
}
expr = Expression::Literal(Literal::Address(
format!("{}.aleo", expr),
expr.span(),
self.node_builder.next_id(),
))
}
} else {
// Parse instances of `self.address`.
if let Expression::Identifier(id) = expr {
if id.name == sym::SelfLower && self.token.token == Token::Address {
let span = self.expect(&Token::Address)?;
// Convert `self.address` to the current program name. TODO: Move this conversion to canonicalization pass when the new pass is added.
// Note that the unwrap is safe as in order to get to this stage of parsing a program name must have already been parsed.
return Ok(Expression::Literal(Literal::Address(
format!("{}.aleo", self.program_name.unwrap()),
expr.span() + span,
self.node_builder.next_id(),
)));
}
}
// Parse identifier name.
let name = self.expect_identifier()?;
@ -769,6 +796,9 @@ impl ParserContext<'_> {
Token::Future => {
Expression::Identifier(Identifier { name: sym::Future, span, id: self.node_builder.next_id() })
}
Token::Network => {
Expression::Identifier(Identifier { name: sym::network, span, id: self.node_builder.next_id() })
}
t if crate::type_::TYPE_TOKENS.contains(&t) => Expression::Identifier(Identifier {
name: t.keyword_to_symbol().unwrap(),
span,

View File

@ -143,6 +143,7 @@ pub enum Token {
Block,
Eof,
Leo,
Network,
}
/// Represents all valid Leo keyword tokens.
@ -180,6 +181,7 @@ pub const KEYWORD_TOKENS: &[Token] = &[
Token::Inline,
Token::Let,
Token::Mapping,
Token::Network,
Token::Private,
Token::Program,
Token::Public,
@ -237,6 +239,7 @@ impl Token {
Token::Let => sym::Let,
Token::Leo => sym::leo,
Token::Mapping => sym::mapping,
Token::Network => sym::network,
Token::Private => sym::private,
Token::Program => sym::program,
Token::Public => sym::public,
@ -374,6 +377,7 @@ impl fmt::Display for Token {
Block => write!(f, "block"),
Leo => write!(f, "leo"),
Eof => write!(f, "<eof>"),
Network => write!(f, "network"),
}
}
}

View File

@ -199,6 +199,7 @@ impl<'a> CodeGenerator<'a> {
// TODO: Figure out a better way to initialize.
self.variable_mapping.insert(&sym::SelfLower, "self".to_string());
self.variable_mapping.insert(&sym::block, "block".to_string());
self.variable_mapping.insert(&sym::network, "network".to_string());
self.current_function = Some(function);
// Construct the header of the function.

View File

@ -273,7 +273,9 @@ impl StatementReconstructor for Flattener<'_> {
let guard = self.construct_guard();
match input.expression {
Expression::Unit(_) | Expression::Identifier(_) => self.returns.push((guard, input)),
Expression::Unit(_) | Expression::Identifier(_) | Expression::Access(_) => {
self.returns.push((guard, input))
}
_ => unreachable!("SSA guarantees that the expression is always an identifier or unit expression."),
};

View File

@ -196,22 +196,12 @@ impl<'a> ExpressionVisitor<'a> for TypeChecker<'a> {
Expression::Identifier(identifier) if identifier.name == sym::SelfLower => match access.name.name {
sym::caller => {
// Check that the operation is not invoked in a `finalize` block.
if self.scope_state.variant == Some(Variant::AsyncFunction) {
self.handler.emit_err(TypeCheckerError::invalid_operation_inside_finalize(
"self.caller",
access.name.span(),
))
}
self.check_access_allowed("self.caller", false, access.name.span());
return Some(Type::Address);
}
sym::signer => {
// Check that operation is not invoked in a `finalize` block.
if self.scope_state.variant == Some(Variant::AsyncFunction) {
self.handler.emit_err(TypeCheckerError::invalid_operation_inside_finalize(
"self.signer",
access.name.span(),
))
}
self.check_access_allowed("self.signer", false, access.name.span());
return Some(Type::Address);
}
_ => {
@ -222,18 +212,24 @@ impl<'a> ExpressionVisitor<'a> for TypeChecker<'a> {
Expression::Identifier(identifier) if identifier.name == sym::block => match access.name.name {
sym::height => {
// Check that the operation is invoked in a `finalize` block.
if self.scope_state.variant != Some(Variant::AsyncFunction) {
self.handler.emit_err(TypeCheckerError::invalid_operation_outside_finalize(
"block.height",
access.name.span(),
))
}
self.check_access_allowed("block.height", true, access.name.span());
return Some(Type::Integer(IntegerType::U32));
}
_ => {
self.emit_err(TypeCheckerError::invalid_block_access(access.name.span()));
}
},
// If the access expression is of the form `network.<name>`, then check that the <name> is valid.
Expression::Identifier(identifier) if identifier.name == sym::network => match access.name.name {
sym::id => {
// Check that the operation is not invoked outside a `finalize` block.
self.check_access_allowed("network.id", true, access.name.span());
return Some(Type::Integer(IntegerType::U16));
}
_ => {
self.emit_err(TypeCheckerError::invalid_block_access(access.name.span()));
}
},
_ => {
// Check that the type of `inner` in `inner.name` is a struct.
match self.visit_expression(&access.inner, &None) {

View File

@ -936,10 +936,7 @@ impl<'a> TypeChecker<'a> {
}
CoreFunction::MappingGet => {
// Check that the operation is invoked in a `finalize` block.
if self.scope_state.variant != Some(Variant::AsyncFunction) {
self.handler
.emit_err(TypeCheckerError::invalid_operation_outside_finalize("Mapping::get", function_span))
}
self.check_access_allowed("Mapping::get", true, function_span);
// Check that the first argument is a mapping.
if let Some(mapping_type) = self.assert_mapping_type(&arguments[0].0, arguments[0].1) {
// Check that the second argument matches the key type of the mapping.
@ -952,12 +949,7 @@ impl<'a> TypeChecker<'a> {
}
CoreFunction::MappingGetOrUse => {
// Check that the operation is invoked in a `finalize` block.
if self.scope_state.variant != Some(Variant::AsyncFunction) {
self.handler.emit_err(TypeCheckerError::invalid_operation_outside_finalize(
"Mapping::get_or",
function_span,
))
}
self.check_access_allowed("Mapping::get_or", true, function_span);
// Check that the first argument is a mapping.
if let Some(mapping_type) = self.assert_mapping_type(&arguments[0].0, arguments[0].1) {
// Check that the second argument matches the key type of the mapping.
@ -972,10 +964,7 @@ impl<'a> TypeChecker<'a> {
}
CoreFunction::MappingSet => {
// Check that the operation is invoked in a `finalize` block.
if self.scope_state.variant != Some(Variant::AsyncFunction) {
self.handler
.emit_err(TypeCheckerError::invalid_operation_outside_finalize("Mapping::set", function_span))
}
self.check_access_allowed("Mapping::set", true, function_span);
// Check that the first argument is a mapping.
if let Some(mapping_type) = self.assert_mapping_type(&arguments[0].0, arguments[0].1) {
// Cannot modify external mappings.
@ -994,12 +983,7 @@ impl<'a> TypeChecker<'a> {
}
CoreFunction::MappingRemove => {
// Check that the operation is invoked in a `finalize` block.
if self.scope_state.variant != Some(Variant::AsyncFunction) {
self.handler.emit_err(TypeCheckerError::invalid_operation_outside_finalize(
"Mapping::remove",
function_span,
))
}
self.check_access_allowed("Mapping::remove", true, function_span);
// Check that the first argument is a mapping.
if let Some(mapping_type) = self.assert_mapping_type(&arguments[0].0, arguments[0].1) {
// Cannot modify external mappings.
@ -1017,12 +1001,7 @@ impl<'a> TypeChecker<'a> {
}
CoreFunction::MappingContains => {
// Check that the operation is invoked in a `finalize` block.
if self.scope_state.variant != Some(Variant::AsyncFunction) {
self.handler.emit_err(TypeCheckerError::invalid_operation_outside_finalize(
"Mapping::contains",
function_span,
))
}
self.check_access_allowed("Mapping::contains", true, function_span);
// Check that the first argument is a mapping.
if let Some(mapping_type) = self.assert_mapping_type(&arguments[0].0, arguments[0].1) {
// Check that the second argument matches the key type of the mapping.
@ -1398,6 +1377,16 @@ impl<'a> TypeChecker<'a> {
self.handler.emit_err(err);
}
}
// Checks if the access operation is valid inside the current function variant.
pub(crate) fn check_access_allowed(&mut self, name: &str, finalize_op: bool, span: Span) {
// Check that the function context matches.
if self.scope_state.variant == Some(Variant::AsyncFunction) && !finalize_op {
self.handler.emit_err(TypeCheckerError::invalid_operation_inside_finalize(name, span))
} else if self.scope_state.variant != Some(Variant::AsyncFunction) && finalize_op {
self.handler.emit_err(TypeCheckerError::invalid_operation_outside_finalize(name, span))
}
}
}
fn types_to_string(types: &[Type]) -> String {

View File

@ -272,6 +272,8 @@ symbols! {
stub,
block,
height,
network,
id,
}
/// An interned string.

View File

@ -215,4 +215,11 @@ create_messages!(
msg: format!("Failed to read private key from environment.\nIO Error: {error}"),
help: Some("Pass in private key using `--private-key <PRIVATE-KEY>` or create a .env file with your private key information. See examples for formatting information.".to_string()),
}
@backtraced
recursive_deploy_with_record {
args: (),
msg: "Cannot combine recursive deploy with private fee.".to_string(),
help: None,
}
);

View File

@ -370,4 +370,17 @@ create_messages!(
help: None,
}
@backtraced
missing_on_chain_program_name {
args: (),
msg: "The name of the program to execute on-chain is missing.".to_string(),
help: Some("Either set `--local` to execute the local program on chain, or set `--program <PROGRAM>`.".to_string()),
}
@backtraced
conflicting_on_chain_program_name {
args: (first: impl Display, second: impl Display),
msg: format!("Conflicting program names given to execute on chain: `{first}` and `{second}`."),
help: Some("Either set `--local` to execute the local program on chain, or set `--program <PROGRAM>`.".to_string()),
}
);

View File

@ -15,25 +15,27 @@
// along with the Leo library. If not, see <https://www.gnu.org/licenses/>.
use super::*;
//use snarkos_cli::commands::{Deploy as SnarkOSDeploy, Developer};
use snarkos_cli::commands::{Deploy as SnarkOSDeploy, Developer};
use snarkvm::cli::helpers::dotenv_private_key;
use std::path::PathBuf;
/// Deploys an Aleo program.
#[derive(Parser, Debug)]
pub struct Deploy {
#[clap(long, help = "Custom priority fee in microcredits", default_value = "1000000")]
pub(crate) priority_fee: String,
#[clap(long, help = "Custom query endpoint", default_value = "http://api.explorer.aleo.org/v1")]
pub(crate) endpoint: String,
#[clap(long, help = "Custom network", default_value = "testnet3")]
pub(crate) network: String,
#[clap(long, help = "Custom private key")]
pub(crate) private_key: Option<String>,
#[clap(long, help = "Disables building of the project before deployment", default_value = "false")]
#[clap(long, help = "Endpoint to retrieve network state from.", default_value = "http://api.explorer.aleo.org/v1")]
pub endpoint: String,
#[clap(flatten)]
pub(crate) fee_options: FeeOptions,
#[clap(long, help = "Disables building of the project before deployment.", default_value = "false")]
pub(crate) no_build: bool,
#[clap(long, help = "Disables recursive deployment of dependencies", default_value = "false")]
pub(crate) non_recursive: bool,
#[clap(long, help = "Custom wait gap between consecutive deployments", default_value = "12")]
pub(crate) wait_gap: u64,
#[clap(long, help = "Enables recursive deployment of dependencies.", default_value = "false")]
pub(crate) recursive: bool,
#[clap(
long,
help = "Time in seconds to wait between consecutive deployments. This is to help prevent a program from trying to be included in an earlier block than its dependency program.",
default_value = "12"
)]
pub(crate) wait: u64,
}
impl Command for Deploy {
@ -51,55 +53,66 @@ impl Command for Deploy {
Ok(())
}
fn apply(self, _context: Context, _: Self::Input) -> Result<Self::Output> {
// // Get the program name
// let project_name = context.open_manifest()?.program_id().to_string();
//
// // Get the private key
// let mut private_key = self.private_key;
// if private_key.is_none() {
// private_key =
// Some(dotenv_private_key().map_err(CliError::failed_to_read_environment_private_key)?.to_string());
// }
//
// let mut all_paths: Vec<(String, PathBuf)> = Vec::new();
//
// // Extract post-ordered list of local dependencies' paths from `leo.lock`
// if !self.non_recursive {
// all_paths = context.local_dependency_paths()?;
// }
//
// // Add the parent program to be deployed last
// all_paths.push((project_name, context.dir()?.join("build")));
//
// for (index, (name, path)) in all_paths.iter().enumerate() {
// // Set deploy arguments
// let deploy = SnarkOSDeploy::try_parse_from([
// "snarkos",
// "--private-key",
// private_key.as_ref().unwrap(),
// "--query",
// self.endpoint.as_str(),
// "--priority-fee",
// self.priority_fee.as_str(),
// "--path",
// path.to_str().unwrap(),
// "--broadcast",
// format!("{}/{}/transaction/broadcast", self.endpoint, self.network).as_str(),
// &name,
// ])
// .unwrap();
//
// // Deploy program
// Developer::Deploy(deploy).parse().map_err(CliError::failed_to_execute_deploy)?;
//
// // Sleep for `wait_gap` seconds.
// // This helps avoid parents from being serialized before children.
// if index < all_paths.len() - 1 {
// std::thread::sleep(std::time::Duration::from_secs(self.wait_gap));
// }
// }
fn apply(self, context: Context, _: Self::Input) -> Result<Self::Output> {
// Get the program name.
let project_name = context.open_manifest()?.program_id().to_string();
Err(PackageError::unimplemented_command("leo deploy").into())
// Get the private key.
let mut private_key = self.fee_options.private_key;
if private_key.is_none() {
private_key =
Some(dotenv_private_key().map_err(CliError::failed_to_read_environment_private_key)?.to_string());
}
let mut all_paths: Vec<(String, PathBuf)> = Vec::new();
// Extract post-ordered list of local dependencies' paths from `leo.lock`.
if self.recursive {
// Cannot combine with private fee.
if self.fee_options.record.is_some() {
return Err(CliError::recursive_deploy_with_record().into());
}
all_paths = context.local_dependency_paths()?;
}
// Add the parent program to be deployed last.
all_paths.push((project_name, context.dir()?.join("build")));
for (index, (name, path)) in all_paths.iter().enumerate() {
// Set the deploy arguments.
let mut deploy_args = vec![
"snarkos".to_string(),
"--private-key".to_string(),
private_key.as_ref().unwrap().clone(),
"--query".to_string(),
self.endpoint.clone(),
"--priority-fee".to_string(),
self.fee_options.priority_fee.to_string(),
"--path".to_string(),
path.to_str().unwrap().parse().unwrap(),
"--broadcast".to_string(),
format!("{}/{}/transaction/broadcast", self.endpoint, self.fee_options.network).to_string(),
name.clone(),
];
// Use record as payment option if it is provided.
if let Some(record) = self.fee_options.record.clone() {
deploy_args.push("--record".to_string());
deploy_args.push(record);
};
let deploy = SnarkOSDeploy::try_parse_from(deploy_args).unwrap();
// Deploy program.
Developer::Deploy(deploy).parse().map_err(CliError::failed_to_execute_deploy)?;
// Sleep for `wait_gap` seconds.
// This helps avoid parents from being serialized before children.
if index < all_paths.len() - 1 {
std::thread::sleep(std::time::Duration::from_secs(self.wait));
}
}
Ok(())
}
}

View File

@ -16,28 +16,31 @@
use super::*;
use clap::Parser;
// use snarkos_cli::commands::{Developer, Execute as SnarkOSExecute};
use snarkvm::{cli::Execute as SnarkVMExecute, prelude::Parser as SnarkVMParser};
use snarkos_cli::commands::{Developer, Execute as SnarkOSExecute};
use snarkvm::{
cli::{helpers::dotenv_private_key, Execute as SnarkVMExecute},
prelude::Parser as SnarkVMParser,
};
/// Build, Prove and Run Leo program with inputs
#[derive(Parser, Debug)]
pub struct Execute {
#[clap(name = "NAME", help = "The name of the function to execute.", default_value = "main")]
name: String,
#[clap(name = "INPUTS", help = "The inputs to the program. If none are provided, the input file is used.")]
#[clap(name = "INPUTS", help = "The inputs to the program.")]
inputs: Vec<String>,
#[clap(long, help = "Execute the transition on chain", default_value = "false")]
#[clap(short, long, help = "Execute the transition on-chain.", default_value = "false")]
broadcast: bool,
#[clap(long, help = "Custom priority fee in microcredits", default_value = "1000000")]
priority_fee: String,
#[clap(long, help = "Custom network", default_value = "testnet3")]
network: String,
#[clap(long, help = "Custom private key")]
private_key: Option<String>,
#[arg(short, long, help = "The inputs to the program, from a file. Overrides the INPUTS argument.")]
file: Option<String>,
#[clap(short, long, help = "Execute the local program on-chain.", default_value = "false")]
local: bool,
#[clap(short, long, help = "The program to execute on-chain.")]
program: Option<String>,
#[clap(flatten)]
fee_options: FeeOptions,
#[clap(flatten)]
compiler_options: BuildOptions,
#[arg(short, long, help = "The inputs to the program, from a file. Overrides the INPUTS argument.")]
file: Option<String>,
}
impl Command for Execute {
@ -49,50 +52,77 @@ impl Command for Execute {
}
fn prelude(&self, context: Context) -> Result<Self::Input> {
// No need to build if we are executing an external program.
if self.program.is_some() {
return Ok(());
}
(Build { options: self.compiler_options.clone() }).execute(context)
}
fn apply(self, context: Context, _input: Self::Input) -> Result<Self::Output> {
// If the `broadcast` flag is set, then broadcast the transaction.
if self.broadcast {
// // Get the program name
// let project_name = context.open_manifest()?.program_id().to_string();
//
// // Get the private key
// let mut private_key = self.private_key;
// if private_key.is_none() {
// private_key =
// Some(dotenv_private_key().map_err(CliError::failed_to_read_environment_private_key)?.to_string());
// }
//
// // Execute program
// Developer::Execute(
// SnarkOSExecute::try_parse_from(
// [
// vec![
// "snarkos",
// "--private-key",
// private_key.as_ref().unwrap(),
// "--query",
// self.compiler_options.endpoint.as_str(),
// "--priority-fee",
// self.priority_fee.as_str(),
// "--broadcast",
// format!("{}/{}/transaction/broadcast", self.compiler_options.endpoint, self.network)
// .as_str(),
// project_name.as_str(),
// &self.name,
// ],
// self.inputs.iter().map(|input| input.as_str()).collect(),
// ]
// .concat(),
// )
// .unwrap(),
// )
// .parse()
// .map_err(CliError::failed_to_execute_deploy)?;
// Get the program name.
let program_name = match (self.program, self.local) {
(Some(name), true) => {
let local = context.open_manifest()?.program_id().to_string();
// Throw error if local name doesn't match the specified name.
if name == local {
local
} else {
return Err(PackageError::conflicting_on_chain_program_name(local, name).into());
}
}
(Some(name), false) => name,
(None, true) => context.open_manifest()?.program_id().to_string(),
(None, false) => return Err(PackageError::missing_on_chain_program_name().into()),
};
return Err(PackageError::unimplemented_command("leo execute --broadcast").into());
// Get the private key.
let private_key = match self.fee_options.private_key {
Some(private_key) => private_key,
None => dotenv_private_key().map_err(CliError::failed_to_read_environment_private_key)?.to_string(),
};
// Set deploy arguments.
let mut fee_args = vec![
"snarkos".to_string(),
"--private-key".to_string(),
private_key.clone(),
"--query".to_string(),
self.compiler_options.endpoint.clone(),
"--priority-fee".to_string(),
self.fee_options.priority_fee.to_string(),
"--broadcast".to_string(),
format!("{}/{}/transaction/broadcast", self.compiler_options.endpoint, self.fee_options.network)
.to_string(),
];
// Use record as payment option if it is provided.
if let Some(record) = self.fee_options.record.clone() {
fee_args.push("--record".to_string());
fee_args.push(record);
};
// Execute program.
Developer::Execute(
SnarkOSExecute::try_parse_from(
[
// The arguments for determining fee.
fee_args,
// The program ID and function name.
vec![program_name, self.name],
// The function inputs.
self.inputs,
]
.concat(),
)
.unwrap(),
)
.parse()
.map_err(CliError::failed_to_execute_deploy)?;
return Ok(());
}
// If input values are provided, then run the program with those inputs.
@ -137,7 +167,7 @@ impl Command for Execute {
arguments.push(String::from("--endpoint"));
arguments.push(self.compiler_options.endpoint.clone());
// Open the Leo build/ directory
// Open the Leo build/ directory.
let path = context.dir()?;
let build_directory = BuildDirectory::open(&path)?;
@ -145,7 +175,7 @@ impl Command for Execute {
std::env::set_current_dir(&build_directory)
.map_err(|err| PackageError::failed_to_set_cwd(build_directory.display(), err))?;
// Unset the Leo panic hook
// Unset the Leo panic hook.
let _ = std::panic::take_hook();
// Call the `execute` command.

View File

@ -122,11 +122,7 @@ pub trait Command {
/// require Build command output as their input.
#[derive(Parser, Clone, Debug, Default)]
pub struct BuildOptions {
#[clap(
long,
help = "Endpoint to retrieve on-chain dependencies from.",
default_value = "http://api.explorer.aleo.org/v1"
)]
#[clap(long, help = "Endpoint to retrieve network state from.", default_value = "http://api.explorer.aleo.org/v1")]
pub endpoint: String,
#[clap(long, help = "Does not recursively compile dependencies.")]
pub non_recursive: bool,
@ -165,3 +161,21 @@ pub struct BuildOptions {
#[clap(long, help = "Disable type checking of nested conditional branches in finalize scope.")]
pub disable_conditional_branch_type_checking: bool,
}
/// On Chain Execution Options to set preferences for keys, fees and networks.
/// Used by Execute and Deploy commands.
#[derive(Parser, Clone, Debug, Default)]
pub struct FeeOptions {
#[clap(long, help = "Priority fee in microcredits. Defaults to 0.", default_value = "0")]
pub(crate) priority_fee: String,
#[clap(long, help = "Network to broadcast to. Defaults to testnet3.", default_value = "testnet3")]
pub(crate) network: String,
#[clap(long, help = "Private key to authorize fee expenditure.")]
pub(crate) private_key: Option<String>,
#[clap(
short,
help = "Record to pay for fee privately. If one is not specified, a public fee will be taken.",
long
)]
record: Option<String>,
}

View File

@ -26,6 +26,9 @@ version = "=1.11.0"
path = "../../utils/retriever"
version = "1.11.0"
[dependencies.snarkos-cli]
workspace = true
[dependencies.snarkvm]
workspace = true

View File

@ -0,0 +1,18 @@
---
namespace: Compile
expectation: Pass
outputs:
- - compile:
- initial_symbol_table: f159adcd5ea24c580a6b8535b217667a40173809e5802a0b03db3dc5b9bec9aa
type_checked_symbol_table: 9fd0ee7288d5151305f4cd3820594bd9db7accb589bc936e186709af1df6de21
unrolled_symbol_table: 9fd0ee7288d5151305f4cd3820594bd9db7accb589bc936e186709af1df6de21
initial_ast: 21db64864f84959ad71dace62a2487285c3b6bb74818536b83a54b63a2bd8d82
unrolled_ast: 21db64864f84959ad71dace62a2487285c3b6bb74818536b83a54b63a2bd8d82
ssa_ast: d4e2a516deaa30f8663bb3cd1501c52e3cc781b330dbb149ee3bad0692a8cb59
flattened_ast: 175fbd23f91421e3d47440c8a7e00fb9e3a2bef1147e061cd8a3f2bd0c978098
destructured_ast: a23caa23b3ac10d6c2a1b119af502a9ec4380cf521eb65da2c9e2a5f19d44172
inlined_ast: a23caa23b3ac10d6c2a1b119af502a9ec4380cf521eb65da2c9e2a5f19d44172
dce_ast: a23caa23b3ac10d6c2a1b119af502a9ec4380cf521eb65da2c9e2a5f19d44172
bytecode: d9e6c28f9e5527abe9cdb07b9d35375901446415f5d645b0363597200ee45be7
errors: ""
warnings: ""

View File

@ -0,0 +1,18 @@
---
namespace: Compile
expectation: Pass
outputs:
- - compile:
- initial_symbol_table: 02b83350abcecb36109bf268cf52b9fc867ab1893c49badf31ff527156528943
type_checked_symbol_table: 1ace971bd20adb9ce07f802070f05c51733af791ef32c7b1130d4a4b2182768d
unrolled_symbol_table: 1ace971bd20adb9ce07f802070f05c51733af791ef32c7b1130d4a4b2182768d
initial_ast: 6dc0a710ab752f571f4dae9fdb172a7fa1c43e3af3858cbc8cf96c5d510a0c3a
unrolled_ast: 6dc0a710ab752f571f4dae9fdb172a7fa1c43e3af3858cbc8cf96c5d510a0c3a
ssa_ast: e09d30595377e81788433b702f76f1338ff4bb720f8564e2560e5f78ebd18bc0
flattened_ast: 16df732ae63243e249201817b30ae02b8a190072d39894648607970eb2b09192
destructured_ast: b2f615fbb0825b50c961b4014e2e2d60117b543cab0d2e1acd4f3237c878e95e
inlined_ast: d3f7291df3faf6f8a4893b91133fe183d44c35f3d9c4b9d270d71f943482f965
dce_ast: d3f7291df3faf6f8a4893b91133fe183d44c35f3d9c4b9d270d71f943482f965
bytecode: ae04a04e7ffb01dfdd0ae0249f31649302bc120ea928c5ace16bc0879140e1f9
errors: ""
warnings: ""

View File

@ -0,0 +1,195 @@
---
namespace: Execute
expectation: Pass
outputs:
- - compile:
- initial_symbol_table: 1bf49c8a2227ea1452454eac5931b6dd9e9313c0a87175db31aa8fcf221dfe6d
type_checked_symbol_table: 6b15865777d5453848ba8e2a089d31f97befb0a88b27935b2eb9ae6745723bdc
unrolled_symbol_table: 6b15865777d5453848ba8e2a089d31f97befb0a88b27935b2eb9ae6745723bdc
initial_ast: 3355314cbc25644717fb83bdbd5075649847683e4bfe58c2547e5a0169e273f3
unrolled_ast: 3355314cbc25644717fb83bdbd5075649847683e4bfe58c2547e5a0169e273f3
ssa_ast: f7673dee5dae150c895fd00cc07e24db99cb4cca42dfe2f54d311f1bd7c460c2
flattened_ast: 5ad3b910db260531c64908c42dbe56aafb11cfac3c2afbdcdb58b8d4a7d86a8f
destructured_ast: 73fc708dc67e1f01255aa8bfbaa0a040db7658e8db6360240dbff3b6005904b5
inlined_ast: 0174db986b989193bda3984dc0e13aa533fa8a465fd7b986af55f1346ac20e30
dce_ast: 0174db986b989193bda3984dc0e13aa533fa8a465fd7b986af55f1346ac20e30
bytecode: c5fbc61b3a7b1400dda65dc947a495d14f1b43986550cd889efd4cc653912355
errors: ""
warnings: ""
execute:
- execution:
transitions:
- id: au1mdg84h5sf70jd3jcz5ly6v7d2d65jthy2c9mp00ftsd7d7wasq9sywmyl4
program: metadata.aleo
function: is_block_height
inputs:
- type: private
id: 6254483773873152836214079053344956162296914127394184523955489854019104782235field
value: ciphertext1qyqg8xn2lx3ukujrthuh67jazc3h5v96hhc7zacwef08y7a9lpu92pq3dsj78
outputs:
- type: future
id: 3584812567307540139221803946418691936915110293757497103263084678323624798088field
value: "{\n program_id: metadata.aleo,\n function_name: is_block_height,\n arguments: [\n 2u32\n ]\n}"
tpk: 4174266389141840694112770464623549736508472115786023137592436699114609405528group
tcm: 8338099097402671626408038034858578087638496090147697571937791628404909729345field
scm: 1980270338266624580494901677581519840423416572710948745278059423752506827747field
global_state_root: sr1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq6gk0xu
proof: proof1qyqsqqqqqqqqqqqpqqqqqqqqqqqwnt9kc7w5mlsy92749ly00s3d8aje529f6qrun8ra8utk7dse49ezfwj8erxuclwetdthkz20z9uqqylhezq3dmrqm3cm4tawnuznt5gc2fv8psgvswzavf79my3t8ahzhj9x5epa9k6s9vznyh8mp4qsnqg8n8aza9sfw3kryelnz8k0p7sx375kzu754wlhy3k5rdq3vz0gnxs0dh0pcz5nchj72ug77suxnxqe20ln5arx2lrvykq6ela5tfzajjew2jmr2e2nfjzafrt3alsplf2llm62deuq02xa4406r5heqhvpp30p46fjt7u7xc3mhv6j65l5cdnmuxzu9d9ngewapqs3d4ad9jpq42ltsmdt9gtv8utv9hqywe4gp9jw4dsapm4nlmeu02hhn6tj44065j5k6l3lrjksmhfletr6kvu92usrlgqdwvhnv87g36afl7hcsrwepsc8nlepqngw2q4r3kpyq20avfgrnft528axwr7e9jjr66dmt63ylatjvh65rc69uqz3nkvemqtqlzescl08dx3xjy36a5u7x89vh5vjkvkpfz5edep3av8f2p37f7d9vjnq3zfrn3p85zx7gjyqg7qyqrqh5hg70a7klgy5eq0vrth7pz7e7g8t57pkju5k9z6xwexvg4uz2svry0mk7latuz3z6ynyc9cprfmcjkjwmezs4vl7w3kk4hlhumkzm2v3jvzqahx2m9e86p557c8pjtudkgd499geem5jf5u9qxuz5mcpdvegqm43x4dn6uyrdzjmzz6mgcadv0y0gced4dh20t757kgms6u45ma5kezmc6ghf9n538arp076gjrkp9y7lggntqr2v8aqvpuyw7szd0f9d8hrlsyff6re23xpp288aeadrh8lwqdjkpgwhdv95vn8araf5t8tgrtm22w8r7turzcqtyllzl8s9cfeczzst6ec4narg7da76fcq5neycd6slgx68g63yyv6g63ae9m7ztepxvxw4852aadryfy49zemrzhqquypkaehrf66qwwjhf3gwnm5aamtv79v4zeps0xf5urc5cw8xlaltapg0pm54kjplc3udlz587zkd82qzj7vlzljeup57t4hggmafzf303yx8l3ypvq25cvm4jfympct84an2f7q53pqymcgzgxwln29ga909uhv2c6nss0qvqqqqqqqqqqq4ydt9dssx08jcecc7lpc8x4npzm45nzx4gjeepzltl42xqtu6ljaegs3vmkyp9gmcxejarwucjysyq9gjdqfq9ugcxqc2dlwxzhgw6ltxctn0gva6m6hz9a5lm8la0fm2nctmj3kksdal53ktu3wffgmfypq9sp749hfxy8wvdnsagqs4w3hxr83qkpdacm92er3htljzqz4yzss8valjgymcql5xm5uqxwuar3549jrkl577ww5mxvxarkcs97jpulpht09q6w4axjxj254ezzahy4sqqq7sy9wf
verified: true
status: accepted
errors: ""
warnings: ""
- execution:
transitions:
- id: au1kajlhp3am5km6qs3w8turpajy92jll8h5du8xahl38lrju42ryqscpf7qs
program: metadata.aleo
function: is_block_height
inputs:
- type: private
id: 7722322839839951421026301806812591976215758329272280293651204384239373811149field
value: ciphertext1qyqf8p8usl6w5w7nmsquncjs36gjxeaxpkkuvl4h6jfqntenutrykrgr87gjt
outputs:
- type: future
id: 3909450722149817926760252005945160002086204331713328859672090569802582231538field
value: "{\n program_id: metadata.aleo,\n function_name: is_block_height,\n arguments: [\n 3u32\n ]\n}"
tpk: 6826075503536703408877015806866676888464978285285642759889480649615825407885group
tcm: 2184261592989300536746165496548115475812152687244578178115561569274734999038field
scm: 407281751932047584685189018244827210538163428192377398266270897182443379767field
global_state_root: sr1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq6gk0xu
proof: proof1qyqsqqqqqqqqqqqpqqqqqqqqqqqx7vnw2caxnpn2mxquhz760v6g2ncehepcdlg7y8hsdp9f8thtz6e7xs4yfddcy7w8969xlhufx7spq9na6qs3klshmquwdhuja5z67tvxswtmytsceyqtsd3vqk227suywajtjjef694w8c6df4my4mjjqqrwvyaz8vxtqekmn2uvdw59l6eqfa95s45fnfkgllz73xv4armyrweal4g6ctfqphecew3g5evzauqy0epstlxvstdukgynsr9c80202ywk22aztjncctlljzv6dp9k4kjjafsswjnhp0x3pw38md5dr9vqkucck0925lwlf930jd0963d368wuh43qtwvstzu45lnpx7ltsq42dr42nteu7le72xyhtfyryt3sqlpnn2n5gz9ke4extnay75kytrq6e0qfysllv9qpd5grq9pq2wppdxs438g6zjysmj4zkwp58wmrsqn3de3ge33m9yduj5cu3j8qazthdkfy7uqppxpym43wnsk2536q6fer0tghyutavchmmatm94jfaqvqvcr06hcy70zcfz0kgjvxs6rt9ncs4c887uhgnwxdmvxspz2vyzvnxzxn5jn3e3medrutlwfpyzq2a2qxs2f0e020auqsp7gujuzk8cl56rvqqytq56pxyec90nwqkk3vfhafuz4wlqx583fuwsxyh75qfl8q4cchgedng7gd8ju6u8a9s8xstd2gjznxc5rcaeule3qeeyr05rtyj8zhxwvgh08r2wfnkpjerwpl33lj7mvehm2vjhqf7akaqrse392u0v9hfrrp9954hwzhqe35e7z44exkexr5zlth7wf7a5nkqdqcq5e4q5a2u8894j0fnfjrk80g864fgrv3ttu4zleplw89575qzp8s8jkflf7ncjqzy806tef5sxavkfdrl385tza80cjegd6609gjdrf9mjyhvj5hxm2rhgsslsavmpxtt0f34q32nk9lln3t7ljmayrltqz8etsxfzsslyre8usx2emndkxtxpdpfrms0y5x9fsf69kg5zyu54r2vezw949pyzdyfzaqh8v2t0rpxltgd2unttd80k26kacdqc6zvf36pqztqx9w3df2964uq976ar9jfyjrdke0e73mzfvwezuqvvul6v0nk9cpln9nxdxadvpdre4ct9cdm2wqvytzm5ny3xv2hdcrqvqqqqqqqqqqpejt6mlphm76wza29mm0pys6uxwf82mqcatm3yu9zkraqujm0yymgpxcuttq3f8680jrdznavlfvqqqwj9g9hx3qyfevvu3y3xjmn6vtpek0sfwyaqdjre4lgu833k40aeqq07xrecaj6a2whft3rc97y3qpqy25r7zgfr0kq2jmk73vxsumypw09rg4qqdaxftyfn3hlpm6fuasmtkmtfq87ewhy0ggvjvgq6fjjeszsmchmuqqy7rz3w9rnjeepzj5w96wk9g2ffpktzwcvgn6pqgvqyqqxp7l8u
verified: true
status: accepted
errors: ""
warnings: ""
- execution:
transitions:
- id: au1f247mhakw2ac486n8shjpe9cczyevyyy6yfahku5rfehjh99uv9sh642wk
program: metadata.aleo
function: is_block_height
inputs:
- type: private
id: 3045860458496390867694070088198301599250184717892350776505560963236032378259field
value: ciphertext1qyqrkdwe5qpgp7vqqv5tvnt7nvumr5w553pq5lwjntjeuavh3re7cqqyqfw39
outputs:
- type: future
id: 3385728006652327570493585525511743343760587719990357436071125793263092737280field
value: "{\n program_id: metadata.aleo,\n function_name: is_block_height,\n arguments: [\n 4u32\n ]\n}"
tpk: 5961719084867262658611365638360766420582791439974047595680459060088949753734group
tcm: 6626624319880809262391967868024871859050942736550513386256577389697770634318field
scm: 1709184858721614245415770013947709782814544370016004415745981136924726103130field
global_state_root: sr1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq6gk0xu
proof: proof1qyqsqqqqqqqqqqqpqqqqqqqqqqqqevkrn0qlq2nquvu6xc43jqgdpl8rfpk4hnzugwch6qraag292tzkar3vlp0q5wl088t25txgrdqqq880k0f7kg9mhl9f3nqerjwsv28v57anx2qcvxqsndd0wuhldwwh5cj0cj2rm24vk40u5le0gkz8qqqc3339959e6xz768zwvu9mcp4ruv8mhd3twdxzyqur768fwmngazy33dqadrc2un9v3z206fmtf2qj6jd6txax9pe75jasd0xf49u32r9ran9n2q7lyachszqnm2uf6dvyrwgvg4xshtv2jjsnv4v6cqvp2u0k8hwv4n5df6rhz9p6ehjfkuggfvthfuukr2ex95wfyf4gasfky576q284q9jgl7naf3253t2qpnwfj0jeme7xhegaw9r3lywgpa5fp9qsx9m96n5865l90v9sumwquk9t6stse5dw845rtknud0skq89qgza5mkn0fdgzhrprrxjz0f62vstvq25kfy2e7lgzs9pk2ujkkathgv024g7vezmzvczggmwc0qdjpg4ddmzwx2k5fe353lhmcjpupfuazj6w80hj37pt64wjswz0f8cug8n8rfux76xtc5lkxw4cjjqazwsrafxyfp7pxjj42l4rn6uauujkx8qk79y0dp4830j9893kz8thz250jsag662869k83g8p06uqx9f5tlpfcwg8pat5y98dqvmm4lqu3htzhxd0y0gzzk902nc49vqyyl669c37zp7umpquj08vu7z0sesrv0cwmy3c7fytp23zh47pcrl4nsn6kxv9qe92hujj3vz8k548zdkkk4d8z5k5p0qtp69p4mq2zg2qeq52j6a6l9nu2qnmj78zhk85k7r6nl9lgearrqv9y9nvf96qcj3lsq7er983rvlsw2ykjclhj6dsxc3dg8j3k0vs584rjn9986cdd7t6rr4jalzfrfwf8r8v9leq3ct4m49v8tj9qed0ay9jq5kklqz9nxa9uchyl7zxq0d05cqk7m0p9mcqzpgk24wrfy7ucx34n3wuyp4y7qz2hgt823d2p6mdvu3jkz5wu7auds884d3drsgdell4z3kgqn5hy7y7q38zwxznha2w3qezkhtxutkv8pgg3my353xgenpa4ttqqtk3af9qn6dwvcdv2vnylchnxk7mzumcys26a0lqelrm9lc3ztsfqvqqqqqqqqqqqjhnc7wfnqwkzul45rtxd04y9md9j8qfger8d3juve9syvk23tz40eahw3k3kp7nz49ex0hts9q6syqrq22xng0ecwpycpvp6zqf90l7asfnrqzyznskqsqftgrc36cnx0cxxkwkekp8kkmvtd8hnzv8qmgqqyp3rea3knhscdjh39yardx2u2e5lz508jh8trugnqfqc4ct5mlswf4j7uu7tkgsl6tkd0jttd4zqnp3xdwlx2t9r6m8mgvqsdz7c4gkxkwkjnt2s7jyul2mzglsktvxqqqq8jtpwc
verified: true
status: accepted
errors: ""
warnings: ""
- execution:
transitions:
- id: au14wkt0uwdeqr3rtyanm34w05erz09e5pz3vefsras92gw7mg9ruyq2cjhs0
program: metadata.aleo
function: is_block_height
inputs:
- type: private
id: 995875758905348650887838336071398965006340013590388127329542388661760814042field
value: ciphertext1qyqy0udrzx2za49wpc2p3cdu5gnx7wrgxgdazmkxev7w52kk50m4crqjmwyfr
outputs:
- type: future
id: 7062753008479587970728813912297002098956298483699113034949808175760398051196field
value: "{\n program_id: metadata.aleo,\n function_name: is_block_height,\n arguments: [\n 0u32\n ]\n}"
tpk: 1444729407522809558323470265213923228766243452572825861150604562994526846724group
tcm: 6605683873534110561518205917497290187071187934421726209194585939237041100572field
scm: 6386290422692476953856701959340582555742652888613812253698770682334976467968field
global_state_root: sr1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq6gk0xu
proof: proof1qyqsqqqqqqqqqqqpqqqqqqqqqqq97zr4fk2uw9lljltrjq8xdrxgzrwx365yywak3key90jepew79znyxpupzmqwjm8pwesa42knzd5pq8vawxkgvfuqnppmz6zjmjfjjtyvlqjl3uks5x3fprdmc8vzy6ueea4ndqkxv22fq5p9flh590zvvqzkys72k46wn8hn089nlpu5a9qxypm6m4m5a98p07vq38ye6n7vvce8sqcu935z9k6kk8ljm95v32qkfflma302wclmclz07y5r4skts6vlqcsxjwd2cxygyrn77y29w04283av6266s228vhv0hz6gm05qzrcf0ravlp382uegjg8z85fypgykgqst9dsde435nv3jx82xsg3608nxjl299vvuu4xdlmk6jyrqrf83tvpx9w3ezfunw4umtudmrugz5ms2d42a055jl2fv5v75q3p5lsdvvlhe66c38su7w2k82jeas94e3sgjsrsyh42ac75pksrhcqnya6hqh9l3cv28ggrty88mwhgrphc7s5ugnpnzuvztnprcv45cfqrs8l2798l30pej8d4xkme2hxmdyjrkch47al54xyawdps5ql07ghj38wrsazgyaek2dckhgev7xvqxhc6ulvdrzvps7jues4sh70eamp7stt3ugk5tmtvpd4f3l5py4r2f773938gsxgd200ux8r8k9kgqxeectjylau580wghtwkyq8usgyjwpmvummmqws04cgjt5zec0v8kzycn6xk3w0qxxshak8saly0287ttklsmcjzj9kqsec03fjswvrk2jkqtfwwej48z7apv29jmkt2rvjas9y4unhzcpv9z9ns2fgqfpj3jp3yqasm4srywrjs5jzcskvez6vxkh7ndaey6p4gdvwdvkptprh03rg5kscuhawl4v74axkq8fc50f5tfd92dprt6l6td2p5h6fs8jwcsjgjvucrtwgw6ejhup3jd7j5rq6xqtavzh0mv0zg36tmh0u95435c4cux7t007yz3jeeugv4nzvrsmp7u8wj07wjtzcp6h44jkp4wxcrp9zgvy3jnz75pj9tzzqqvckttk2ggpngle9xrv6ufswalq9t7xp4ykwvq0qe4wrfvefvqfqnmwen4m92f07r8vtzc5ahgamnsxxzz3l7yz0er7smk6eqae22ve8m8vkt34g0wwywr4qtggnh5j2cvqvqqqqqqqqqqpj9lr2ngqgqxl9r6ga9wscx2a20szgfdta4ssq2namc6e06nguc4h9shcusug9r4jr408npszjuksyqwdd2d53vjrv4ajjkmyeu8kvd9dav08ulzcfdlclyjupau83udcga8xdg43djuqkfyvljf56wghngqqxzam6r7zh3klkp0jdda60zx9hkzeepzsetvzezhdk7qtcpncl2qt6el68lz56q22qzvlfrx83yj92hqukc9hnxhwpa734jk0adaed4pxe8l737hzh8t9f2r6d4d4x0fsqqqfe3ct3
verified: true
status: rejected
errors: ""
warnings: ""
- execution:
transitions:
- id: au1a2leejxweztp26wle5ppu4d38g7cy834qyjg68nde5sztyvkwy9sn3s0zp
program: metadata.aleo
function: is_network_id
inputs:
- type: private
id: 1668253572722249004754550111746806543734709237973262206564980341309666489114field
value: ciphertext1qyqrya4v7lv7j5gpldaneyaj3hpl79n9nawlt085kunwlqm2s2a2kqsg9c3l3
outputs:
- type: future
id: 1539677279749963537807733780953347200083489102040081905411697663081843666141field
value: "{\n program_id: metadata.aleo,\n function_name: is_network_id,\n arguments: [\n 0u16\n ]\n}"
tpk: 1340232995313789889707870100633828614952994697713322419253213356280424596637group
tcm: 8217955983468310915175130532526952797051163869431616512626964240444177287740field
scm: 5286852775688099827771180960665525889691546224120923411174520720536024854359field
global_state_root: sr1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq6gk0xu
proof: proof1qyqsqqqqqqqqqqqpqqqqqqqqqqq09e76wddnurkycfduqt5jj7hafhxxdsl8k3dsgz5s99859gwg0tkvxg56hdy0puu48hxvkfzgxagqqyxwv9q32sm0hdewcfr5qvdfawq7cdld64haa8k4mh4nhl3wv99g9jrnar265pw0zvmza2sj4dzedq8dzke0lexr5xaypug5dg9qt2ptc9s63dcfl42vq33ncwjaeudetyfwxdvpyq6fwv3lchath3lgd5qunj6zpxtmf6jpjt5yzl9l606eycun3madcsah50zamp94a6ykvnyt4pavlwtazkyp75u72pzy2tsqk2wxv2cwa8rxjpsvnts5dsl2a93l9ejmxxmvqgsdmm92h44hyaqw2uw9xh9c7qcf98pvp2tqck3cpdrmd3puahfpn4vv4e4hpnnj5yzv2wg4jes9cpttx3gpatme3tzdttp0mdjsqtye2tz3lkmcwhufs9ffg7nne7wnh8e2tr5gujevpr0g4gyxp4jejt89k0rry0ah9p3suu0guekf8q2zrjhz99hr6j946qrqyh4w4xe97p0ac0635q6q5m6xutdz3t53harjr5tukqgvt9r0n36y0ek2eg0cfq4sdzm8q4452vqxkmmc23v8x47jxn7ky2hx0gdsnrqc9pwuhap8rtr0dqjskwl2nata0we62lkue6z84akr9v8d8svqjusjyxcevyte989pafx23m0jt2hg94pl28k4uj4fnwnqgq4j4580a99ndkyrhym3kh3uwdufymy8879kxfqtm43v84jlnaqm6qhk6q7p4frl3t22zgrt6sfkf5hlvcypljdhfxczx5h9vggk0pwxjgatpdc4f5yav85sxwy9fyfjq0z77zkxzruhetyk80d3v72efr3ycscqsvzfy4p0mh64wz2mhtzcj9wr83tevaag5t0975zs0hfupxnqylqflpgdg6cfu6ylxhp7w4xvwwnwac24n2cfnvk5pnsmyeut8n4fwq9cj36wsu7faag77epqcw6dkzsvc0cv9lvkj5xnc0u53v3kjsm65pjd557l0pyudch4646fkz45vsqy8xz7dcg86aqdgcv6q3mv6etpzrs0dxtcnz7uapehary54unwk8p9f57pz2ywvx8wjf7qs2rjtpzsca98hjwu9uuyhyw45zzy59vn7xn385ml7q2k9yuw27kqpeznm7q9qvqqqqqqqqqqpucfrq24alwu3lv7k8srg7ht00vus65afdl4dqxeqgsw45epn2tnjv7slu828djrs0hzfhge4xpkqqq275wp5guxrxjc7rpfu8mkk9wz0k7qsy7fz2nglfkjv83u6clxq73v5z6782er0zvd2ektcj844fgqq9tg36fyg8ypra2xq9an4gafntkq048le295xwaksepvlhgahypqtdrtu0mxrxhpmmvlzuy5d477k3ddncn42yk64wyl66nxd3ps8vv5teylrzsrf7gkgfx8h957g4m7syqqhlhwmj
verified: true
status: accepted
errors: ""
warnings: ""
- execution:
transitions:
- id: au1p6dnfh03zklzzs9geuav7wv7setuzqdutchu5y3v2mextejcquzqkqwrsm
program: metadata.aleo
function: is_network_id
inputs:
- type: private
id: 2502240154805122913754950482164060205713010124319839564435072682062878840162field
value: ciphertext1qyqxt75s26szy43jyfepy39w4d73djcs3m5zy32d3x97pzq4tz6yvrc6krhwf
outputs:
- type: future
id: 3510883460457420092377029532012709622763897279943796296090819877739355135729field
value: "{\n program_id: metadata.aleo,\n function_name: is_network_id,\n arguments: [\n 1u16\n ]\n}"
tpk: 1241422812750809040633541710935659167182171861372164882434451533657783900235group
tcm: 5101387774266692927046996997659568586960496233365914098412457384845133261795field
scm: 2058887597321544003446839824871525583138282285522439768552503536778673854175field
global_state_root: sr1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq6gk0xu
proof: proof1qyqsqqqqqqqqqqqpqqqqqqqqqqqw2mpt4vp2kdrt6z0lryx0e32t9ngsldqzumnu08u7wak3csj55e7qnnfa4sv5wh2a2w9g6x0xttgqq9wlv87swn8kyk4durjwzdxlmtuj8tdu5nvmvxm26ddv6f3v77dqxhkqma5pa2z993zl5k4m4mlgaqvaadfpuceedmfclvru99al2wma6dtqrq8hll8x2fepflwght6h3a893exxs2kcvuqd9yv7exxpf2qlu90ssgywlpl3yaqdqj92a2n7dhwmt6mugs2vvc0g82x4lvv53yfcpnjpu6h6096hxvcwx6uenlcqnccvpkjlphettnkp4kl0m2zhnwsd29d2vv9lmrs7q3xwph4auz5ndxm4u7jk24kcum7f36lykrhsp7d0ezu2550s5spm4ngxq0alhyea9rj02apntqszclhq2mdnddm8pjg7mdzxfd90ypswy82tz456qx8esjhvf7mczznfagsdhmm4w3ks3jv86qunvdp2evtsn7zzfw54jxsnv7h40jvqlqdt2y6cg4gemq0ack7zd4cswrg825s6ekuh03pj0nnue0zexfkd5q6mrqfwwgc6vsv6z0dqwcm0k7p23fp92sekwvq60xcf6f4ukhazzpq65kxj2ydk790td9ea03xpdu287gxmax376ranc08vmy6sm2g5m9x5j45y59vpm7u0y0gxnnhw75mzq5cwqq3uyg5ah3j9ma6f7gxl9nc0rmnxwcqey0uz5hcksuj0vye0hua3yylnpf452syphap27d988a3f2r2gkqqs69pj7vp4pf364v4rjn54f3hu9lyg2e895ka28m7fp6cm0zmeq86svehealsspweg6vtl9dvr4d6cpp0fvfr3pllx4hrfdnr7jh5sfdy6rwemk9y990nfn5uu9mlyvlzs3thd8aywmwzpezkzdnvkx3gxt5m0940ffg3wfsll2akg2dxv90ct335nk47ucvenmlmzudq77ypq82f3yr9x92tmt5mfh5xpg55c099ujm0ycqtz3r8q58ynakdnkyvxgf8s43ce54qr955q44n2rsvnlhd7cs3r728agmxc0sencdldpyx36hypekceg8p0qwhh2yjcfyd5e92v50lgh46lpna7gemkhwsqpsga7dyuaxduf4ze57dqk582clp88m8sud60mz8wckck6uqj56cwqvqqqqqqqqqqpmqg85894svzenmckslpej8fe0q8taszeh37cvs6fswnguypddfew4wuwdfz7hucesl4czp7ckfzsyq88kaun7e2r9hff74tmj84jjaxv385s57nw2hddeekanq653k6xu37w93y50mqhn02y0eaq5sc9qspq8mjtdrx7cskcwpwvulfw96yhds3smrgjh3qz0w0h0xk5qead6xqequ37nnunjglfpwauyg52xy0f7a85sc970mwg53aa7a0r3uhkh4ts672peqc07ykj52h86zn9dmesyqqfd8ktz
verified: true
status: rejected
errors: ""
warnings: ""
- execution:
transitions:
- id: au1jll9jpzf2280nvn3kzt8y6637n5ez8pa0fyg0v8qpz4dn42sdsgszgyfd8
program: metadata.aleo
function: is_network_id
inputs:
- type: private
id: 3818594322984197536201841623343353965535635040024778735947422566750518631238field
value: ciphertext1qyqdhlds6hmnj75076e8rp439d2w0kkhlehqwpxyna4ermue25k77pc7vd0t8
outputs:
- type: future
id: 7537178816451179749955293921141073144829691758346850600262417117569051950256field
value: "{\n program_id: metadata.aleo,\n function_name: is_network_id,\n arguments: [\n 2u16\n ]\n}"
tpk: 3020628155079738676029341956864028183556220726126818119892843813515945814634group
tcm: 5092678026348501787479712092206654928057371516556014317181185415850075250455field
scm: 6698525472848186851972463463758579475375335023496196068921682192475550867475field
global_state_root: sr1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq6gk0xu
proof: proof1qyqsqqqqqqqqqqqpqqqqqqqqqqqdw66a0r389tve06r3hfuadzhcerz9maumqm53zyyvly9vh8n89l76syecwfvft3jpzepnj9znn0gqq9rjtyudv2826svlgz7wg2q98z80jg6utafa8a826munh5k772hdtmq57e7p5gc57n8q6m0j5ghy7qrmpr2sqhgfydnxw3esncpryz6d4l68y6kjdjr887gmma28s4253wllq796avhhthnv962h2jejtyqderr37zt3pkzexdmxhnjtpgeymn86s0mr87jfn0jfr3dxepc8yr8l27tws4dl65aema34mnxdrzspx3adzxl6vzffaceuhe574u9aptx86e9xkkay2qdg46vf7qykwehaqfkx7ync5dw0rg3gp53fxu7sqgdf8ntq2lehfj0w890n7hmqtda79xjhw5mgrqx6p82ff9f8v6xwrthu0rsgycxzz9nkzwuseez0sqmjqkenlm93cmqnnzp388kkh5rne27prhj2zmshe2xmtn3mvz7c4mu2x5yp9z3k7ksmtvj2ekcfzqfs5jy6z4pvk7p9h6q0lx59ry3m3dfv0hwvfdw6r5g37n8aau687f9ex4tv3787v92zatsl3sg8nqq7y6ullw7eg45ygg6cx3cc7unqp3jdgswp7yepjr3r8nhdgxskuvv8ewkcng0aq98aqf40z0w93fsqzh343luxdrlwd3ugz0xpyf26m4yx38h60pvrawp6gst0zuvkzcq2dscf42dg3t5qxuskvjncd6e6uzlt2nfu06s6tyhq8c2yr578kqmmqpnfj3kt6q5rhctdpgf0h32fwckzhv3y45fxw38p4envheptq2elwgjewcgjevcr8svwtd6zrmzemjrwl8g7l64a39yz6e22kn3sjqa7wfk4md4jeh0fp5wyyl5n0537qttvuzpaqqc07dtw00cj0kq32xxcuxwagrhq054kd9q0kfn4atgw05cn750yg0y5mdtlfk2ufgqw9epe4a877mm3wnezctnxvzwz00vsjlrktlevefyqxuyzl7hw2pzvh8nxc727haul228ll2h379trd6778lpfl28q0dfv8r3dudt4qmpdnse7vtc9cre96k8vkp2wk6mkzgsp2paruf0sfzxn3tn3gqrsxu3q5e6ttfa3z36t7xz76fq4v79d0t78euu775eyn20sd7mwzyc8qvqqqqqqqqqqqp6q072lqns9g6fve53lfc7tqvmly2wp7rvzyefvsy9zn9t2f8espt3ucaud8d88w454ht2vfrg0qqqylkclqswxj0wn830heygjy3qdl5qvjycddttke3gh9y2wlvvsv0trngx8wmmh6fjzac7dgusa5vgqqxgdada0y88jjhzgh5wr3prhqr72jrwd7t8ll5f7ne765m65y6nq3ufguxmap9javwg33yfl7vdhfcx0y295rfjm90tujr2klhysh5lh63069er00h3t8wksdnpq0ze5qqqqqc3q64
verified: true
status: rejected
errors: ""
warnings: ""
- execution:
transitions:
- id: au1v7d5emm5qv92eulwzug07zef3jtulz0wtx327sgneuxwwq2n3ygqff5xtv
program: metadata.aleo
function: is_network_id
inputs:
- type: private
id: 427388127841120656445243905080318759102213861603935015273048542880171276770field
value: ciphertext1qyqvszj42vuw5mrh26jse5x6x9nr4shv4t7spvjy93586dyksftaczsj2mmc5
outputs:
- type: future
id: 2214372592663363501000356836064875093257329610279266518247128855554701148078field
value: "{\n program_id: metadata.aleo,\n function_name: is_network_id,\n arguments: [\n 3u16\n ]\n}"
tpk: 5166995774473884857353890834507697003252798886819763885458919875879302699010group
tcm: 2857269466509252429260393571916264430248634027864154552164266119325455448664field
scm: 5015898762287590171698086886227097532893513313055100890056714442595417776693field
global_state_root: sr1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq6gk0xu
proof: proof1qyqsqqqqqqqqqqqpqqqqqqqqqqqxjnzalspm3ge54g3u64k46ajew68hfgjrvw4rwpq5uv8yvlzn092gzfpw9d4zww8cq85uteu2cpsqqy8qrgcldyw90hrcgefx0hf5wzrrl0z4e3la75xlmrvykh9nxzqu7jpwv3p5mqwjegz0mhphx4eynqxpl02fsw9ttvfnrdgeylj8tnezkpj62wyks49q0dmzkxld8l2h8x6ycxx4cd0aedlhgj7t2pa6g5qwldagqet4gdrtm4jrj8alfutly5kklcs8c57dnc3n8v0p5e942maln69mv9qzyh5cypkkpvhw3zvqmp6u7qvehd6m5hqa6kzynyvr03x597ydckuex89plhtcj60fxypkdcegpgsd4kh5pknhvyjtqpusqv5z9jx20yaae740gnjhwad78ujmsjz3qrt2mf82kg4qh8s57pzff20ekcv5qy7vlmq4qt40el8aqqtgkjvlcdwhzhs8md3d8wz5jw2w0fkmdwa2qu5rz6penct0hfjucyq4626hlvhtrhpfsg53lc483qr09t69t5gk2t3k46z3dzsul85vkc77fturpr3rjd9lwlg5dr8h7m808uucvm9xvhkfugdd3vpul7q9eeug3cqz3g39y445vvrssn3nrdsl6xm6t660wxe368ne60nwsf93z6ydynjjkz0qr56d36xq5pgqz895z3aep3u06exfc3m2d24yewfmvzzcnlf8mcekge0q3fd49qq4czy6drge0fggv58hcyhdk8l2c77sxk4qt9k2klfukepnrjg76zttljvan85k87e2utgn6t7p20y6zs8r6x3v85p72q954agcdhuxp8cpgyt3ahunyluulat3qxeggcsjy87mda4uzf3ffs8n4w5usszq6mjf4qpsgjf5g8cum9vv4zl5pz8jwzzqpqczgdh9fwnvrtnlnhgv65xpekee7djetwtcevxxmm97pgtjtk0yuesjnr2swg4890k6rgptu20jkc0wuw8a3kfvl9anlngf3krmctjlwyw5k93aq9amum3rczet800tch2ngx0ay29hdrnkfdpa6hj0xegx35fa4np69ug800j2qp6t87r59zmfhnst7qdsf0ej46dcupnt7jcfazjyvxwnwype6p7qrs0p0fj38zkamm5y4fl8uvejl2pmh6nqjnkqf72vlepx3uans8s9qvqqqqqqqqqqp28js6ex4tk2ds9txma659n6rexsj7acgh6k8z95jgc6r3lc839ufjmf6ftk8h6p6xddnuf5h5r3syq9az5k7yml7wvuu2ukrmgwfz4qym075nz2pdqn3wwl4ukyhyuk7qy3e2su75wyfg26t7vwxtuzwtgqq86crh5xvpt730q448vpc9fwjwmauzu80fx44nmrrq992pjh479q8xmdral0gm45xdfej7sh65eqtuen2pvdnqwxhvxzurcuq5jznlt5fx06v43a0tp2wwlek3xycmdlqqqq2kj9ar
verified: true
status: rejected
errors: ""
warnings: ""

View File

@ -9,3 +9,24 @@ outputs:
lo: 0
hi: 63
- 0
- Literal:
Address:
- hello.aleo
- span:
lo: 0
hi: 5
- 1
- Literal:
Address:
- fooooo.aleo
- span:
lo: 0
hi: 6
- 1
- Literal:
Address:
- bar.aleo
- span:
lo: 0
hi: 3
- 1

View File

@ -0,0 +1,110 @@
---
namespace: Parse
expectation: Pass
outputs:
- imports: {}
stubs: {}
program_scopes:
test:
program_id: "{\"name\":\"test\",\"network\":\"\\\"{\\\\\\\"id\\\\\\\":\\\\\\\"1\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"aleo\\\\\\\",\\\\\\\"span\\\\\\\":\\\\\\\"{\\\\\\\\\\\\\\\"lo\\\\\\\\\\\\\\\":0,\\\\\\\\\\\\\\\"hi\\\\\\\\\\\\\\\":0}\\\\\\\"}\\\"\"}"
consts: []
structs: []
mappings:
- - Yo
- identifier: "{\"id\":\"2\",\"name\":\"Yo\",\"span\":\"{\\\"lo\\\":34,\\\"hi\\\":36}\"}"
key_type: Address
value_type:
Integer: U32
span:
lo: 26
hi: 53
id: 3
functions:
- - main
- annotations: []
variant: Transition
identifier: "{\"id\":\"4\",\"name\":\"main\",\"span\":\"{\\\"lo\\\":70,\\\"hi\\\":74}\"}"
input:
- Internal:
identifier: "{\"id\":\"5\",\"name\":\"a\",\"span\":\"{\\\"lo\\\":75,\\\"hi\\\":76}\"}"
mode: None
type_: Address
span:
lo: 75
hi: 76
id: 6
output: []
output_type: Unit
block:
statements:
- Assert:
variant:
AssertEq:
- Identifier: "{\"id\":\"7\",\"name\":\"a\",\"span\":\"{\\\"lo\\\":107,\\\"hi\\\":108}\"}"
- Access:
Member:
inner:
Identifier: "{\"id\":\"8\",\"name\":\"self\",\"span\":\"{\\\"lo\\\":110,\\\"hi\\\":114}\"}"
name: "{\"id\":\"9\",\"name\":\"caller\",\"span\":\"{\\\"lo\\\":115,\\\"hi\\\":121}\"}"
span:
lo: 110
hi: 121
id: 10
span:
lo: 97
hi: 106
id: 11
- Assert:
variant:
AssertEq:
- Identifier: "{\"id\":\"12\",\"name\":\"a\",\"span\":\"{\\\"lo\\\":142,\\\"hi\\\":143}\"}"
- Literal:
Address:
- test.aleo
- span:
lo: 145
hi: 157
- 14
span:
lo: 132
hi: 141
id: 15
- Assert:
variant:
AssertEq:
- Identifier: "{\"id\":\"16\",\"name\":\"a\",\"span\":\"{\\\"lo\\\":178,\\\"hi\\\":179}\"}"
- Literal:
Address:
- hello
- span:
lo: 181
hi: 186
- 18
span:
lo: 168
hi: 177
id: 19
- Return:
expression:
Literal:
Address:
- foo
- span:
lo: 209
hi: 212
- 21
span:
lo: 202
hi: 218
id: 22
span:
lo: 87
hi: 224
id: 23
span:
lo: 59
hi: 224
id: 24
span:
lo: 2
hi: 226

View File

@ -0,0 +1,72 @@
---
namespace: Parse
expectation: Pass
outputs:
- imports: {}
stubs: {}
program_scopes:
test:
program_id: "{\"name\":\"test\",\"network\":\"\\\"{\\\\\\\"id\\\\\\\":\\\\\\\"1\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"aleo\\\\\\\",\\\\\\\"span\\\\\\\":\\\\\\\"{\\\\\\\\\\\\\\\"lo\\\\\\\\\\\\\\\":0,\\\\\\\\\\\\\\\"hi\\\\\\\\\\\\\\\":0}\\\\\\\"}\\\"\"}"
consts: []
structs: []
mappings: []
functions:
- - main
- annotations: []
variant: Function
identifier: "{\"id\":\"2\",\"name\":\"main\",\"span\":\"{\\\"lo\\\":34,\\\"hi\\\":38}\"}"
input:
- Internal:
identifier: "{\"id\":\"3\",\"name\":\"a\",\"span\":\"{\\\"lo\\\":39,\\\"hi\\\":40}\"}"
mode: None
type_: Address
span:
lo: 39
hi: 40
id: 4
output: []
output_type: Unit
block:
statements:
- Assert:
variant:
AssertEq:
- Access:
Member:
inner:
Identifier: "{\"id\":\"5\",\"name\":\"network\",\"span\":\"{\\\"lo\\\":71,\\\"hi\\\":78}\"}"
name: "{\"id\":\"6\",\"name\":\"id\",\"span\":\"{\\\"lo\\\":79,\\\"hi\\\":81}\"}"
span:
lo: 71
hi: 81
id: 7
- Literal:
Integer:
- U32
- "1"
- span:
lo: 83
hi: 87
- 8
span:
lo: 61
hi: 70
id: 9
- Return:
expression:
Identifier: "{\"id\":\"10\",\"name\":\"a\",\"span\":\"{\\\"lo\\\":105,\\\"hi\\\":106}\"}"
span:
lo: 98
hi: 107
id: 11
span:
lo: 51
hi: 113
id: 12
span:
lo: 25
hi: 113
id: 13
span:
lo: 1
hi: 115

View File

@ -0,0 +1,110 @@
---
namespace: Parse
expectation: Pass
outputs:
- imports: {}
stubs: {}
program_scopes:
test:
program_id: "{\"name\":\"test\",\"network\":\"\\\"{\\\\\\\"id\\\\\\\":\\\\\\\"1\\\\\\\",\\\\\\\"name\\\\\\\":\\\\\\\"aleo\\\\\\\",\\\\\\\"span\\\\\\\":\\\\\\\"{\\\\\\\\\\\\\\\"lo\\\\\\\\\\\\\\\":0,\\\\\\\\\\\\\\\"hi\\\\\\\\\\\\\\\":0}\\\\\\\"}\\\"\"}"
consts: []
structs: []
mappings:
- - Yo
- identifier: "{\"id\":\"2\",\"name\":\"Yo\",\"span\":\"{\\\"lo\\\":34,\\\"hi\\\":36}\"}"
key_type: Address
value_type:
Integer: U32
span:
lo: 26
hi: 53
id: 3
functions:
- - main
- annotations: []
variant: Transition
identifier: "{\"id\":\"4\",\"name\":\"main\",\"span\":\"{\\\"lo\\\":70,\\\"hi\\\":74}\"}"
input:
- Internal:
identifier: "{\"id\":\"5\",\"name\":\"a\",\"span\":\"{\\\"lo\\\":75,\\\"hi\\\":76}\"}"
mode: None
type_: Address
span:
lo: 75
hi: 76
id: 6
output: []
output_type: Unit
block:
statements:
- Assert:
variant:
AssertEq:
- Identifier: "{\"id\":\"7\",\"name\":\"a\",\"span\":\"{\\\"lo\\\":107,\\\"hi\\\":108}\"}"
- Access:
Member:
inner:
Identifier: "{\"id\":\"8\",\"name\":\"self\",\"span\":\"{\\\"lo\\\":110,\\\"hi\\\":114}\"}"
name: "{\"id\":\"9\",\"name\":\"caller\",\"span\":\"{\\\"lo\\\":115,\\\"hi\\\":121}\"}"
span:
lo: 110
hi: 121
id: 10
span:
lo: 97
hi: 106
id: 11
- Assert:
variant:
AssertEq:
- Identifier: "{\"id\":\"12\",\"name\":\"a\",\"span\":\"{\\\"lo\\\":142,\\\"hi\\\":143}\"}"
- Literal:
Address:
- test.aleo
- span:
lo: 145
hi: 157
- 14
span:
lo: 132
hi: 141
id: 15
- Assert:
variant:
AssertEq:
- Identifier: "{\"id\":\"16\",\"name\":\"a\",\"span\":\"{\\\"lo\\\":178,\\\"hi\\\":179}\"}"
- Literal:
Address:
- hello.aleo
- span:
lo: 181
hi: 186
- 18
span:
lo: 168
hi: 177
id: 19
- Return:
expression:
Literal:
Address:
- foo.aleo
- span:
lo: 209
hi: 212
- 21
span:
lo: 202
hi: 218
id: 22
span:
lo: 87
hi: 224
id: 23
span:
lo: 59
hi: 224
id: 24
span:
lo: 2
hi: 226

View File

@ -0,0 +1,15 @@
/*
namespace: Compile
expectation: Pass
*/
program test.aleo {
mapping Yo: address => u32;
transition main(a: address) -> address {
assert_eq(a, self.caller);
assert_eq(a, self.address);
assert_eq(a, hello.aleo);
return foo.aleo;
}
}

View File

@ -0,0 +1,15 @@
/*
namespace: Compile
expectation: Pass
*/
program test.aleo {
async transition main(a: u16) -> Future {
return finalize_main(a);
}
async function finalize_main(a: u16) {
assert_eq(1u16, network.id);
assert_eq(a, network.id);
assert_eq(network.id, network.id);
}
}

View File

@ -0,0 +1,49 @@
/*
namespace: Execute
expectation: Pass
cases:
- program: metadata.aleo
function: is_block_height
input: ["2u32"]
- program: metadata.aleo
function: is_block_height
input: ["3u32"]
- program: metadata.aleo
function: is_block_height
input: ["4u32"]
- program: metadata.aleo
function: is_block_height
input: ["0u32"]
- program: metadata.aleo
function: is_network_id
input: ["0u16"]
- program: metadata.aleo
function: is_network_id
input: ["1u16"]
- program: metadata.aleo
function: is_network_id
input: ["2u16"]
- program: metadata.aleo
function: is_network_id
input: ["3u16"]
*/
program metadata.aleo {
async transition is_block_height(block_height: u32) -> Future {
return finalize_is_block_height(block_height);
}
async function finalize_is_block_height(block_height: u32) {
assert_eq(block_height, block.height);
}
async transition is_network_id(network_id: u16) -> Future {
return finalize_is_network_id(network_id);
}
async function finalize_is_network_id(network_id: u16) {
assert_eq(network_id, network.id);
}
}

View File

@ -4,3 +4,9 @@ expectation: Pass
*/
aleo1qnr4dkkvkgfqph0vzc3y6z2eu975wnpz2925ntjccd5cfqxtyu8s7pyjh9
hello.aleo
fooooo.aleo
bar.aleo

View File

@ -0,0 +1,10 @@
/*
namespace: Parse
expectation: Pass
*/
program test.aleo {
function main(a: address) {
assert_eq(network.id, 1u32);
return a;
}
}

View File

@ -0,0 +1,15 @@
/*
namespace: Parse
expectation: Pass
*/
program test.aleo {
mapping Yo: address => u32;
transition main(a: address) {
assert_eq(a, self.caller);
assert_eq(a, self.address);
assert_eq(a, hello.aleo);
return foo.aleo;
}
}