mirror of
https://github.com/ProvableHQ/leo.git
synced 2024-11-22 22:44:47 +03:00
Merge branch 'mainnet' into update/from-testnet3
This commit is contained in:
commit
c378e090d7
1462
Cargo.lock
generated
1462
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@ -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" ]
|
||||
|
@ -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),
|
||||
|
@ -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,
|
||||
|
@ -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"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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.
|
||||
|
@ -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."),
|
||||
};
|
||||
|
||||
|
@ -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) {
|
||||
|
@ -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 {
|
||||
|
@ -272,6 +272,8 @@ symbols! {
|
||||
stub,
|
||||
block,
|
||||
height,
|
||||
network,
|
||||
id,
|
||||
}
|
||||
|
||||
/// An interned string.
|
||||
|
@ -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,
|
||||
}
|
||||
);
|
||||
|
@ -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()),
|
||||
}
|
||||
);
|
||||
|
@ -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(())
|
||||
}
|
||||
}
|
||||
|
@ -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.
|
||||
|
@ -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>,
|
||||
}
|
||||
|
@ -26,6 +26,9 @@ version = "=1.11.0"
|
||||
path = "../../utils/retriever"
|
||||
version = "1.11.0"
|
||||
|
||||
[dependencies.snarkos-cli]
|
||||
workspace = true
|
||||
|
||||
[dependencies.snarkvm]
|
||||
workspace = true
|
||||
|
||||
|
18
tests/expectations/compiler/address/special_address.out
Normal file
18
tests/expectations/compiler/address/special_address.out
Normal 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: ""
|
18
tests/expectations/compiler/expression/network_id.out
Normal file
18
tests/expectations/compiler/expression/network_id.out
Normal 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: ""
|
195
tests/expectations/execution/metadata.out
Normal file
195
tests/expectations/execution/metadata.out
Normal 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: ""
|
@ -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
|
||||
|
110
tests/expectations/parser/program/address_literal.out
Normal file
110
tests/expectations/parser/program/address_literal.out
Normal 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
|
72
tests/expectations/parser/program/network_id.out
Normal file
72
tests/expectations/parser/program/network_id.out
Normal 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
|
110
tests/expectations/parser/program/special_address.out
Normal file
110
tests/expectations/parser/program/special_address.out
Normal 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
|
15
tests/tests/compiler/address/special_address.leo
Normal file
15
tests/tests/compiler/address/special_address.leo
Normal 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;
|
||||
}
|
||||
}
|
15
tests/tests/compiler/expression/network_id.leo
Normal file
15
tests/tests/compiler/expression/network_id.leo
Normal 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);
|
||||
}
|
||||
}
|
49
tests/tests/execution/metadata.leo
Normal file
49
tests/tests/execution/metadata.leo
Normal 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);
|
||||
}
|
||||
}
|
@ -4,3 +4,9 @@ expectation: Pass
|
||||
*/
|
||||
|
||||
aleo1qnr4dkkvkgfqph0vzc3y6z2eu975wnpz2925ntjccd5cfqxtyu8s7pyjh9
|
||||
|
||||
hello.aleo
|
||||
|
||||
fooooo.aleo
|
||||
|
||||
bar.aleo
|
10
tests/tests/parser/program/network_id.leo
Normal file
10
tests/tests/parser/program/network_id.leo
Normal file
@ -0,0 +1,10 @@
|
||||
/*
|
||||
namespace: Parse
|
||||
expectation: Pass
|
||||
*/
|
||||
program test.aleo {
|
||||
function main(a: address) {
|
||||
assert_eq(network.id, 1u32);
|
||||
return a;
|
||||
}
|
||||
}
|
15
tests/tests/parser/program/special_address.leo
Normal file
15
tests/tests/parser/program/special_address.leo
Normal 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;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user