From d6b2864f57d4e0f9c8b6c52300b5807551e4e926 Mon Sep 17 00:00:00 2001 From: Song Zhou Date: Mon, 14 Feb 2022 00:41:24 +0800 Subject: [PATCH] offchain vm sharding & parentchain --- Cargo.lock | 24 +- Cargo.toml | 1 + .../pallet-parentchain/Cargo.toml | 42 ++ .../pallet-parentchain/README.md | 1 + .../pallet-parentchain/src/benchmarking.rs | 24 + .../pallet-parentchain/src/lib.rs | 193 ++++++ .../pallet-parentchain/src/mock.rs | 87 +++ .../pallet-parentchain/src/tests.rs | 305 +++++++++ .../pallet-registry/Cargo.toml | 1 - .../pallet-registry/src/lib.rs | 116 +++- .../pallet-registry/src/mock.rs | 2 + .../pallet-registry/src/tests.rs | 80 +++ .../pallet-s-contract/Cargo.toml | 2 - .../pallet-s-contract/src/lib.rs | 52 +- .../pallet-s-contract/src/mock.rs | 15 +- .../pallet-s-contract/src/tests.rs | 31 +- .../pallet-secrets/Cargo.toml | 1 - .../pallet-secrets/src/lib.rs | 102 ++- .../pallet-secrets/src/mock.rs | 2 + .../pallet-secrets/src/tests.rs | 54 +- crates/skw-blockchain-runtime/Cargo.toml | 1 + crates/skw-blockchain-runtime/src/lib.rs | 29 +- crates/skw-contract-sdk/README.md | 1 - mock-enclave/contract/Cargo.lock | 611 ------------------ mock-enclave/contract/Cargo.toml | 22 - mock-enclave/contract/src/lib.rs | 108 ---- mock-enclave/package.json | 16 +- mock-enclave/scripts/contract-build.ts | 18 - mock-enclave/scripts/execSync.ts | 16 - mock-enclave/scripts/vm.ts | 140 ---- mock-enclave/wasm/status_message.wasm | Bin 106734 -> 0 bytes .../wasm/status_message_collections.wasm | Bin 0 -> 311366 bytes mock-enclave/wasm/test_contract_rs.wasm | Bin 83975 -> 0 bytes mock-enclave/yarn.lock | 505 ++++++++------- package.json | 2 +- 35 files changed, 1252 insertions(+), 1352 deletions(-) create mode 100644 crates/skw-blockchain-pallets/pallet-parentchain/Cargo.toml create mode 100644 crates/skw-blockchain-pallets/pallet-parentchain/README.md create mode 100644 crates/skw-blockchain-pallets/pallet-parentchain/src/benchmarking.rs create mode 100644 crates/skw-blockchain-pallets/pallet-parentchain/src/lib.rs create mode 100644 crates/skw-blockchain-pallets/pallet-parentchain/src/mock.rs create mode 100644 crates/skw-blockchain-pallets/pallet-parentchain/src/tests.rs delete mode 120000 crates/skw-contract-sdk/README.md delete mode 100644 mock-enclave/contract/Cargo.lock delete mode 100644 mock-enclave/contract/Cargo.toml delete mode 100644 mock-enclave/contract/src/lib.rs delete mode 100644 mock-enclave/scripts/contract-build.ts delete mode 100644 mock-enclave/scripts/execSync.ts delete mode 100644 mock-enclave/scripts/vm.ts delete mode 100755 mock-enclave/wasm/status_message.wasm create mode 100755 mock-enclave/wasm/status_message_collections.wasm delete mode 100755 mock-enclave/wasm/test_contract_rs.wasm diff --git a/Cargo.lock b/Cargo.lock index cda86e0..ce70595 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4245,6 +4245,25 @@ dependencies = [ "test-env-log", ] +[[package]] +name = "pallet-parentchain" +version = "3.0.0" +dependencies = [ + "env_logger 0.7.1", + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-registry", + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "test-env-log", +] + [[package]] name = "pallet-randomness-collective-flip" version = "4.0.0-dev" @@ -4268,7 +4287,6 @@ dependencies = [ "frame-support", "frame-system", "log", - "pallet-balances", "parity-scale-codec", "scale-info", "sp-core", @@ -4287,8 +4305,6 @@ dependencies = [ "frame-support", "frame-system", "log", - "pallet-balances", - "pallet-registry", "pallet-secrets", "parity-scale-codec", "scale-info", @@ -4308,7 +4324,6 @@ dependencies = [ "frame-support", "frame-system", "log", - "pallet-balances", "parity-scale-codec", "scale-info", "sp-core", @@ -6875,6 +6890,7 @@ dependencies = [ "pallet-balances", "pallet-grandpa", "pallet-naming", + "pallet-parentchain", "pallet-randomness-collective-flip", "pallet-registry", "pallet-s-contract", diff --git a/Cargo.toml b/Cargo.toml index 4dbae38..cdec914 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,6 +6,7 @@ members = [ 'crates/skw-blockchain-pallets/pallet-secrets', 'crates/skw-blockchain-pallets/pallet-s-contract', 'crates/skw-blockchain-pallets/pallet-registry', + 'crates/skw-blockchain-pallets/pallet-parentchain', 'crates/skw-blockchain-runtime', # SkyeKiwi VM based on NEAR VM diff --git a/crates/skw-blockchain-pallets/pallet-parentchain/Cargo.toml b/crates/skw-blockchain-pallets/pallet-parentchain/Cargo.toml new file mode 100644 index 0000000..377b91c --- /dev/null +++ b/crates/skw-blockchain-pallets/pallet-parentchain/Cargo.toml @@ -0,0 +1,42 @@ +[package] +authors = ['SkyeKiwi '] +description = 'offchain vm chain sycner' +edition = '2021' +homepage = 'https://skye.kiwi' +license = 'GPL-3.0' +name = 'pallet-parentchain' +readme = 'README.md' +repository = 'https://github.com/skyekiwi/skyekiwi-network' +version = '3.0.0' + +[package.metadata.docs.rs] +targets = ['x86_64-unknown-linux-gnu'] + +[dev-dependencies] +test-env-log = "0.2.7" +log = "*" +env_logger="*" + +[dependencies] +pallet-registry = { version = "3.0.0", default-features = false, path = "../pallet-registry" } +codec = {default-features = false, features = ['derive'], package = 'parity-scale-codec', version = '2.0.0'} +frame-benchmarking = { default-features = false, git = 'https://github.com/paritytech/substrate.git', optional = true, tag = 'monthly-2021-12', version = '4.0.0-dev'} +frame-support = {default-features = false, git = 'https://github.com/paritytech/substrate.git', tag = 'monthly-2021-12', version = '4.0.0-dev'} +frame-system = { default-features = false, git = 'https://github.com/paritytech/substrate.git', tag = 'monthly-2021-12', version = '4.0.0-dev'} +scale-info = { default-features = false, features = ['derive'], version = '1.0'} +sp-std = { default-features = false, git = 'https://github.com/paritytech/substrate.git', tag = 'monthly-2021-12', version = '4.0.0-dev'} +sp-core = { default-features = false, git = 'https://github.com/paritytech/substrate.git', tag = 'monthly-2021-12', version = '4.0.0-dev'} +sp-io = { default-features = false, git = 'https://github.com/paritytech/substrate.git', tag = 'monthly-2021-12', version = '4.0.0-dev'} +sp-runtime = { default-features = false, git = 'https://github.com/paritytech/substrate.git', tag = 'monthly-2021-12', version = '4.0.0-dev'} + +[features] +default = ['std'] +runtime-benchmarks = ['frame-benchmarking'] +std = [ + 'codec/std', + 'scale-info/std', + 'frame-support/std', + 'frame-system/std', + 'frame-benchmarking/std', +] +try-runtime = ['frame-support/try-runtime'] diff --git a/crates/skw-blockchain-pallets/pallet-parentchain/README.md b/crates/skw-blockchain-pallets/pallet-parentchain/README.md new file mode 100644 index 0000000..39b51ec --- /dev/null +++ b/crates/skw-blockchain-pallets/pallet-parentchain/README.md @@ -0,0 +1 @@ +Licenseļ¼š GPL-3.0 diff --git a/crates/skw-blockchain-pallets/pallet-parentchain/src/benchmarking.rs b/crates/skw-blockchain-pallets/pallet-parentchain/src/benchmarking.rs new file mode 100644 index 0000000..3da45f5 --- /dev/null +++ b/crates/skw-blockchain-pallets/pallet-parentchain/src/benchmarking.rs @@ -0,0 +1,24 @@ +//! Benchmarking setup for pallet-template + +use super::*; + +use frame_system::RawOrigin; +use frame_benchmarking::{benchmarks, whitelisted_caller, impl_benchmark_test_suite}; +#[allow(unused)] +use crate::Pallet as Secrets; + +benchmarks! { + register_secret { + let s in 0 .. 100; + let caller: T::AccountId = whitelisted_caller(); + }: _(RawOrigin::Signed(caller), s) + verify { + assert_eq!(Metadata::::get(), Some(s)); + } +} + +impl_benchmark_test_suite!( + Secrets, + crate::mock::new_test_ext(), + crate::mock::Test, +); diff --git a/crates/skw-blockchain-pallets/pallet-parentchain/src/lib.rs b/crates/skw-blockchain-pallets/pallet-parentchain/src/lib.rs new file mode 100644 index 0000000..f84b443 --- /dev/null +++ b/crates/skw-blockchain-pallets/pallet-parentchain/src/lib.rs @@ -0,0 +1,193 @@ +#![cfg_attr(not(feature = "std"), no_std)] +use sp_std::prelude::*; +pub use pallet::*; + + +#[cfg(test)] +mod tests; + +#[cfg(test)] +mod mock; + +// #[cfg(feature = "runtime-benchmarks")] +// mod benchmarking; + +pub type CallIndex = u64; +pub type ShardId = u64; + +#[frame_support::pallet] +pub mod pallet { + use frame_support::{dispatch::DispatchResult, pallet_prelude::*}; + use frame_system::pallet_prelude::*; + use super::*; + + #[pallet::config] + pub trait Config: frame_system::Config + pallet_registry::Config { + type Event: From> + IsType<::Event>; + + #[pallet::constant] + type DeplayThreshold: Get<::BlockNumber>; + + #[pallet::constant] + type MaxOutcomePerSubmission: Get; + + #[pallet::constant] + type MaxSizePerOutcome: Get; + } + + #[pallet::pallet] + #[pallet::generate_store(pub(super) trait Store)] + pub struct Pallet(_); + + #[pallet::storage] + #[pallet::getter(fn shard_confirmation_threshold)] + pub(super) type ShardConfirmationThreshold = StorageMap<_, Twox64Concat, + ShardId, u64>; + + #[pallet::storage] + #[pallet::getter(fn state_root_at)] + pub(super) type StateRoot = StorageDoubleMap<_, Twox64Concat, ShardId, + Twox64Concat, T::BlockNumber, [u8; 32]>; + + #[pallet::storage] + #[pallet::getter(fn state_file_hash_at)] + pub(super) type StateFileHash = StorageDoubleMap<_, Twox64Concat, ShardId, + Twox64Concat, T::BlockNumber, [u8; 32]>; + + #[pallet::storage] + #[pallet::getter(fn confirmation_of)] + pub(super) type Confirmation = StorageDoubleMap<_, Twox64Concat, ShardId, + Twox64Concat, T::BlockNumber, u64>; + + #[pallet::storage] + #[pallet::getter(fn outcome_of)] + pub(super) type Outcome = StorageMap<_, Twox64Concat, + CallIndex, Vec>; + + #[pallet::event] + #[pallet::generate_deposit(pub(super) fn deposit_event)] + pub enum Event { + BlockSynced(T::BlockNumber), + BlockConfirmed(T::BlockNumber), + } + + #[pallet::error] + pub enum Error { + Unauthorized, + OutcomeSubmissionTooLate, + InvalidShardId, + InvalidOutcome, + InconsistentState, + Unexpected, + } + + #[pallet::call] + impl Pallet { + + #[pallet::weight(10_000 + T::DbWeight::get().reads_writes(0, 1))] + pub fn set_shard_confirmation_threshold( + origin: OriginFor, + shard_id: ShardId, + threshold: u64, + ) -> DispatchResult { + ensure_root(origin)?; + >::mutate(&shard_id, |t| { + * t = Some(threshold) + }); + Ok(()) + } + + #[pallet::weight(10_000 + T::DbWeight::get().reads_writes(8, 10))] + pub fn submit_outcome( + origin: OriginFor, + block_number: T::BlockNumber, + shard_id: ShardId, + + state_root: [u8; 32], + state_file_hash: [u8; 32], + + outcome_call_index: Vec, + outcome: Vec>, + ) -> DispatchResult { + let who = ensure_signed(origin)?; + + ensure!(pallet_registry::Pallet::::is_valid_shard_id(shard_id), Error::::InvalidShardId); + ensure!(pallet_registry::Pallet::::is_valid_secret_keeper(&who), Error::::Unauthorized); + let now = frame_system::Pallet::::block_number(); + ensure!(now <= block_number + T::DeplayThreshold::get(), Error::::OutcomeSubmissionTooLate); + + // by default - confirmation at 1 + let threshold = Self::shard_confirmation_threshold(shard_id).unwrap_or(1); + + ensure!(pallet_registry::Pallet::::is_beacon_turn(block_number, &who, shard_id, threshold), Error::::Unauthorized); + ensure!(outcome_call_index.len() == outcome.len(), Error::::InvalidOutcome); + ensure!(outcome_call_index.len() < T::MaxOutcomePerSubmission::get() as usize, Error::::InvalidOutcome); + + for o in outcome.iter() { + ensure!(Self::validate_outcome(&o), Error::::InvalidOutcome); + } + + let old_state_root = Self::state_root_at(shard_id, block_number); + // 1. existing state_root doesnt match the current state_root + if old_state_root != Some(state_root) { + if Self::confirmation_of(shard_id, block_number).is_some() { + // 2. Someone had written another state_root before!! + // THIS IS VERY SERIOUS + return Err(Error::::InconsistentState.into()); + } + + // 3. The record has never been written before + // We can write it - exit the if statement + } else { + // 4. old state root matches the current state_root + // 5. update the confirmation count + >::mutate(&shard_id, &block_number, |confirmation| { + *confirmation = Some(confirmation.unwrap_or(0) + 1); + }); + let confirms = Self::confirmation_of(shard_id, block_number).unwrap_or(0); + ensure!(confirms <= threshold, Error::::Unauthorized); + + // 6. threshold has been met. The block is confirmed! + if confirms == threshold { + Self::deposit_event(Event::::BlockConfirmed(block_number)); + } + + return Ok(()); + } + + // The record has never been written before! + + >::mutate(&shard_id, &block_number, |confirmation| { + *confirmation = Some(confirmation.unwrap_or(0) + 1); + }); + let confirms = Self::confirmation_of(shard_id, block_number).unwrap_or(0); + + // this should never happen as we have checked for specific secret keepers! + ensure!(confirms <= threshold, Error::::Unexpected); + + for (i, call_index) in outcome_call_index.iter().enumerate() { + >::insert(&call_index, &outcome[i]); + } + + >::insert(&shard_id, &block_number, &state_root); + >::insert(&shard_id, &block_number, &state_file_hash); + + // emit BlockSynced only at the first time! + Self::deposit_event(Event::::BlockSynced(block_number)); + + if threshold == 1 { + // if this is the first time the state is syced & threshold == 1 + // the block is confirmed! + Self::deposit_event(Event::::BlockConfirmed(block_number)); + } + Ok(()) + } + } + + impl Pallet { + pub fn validate_outcome(call: &Vec) -> bool { + call.len() < T::MaxSizePerOutcome::get() as usize + } + } +} + diff --git a/crates/skw-blockchain-pallets/pallet-parentchain/src/mock.rs b/crates/skw-blockchain-pallets/pallet-parentchain/src/mock.rs new file mode 100644 index 0000000..0957ca6 --- /dev/null +++ b/crates/skw-blockchain-pallets/pallet-parentchain/src/mock.rs @@ -0,0 +1,87 @@ +#![cfg(test)] +use crate as pallet_parentchain; +use pallet_registry; + +use frame_support::parameter_types; +use frame_system as system; +use sp_core::H256; +use sp_runtime::{ + testing::Header, + traits::{BlakeTwo256, IdentityLookup}, +}; + +type UncheckedExtrinsic = frame_system::mocking::MockUncheckedExtrinsic; +type Block = frame_system::mocking::MockBlock; + +// Configure a mock runtime to test the pallet. +frame_support::construct_runtime!( + pub enum Test where + Block = Block, + NodeBlock = Block, + UncheckedExtrinsic = UncheckedExtrinsic, + { + System: frame_system::{Pallet, Call, Config, Storage, Event}, + Registry: pallet_registry::{Pallet, Call, Storage, Event}, + Parentchain: pallet_parentchain::{Pallet, Call, Storage, Event}, + } +); + +parameter_types! { + pub const BlockHashCount: u64 = 250; + pub const SS58Prefix: u8 = 42; +} + +impl system::Config for Test { + type BaseCallFilter = frame_support::traits::Everything; + type BlockWeights = (); + type BlockLength = (); + type DbWeight = (); + type Origin = Origin; + type Call = Call; + type Index = u64; + type BlockNumber = u64; + type Hash = H256; + type Hashing = BlakeTwo256; + type AccountId = u64; + type Lookup = IdentityLookup; + type Header = Header; + type Event = Event; + type BlockHashCount = BlockHashCount; + type Version = (); + type PalletInfo = PalletInfo; + type AccountData = (); + type OnNewAccount = (); + type OnKilledAccount = (); + type SystemWeightInfo = (); + type SS58Prefix = SS58Prefix; + type OnSetCode = (); +} + +parameter_types! { + pub const RegistrationDuration: u32 = 1_000_000_000; + pub const MaxActiveShards: u64 = 0; +} + +impl pallet_registry::Config for Test { + type Event = Event; + type RegistrationDuration = RegistrationDuration; + type MaxActiveShards = MaxActiveShards; +} + +parameter_types! { + pub const DeplayThreshold: u32 = 20; + pub const MaxOutcomePerSubmission: u64 = 20; + pub const MaxSizePerOutcome: u64 = 1024; +} + +impl pallet_parentchain::Config for Test { + type Event = Event; + type DeplayThreshold = DeplayThreshold; + type MaxOutcomePerSubmission = MaxOutcomePerSubmission; + type MaxSizePerOutcome = MaxSizePerOutcome; +} + +// Build genesis storage according to the mock runtime. +pub fn new_test_ext() -> sp_io::TestExternalities { + system::GenesisConfig::default().build_storage::().unwrap().into() +} diff --git a/crates/skw-blockchain-pallets/pallet-parentchain/src/tests.rs b/crates/skw-blockchain-pallets/pallet-parentchain/src/tests.rs new file mode 100644 index 0000000..9f7d509 --- /dev/null +++ b/crates/skw-blockchain-pallets/pallet-parentchain/src/tests.rs @@ -0,0 +1,305 @@ +use super::Event as ParentchainEvent; +use pallet_registry::Event as RegistryEvent; + +use super::Error as ParentchainError; + +use frame_support::{assert_ok, assert_noop}; +use crate::mock::{Event, *}; +use sp_std::num::ParseIntError; + +const PUBLIC_KEY: &str = "38d58afd1001bb265bce6ad24ff58239c62e1c98886cda9d7ccf41594f37d52f"; + +type AccountId = u64; +const ALICE: AccountId = 1; +const BOB: AccountId = 2; +const CHARLIE: AccountId = 3; +const DAVE: AccountId = 4; +const FRED: AccountId = 5; + +fn decode_hex_uncompressed(s: &str) -> Result, ParseIntError> { + (0..s.len()) + .step_by(1) + .map(|i| u8::from_str_radix(&s[i..i + 1], 16)) + .collect() +} + +#[test] +fn it_submit_results() { + + new_test_ext().execute_with(|| { + System::set_block_number(1); + + let public_key = decode_hex_uncompressed(PUBLIC_KEY).unwrap(); + assert_ok!( Registry::register_secret_keeper( Origin::signed(ALICE), public_key.clone(), Vec::new() ) ); + + assert_ok!( Registry::register_running_shard( Origin::signed(ALICE), 0 ) ); + + assert_ok!( + Parentchain::set_shard_confirmation_threshold( + Origin::root(), 0, 1 //one confirmation + ) + ); + + assert_ok!( + Parentchain::submit_outcome( + Origin::signed(ALICE), 1, 0, + + [0u8; 32], [1u8; 32], + + vec![], vec![] + ) + ); + + let events = System::events(); + assert!( + events[0].event == Event::Registry(RegistryEvent::SecretKeeperRegistered(1)) && + events[1].event == Event::Parentchain(ParentchainEvent::BlockSynced(1)) && + events[2].event == Event::Parentchain(ParentchainEvent::BlockConfirmed(1)) // threshold = 1, 1 sync = confirmed + + ); + }); +} + +#[test] +fn it_correctly_limit_beacon_turns_on_1_confirm() { + + new_test_ext().execute_with(|| { + System::set_block_number(1); + + let public_key = decode_hex_uncompressed(PUBLIC_KEY).unwrap(); + assert_ok!( Registry::register_secret_keeper( Origin::signed(ALICE), public_key.clone(), Vec::new() ) ); + assert_ok!( Registry::register_running_shard( Origin::signed(ALICE), 0 ) ); + + assert_ok!( Registry::register_secret_keeper( Origin::signed(BOB), public_key.clone(), Vec::new() ) ); + assert_ok!( Registry::register_running_shard( Origin::signed(BOB), 0 ) ); + + assert_ok!( Registry::register_secret_keeper( Origin::signed(CHARLIE), public_key.clone(), Vec::new() ) ); + assert_ok!( Registry::register_running_shard( Origin::signed(CHARLIE), 0 ) ); + + assert_ok!( Registry::register_secret_keeper( Origin::signed(DAVE), public_key.clone(), Vec::new() ) ); + assert_ok!( Registry::register_running_shard( Origin::signed(DAVE), 0 ) ); + + assert_ok!( Registry::register_secret_keeper( Origin::signed(FRED), public_key.clone(), Vec::new() ) ); + assert_ok!( Registry::register_running_shard( Origin::signed(FRED), 0 ) ); + + // 1 confirmation - only those who are in turn can submit + assert_ok!( + Parentchain::set_shard_confirmation_threshold( + Origin::root(), 0, 1 //one confirmation + ) + ); + + // For block_num 1 -> Alice can submit result + assert_ok!( + Parentchain::submit_outcome( + Origin::signed(ALICE), 1, 0, + [0u8; 32], [1u8; 32], vec![], vec![] + ) + ); + + // Bob cannot submit for block_num 1 + assert_noop!( + Parentchain::submit_outcome( + Origin::signed(BOB), 1, 0, + [0u8; 32], [1u8; 32], vec![], vec![] + ), + ParentchainError::::Unauthorized + ); + + // For block_num 2 -> Alice fails & Bob success + assert_noop!( + Parentchain::submit_outcome( + Origin::signed(ALICE), 2, 0, + [0u8; 32], [1u8; 32], vec![], vec![] + ), + ParentchainError::::Unauthorized + ); + assert_ok!( + Parentchain::submit_outcome( + Origin::signed(BOB), 2, 0, + [0u8; 32], [1u8; 32], vec![], vec![] + ) + ); + + let events = System::events(); + assert!( + events[5].event == Event::Parentchain(ParentchainEvent::BlockSynced(1)) && + events[6].event == Event::Parentchain(ParentchainEvent::BlockConfirmed(1)) && // threshold = 1, 1 sync = confirmed + events[7].event == Event::Parentchain(ParentchainEvent::BlockSynced(2)) && + events[8].event == Event::Parentchain(ParentchainEvent::BlockConfirmed(2)) // threshold = 1, 1 sync = confirmed + ); + }); +} + +#[test] +fn it_correctly_limit_beacon_turns_on_3_confirm() { + + new_test_ext().execute_with(|| { + System::set_block_number(1); + + let public_key = decode_hex_uncompressed(PUBLIC_KEY).unwrap(); + assert_ok!( Registry::register_secret_keeper( Origin::signed(ALICE), public_key.clone(), Vec::new() ) ); + assert_ok!( Registry::register_running_shard( Origin::signed(ALICE), 0 ) ); + + assert_ok!( Registry::register_secret_keeper( Origin::signed(BOB), public_key.clone(), Vec::new() ) ); + assert_ok!( Registry::register_running_shard( Origin::signed(BOB), 0 ) ); + + assert_ok!( Registry::register_secret_keeper( Origin::signed(CHARLIE), public_key.clone(), Vec::new() ) ); + assert_ok!( Registry::register_running_shard( Origin::signed(CHARLIE), 0 ) ); + + assert_ok!( Registry::register_secret_keeper( Origin::signed(DAVE), public_key.clone(), Vec::new() ) ); + assert_ok!( Registry::register_running_shard( Origin::signed(DAVE), 0 ) ); + + assert_ok!( Registry::register_secret_keeper( Origin::signed(FRED), public_key.clone(), Vec::new() ) ); + assert_ok!( Registry::register_running_shard( Origin::signed(FRED), 0 ) ); + + // now set threshold to 3 + assert_ok!( + Parentchain::set_shard_confirmation_threshold( + Origin::root(), 0, 3 //three confirmation + ) + ); + + // for block_num 1; Alice, Bob, Charlie can submit; Dave will fail + assert_ok!( Parentchain::submit_outcome( Origin::signed(ALICE), 1, 0, [0u8; 32], [1u8; 32], vec![], vec![] ) ); + assert_ok!( Parentchain::submit_outcome( Origin::signed(BOB), 1, 0, [0u8; 32], [1u8; 32], vec![], vec![] ) ); + assert_ok!( Parentchain::submit_outcome( Origin::signed(CHARLIE), 1, 0, [0u8; 32], [1u8; 32], vec![], vec![] ) ); + assert_noop!( + Parentchain::submit_outcome( + Origin::signed(DAVE), 1, 0, + [0u8; 32], [1u8; 32], vec![], vec![] + ), + ParentchainError::::Unauthorized + ); + + // for block_num 2; Alice fail; Bob, Charlie, Dave success + assert_ok!( Parentchain::submit_outcome( Origin::signed(BOB), 2, 0, [0u8; 32], [1u8; 32], vec![], vec![] ) ); + assert_ok!( Parentchain::submit_outcome( Origin::signed(CHARLIE), 2, 0, [0u8; 32], [1u8; 32], vec![], vec![] ) ); + assert_ok!( Parentchain::submit_outcome( Origin::signed(DAVE), 2, 0, [0u8; 32], [1u8; 32], vec![], vec![] ) ); + assert_noop!( + Parentchain::submit_outcome( + Origin::signed(ALICE), 2, 0, + [0u8; 32], [1u8; 32], vec![], vec![] + ), + ParentchainError::::Unauthorized + ); + + + let events = System::events(); + assert!( + events[5].event == Event::Parentchain(ParentchainEvent::BlockSynced(1)) && + events[6].event == Event::Parentchain(ParentchainEvent::BlockConfirmed(1)) && // threshold = 1, 1 sync = confirmed + events[7].event == Event::Parentchain(ParentchainEvent::BlockSynced(2)) && + events[8].event == Event::Parentchain(ParentchainEvent::BlockConfirmed(2)) // threshold = 1, 1 sync = confirmed + ); + }); +} + +#[test] +fn it_validates_outcome() { + + new_test_ext().execute_with(|| { + System::set_block_number(1); + + let public_key = decode_hex_uncompressed(PUBLIC_KEY).unwrap(); + assert_ok!( Registry::register_secret_keeper( Origin::signed(ALICE), public_key.clone(), Vec::new() ) ); + assert_ok!( Registry::register_running_shard( Origin::signed(ALICE), 0 ) ); + + assert_ok!( + Parentchain::set_shard_confirmation_threshold( + Origin::root(), 0, 1 //one confirmation + ) + ); + + assert_ok!( + Parentchain::submit_outcome( + Origin::signed(ALICE), + 1, 0, [0u8; 32], [1u8; 32], + vec![], vec![] + ) + ); + + assert_ok!( + Parentchain::submit_outcome( + Origin::signed(ALICE), + 2, 0, [0u8; 32], [1u8; 32], + vec![ 11 ], vec![ [0u8; 100].to_vec() ] + ) + ); + + // len does not match + assert_noop!( + Parentchain::submit_outcome( + Origin::signed(ALICE), 3, 0, + [0u8; 32], [1u8; 32], + vec![ 11 ], vec![] + ), + ParentchainError::::InvalidOutcome + ); + + // too many outcomes + assert_noop!( + Parentchain::submit_outcome( + Origin::signed(ALICE), 4, 0, + [0u8; 32], [1u8; 32], + vec![ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], + vec![ + [0u8; 100].to_vec(), [0u8; 100].to_vec(), [0u8; 100].to_vec(), [0u8; 100].to_vec(), [0u8; 100].to_vec(), + [0u8; 100].to_vec(), [0u8; 100].to_vec(), [0u8; 100].to_vec(), [0u8; 100].to_vec(), [0u8; 100].to_vec(), + [0u8; 100].to_vec(), [0u8; 100].to_vec(), [0u8; 100].to_vec(), [0u8; 100].to_vec(), [0u8; 100].to_vec(), + [0u8; 100].to_vec(), [0u8; 100].to_vec(), [0u8; 100].to_vec(), [0u8; 100].to_vec(), [0u8; 100].to_vec(), + [0u8; 100].to_vec(), + ] + ), + ParentchainError::::InvalidOutcome + ); + + // outcome too large + assert_noop!( + Parentchain::submit_outcome( + Origin::signed(ALICE), + 5, 0, [0u8; 32], [1u8; 32], + vec![ 22 ], vec![ [0u8; 1050].to_vec() ] + ), + ParentchainError::::InvalidOutcome + ); + }); +} + +#[test] +fn it_validate_state_root_n_file_hash() { + + new_test_ext().execute_with(|| { + System::set_block_number(1); + + let public_key = decode_hex_uncompressed(PUBLIC_KEY).unwrap(); + assert_ok!( Registry::register_secret_keeper( Origin::signed(ALICE), public_key.clone(), Vec::new() ) ); + assert_ok!( Registry::register_running_shard( Origin::signed(ALICE), 0 ) ); + + assert_ok!( Registry::register_secret_keeper( Origin::signed(BOB), public_key.clone(), Vec::new() ) ); + assert_ok!( Registry::register_running_shard( Origin::signed(BOB), 0 ) ); + + assert_ok!( + Parentchain::set_shard_confirmation_threshold( + Origin::root(), 0, 2 //two confirmation + ) + ); + + assert_ok!( + Parentchain::submit_outcome( + Origin::signed(ALICE), + 1, 0, [0u8; 32], [1u8; 32], + vec![], vec![] + ) + ); + + assert_noop!( + Parentchain::submit_outcome( + Origin::signed(BOB), + 1, 0, [1u8; 32], [1u8; 32], + vec![], vec![] + ), + ParentchainError::::InconsistentState + ); + }); +} diff --git a/crates/skw-blockchain-pallets/pallet-registry/Cargo.toml b/crates/skw-blockchain-pallets/pallet-registry/Cargo.toml index 8843a82..b0c8c3f 100644 --- a/crates/skw-blockchain-pallets/pallet-registry/Cargo.toml +++ b/crates/skw-blockchain-pallets/pallet-registry/Cargo.toml @@ -16,7 +16,6 @@ targets = ['x86_64-unknown-linux-gnu'] test-env-log = "0.2.7" log = "*" env_logger="*" -pallet-balances = {default-features = false, git = 'https://github.com/paritytech/substrate.git', tag = 'monthly-2021-12', version = '4.0.0-dev'} [dependencies] codec = {default-features = false, features = ['derive'], package = 'parity-scale-codec', version = '2.0.0'} diff --git a/crates/skw-blockchain-pallets/pallet-registry/src/lib.rs b/crates/skw-blockchain-pallets/pallet-registry/src/lib.rs index a617bcd..b7bfff5 100644 --- a/crates/skw-blockchain-pallets/pallet-registry/src/lib.rs +++ b/crates/skw-blockchain-pallets/pallet-registry/src/lib.rs @@ -11,11 +11,13 @@ mod mock; // #[cfg(feature = "runtime-benchmarks")] // mod benchmarking; +type ShardId = u64; #[frame_support::pallet] pub mod pallet { use frame_support::{dispatch::DispatchResult, pallet_prelude::*}; use frame_system::pallet_prelude::*; use frame_support::sp_runtime::traits::Saturating; + use frame_support::sp_runtime::SaturatedConversion; use super::*; #[pallet::config] @@ -24,6 +26,9 @@ pub mod pallet { #[pallet::constant] type RegistrationDuration: Get; + + #[pallet::constant] + type MaxActiveShards: Get; // type ForceOrigin: EnsureOrigin; } @@ -45,14 +50,27 @@ pub mod pallet { #[pallet::getter(fn public_key_of)] pub(super) type PublicKey = StorageMap<_, Twox64Concat, T::AccountId, Vec>; + + #[pallet::storage] + #[pallet::getter(fn shard_members_of)] + pub(super) type ShardMembers = StorageMap<_, Twox64Concat, ShardId, Vec>; + + #[pallet::storage] + #[pallet::getter(fn beacon_index_of)] + pub(super) type BeaconIndex = StorageDoubleMap<_, Twox64Concat, ShardId, + Twox64Concat, T::AccountId, u64>; - + #[pallet::storage] + #[pallet::getter(fn beacon_count_of)] + pub(super) type BeaconCount = StorageMap<_, Twox64Concat, ShardId, u64>; + #[pallet::event] #[pallet::generate_deposit(pub(super) fn deposit_event)] pub enum Event { SecretKeeperRegistered(T::AccountId), SecretKeeperRenewed(T::AccountId), SecretKeeperRemoved(T::AccountId), + NewMemberForShard(ShardId), } #[pallet::error] @@ -61,6 +79,7 @@ pub mod pallet { DuplicateRegistration, RegistrationNotFound, Unexpected, + InvalidShardId, } #[pallet::call] @@ -75,8 +94,6 @@ pub mod pallet { let who = ensure_signed(origin)?; ensure!(!>::contains_key(&who), Error::::DuplicateRegistration); - // TODO: do we really need this? - ensure!(!>::contains_key(&who), Error::::DuplicateRegistration); ensure!(Self::validate_signature(signature), Error::::InvalidSecretKeeper); // TODO: check for key validity @@ -105,8 +122,6 @@ pub mod pallet { let who = ensure_signed(origin)?; ensure!(>::contains_key(&who), Error::::RegistrationNotFound); - // TODO: do we really need this? - ensure!(>::contains_key(&who), Error::::RegistrationNotFound); ensure!(Self::validate_signature(signature), Error::::InvalidSecretKeeper); // TODO: check for key validity @@ -138,6 +153,38 @@ pub mod pallet { false => Err(Error::::RegistrationNotFound.into()) } } + + #[pallet::weight(10_000 + T::DbWeight::get().reads_writes(2, 3))] + pub fn register_running_shard( + origin: OriginFor, + shard: ShardId, + ) -> DispatchResult { + let who = ensure_signed(origin)?; + + ensure!(Self::is_valid_shard_id(shard), Error::::InvalidShardId); + ensure!(Self::is_valid_secret_keeper(&who), Error::::InvalidSecretKeeper); + let shard_members = Self::shard_members_of(shard); + let shard_members = match shard_members { + None => { + // first member of the shard + let mut shard_members = Vec::new(); + shard_members.push(who.clone()); + shard_members + }, + Some(mut shard_members) => { + shard_members.push(who.clone()); + shard_members + } + }; + + >::insert(&shard, &who, shard_members.len() as u64); + >::mutate(&shard, + |count| *count = Some(shard_members.len() as u64)); + >::mutate(&shard, + |members| *members = Some(shard_members)); + + Ok(()) + } } impl Pallet { @@ -191,6 +238,65 @@ pub mod pallet { } } + pub fn is_valid_shard_id(shard: ShardId) -> bool { + shard <= T::MaxActiveShards::get() + } + + pub fn is_beacon_turn( + block_number: T::BlockNumber, + who: &T::AccountId, + shard: ShardId, + threshold: u64, + ) -> bool { + if !Self::is_valid_shard_id(shard) || !Self::is_valid_secret_keeper(who) { + return false; + } + + if threshold < 1 { + return false; + } + + let beacon_index = Self::beacon_index_of(shard, who); + if beacon_index.is_none() { + // sanity check + return false; + } + + let beacon_count = Self::beacon_count_of(shard); + if beacon_count.is_none() || beacon_count == Some(0) { + // sanity check + return false; + } + + let beacon_index = beacon_index.unwrap(); + let beacon_count = beacon_count.unwrap(); + + if threshold >= beacon_count { + // always allow when threshold is greater than or equal to the number of members + return true; + } + + // NO PANIC BELOW THIS LINE + let block_number = block_number.saturated_into::(); + + // 1 2 3 4 5 6 7 8 9 + // _ X X X _ _ _ _ _ + ( + block_number % beacon_count <= beacon_index && + beacon_index <= block_number % beacon_count + threshold - 1 + ) + || + // X X _ _ _ _ _ _ X + ( + block_number % beacon_count + threshold - 1 > beacon_count && + ( + beacon_count - (block_number % beacon_count + threshold - 1) % beacon_count <= beacon_index + || + beacon_index <= block_number % beacon_count + threshold - 1 - beacon_count + ) + ) + } + // TODO: move this to a shared crate pub fn compress_hex_key(s: &Vec) -> Vec { (0..s.len()) diff --git a/crates/skw-blockchain-pallets/pallet-registry/src/mock.rs b/crates/skw-blockchain-pallets/pallet-registry/src/mock.rs index 30430d6..70bf8b9 100644 --- a/crates/skw-blockchain-pallets/pallet-registry/src/mock.rs +++ b/crates/skw-blockchain-pallets/pallet-registry/src/mock.rs @@ -57,11 +57,13 @@ impl system::Config for Test { parameter_types! { pub const RegistrationDuration: u32 = 1_000_000_000; + pub const MaxActiveShards: u64 = 0; } impl pallet_registry::Config for Test { type Event = Event; type RegistrationDuration = RegistrationDuration; + type MaxActiveShards = MaxActiveShards; } // Build genesis storage according to the mock runtime. diff --git a/crates/skw-blockchain-pallets/pallet-registry/src/tests.rs b/crates/skw-blockchain-pallets/pallet-registry/src/tests.rs index 681ceff..1f138e7 100644 --- a/crates/skw-blockchain-pallets/pallet-registry/src/tests.rs +++ b/crates/skw-blockchain-pallets/pallet-registry/src/tests.rs @@ -8,6 +8,10 @@ const PUBLIC_KEY: &str = "38d58afd1001bb265bce6ad24ff58239c62e1c98886cda9d7ccf41 type AccountId = u64; const ALICE: AccountId = 1; +const BOB: AccountId = 2; +const CHARLIE: AccountId = 3; +const DAVE: AccountId = 4; +const FRED: AccountId = 5; fn decode_hex_uncompressed(s: &str) -> Result, ParseIntError> { (0..s.len()) @@ -98,3 +102,79 @@ fn it_removes_registration() { assert_eq! (Registry::is_valid_secret_keeper(&ALICE), false); }); } + +#[test] +fn is_beacon_turn_test() { + + new_test_ext().execute_with(|| { + System::set_block_number(1); + + let public_key = decode_hex_uncompressed(PUBLIC_KEY).unwrap(); + assert_ok!( Registry::register_secret_keeper( Origin::signed(ALICE), public_key.clone(), Vec::new() ) ); + assert_ok!( Registry::register_running_shard( Origin::signed(ALICE), 0 ) ); + + assert_ok!( Registry::register_secret_keeper( Origin::signed(BOB), public_key.clone(), Vec::new() ) ); + assert_ok!( Registry::register_running_shard( Origin::signed(BOB), 0 ) ); + + assert_ok!( Registry::register_secret_keeper( Origin::signed(CHARLIE), public_key.clone(), Vec::new() ) ); + assert_ok!( Registry::register_running_shard( Origin::signed(CHARLIE), 0 ) ); + + assert_ok!( Registry::register_secret_keeper( Origin::signed(DAVE), public_key.clone(), Vec::new() ) ); + assert_ok!( Registry::register_running_shard( Origin::signed(DAVE), 0 ) ); + + assert_ok!( Registry::register_secret_keeper( Origin::signed(FRED), public_key.clone(), Vec::new() ) ); + assert_ok!( Registry::register_running_shard( Origin::signed(FRED), 0 ) ); + + // threshold = 1; block_num = 1; Alice can submit, others cannot + assert!( Registry::is_beacon_turn(1, &ALICE, 0, 1) == true); + assert!( Registry::is_beacon_turn(1, &BOB, 0, 1) == false); + assert!( Registry::is_beacon_turn(1, &CHARLIE, 0, 1) == false); + + // threshold = 1; block_num = 2; Bob can submit, others cannot + assert!( Registry::is_beacon_turn(2, &ALICE, 0, 1) == false); + assert!( Registry::is_beacon_turn(2, &BOB, 0, 1) == true); + assert!( Registry::is_beacon_turn(2, &CHARLIE, 0, 1) == false); + + // threshold = 3; block_num = 1; + // X X X _ _ + assert!( Registry::is_beacon_turn(1, &ALICE, 0, 3) == true); + assert!( Registry::is_beacon_turn(1, &BOB, 0, 3) == true); + assert!( Registry::is_beacon_turn(1, &CHARLIE, 0, 3) == true); + assert!( Registry::is_beacon_turn(1, &DAVE, 0, 3) == false); + assert!( Registry::is_beacon_turn(1, &FRED, 0, 3) == false); + + // threshold = 3; block_num = 2; + // _ X X X _ + assert!( Registry::is_beacon_turn(2, &ALICE, 0, 3) == false); + assert!( Registry::is_beacon_turn(2, &BOB, 0, 3) == true); + assert!( Registry::is_beacon_turn(2, &CHARLIE, 0, 3) == true); + assert!( Registry::is_beacon_turn(2, &DAVE, 0, 3) == true); + assert!( Registry::is_beacon_turn(2, &FRED, 0, 3) == false); + + // threshold = 3; block_num = 4; + // X _ _ X X + assert!( Registry::is_beacon_turn(4, &ALICE, 0, 3) == true); + assert!( Registry::is_beacon_turn(4, &BOB, 0, 3) == false); + assert!( Registry::is_beacon_turn(4, &CHARLIE, 0, 3) == false); + assert!( Registry::is_beacon_turn(4, &DAVE, 0, 3) == true); + assert!( Registry::is_beacon_turn(4, &FRED, 0, 3) == true); + }); +} + +#[test] +fn is_beacon_turn_test_signle_keeper() { + + new_test_ext().execute_with(|| { + System::set_block_number(1); + + let public_key = decode_hex_uncompressed(PUBLIC_KEY).unwrap(); + assert_ok!( Registry::register_secret_keeper( Origin::signed(ALICE), public_key.clone(), Vec::new() ) ); + assert_ok!( Registry::register_running_shard( Origin::signed(ALICE), 0 ) ); + + // threshold = 1; block_num = 1; Alice can submit, others cannot + assert!( Registry::is_beacon_turn(1, &ALICE, 0, 1) == true); + assert!( Registry::is_beacon_turn(2, &ALICE, 0, 1) == true); + assert!( Registry::is_beacon_turn(3, &ALICE, 0, 1) == true); + + }); +} diff --git a/crates/skw-blockchain-pallets/pallet-s-contract/Cargo.toml b/crates/skw-blockchain-pallets/pallet-s-contract/Cargo.toml index fe4e295..8cc6675 100644 --- a/crates/skw-blockchain-pallets/pallet-s-contract/Cargo.toml +++ b/crates/skw-blockchain-pallets/pallet-s-contract/Cargo.toml @@ -16,10 +16,8 @@ targets = ['x86_64-unknown-linux-gnu'] test-env-log = "0.2.7" log = "*" env_logger="*" -pallet-balances = {default-features = false, git = 'https://github.com/paritytech/substrate.git', tag = 'monthly-2021-12', version = '4.0.0-dev'} [dependencies] -pallet-registry = { version = "3.0.0", default-features = false, path = "../pallet-registry" } pallet-secrets = { version = "3.0.0", default-features = false, path = "../pallet-secrets" } codec = {default-features = false, features = ['derive'], package = 'parity-scale-codec', version = '2.0.0'} frame-benchmarking = { default-features = false, git = 'https://github.com/paritytech/substrate.git', optional = true, tag = 'monthly-2021-12', version = '4.0.0-dev'} diff --git a/crates/skw-blockchain-pallets/pallet-s-contract/src/lib.rs b/crates/skw-blockchain-pallets/pallet-s-contract/src/lib.rs index af6d56e..c79529b 100644 --- a/crates/skw-blockchain-pallets/pallet-s-contract/src/lib.rs +++ b/crates/skw-blockchain-pallets/pallet-s-contract/src/lib.rs @@ -16,6 +16,7 @@ mod mock; pub type CallIndex = u64; pub type EncodedCall = Vec; +pub type ShardId = u64; #[frame_support::pallet] pub mod pallet { @@ -26,8 +27,7 @@ pub mod pallet { #[pallet::config] pub trait Config: frame_system::Config + - pallet_secrets::Config + - pallet_registry::Config + pallet_secrets::Config { type Event: From> + IsType<::Event>; @@ -45,8 +45,8 @@ pub mod pallet { // index of EncodedCall ALWAYS should equals to its CallIndex #[pallet::storage] #[pallet::getter(fn call_history_of)] - pub(super) type CallHistory = StorageMap<_, Blake2_128Concat, - SecretId, Vec<(EncodedCall, T::AccountId, bool)> >; + pub(super) type CallHistory = StorageMap<_, Twox64Concat, + ShardId, Vec<(T::BlockNumber, EncodedCall, T::AccountId)> >; #[pallet::event] #[pallet::generate_deposit(pub(super) fn deposit_event)] @@ -72,8 +72,9 @@ pub mod pallet { pub fn register_contract( origin: OriginFor, metadata: Vec, - contract_public_key: Vec, + wasm_blob_cid: Vec, initialization_call: EncodedCall, + shard_id: ShardId, ) -> DispatchResult { let deployer = ensure_signed(origin.clone())?; @@ -83,7 +84,7 @@ pub mod pallet { ); match pallet_secrets::Pallet::::register_secret_contract( - origin, metadata, contract_public_key + origin, metadata, wasm_blob_cid, shard_id ) { Ok(()) => { // TODO: is this always right?? @@ -117,40 +118,6 @@ pub mod pallet { } } } - - #[pallet::weight(10_000 + T::DbWeight::get().reads_writes(2, 3))] - pub fn fullfill_call( - origin: OriginFor, - contract_index: SecretId, - call_index: CallIndex, - // gotta structure this into the skw-primritives - call_output: Vec, - ) -> DispatchResult { - let who = ensure_signed(origin)?; - ensure!(pallet_registry::Pallet::::is_valid_secret_keeper(&who), Error::::Unauthorized); - ensure!(Self::validate_output(&call_output), Error::::InvalidCallOutput); - - match Self::call_history_of(&contract_index) { - Some(mut history) => { - match history.get_mut(call_index as usize) { - Some(res) => { - let mut res_clone = res.clone(); - res_clone.2 = true; - * res = res_clone; - - Self::deposit_event(Event::::CallFullfilled(contract_index, call_index, call_output)); - Ok(()) - }, - None => { - Err(Error::::InvalidCallIndex.into()) - } - } - }, - None => { - Err(Error::::InvalidContractIndex.into()) - } - } - } } impl Pallet { @@ -178,7 +145,8 @@ pub mod pallet { } if let Some(mut content) = history { - content.push((call, origin, false)); + let now = frame_system::Pallet::::block_number(); + content.push((now, call, origin)); >::insert(&contract_index, content.clone()); Some(content.len() as u64) } else { @@ -189,7 +157,7 @@ pub mod pallet { pub fn get_call( contract_index: SecretId, call_index: CallIndex - ) -> Option<(EncodedCall, T::AccountId, bool)> { + ) -> Option<(T::BlockNumber, EncodedCall, T::AccountId)> { match Self::call_history_of(&contract_index) { Some(history) => { match history.get(call_index as usize) { diff --git a/crates/skw-blockchain-pallets/pallet-s-contract/src/mock.rs b/crates/skw-blockchain-pallets/pallet-s-contract/src/mock.rs index de789c9..fe5c7e8 100644 --- a/crates/skw-blockchain-pallets/pallet-s-contract/src/mock.rs +++ b/crates/skw-blockchain-pallets/pallet-s-contract/src/mock.rs @@ -23,7 +23,6 @@ frame_support::construct_runtime!( System: frame_system::{Pallet, Call, Config, Storage, Event}, Secrets: pallet_secrets::{Pallet, Call, Storage, Event}, SContract: pallet_s_contract::{Pallet, Call, Storage, Event}, - Registry: pallet_registry::{Pallet, Call, Storage, Event}, } ); @@ -60,16 +59,18 @@ impl system::Config for Test { parameter_types! { pub const IPFSCIDLength: u32 = 46; + pub const MaxActiveShards: u64 = 0; } impl pallet_secrets::Config for Test { type Event = Event; type IPFSCIDLength = IPFSCIDLength; + type MaxActiveShards = MaxActiveShards; } parameter_types! { - pub const MaxCallLength: u32 = 128; - pub const MaxOutputLength: u32 = 256; + pub const MaxCallLength: u32 = 512; + pub const MaxOutputLength: u32 = 1024; } impl pallet_s_contract::Config for Test { @@ -78,14 +79,6 @@ impl pallet_s_contract::Config for Test { type MaxOutputLength = MaxOutputLength; } -parameter_types! { - pub const RegistrationDuration: u32 = 1_000_000_000; -} - -impl pallet_registry::Config for Test { - type Event = Event; - type RegistrationDuration = RegistrationDuration; -} // Build genesis storage according to the mock runtime. pub fn new_test_ext() -> sp_io::TestExternalities { system::GenesisConfig::default().build_storage::().unwrap().into() diff --git a/crates/skw-blockchain-pallets/pallet-s-contract/src/tests.rs b/crates/skw-blockchain-pallets/pallet-s-contract/src/tests.rs index 2aadcd7..c19ace1 100644 --- a/crates/skw-blockchain-pallets/pallet-s-contract/src/tests.rs +++ b/crates/skw-blockchain-pallets/pallet-s-contract/src/tests.rs @@ -1,51 +1,38 @@ -use super::Event as SContractEvent; use pallet_secrets::Event as SecretsEvent; use frame_support::{assert_ok}; use crate::mock::{Event, *}; -use sp_std::num::ParseIntError; const IPFS_CID_1: &str = "QmaibP61e3a4r6Bp895FQFB6ohqt5gMK4yeNy6yXxBmi8N"; -const PUBLIC_KEY: &str = "38d58afd1001bb265bce6ad24ff58239c62e1c98886cda9d7ccf41594f37d52f"; const ENCODED_CALL: &str = "1111111111222222222211111111112222222222"; type AccountId = u64; - const ALICE: AccountId = 1; -fn decode_hex_uncompressed(s: &str) -> Result, ParseIntError> { - (0..s.len()) - .step_by(1) - .map(|i| u8::from_str_radix(&s[i..i + 1], 16)) - .collect() -} -fn compress_hex_key(s: &Vec) -> Vec { - (0..s.len()) - .step_by(2) - .map(|i| s[i] * 16 + s[i + 1]) - .collect() -} - #[test] fn it_register_secret_contracts() { new_test_ext().execute_with(|| { System::set_block_number(1); - let public_key = decode_hex_uncompressed(PUBLIC_KEY).unwrap(); assert_ok!( - SContract::register_contract( Origin::signed(ALICE), IPFS_CID_1.as_bytes().to_vec(), public_key.clone(), ENCODED_CALL.as_bytes().to_vec()) + SContract::register_contract( + Origin::signed(ALICE), + IPFS_CID_1.as_bytes().to_vec(), + IPFS_CID_1.as_bytes().to_vec(), + ENCODED_CALL.as_bytes().to_vec(), + 0, + ) ); - let pk = compress_hex_key(&public_key); assert! (System::events().iter().all(|evt| { - evt.event == Event::Secrets(SecretsEvent::SecretContractRegistered(0, pk.clone())) + evt.event == Event::Secrets(SecretsEvent::SecretContractRegistered(0)) }) ); let history = SContract::call_history_of(0).unwrap(); assert_eq! (history.len(), 1); - assert_eq! (history[0], (ENCODED_CALL.as_bytes().to_vec(), ALICE, false)); + assert_eq! (history[0], (1, ENCODED_CALL.as_bytes().to_vec(), ALICE)); }); } diff --git a/crates/skw-blockchain-pallets/pallet-secrets/Cargo.toml b/crates/skw-blockchain-pallets/pallet-secrets/Cargo.toml index b33dc33..0c69541 100644 --- a/crates/skw-blockchain-pallets/pallet-secrets/Cargo.toml +++ b/crates/skw-blockchain-pallets/pallet-secrets/Cargo.toml @@ -16,7 +16,6 @@ targets = ['x86_64-unknown-linux-gnu'] test-env-log = "0.2.7" log = "*" env_logger="*" -pallet-balances = {default-features = false, git = 'https://github.com/paritytech/substrate.git', tag = 'monthly-2021-12', version = '4.0.0-dev'} [dependencies] codec = {default-features = false, features = ['derive'], package = 'parity-scale-codec', version = '2.0.0'} diff --git a/crates/skw-blockchain-pallets/pallet-secrets/src/lib.rs b/crates/skw-blockchain-pallets/pallet-secrets/src/lib.rs index 1ef5bdf..1802a5a 100644 --- a/crates/skw-blockchain-pallets/pallet-secrets/src/lib.rs +++ b/crates/skw-blockchain-pallets/pallet-secrets/src/lib.rs @@ -13,6 +13,7 @@ mod benchmarking; pub type SecretId = u64; pub type CallIndex = u64; +pub type ShardId = u64; #[frame_support::pallet] pub mod pallet { @@ -26,6 +27,9 @@ pub mod pallet { #[pallet::constant] type IPFSCIDLength: Get; + + #[pallet::constant] + type MaxActiveShards: Get; // type ForceOrigin: EnsureOrigin; } @@ -33,40 +37,45 @@ pub mod pallet { #[pallet::generate_store(pub(super) trait Store)] pub struct Pallet(_); + /// Secret Metadata of generic secrets & contracts #[pallet::storage] #[pallet::getter(fn metadata_of)] - pub(super) type Metadata = StorageMap<_, Blake2_128Concat, SecretId, Vec>; - - // we gotta do more checks with this public key - // -> can they duplicate? should not trust clients for all this info - #[pallet::storage] - #[pallet::getter(fn public_key_of_contract)] - pub(super) type ContractPublicKey = StorageMap<_, Blake2_128Concat, SecretId, Vec>; - - #[pallet::storage] - #[pallet::getter(fn high_remote_call_index_of)] - pub(super) type HighRemoteCallIndex = StorageMap<_, Twox64Concat, SecretId, CallIndex>; + pub(super) type Metadata = StorageMap<_, Twox64Concat, SecretId, Vec>; + /// owner of a generic secret - not useful for contracts #[pallet::storage] #[pallet::getter(fn owner_of)] - pub(super) type Owner = StorageMap<_, Blake2_128Concat, SecretId, T::AccountId>; + pub(super) type Owner = StorageMap<_, Twox64Concat, SecretId, T::AccountId>; + /// operator of a generic secret - not useful for contracts #[pallet::storage] - pub(super) type Operator = StorageDoubleMap<_, Blake2_128Concat, SecretId, Twox64Concat, T::AccountId, bool>; + pub(super) type Operator = StorageDoubleMap<_, Twox64Concat, SecretId, Twox64Concat, T::AccountId, bool>; + /// the secret ID of the next registered secret #[pallet::type_value] pub(super) fn DefaultId() -> SecretId { 0u64 } #[pallet::storage] #[pallet::getter(fn current_secret_id)] - pub(super) type CurrentSecertId = StorageValue<_, SecretId, ValueQuery, DefaultId>; + pub(super) type CurrentSecretId = StorageValue<_, SecretId, ValueQuery, DefaultId>; + + /// ================== Secret Contract Specific Fields ================== + /// Wasm Blob CID of a secret contract + #[pallet::storage] + #[pallet::getter(fn wasm_blob_of)] + pub(super) type WasmBlob = StorageMap<_, Twox64Concat, SecretId, Vec>; + + /// shard where the contract is located + #[pallet::storage] + #[pallet::getter(fn home_shard_of)] + pub(super) type HomeShard = StorageMap<_, Twox64Concat, SecretId, ShardId>; + /// ================== Secret Contract Specific Fields ================== #[pallet::event] #[pallet::generate_deposit(pub(super) fn deposit_event)] pub enum Event { SecretRegistered(SecretId), - SecretContractRegistered(SecretId, Vec), + SecretContractRegistered(SecretId), SecretUpdated(SecretId), - SecretContractRolluped(SecretId, CallIndex), MembershipGranted(SecretId, T::AccountId), MembershipRevoked(SecretId, T::AccountId), SecretBurnt(SecretId), @@ -80,6 +89,8 @@ pub mod pallet { ContractCallIndexError, ContractPublicKeyNotValid, SecretNotExecutable, + NotAllowedForSecretContracts, + InvalidShardId, } #[pallet::call] @@ -93,40 +104,38 @@ pub mod pallet { let who = ensure_signed(origin)?; ensure!(metadata.len() == T::IPFSCIDLength::get() as usize, Error::::MetadataNotValid); - let id = >::get(); + let id = >::get(); let new_id = id.saturating_add(1); >::insert(&id, metadata); >::insert(&id, who); - >::set(new_id); + >::set(new_id); Self::deposit_event(Event::::SecretRegistered(id)); Ok(()) } - #[pallet::weight(10_000 + T::DbWeight::get().reads_writes(2, 5))] + #[pallet::weight(10_000 + T::DbWeight::get().reads_writes(2, 4))] pub fn register_secret_contract( origin: OriginFor, metadata: Vec, - contract_public_key: Vec + wasm_blob_cid: Vec, + shard_id: ShardId, ) -> DispatchResult { let who = ensure_signed(origin)?; ensure!(metadata.len() == T::IPFSCIDLength::get() as usize, Error::::MetadataNotValid); - - // compress the pk: [0x3, 0x2, 0x1, 0xf] => [0x32, 0x1f] - // TODO: when the public key is invalid on compression - exception needs to be handled - let pk: Vec = Self::compress_hex_key(&contract_public_key); - ensure!(pk.len() == 32 as usize, Error::::ContractPublicKeyNotValid); - - let id = >::get(); + ensure!(wasm_blob_cid.len() == T::IPFSCIDLength::get() as usize, Error::::MetadataNotValid); + ensure!(T::MaxActiveShards::get() >= shard_id, Error::::InvalidShardId); + + let id = >::get(); let new_id = id.saturating_add(1); >::insert(&id, metadata); - >::insert(&id, pk.clone()); - >::insert(&id, 0u64); + >::insert(&id, wasm_blob_cid); >::insert(&id, who); - >::set(new_id); - Self::deposit_event(Event::::SecretContractRegistered(id, pk.clone())); + >::set(new_id); + >::insert(&id, shard_id); + Self::deposit_event(Event::::SecretContractRegistered(id)); Ok(()) } @@ -168,6 +177,7 @@ pub mod pallet { metadata: Vec ) -> DispatchResult { let who = ensure_signed(origin)?; + ensure!(Self::is_executable(secret_id) == false, Error::::NotAllowedForSecretContracts); ensure!(metadata.len() == T::IPFSCIDLength::get() as usize, Error::::MetadataNotValid); ensure!(Self::authorize_access(who, secret_id) == true, Error::::AccessDenied); @@ -178,45 +188,19 @@ pub mod pallet { Ok(()) } - #[pallet::weight(10_000 + T::DbWeight::get().reads_writes(3, 3))] - pub fn contract_rollup( - origin: OriginFor, - secret_id: SecretId, - metadata: Vec, - new_high_remote_call_index: CallIndex, - ) -> DispatchResult { - let who = ensure_signed(origin)?; - ensure!(metadata.len() == T::IPFSCIDLength::get() as usize, Error::::MetadataNotValid); - ensure!(Self::authorize_access(who, secret_id) == true, Error::::AccessDenied); - ensure!(Self::is_executable(secret_id) == true, Error::::SecretNotExecutable); - ensure!(new_high_remote_call_index > >::get(&secret_id).unwrap(), Error::::ContractCallIndexError); - - // so far, it is garenteed the secret_id is valid - >::mutate(&secret_id, |meta| *meta = Some(metadata)); - >::mutate(&secret_id, |index| *index = Some(new_high_remote_call_index)); - - Self::deposit_event(Event::::SecretContractRolluped(secret_id, new_high_remote_call_index)); - - Ok(()) - } - #[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1, 1))] pub fn burn_secret( origin: OriginFor, secret_id: SecretId, ) -> DispatchResult { let who = ensure_signed(origin)?; + ensure!(Self::is_executable(secret_id) == false, Error::::NotAllowedForSecretContracts); ensure!(Self::authorize_owner(who, secret_id) == true, Error::::AccessDenied); // so far, it is garenteed the secret_id is valid >::take(&secret_id); >::take(&secret_id); >::remove_prefix(&secret_id, None); - - if Self::is_executable(secret_id) { - >::take(&secret_id); - >::take(&secret_id); - } Self::deposit_event(Event::::SecretBurnt(secret_id)); @@ -242,7 +226,7 @@ pub mod pallet { pub fn is_executable( secret_id: SecretId ) -> bool { - >::contains_key(&secret_id) && >::contains_key(&secret_id) + >::contains_key(&secret_id) && >::contains_key(&secret_id) } pub fn compress_hex_key(s: &Vec) -> Vec { diff --git a/crates/skw-blockchain-pallets/pallet-secrets/src/mock.rs b/crates/skw-blockchain-pallets/pallet-secrets/src/mock.rs index 2c78171..87bbfa5 100644 --- a/crates/skw-blockchain-pallets/pallet-secrets/src/mock.rs +++ b/crates/skw-blockchain-pallets/pallet-secrets/src/mock.rs @@ -56,11 +56,13 @@ impl system::Config for Test { parameter_types! { pub const IPFSCIDLength: u32 = 46; + pub const MaxActiveShards: u64 = 0; } impl pallet_secrets::Config for Test { type Event = Event; type IPFSCIDLength = IPFSCIDLength; + type MaxActiveShards = MaxActiveShards; } // Build genesis storage according to the mock runtime. diff --git a/crates/skw-blockchain-pallets/pallet-secrets/src/tests.rs b/crates/skw-blockchain-pallets/pallet-secrets/src/tests.rs index 60d47d3..240f30a 100644 --- a/crates/skw-blockchain-pallets/pallet-secrets/src/tests.rs +++ b/crates/skw-blockchain-pallets/pallet-secrets/src/tests.rs @@ -1,31 +1,15 @@ use super::Event as SecretsEvent; use frame_support::{assert_ok, assert_noop}; use crate::{mock::{Event, *}, Error}; -use sp_std::num::ParseIntError; const IPFS_CID_1: &str = "QmaibP61e3a4r6Bp895FQFB6ohqt5gMK4yeNy6yXxBmi8N"; const IPFS_CID_2: &str = "QmRTphmVWBbKAVNwuc8tjJjdxzJsxB7ovpGHyUUCE6Rnsb"; -const PUBLIC_KEY: &str = "38d58afd1001bb265bce6ad24ff58239c62e1c98886cda9d7ccf41594f37d52f"; type AccountId = u64; const ALICE: AccountId = 1; const BOB: AccountId = 2; -fn decode_hex_uncompressed(s: &str) -> Result, ParseIntError> { - (0..s.len()) - .step_by(1) - .map(|i| u8::from_str_radix(&s[i..i + 1], 16)) - .collect() -} - -fn compress_hex_key(s: &Vec) -> Vec { - (0..s.len()) - .step_by(2) - .map(|i| s[i] * 16 + s[i + 1]) - .collect() -} - #[test] fn it_register_secrets() { new_test_ext().execute_with(|| { @@ -52,20 +36,24 @@ fn it_register_secret_contracts() { new_test_ext().execute_with(|| { System::set_block_number(1); - let public_key = decode_hex_uncompressed(PUBLIC_KEY).unwrap(); assert_ok!( - Secrets::register_secret_contract( Origin::signed(ALICE), IPFS_CID_1.as_bytes().to_vec(), public_key.clone()) + Secrets::register_secret_contract( + Origin::signed(ALICE), + IPFS_CID_1.as_bytes().to_vec(), + IPFS_CID_2.as_bytes().to_vec(), + 0, + ) ); - let compressed_pk = compress_hex_key(&public_key); assert! (System::events().iter().all(|evt| { - evt.event == Event::Secrets(SecretsEvent::SecretContractRegistered(0, compressed_pk.clone())) + evt.event == Event::Secrets(SecretsEvent::SecretContractRegistered(0)) }) ); assert_eq! (Secrets::owner_of(0).unwrap(), ALICE); assert_eq! (Secrets::metadata_of(0).unwrap(), IPFS_CID_1.as_bytes().to_vec()); - assert_eq! (Secrets::public_key_of_contract(0).unwrap(), compressed_pk); + assert_eq! (Secrets::wasm_blob_of(0).unwrap(), IPFS_CID_2.as_bytes().to_vec()); + assert_eq! (Secrets::home_shard_of(0).unwrap(), 0); }); } @@ -88,30 +76,6 @@ fn it_updates_metadata() { }); } - -#[test] -fn it_rollup_contracts() { - new_test_ext().execute_with(|| { - System::set_block_number(1); - - let public_key = decode_hex_uncompressed(PUBLIC_KEY).unwrap(); - - // 1. Alice register a secret w/ID = 0 - assert_ok!( - Secrets::register_secret_contract( Origin::signed(ALICE), IPFS_CID_1.as_bytes().to_vec(), public_key.clone()) - ); - assert_eq! (Secrets::metadata_of(0).unwrap(), IPFS_CID_1.as_bytes().to_vec()); - assert_eq! (Secrets::high_remote_call_index_of(0).unwrap(), 0u64); - - // 2. Alice rolled up the contract after 1000 operations - assert_ok!( - Secrets::contract_rollup( Origin::signed(ALICE), 0, IPFS_CID_2.as_bytes().to_vec(), 1_000u64 ) - ); - assert_eq! (Secrets::metadata_of(0).unwrap(), IPFS_CID_2.as_bytes().to_vec()); - assert_eq! (Secrets::high_remote_call_index_of(0).unwrap(), 1_000u64); - }); -} - #[test] fn it_nominate_n_remove_member() { new_test_ext().execute_with(|| { diff --git a/crates/skw-blockchain-runtime/Cargo.toml b/crates/skw-blockchain-runtime/Cargo.toml index ce421b1..2e9c43e 100644 --- a/crates/skw-blockchain-runtime/Cargo.toml +++ b/crates/skw-blockchain-runtime/Cargo.toml @@ -21,6 +21,7 @@ pallet-naming = { default-features = false, path = '../skw-blockchain-pallets/pa pallet-secrets = { default-features = false, path = '../skw-blockchain-pallets/pallet-secrets', version = '3.0.0' } pallet-s-contract = { default-features = false, path = '../skw-blockchain-pallets/pallet-s-contract', version = '3.0.0' } pallet-registry = { default-features = false, path = '../skw-blockchain-pallets/pallet-registry', version = '3.0.0' } +pallet-parentchain = { default-features = false, path = '../skw-blockchain-pallets/pallet-parentchain', version = '3.0.0' } codec = { default-features = false, features = ['derive'], package = 'parity-scale-codec', version = '2.0.0' } frame-benchmarking = {default-features = false, git = 'https://github.com/paritytech/substrate.git', optional = true, tag = 'monthly-2021-12', version = '4.0.0-dev'} diff --git a/crates/skw-blockchain-runtime/src/lib.rs b/crates/skw-blockchain-runtime/src/lib.rs index ee5a272..6f1b84b 100644 --- a/crates/skw-blockchain-runtime/src/lib.rs +++ b/crates/skw-blockchain-runtime/src/lib.rs @@ -42,6 +42,7 @@ pub use pallet_naming; pub use pallet_secrets; pub use pallet_s_contract; pub use pallet_registry; +pub use pallet_parentchain; /// An index to a block. pub type BlockNumber = u32; @@ -299,17 +300,19 @@ impl pallet_naming::Config for Runtime { } parameter_types! { - pub const IPFSCIDLength: u32 = 46; + pub const IPFSCIDLength: u32 = 46; + pub const MaxActiveShards: u64 = 0; } impl pallet_secrets::Config for Runtime { - type Event = Event; - type IPFSCIDLength = IPFSCIDLength; + type Event = Event; + type IPFSCIDLength = IPFSCIDLength; + type MaxActiveShards = MaxActiveShards; } parameter_types! { - pub const MaxCallLength: u32 = 128; - pub const MaxOutputLength: u32 = 256; + pub const MaxCallLength: u32 = 512; + pub const MaxOutputLength: u32 = 1024; } impl pallet_s_contract::Config for Runtime { @@ -324,6 +327,21 @@ parameter_types! { impl pallet_registry::Config for Runtime { type Event = Event; type RegistrationDuration = RegistrationDuration; + type MaxActiveShards = MaxActiveShards; +} + + +parameter_types! { + pub const DeplayThreshold: u32 = 20; + pub const MaxOutcomePerSubmission: u64 = 20; + pub const MaxSizePerOutcome: u64 = 1024; +} + +impl pallet_parentchain::Config for Runtime { + type Event = Event; + type DeplayThreshold = DeplayThreshold; + type MaxOutcomePerSubmission = MaxOutcomePerSubmission; + type MaxSizePerOutcome = MaxSizePerOutcome; } // Create the runtime by composing the FRAME pallets that were previously configured. @@ -346,6 +364,7 @@ construct_runtime!( Secrets: pallet_secrets::{Pallet, Call, Storage, Event}, SContract: pallet_s_contract::{Pallet, Call, Storage, Event}, Registry: pallet_registry::{Pallet, Call, Storage, Event}, + Parentchain: pallet_parentchain::{Pallet, Call, Storage, Event}, } ); diff --git a/crates/skw-contract-sdk/README.md b/crates/skw-contract-sdk/README.md deleted file mode 120000 index 32d46ee..0000000 --- a/crates/skw-contract-sdk/README.md +++ /dev/null @@ -1 +0,0 @@ -../README.md \ No newline at end of file diff --git a/mock-enclave/contract/Cargo.lock b/mock-enclave/contract/Cargo.lock deleted file mode 100644 index c4d35b2..0000000 --- a/mock-enclave/contract/Cargo.lock +++ /dev/null @@ -1,611 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "Inflector" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" - -[[package]] -name = "ahash" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "739f4a8db6605981345c5654f3a85b056ce52f37a39d34da03f25bf2151ea16e" - -[[package]] -name = "aho-corasick" -version = "0.7.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" -dependencies = [ - "memchr", -] - -[[package]] -name = "autocfg" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" - -[[package]] -name = "base64" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" - -[[package]] -name = "block-buffer" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" -dependencies = [ - "block-padding", - "generic-array", -] - -[[package]] -name = "block-padding" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" - -[[package]] -name = "borsh" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09a7111f797cc721407885a323fb071636aee57f750b1a4ddc27397eba168a74" -dependencies = [ - "borsh-derive", - "hashbrown 0.9.1", -] - -[[package]] -name = "borsh-derive" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "307f3740906bac2c118a8122fe22681232b244f1369273e45f1156b45c43d2dd" -dependencies = [ - "borsh-derive-internal", - "borsh-schema-derive-internal", - "proc-macro-crate", - "proc-macro2", - "syn", -] - -[[package]] -name = "borsh-derive-internal" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2104c73179359431cc98e016998f2f23bc7a05bc53e79741bcba705f30047bc" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "borsh-schema-derive-internal" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae29eb8418fcd46f723f8691a2ac06857d31179d33d2f2d91eb13967de97c728" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "bs58" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" - -[[package]] -name = "byteorder" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" - -[[package]] -name = "cfg-if" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "convert_case" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" - -[[package]] -name = "cpufeatures" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469" -dependencies = [ - "libc", -] - -[[package]] -name = "derive_more" -version = "0.99.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" -dependencies = [ - "convert_case", - "proc-macro2", - "quote", - "rustc_version", - "syn", -] - -[[package]] -name = "digest" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" -dependencies = [ - "generic-array", -] - -[[package]] -name = "generic-array" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "greeting" -version = "0.1.0" -dependencies = [ - "near-sdk", -] - -[[package]] -name = "hashbrown" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" -dependencies = [ - "ahash", -] - -[[package]] -name = "hashbrown" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "indexmap" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc633605454125dec4b66843673f01c7df2b89479b32e0ed634e43a91cff62a5" -dependencies = [ - "autocfg", - "hashbrown 0.11.2", -] - -[[package]] -name = "itoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" - -[[package]] -name = "keccak" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "libc" -version = "0.2.108" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8521a1b57e76b1ec69af7599e75e38e7b7fad6610f037db8c79b127201b5d119" - -[[package]] -name = "memchr" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" - -[[package]] -name = "memory_units" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3" - -[[package]] -name = "near-primitives-core" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2b3fb5acf3a494aed4e848446ef2d6ebb47dbe91c681105d4d1786c2ee63e52" -dependencies = [ - "base64", - "borsh", - "bs58", - "derive_more", - "hex", - "lazy_static", - "num-rational", - "serde", - "serde_json", - "sha2", -] - -[[package]] -name = "near-rpc-error-core" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffa8dbf8437a28ac40fcb85859ab0d0b8385013935b000c7a51ae79631dd74d9" -dependencies = [ - "proc-macro2", - "quote", - "serde", - "serde_json", - "syn", -] - -[[package]] -name = "near-rpc-error-macro" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c6111d713e90c7c551dee937f4a06cb9ea2672243455a4454cc7566387ba2d9" -dependencies = [ - "near-rpc-error-core", - "proc-macro2", - "quote", - "serde", - "serde_json", - "syn", -] - -[[package]] -name = "near-runtime-utils" -version = "4.0.0-pre.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a48d80c4ca1d4cf99bc16490e1e3d49826c150dfc4410ac498918e45c7d98e07" -dependencies = [ - "lazy_static", - "regex", -] - -[[package]] -name = "near-sdk" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7383e242d3e07bf0951e8589d6eebd7f18bb1c1fc5fbec3fad796041a6aebd1" -dependencies = [ - "base64", - "borsh", - "bs58", - "near-primitives-core", - "near-sdk-macros", - "near-vm-logic", - "serde", - "serde_json", - "wee_alloc", -] - -[[package]] -name = "near-sdk-core" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "284a78d9eb8eda58330462fa0023a6d7014c941df1f0387095e7dfd1dc0f2bce" -dependencies = [ - "Inflector", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "near-sdk-macros" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2037337438f97d1ce5f7c896cf229dc56dacd5c01142d1ef95a7d778cde6ce7d" -dependencies = [ - "near-sdk-core", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "near-vm-errors" -version = "4.0.0-pre.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e281d8730ed8cb0e3e69fb689acee6b93cdb43824cd69a8ffd7e1bfcbd1177d7" -dependencies = [ - "borsh", - "hex", - "near-rpc-error-macro", - "serde", -] - -[[package]] -name = "near-vm-logic" -version = "4.0.0-pre.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e11cb28a2d07f37680efdaf860f4c9802828c44fc50c08009e7884de75d982c5" -dependencies = [ - "base64", - "borsh", - "bs58", - "byteorder", - "near-primitives-core", - "near-runtime-utils", - "near-vm-errors", - "serde", - "sha2", - "sha3", -] - -[[package]] -name = "num-bigint" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-integer" -version = "0.1.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07" -dependencies = [ - "autocfg", - "num-bigint", - "num-integer", - "num-traits", - "serde", -] - -[[package]] -name = "num-traits" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" -dependencies = [ - "autocfg", -] - -[[package]] -name = "opaque-debug" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" - -[[package]] -name = "proc-macro-crate" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" -dependencies = [ - "toml", -] - -[[package]] -name = "proc-macro2" -version = "1.0.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba508cc11742c0dc5c1659771673afbab7a0efab23aa17e854cbab0837ed0b43" -dependencies = [ - "unicode-xid", -] - -[[package]] -name = "quote" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38bc8cc6a5f2e3655e0899c1b848643b2562f853f114bfec7be120678e3ace05" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "regex" -version = "1.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.6.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" - -[[package]] -name = "rustc_version" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" -dependencies = [ - "semver", -] - -[[package]] -name = "ryu" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c9613b5a66ab9ba26415184cfc41156594925a9cf3a2057e57f31ff145f6568" - -[[package]] -name = "semver" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "568a8e6258aa33c13358f81fd834adb854c6f7c9468520910a9b1e8fac068012" - -[[package]] -name = "serde" -version = "1.0.118" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06c64263859d87aa2eb554587e2d23183398d617427327cf2b3d0ed8c69e4800" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.118" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c84d3526699cd55261af4b941e4e725444df67aa4f9e6a3564f18030d12672df" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_json" -version = "1.0.72" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0ffa0837f2dfa6fb90868c2b5468cad482e175f7dad97e7421951e663f2b527" -dependencies = [ - "indexmap", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "sha2" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b69f9a4c9740d74c5baa3fd2e547f9525fa8088a8a958e0ca2409a514e33f5fa" -dependencies = [ - "block-buffer", - "cfg-if 1.0.0", - "cpufeatures", - "digest", - "opaque-debug", -] - -[[package]] -name = "sha3" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809" -dependencies = [ - "block-buffer", - "digest", - "keccak", - "opaque-debug", -] - -[[package]] -name = "syn" -version = "1.0.57" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4211ce9909eb971f111059df92c45640aad50a619cf55cd76476be803c4c68e6" -dependencies = [ - "proc-macro2", - "quote", - "unicode-xid", -] - -[[package]] -name = "toml" -version = "0.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" -dependencies = [ - "serde", -] - -[[package]] -name = "typenum" -version = "1.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b63708a265f51345575b27fe43f9500ad611579e764c79edbc2037b1121959ec" - -[[package]] -name = "unicode-xid" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" - -[[package]] -name = "version_check" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" - -[[package]] -name = "wee_alloc" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbb3b5a6b2bb17cb6ad44a2e68a43e8d2722c997da10e928665c72ec6c0a0b8e" -dependencies = [ - "cfg-if 0.1.10", - "libc", - "memory_units", - "winapi", -] - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/mock-enclave/contract/Cargo.toml b/mock-enclave/contract/Cargo.toml deleted file mode 100644 index dd4a518..0000000 --- a/mock-enclave/contract/Cargo.toml +++ /dev/null @@ -1,22 +0,0 @@ -[package] -name = "greeting" -version = "0.1.0" -authors = ['SkyeKiwi ', "Near Inc "] -edition = "2018" - -[lib] -crate-type = ["cdylib", "rlib"] - -[dependencies] -near-sdk = "3.1.0" - -[profile.release] -codegen-units = 1 -opt-level = "z" -lto = true -debug = false -panic = "abort" -overflow-checks = true - -[workspace] -members = [] diff --git a/mock-enclave/contract/src/lib.rs b/mock-enclave/contract/src/lib.rs deleted file mode 100644 index b193ce1..0000000 --- a/mock-enclave/contract/src/lib.rs +++ /dev/null @@ -1,108 +0,0 @@ -// To conserve gas, efficient serialization is achieved through Borsh (http://borsh.io/) -use near_sdk::borsh::{self, BorshDeserialize, BorshSerialize}; -use near_sdk::{env, near_bindgen, setup_alloc}; -use near_sdk::collections::LookupMap; - -setup_alloc!(); - -// Structs in Rust are similar to other languages, and may include impl keyword as shown below -// Note: the names of the structs are not important when calling the smart contract, but the function names are -#[near_bindgen] -#[derive(BorshDeserialize, BorshSerialize)] -pub struct Welcome { - records: LookupMap, -} - -impl Default for Welcome { - fn default() -> Self { - Self { - records: LookupMap::new(b"b".to_vec()), - } - } -} - -#[near_bindgen] -impl Welcome { - pub fn set_greeting(&mut self, message: String) { - let account_id = env::signer_account_id(); - - // Use env::log to record logs permanently to the blockchain! - env::log(format!("Saving greeting '{}' for account '{}'", message, account_id,).as_bytes()); - - self.records.insert(&account_id, &message); - } - - // `match` is similar to `switch` in other languages; here we use it to default to "Hello" if - // self.records.get(&account_id) is not yet defined. - // Learn more: https://doc.rust-lang.org/book/ch06-02-match.html#matching-with-optiont - pub fn get_greeting(&self, account_id: String) -> String { - match self.records.get(&account_id) { - Some(greeting) => greeting, - None => "Hello".to_string(), - } - } -} - -/* - * The rest of this file holds the inline tests for the code above - * Learn more about Rust tests: https://doc.rust-lang.org/book/ch11-01-writing-tests.html - * - * To run from contract directory: - * cargo test -- --nocapture - * - * From project root, to run in combination with frontend tests: - * yarn test - * - */ -#[cfg(test)] -mod tests { - use super::*; - use near_sdk::MockedBlockchain; - use near_sdk::{testing_env, VMContext}; - - // mock the context for testing, notice "signer_account_id" that was accessed above from env:: - fn get_context(input: Vec, is_view: bool) -> VMContext { - VMContext { - current_account_id: "alice_near".to_string(), - signer_account_id: "bob_near".to_string(), - signer_account_pk: vec![0, 1, 2], - predecessor_account_id: "carol_near".to_string(), - input, - block_index: 0, - block_timestamp: 0, - account_balance: 0, - account_locked_balance: 0, - storage_usage: 0, - attached_deposit: 0, - prepaid_gas: 10u64.pow(18), - random_seed: vec![0, 1, 2], - is_view, - output_data_receivers: vec![], - epoch_height: 19, - } - } - - #[test] - fn set_then_get_greeting() { - let context = get_context(vec![], false); - testing_env!(context); - let mut contract = Welcome::default(); - contract.set_greeting("howdy".to_string()); - assert_eq!( - "howdy".to_string(), - contract.get_greeting("bob_near".to_string()) - ); - } - - #[test] - fn get_default_greeting() { - let context = get_context(vec![], true); - testing_env!(context); - let contract = Welcome::default(); - // this test did not call set_greeting so should return the default "Hello" greeting - assert_eq!( - "Hello".to_string(), - contract.get_greeting("francis.near".to_string()) - ); - } -} diff --git a/mock-enclave/package.json b/mock-enclave/package.json index 1daf292..4ce80c0 100644 --- a/mock-enclave/package.json +++ b/mock-enclave/package.json @@ -5,10 +5,8 @@ "author": "SkyeKiwi ", "license": "GPL-3.0-or-later", "scripts": { - "vm": "npx ts-node ./scripts/vm.ts", - "contract:build": "npx ts-node ./scripts/contract-build.ts", - "start": "yarn contract:build && yarn vm", - "serve": "npx ts-node ./host/index.ts" + "serve": "npx ts-node ./src/index.ts", + "sandbox": "npx ts-node ./src/sandbox.ts" }, "devDependencies": { "@types/node": "^16.11.10", @@ -16,12 +14,18 @@ "typescript": "^4.5.3" }, "dependencies": { - "@skyekiwi/crypto": "0.6.2-0", + "@polkadot/api": "^7.7.1", + "@polkadot/keyring": "^8.3.3", + "@polkadot/util": "^8.3.3", + "@polkadot/wasm-crypto": "^4.5.1", + "@skyekiwi/crypto": "^0.5.1", "@skyekiwi/file": "0.6.2-0", "@skyekiwi/s-contract": "0.6.2-0", "@skyekiwi/util": "0.6.2-0", "base64-js": "^1.5.1", + "dotenv": "^16.0.0", "p-queue": "6.6.2", - "threads": "^1.7.0" + "threads": "^1.7.0", + "tweetnacl": "^1.0.3" } } diff --git a/mock-enclave/scripts/contract-build.ts b/mock-enclave/scripts/contract-build.ts deleted file mode 100644 index 6338841..0000000 --- a/mock-enclave/scripts/contract-build.ts +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2021 @skyekiwi authors & contributors -// SPDX-License-Identifier: GPL-3.0-or-later - -import fs from 'fs'; -import { fromByteArray, toByteArray } from 'base64-js'; -import { u8aToString } from '@skyekiwi/util'; - -const { execute } = require('./execSync'); - -console.log('$ yarn build', process.argv.slice(2).join(' ')); - -function build() { - // compile the runner - execute('cd contract && cargo build --target wasm32-unknown-unknown --release'); - execute('cp contract/target/wasm32-unknown-unknown/release/greeting.wasm wasm/'); -} - -build(); diff --git a/mock-enclave/scripts/execSync.ts b/mock-enclave/scripts/execSync.ts deleted file mode 100644 index 712323e..0000000 --- a/mock-enclave/scripts/execSync.ts +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2021 @skyekiwi authors & contributors -// SPDX-License-Identifier: GPL-3.0-or-later - -const { execSync } = require('child_process'); - -const execute = (cmd: string, noLog: boolean) => { - !noLog && console.log(`$ ${cmd}`); - - try { - execSync(cmd, { stdio: 'inherit' }); - } catch (error) { - process.exit(-1); - } -}; - -export {execute}; diff --git a/mock-enclave/scripts/vm.ts b/mock-enclave/scripts/vm.ts deleted file mode 100644 index 587dbbd..0000000 --- a/mock-enclave/scripts/vm.ts +++ /dev/null @@ -1,140 +0,0 @@ -// Copyright 2021 @skyekiwi authors & contributors -// SPDX-License-Identifier: GPL-3.0-or-later - -import fs from 'fs'; -import { fromByteArray, toByteArray } from 'base64-js'; -import { u8aToString } from '@skyekiwi/util'; - -const { execute } = require('./execSync'); - -console.log('$ yarn vm', process.argv.slice(2).join(' ')); - -function compile() { - // compile the runner - execute('cd .. && cargo build --release') -} - - -const defaultContext = { - current_account_id: 'contract.sk', - signer_account_id: 'system.sk', - signer_account_pk: '15T', - predecessor_account_id: 'system.sk', - input: '', - block_number: 1, - block_timestamp: '1586796191203000000', - epoch_height: 1, - account_balance: '10000000000000000000000000', - storage_usage: 100, - attached_deposit: '0', - prepaid_gas: 1000000000000000000, - random_seed: '15T', - view_config: null, - output_data_receivers: [] -} - -const injectOrigin = (origin: string) => { - let thisContext = defaultContext; - thisContext['signer_account_id'] = origin; - return JSON.stringify(thisContext); -} - -function runVM({ - methodName = "", - stateInput = "{}", - input = "", - origin = "system.sk", - wasmFile = "./wasm/status_message.wasm", - profiling = false -}) { - const runnerPath = "../target/release/skw-vm-engine-cli"; - execute(`${runnerPath} \ - --context '${injectOrigin(origin)}' \ - --wasm-file ${wasmFile} \ - --method-name ${methodName} \ - ${input ? "--input \'" + input + "\'" : "" } \ - ${stateInput ? "--state \'" + stateInput + "\'" : "" } \ - ${profiling ? "--timings" : ""} \ - > result.json`) - - // parse the output - const contentRaw = fs.readFileSync('result.json'); - const content = JSON.parse(contentRaw.toString()); - const stateB64 = JSON.parse(content.state); - let state: { [key: string]: string } = {} - - for (const key in stateB64) { - const k = u8aToString(toByteArray(key)) - const v = u8aToString(toByteArray(stateB64[key])) - state[k] = v; - } - - console.log() - console.log("-------EXEC RESULT BEGINS-------"); - console.log("VM Output"); - console.log(content); - console.log("Current State"); - console.log(state); - - try { - console.log("Return Value", u8aToString(Uint8Array.from(JSON.parse(content.outcome)))); - } catch (err) { - // pass - in case of the outcome is 'None' - } - - console.log("------- EXEC RESULT ENDS -------"); - console.log() - - return stateB64; -} - -// compile() - -let state = {} - -state = runVM({ - methodName: 'set_status', - input: JSON.stringify({'message': 'jkj'}), - origin: "system.sk", - stateInput: '{}', -}) - -state = runVM({ - methodName: 'set_status', - input: JSON.stringify({ 'message': 'bob_hello' }), - origin: "bob.sk", - stateInput: JSON.stringify(state), -}) - -state = runVM({ - methodName: 'get_status', - input: JSON.stringify({ 'account_id': 'bob.sk' }), - stateInput: JSON.stringify(state), -}) - -// state = runVM({ -// methodName: 'get_status', -// input: JSON.stringify({ 'account_id': 'system.sk' }), -// stateInput: JSON.stringify(state), -// }) -// state = runVM({ -// contextFile: './context/bob.json', -// methodName: 'set_greeting', -// input: '{"message": "bob_hello"}', -// stateInput: JSON.stringify(state), -// }) - -// state = runVM({ -// contextFile: './context/zs.json', -// methodName: 'set_greeting', -// input: '{"message": "zs_hello"}', -// stateInput: JSON.stringify(state), -// }) - -// state = runVM({ -// methodName: 'get_greeting', -// input: '{"account_id": "bob.sk"}', -// stateInput: JSON.stringify(state), -// }) - -// console.log(state); diff --git a/mock-enclave/wasm/status_message.wasm b/mock-enclave/wasm/status_message.wasm deleted file mode 100755 index 24b4d824baff20363b5b0e277f385bbdc635eb04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 106734 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

Tx>iQ;xaqOk*vxmAd?kB7?9YkW=z7@C?t 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 diff --git a/mock-enclave/wasm/status_message_collections.wasm b/mock-enclave/wasm/status_message_collections.wasm new file mode 100755 index 0000000000000000000000000000000000000000..506f079bd5736ff6365c86018c2e0b681e3773e9 GIT binary patch literal 311366 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 j1xZ@2g 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 literal 0 HcmV?d00001 diff --git a/mock-enclave/wasm/test_contract_rs.wasm b/mock-enclave/wasm/test_contract_rs.wasm deleted file mode 100755 index 5006ed49d4f873c5e0598e782dc82daa75b39eb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83975 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 R7wMU64(VdP-O%8k`#)R=D%1b~ diff --git a/mock-enclave/yarn.lock b/mock-enclave/yarn.lock index 4c0a8d5..2d2d9be 100644 --- a/mock-enclave/yarn.lock +++ b/mock-enclave/yarn.lock @@ -2,14 +2,7 @@ # yarn lockfile v1 -"@babel/runtime@^7.15.3", "@babel/runtime@^7.16.3", "@babel/runtime@^7.16.5": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.7.tgz#03ff99f64106588c9c403c6ecb8c3bafbbdff1fa" - integrity sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.16.7", "@babel/runtime@^7.17.0": +"@babel/runtime@^7.15.3", "@babel/runtime@^7.16.3", "@babel/runtime@^7.16.7", "@babel/runtime@^7.17.0": version "7.17.2" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.2.tgz#66f68591605e59da47523c631416b18508779941" integrity sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw== @@ -203,20 +196,13 @@ resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.5.0.tgz#0c2caebeff98e10aefa5aef27d7441c7fd18cf5d" integrity sha512-rIY/6WPm7T8n3qS2vuHTUBPdXHl+rGxWxW5okDfo9J4Z0+gRRZT0msvUdIJkE4/HS29GUMziwGaaKO2bWONBrg== -"@ethersproject/networks@5.5.2": +"@ethersproject/networks@5.5.2", "@ethersproject/networks@^5.5.0": version "5.5.2" resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.5.2.tgz#784c8b1283cd2a931114ab428dae1bd00c07630b" integrity sha512-NEqPxbGBfy6O3x4ZTISb90SjEDkWYDUbEeIFhJly0F7sZjoQMnj5KYzMSkMkLKZ+1fGpx00EDpHQCy6PrDupkQ== dependencies: "@ethersproject/logger" "^5.5.0" -"@ethersproject/networks@^5.5.0": - version "5.5.1" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.5.1.tgz#b7f7b9fb88dec1ea48f739b7fb9621311aa8ce6c" - integrity sha512-tYRDM4zZtSUcKnD4UMuAlj7SeXH/k5WC4SP2u1Pn57++JdXHkRu2zwNkgNogZoxHzhm9Q6qqurDBVptHOsW49Q== - dependencies: - "@ethersproject/logger" "^5.5.0" - "@ethersproject/pbkdf2@5.5.0", "@ethersproject/pbkdf2@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.5.0.tgz#e25032cdf02f31505d47afbf9c3e000d95c4a050" @@ -257,7 +243,7 @@ bech32 "1.1.4" ws "7.4.6" -"@ethersproject/random@5.5.1": +"@ethersproject/random@5.5.1", "@ethersproject/random@^5.5.0": version "5.5.1" resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.5.1.tgz#7cdf38ea93dc0b1ed1d8e480ccdaf3535c555415" integrity sha512-YaU2dQ7DuhL5Au7KbcQLHxcRHfgyNgvFV4sQOo0HrtW3Zkrc9ctWNz8wXQ4uCSfSDsqX2vcjhroxU5RQRV0nqA== @@ -265,14 +251,6 @@ "@ethersproject/bytes" "^5.5.0" "@ethersproject/logger" "^5.5.0" -"@ethersproject/random@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.5.0.tgz#305ed9e033ca537735365ac12eed88580b0f81f9" - integrity sha512-egGYZwZ/YIFKMHcoBUo8t3a8Hb/TKYX8BCBoLjudVCZh892welR3jOxgOmb48xznc9bTcMm7Tpwc1gHC1PFNFQ== - dependencies: - "@ethersproject/bytes" "^5.5.0" - "@ethersproject/logger" "^5.5.0" - "@ethersproject/rlp@5.5.0", "@ethersproject/rlp@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.5.0.tgz#530f4f608f9ca9d4f89c24ab95db58ab56ab99a0" @@ -426,12 +404,7 @@ resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-0.5.7.tgz#8605d84b34daf43d15c344fae54f0a1d5d5a4632" integrity sha512-R9PPYv7TqoYi+enikzZvwRQesGTxR0+jwqzZJGL0uNcf2NFL+lt/uvCCewtXXmr6jWBxiMuNjBfJwKv9UJaCng== -"@noble/hashes@^0.4.5": - version "0.4.5" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-0.4.5.tgz#f69a963b0c59c1145bc5aca1f3eef58a48bf9a59" - integrity sha512-oK/2b9gHb1CfiFwpPHQs010WgROn4ioilT7TFwxMVwuDaXEJP3QPhyedYbOpgM4JDBgT9n5gaispBQlkaAgT6g== - -"@noble/secp256k1@1.3.4", "@noble/secp256k1@^1.3.4": +"@noble/secp256k1@1.3.4": version "1.3.4" resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.3.4.tgz#158ded712d09237c0d3428be60dc01ce8ebab9fb" integrity sha512-ZVRouDO5mbdCiDg4zCd3ZZABduRtpy4tCnB33Gh9upHe9tRzpiqbRSN1VTjrj/2g8u2c6MBi0YLNnNQpBYOiWg== @@ -505,7 +478,7 @@ "@polkadot/util-crypto" "^8.3.3" rxjs "^7.5.2" -"@polkadot/api@6.12.1", "@polkadot/api@^6.12.1": +"@polkadot/api@6.12.1", "@polkadot/api@^6.0.5", "@polkadot/api@^6.12.1": version "6.12.1" resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-6.12.1.tgz#685a2727eb532fdacd9b86f9ddf595d58be71ee4" integrity sha512-RVdTiA2WaEvproM3i6E9TKS1bfXpPd9Ly9lUG/kVLaspjKoIot9DJUDTl97TJ+7xr8LXGbXqm448Ud0hsEBV8Q== @@ -545,16 +518,16 @@ eventemitter3 "^4.0.7" rxjs "^7.5.2" -"@polkadot/keyring@^8.1.2": - version "8.2.2" - resolved "https://registry.yarnpkg.com/@polkadot/keyring/-/keyring-8.2.2.tgz#7c5abaca88e8fa1a16c90be8fe74c1813c28997c" - integrity sha512-GK8puQVtQJ67sVyq0WIWHPeRXfIcqz2ztgRHnGP4JEptS9NSFByQNq1EEpQnEUZwXu9CQfHz90eiLZc1BpC8lQ== +"@polkadot/keyring@^7.4.1": + version "7.9.2" + resolved "https://registry.yarnpkg.com/@polkadot/keyring/-/keyring-7.9.2.tgz#1f5bf6b7bdb5942d275aebf72d4ed98abe874fa8" + integrity sha512-6UGoIxhiTyISkYEZhUbCPpgVxaneIfb/DBVlHtbvaABc8Mqh1KuqcTIq19Mh9wXlBuijl25rw4lUASrE/9sBqg== dependencies: - "@babel/runtime" "^7.16.5" - "@polkadot/util" "8.2.2" - "@polkadot/util-crypto" "8.2.2" + "@babel/runtime" "^7.16.3" + "@polkadot/util" "7.9.2" + "@polkadot/util-crypto" "7.9.2" -"@polkadot/keyring@^8.3.3": +"@polkadot/keyring@^8.1.2", "@polkadot/keyring@^8.3.3": version "8.3.3" resolved "https://registry.yarnpkg.com/@polkadot/keyring/-/keyring-8.3.3.tgz#931c809f9a3b092231b2d319007e02e64bec8f21" integrity sha512-TgoIpaTqn7voT7lDu5W6p0Z+216OImpqtHuaiFy125ekCQurrf9BVIdwp56y5qoFLDAZ5i9gnWHMIgOQ6AJj/Q== @@ -563,14 +536,14 @@ "@polkadot/util" "8.3.3" "@polkadot/util-crypto" "8.3.3" -"@polkadot/networks@8.2.2", "@polkadot/networks@^8.1.2": - version "8.2.2" - resolved "https://registry.yarnpkg.com/@polkadot/networks/-/networks-8.2.2.tgz#75a0f4ffd13d790a0990cdb0ff0a251377104a46" - integrity sha512-PshHrf5wBXib63l03YISnHMf5/fS1/Jv2rEN58EgYy9VK87HBXjT7qQ1Ea/d1cFI2EmfEDvhFsP+u3i6AlejQQ== +"@polkadot/networks@7.9.2": + version "7.9.2" + resolved "https://registry.yarnpkg.com/@polkadot/networks/-/networks-7.9.2.tgz#03e3f3ac6bdea177517436537826055df60bcb9a" + integrity sha512-4obI1RdW5/7TFwbwKA9oqw8aggVZ65JAUvIFMd2YmMC2T4+NiZLnok0WhRkhZkUnqjLIHXYNwq7Ho1i39dte0g== dependencies: - "@babel/runtime" "^7.16.5" + "@babel/runtime" "^7.16.3" -"@polkadot/networks@8.3.3", "@polkadot/networks@^8.3.3": +"@polkadot/networks@8.3.3", "@polkadot/networks@^8.1.2", "@polkadot/networks@^8.3.3": version "8.3.3" resolved "https://registry.yarnpkg.com/@polkadot/networks/-/networks-8.3.3.tgz#2def73213451f12bc940b0c9ce8942aebbe5d4a8" integrity sha512-yj0DMqmzRZbvgaoZztV3/RPgYJjBhT17Dhu+FX/LUJzVbAF/RfjkzNsJT4Ta4kLDxQMYZq1avUac0ia2j9NcNw== @@ -726,24 +699,29 @@ "@polkadot/util-crypto" "^8.3.3" rxjs "^7.5.2" -"@polkadot/util-crypto@8.2.2", "@polkadot/util-crypto@^8.1.2": - version "8.2.2" - resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-8.2.2.tgz#ccc5e5abec2431622dd5a2a885286633c2deb371" - integrity sha512-bKFE6j1q2Dnz1o1QFvhX2QzkMLi9QHU4a5T7+El5J7OsOxGqssMAVHAmB+YoAuSLqPSQBmZa9CN23IiuJnfsbw== +"@polkadot/util-crypto@7.9.2", "@polkadot/util-crypto@^7.4.1": + version "7.9.2" + resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-7.9.2.tgz#cdc336f92a6bc3d40c5a23734e1974fb777817f0" + integrity sha512-nNwqUwP44eCH9jKKcPie+IHLKkg9LMe6H7hXo91hy3AtoslnNrT51tP3uAm5yllhLvswJfnAgnlHq7ybCgqeFw== dependencies: - "@babel/runtime" "^7.16.5" - "@noble/hashes" "^0.4.5" - "@noble/secp256k1" "^1.3.4" - "@polkadot/networks" "8.2.2" - "@polkadot/util" "8.2.2" - "@polkadot/wasm-crypto" "^4.5.1" - "@polkadot/x-bigint" "8.2.2" - "@polkadot/x-randomvalues" "8.2.2" + "@babel/runtime" "^7.16.3" + "@polkadot/networks" "7.9.2" + "@polkadot/util" "7.9.2" + "@polkadot/wasm-crypto" "^4.4.1" + "@polkadot/x-randomvalues" "7.9.2" + blakejs "^1.1.1" + bn.js "^4.12.0" + create-hash "^1.2.0" ed2curve "^0.3.0" - micro-base "^0.10.0" + elliptic "^6.5.4" + hash.js "^1.1.7" + js-sha3 "^0.8.0" + micro-base "^0.9.0" + scryptsy "^2.1.0" tweetnacl "^1.0.3" + xxhashjs "^0.2.2" -"@polkadot/util-crypto@8.3.3", "@polkadot/util-crypto@^8.3.3": +"@polkadot/util-crypto@8.3.3", "@polkadot/util-crypto@^8.1.2", "@polkadot/util-crypto@^8.3.3": version "8.3.3" resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-8.3.3.tgz#684a04c26bd390a150e83fe34840d9e219a22d24" integrity sha512-kXaT2VTEbJq1wNiV0Dz5qJuVWy7pK+x1QLcyWC+6OFERYO+BCp1Y2bTOcLUeF/gyyR/ZaRMMdTyu0ZbHrwH0xg== @@ -760,21 +738,20 @@ micro-base "^0.10.2" tweetnacl "^1.0.3" -"@polkadot/util@8.2.2", "@polkadot/util@^8.1.2": - version "8.2.2" - resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-8.2.2.tgz#e3b30b90ade18032a28ac237dfa939adce43f2f4" - integrity sha512-tiHe0rcQvofd3vUVCRmvfULAv9yBG7s/huv1ZLVY/JGT1JBDonc1HWU3Vdb5MvWpx2R+HHv19ORHyD/LiROE9A== +"@polkadot/util@7.9.2": + version "7.9.2" + resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-7.9.2.tgz#567ac659516d6b685ed7e796919901d92e5cbe6b" + integrity sha512-6ABY6ErgkCsM4C6+X+AJSY4pBGwbKlHZmUtHftaiTvbaj4XuA4nTo3GU28jw8wY0Jh2cJZJvt6/BJ5GVkm5tBA== dependencies: - "@babel/runtime" "^7.16.5" - "@polkadot/x-bigint" "8.2.2" - "@polkadot/x-global" "8.2.2" - "@polkadot/x-textdecoder" "8.2.2" - "@polkadot/x-textencoder" "8.2.2" + "@babel/runtime" "^7.16.3" + "@polkadot/x-textdecoder" "7.9.2" + "@polkadot/x-textencoder" "7.9.2" "@types/bn.js" "^4.11.6" bn.js "^4.12.0" + camelcase "^6.2.1" ip-regex "^4.3.0" -"@polkadot/util@8.3.3", "@polkadot/util@^8.3.3": +"@polkadot/util@8.3.3", "@polkadot/util@^8.1.2", "@polkadot/util@^8.3.3": version "8.3.3" resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-8.3.3.tgz#0bd79f771a82a8276b0ca0e713068d23ee53abf2" integrity sha512-8u1NShSHrCFeFvxWL8WAyRN8y1/iPvijqYCDeeHziBxCNBrL3VKDc9GNF11skeay/EKQiCHBSBeAYyyQOpLebA== @@ -802,7 +779,7 @@ dependencies: "@babel/runtime" "^7.16.3" -"@polkadot/wasm-crypto@^4.5.1": +"@polkadot/wasm-crypto@^4.4.1", "@polkadot/wasm-crypto@^4.5.1": version "4.5.1" resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto/-/wasm-crypto-4.5.1.tgz#e1ac6d846a0ad8e991cec128994524183ef6e8fd" integrity sha512-Cr21ais3Kq3aedIHZ3J1tjgeD/+K8FCiwEawr0oRywNBSJR8wyuZMePs4swR/6xm8wbBkpqoBVHz/UQHqqQJmA== @@ -811,14 +788,6 @@ "@polkadot/wasm-crypto-asmjs" "^4.5.1" "@polkadot/wasm-crypto-wasm" "^4.5.1" -"@polkadot/x-bigint@8.2.2": - version "8.2.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-bigint/-/x-bigint-8.2.2.tgz#24f4e1b889a1ee899ac9c98fee526e44e2130c14" - integrity sha512-fX3o3FhfQNxdpA5PV4L9PrjjSKG2ZmfFOfv3TrKwsDNtZMktDDcpmW3up53LJ53FszB/WHH6WwKsehmcqAYDIw== - dependencies: - "@babel/runtime" "^7.16.5" - "@polkadot/x-global" "8.2.2" - "@polkadot/x-bigint@8.3.3": version "8.3.3" resolved "https://registry.yarnpkg.com/@polkadot/x-bigint/-/x-bigint-8.3.3.tgz#3787c4cbfc996bda05c342a80c04bd58a1beaf4b" @@ -827,17 +796,7 @@ "@babel/runtime" "^7.16.7" "@polkadot/x-global" "8.3.3" -"@polkadot/x-fetch@^8.1.2": - version "8.2.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-fetch/-/x-fetch-8.2.2.tgz#33cf2993fe93b9013302a8fdd328295a9eb8a3ae" - integrity sha512-ou8d1Ccf7lt7mssr64ixXYIWOZ4I4ED5sYBeFZg7BJB+MsZnuDOVvuMlItQWh01phMCOxtHWowmh+gOI4w5IWA== - dependencies: - "@babel/runtime" "^7.16.5" - "@polkadot/x-global" "8.2.2" - "@types/node-fetch" "^2.5.12" - node-fetch "^2.6.6" - -"@polkadot/x-fetch@^8.3.3": +"@polkadot/x-fetch@^8.1.2", "@polkadot/x-fetch@^8.3.3": version "8.3.3" resolved "https://registry.yarnpkg.com/@polkadot/x-fetch/-/x-fetch-8.3.3.tgz#8c81b928868efd573219c231b25f0bcc38107a1b" integrity sha512-+ScnWnt0i1IF+fM9IC+OnjkTi5NonK+ji8q861hwkNCtK2ziibibcD3mGavCA6wZvij4wUTovWEsTc5Su0+KTA== @@ -847,27 +806,27 @@ "@types/node-fetch" "^2.5.12" node-fetch "^2.6.7" -"@polkadot/x-global@8.2.2", "@polkadot/x-global@^8.1.2": - version "8.2.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-global/-/x-global-8.2.2.tgz#0640ba4b52df445d50b0ae1aab08327a3dd2f08f" - integrity sha512-eTJ6edgoIKzjfdYN3Y6ZuJUGRAAc8Uc5X8r4/1QmhOy427QbfRKRL/cbcLat1XbyM52aplOvZf31KXTAkMREdQ== +"@polkadot/x-global@7.9.2": + version "7.9.2" + resolved "https://registry.yarnpkg.com/@polkadot/x-global/-/x-global-7.9.2.tgz#b272b0a3bedaad3bcbf075ec4682abe68cf2a850" + integrity sha512-JX5CrGWckHf1P9xKXq4vQCAuMUbL81l2hOWX7xeP8nv4caHEpmf5T1wD1iMdQBL5PFifo6Pg0V6/oZBB+bts7A== dependencies: - "@babel/runtime" "^7.16.5" + "@babel/runtime" "^7.16.3" -"@polkadot/x-global@8.3.3", "@polkadot/x-global@^8.3.3": +"@polkadot/x-global@8.3.3", "@polkadot/x-global@^8.1.2", "@polkadot/x-global@^8.3.3": version "8.3.3" resolved "https://registry.yarnpkg.com/@polkadot/x-global/-/x-global-8.3.3.tgz#ee2f4a0acd46626bc04174e1bf966478a2feef94" integrity sha512-7DWjcNhTDIpYNiQmLq56o6xYOONr0i6WXdoPUxYrToxZWeWyj/FWaYMfttedLydABPcy87lmvIy8ECp7qCcnyw== dependencies: "@babel/runtime" "^7.16.7" -"@polkadot/x-randomvalues@8.2.2": - version "8.2.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-randomvalues/-/x-randomvalues-8.2.2.tgz#32eb424a642c19c8d7ce3be8713061a1a0003efd" - integrity sha512-v3dx0xvWHd5t6e41Fte63WFX/t1Fu9ug3tOr/QE6yMFrDSeDW9TzFJKklakc0tXryqW0cL4qZzUdSvguGC2TPA== +"@polkadot/x-randomvalues@7.9.2": + version "7.9.2" + resolved "https://registry.yarnpkg.com/@polkadot/x-randomvalues/-/x-randomvalues-7.9.2.tgz#0c9bb7b48a0791c2a32e9605a31a5ce56fee621d" + integrity sha512-svQfG31yCXf6yVyIgP0NgCzEy7oc3Lw054ZspkaqjOivxYdrXaf5w3JSSUyM/MRjI2+nk+B/EyJoMYcfSwTfsQ== dependencies: - "@babel/runtime" "^7.16.5" - "@polkadot/x-global" "8.2.2" + "@babel/runtime" "^7.16.3" + "@polkadot/x-global" "7.9.2" "@polkadot/x-randomvalues@8.3.3": version "8.3.3" @@ -877,13 +836,13 @@ "@babel/runtime" "^7.16.7" "@polkadot/x-global" "8.3.3" -"@polkadot/x-textdecoder@8.2.2": - version "8.2.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-textdecoder/-/x-textdecoder-8.2.2.tgz#e6b161ff3d1f8e55aac2de1bc855d1d2d482d6e3" - integrity sha512-HQ/pSl4FREnxK0V7nvEdTwI08Erh6KPLwHZ0rSfUJKVDZ+NwfeW4BW/8xCEJOQIRB948Dqerl0XjEn4xCA+OPg== +"@polkadot/x-textdecoder@7.9.2": + version "7.9.2" + resolved "https://registry.yarnpkg.com/@polkadot/x-textdecoder/-/x-textdecoder-7.9.2.tgz#a78548e33efeb3a25f761fec9787b2bcae7f0608" + integrity sha512-wfwbSHXPhrOAl12QvlIOGNkMH/N/h8PId2ytIjvM/8zPPFB5Il6DWSFLtVapOGEpIFjEWbd5t8Td4pHBVXIEbg== dependencies: - "@babel/runtime" "^7.16.5" - "@polkadot/x-global" "8.2.2" + "@babel/runtime" "^7.16.3" + "@polkadot/x-global" "7.9.2" "@polkadot/x-textdecoder@8.3.3": version "8.3.3" @@ -893,13 +852,13 @@ "@babel/runtime" "^7.16.7" "@polkadot/x-global" "8.3.3" -"@polkadot/x-textencoder@8.2.2": - version "8.2.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-textencoder/-/x-textencoder-8.2.2.tgz#b18c9360d7b311619cf91df4c2af67f0824498a4" - integrity sha512-ZAOwYi/y1wRYb3WoWZMDfYPrmbPSasog2uknt8p9u2WELrrfj4zF/fRnSuMjLUNtvJuKSzj4LUCKHwTY+peSrQ== +"@polkadot/x-textencoder@7.9.2": + version "7.9.2" + resolved "https://registry.yarnpkg.com/@polkadot/x-textencoder/-/x-textencoder-7.9.2.tgz#b32bfd6fbff8587c56452f58252a52d62bbcd5b9" + integrity sha512-A19wwYINuZwU2dUyQ/mMzB0ISjyfc4cISfL4zCMUAVgj7xVoXMYV2GfjNdMpA8Wsjch3su6pxLbtJ2wU03sRTQ== dependencies: - "@babel/runtime" "^7.16.5" - "@polkadot/x-global" "8.2.2" + "@babel/runtime" "^7.16.3" + "@polkadot/x-global" "7.9.2" "@polkadot/x-textencoder@8.3.3": version "8.3.3" @@ -909,17 +868,7 @@ "@babel/runtime" "^7.16.7" "@polkadot/x-global" "8.3.3" -"@polkadot/x-ws@^8.1.2": - version "8.2.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-ws/-/x-ws-8.2.2.tgz#c05b21a433ce22ecee61383630fc9acd03dd3312" - integrity sha512-qsHzmtoFXIN59qKSkycxQ3GGyzUMlvhl+d7yU1NMaoOudJGfniTbIcDFPtee27Ydamb1DwBvkRbKw5IO8Domdg== - dependencies: - "@babel/runtime" "^7.16.5" - "@polkadot/x-global" "8.2.2" - "@types/websocket" "^1.0.4" - websocket "^1.0.34" - -"@polkadot/x-ws@^8.3.3": +"@polkadot/x-ws@^8.1.2", "@polkadot/x-ws@^8.3.3": version "8.3.3" resolved "https://registry.yarnpkg.com/@polkadot/x-ws/-/x-ws-8.3.3.tgz#ab06d87637cb9b86fa341cc95e52f06cc4265d74" integrity sha512-Dd0kscZSb7MULVqo5isPZyqvErvgE7lYIwZ4IA0rNdgUWi3mrJWeeWrzVMxC6nbg6q1ahIEGxxZLMVzeI3u/Ew== @@ -983,9 +932,9 @@ integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA= "@sindresorhus/is@^4.0.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.2.0.tgz#667bfc6186ae7c9e0b45a08960c551437176e1ca" - integrity sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw== + version "4.4.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.4.0.tgz#e277e5bdbdf7cb1e20d320f02f5e2ed113cd3185" + integrity sha512-QppPM/8l3Mawvh4rn9CNEYIU9bxpXUCRMaX9yUpvBk1nMKusLKpfXGDEKExKaPhLzcn3lzil7pR6rnJ11HgeRQ== "@skyekiwi/crust-network@0.5.2-10": version "0.5.2-10" @@ -1000,6 +949,17 @@ "@skyekiwi/ipfs" "0.5.2-10" "@skyekiwi/util" "0.5.2-10" +"@skyekiwi/crypto@0.5.1", "@skyekiwi/crypto@^0.5.1": + version "0.5.1" + resolved "https://registry.yarnpkg.com/@skyekiwi/crypto/-/crypto-0.5.1.tgz#629107cdb39cbe8dc615a689ff297b2793ca666e" + integrity sha512-FBnCfE6cMVayb4xK7M2MPxz20UFh2krloj59PCzJZwv1asfCMdsMXwdCdA/48mg2qHTFUKquiLDIpN/mFOPCDw== + dependencies: + "@skyekiwi/metadata" "0.5.1" + "@skyekiwi/secrets" "^2.0.1" + "@skyekiwi/util" "0.5.1" + ethers "^5.4.6" + tweetnacl "^1.0.3" + "@skyekiwi/crypto@0.6.2-0": version "0.6.2-0" resolved "https://registry.yarnpkg.com/@skyekiwi/crypto/-/crypto-0.6.2-0.tgz#3096a1f4cb16e6c960d599f8bba5e5369d9dc4c4" @@ -1032,6 +992,16 @@ file-saver "^2.0.5" pako "^2.0.4" +"@skyekiwi/ipfs@0.5.1": + version "0.5.1" + resolved "https://registry.yarnpkg.com/@skyekiwi/ipfs/-/ipfs-0.5.1.tgz#267252f44855f507ff704e3fc160f6755157ab22" + integrity sha512-N1z7uZaJYklMYJpVGBu5vQ75NVT5DFqifVu0nUR0xUUGX2kNX52Fz8avGKhlS2aYek7f46U8oijKQDEGhFafHw== + dependencies: + "@skyekiwi/util" "0.5.1" + got "^11.8.2" + ipfs-http-client "52.0.5" + node-fetch "2.6.1" + "@skyekiwi/ipfs@0.5.2-10": version "0.5.2-10" resolved "https://registry.yarnpkg.com/@skyekiwi/ipfs/-/ipfs-0.5.2-10.tgz#c56158935d22625ff4135b168b2992ea690d6522" @@ -1052,6 +1022,17 @@ ipfs-http-client "56.0.0" node-fetch "3.2.0" +"@skyekiwi/metadata@0.5.1": + version "0.5.1" + resolved "https://registry.yarnpkg.com/@skyekiwi/metadata/-/metadata-0.5.1.tgz#7ee0334fd38fa94b79d7024c97b1017ad097a0b5" + integrity sha512-w5x/bWD7b+A8+sLoBLBCr70VoM61VxkXDI2QcWMK/66Couzr70mSvf2meVXV2ESBIaVgzuY4KPBKstlPwmKR3A== + dependencies: + "@polkadot/util-crypto" "^7.4.1" + "@skyekiwi/crypto" "0.5.1" + "@skyekiwi/ipfs" "0.5.1" + "@skyekiwi/util" "0.5.1" + tweetnacl "^1.0.3" + "@skyekiwi/metadata@0.6.2-0": version "0.6.2-0" resolved "https://registry.yarnpkg.com/@skyekiwi/metadata/-/metadata-0.6.2-0.tgz#a345f8bb919cae543305022ce941ec705a4a18f2" @@ -1087,6 +1068,21 @@ "@polkadot/wasm-crypto" "^4.5.1" "@skyekiwi/util" "0.6.2-0" +"@skyekiwi/secrets@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@skyekiwi/secrets/-/secrets-2.0.1.tgz#b14bdd53651332cf20c1ab2f9ffc4ae9b389cad5" + integrity sha512-qecFhKiRWzGOM/dh1+59prvFpT3VESvD9Gw2f5YBLcrrkG1cWQ8l1d3wepl/EDp5GIM0VEDsTvmx8Xnw6N0jAg== + +"@skyekiwi/util@0.5.1": + version "0.5.1" + resolved "https://registry.yarnpkg.com/@skyekiwi/util/-/util-0.5.1.tgz#f6b9c4f640f74fee04b4bb96c0eacfb667a5fc23" + integrity sha512-6oWleeaVVveWU3Kq5ygnntnx0bs8QLOf+6iBPHQoL54OTjiC77kiC0FMRtHSWBcpfpeEv1dpOuMuYfnDYwwAjg== + dependencies: + "@polkadot/api" "^6.0.5" + "@polkadot/keyring" "^7.4.1" + pino "^7.5.1" + pino-pretty "^7.2.0" + "@skyekiwi/util@0.5.2-10": version "0.5.2-10" resolved "https://registry.yarnpkg.com/@skyekiwi/util/-/util-0.5.2-10.tgz#e18ac6f099fccec0106d529ec27b7ec19b1d3e41" @@ -1194,14 +1190,14 @@ form-data "^3.0.0" "@types/node@*", "@types/node@>=13.7.0": - version "17.0.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.7.tgz#4a53d8332bb65a45470a2f9e2611f1ced637a5cb" - integrity sha512-1QUk+WAUD4t8iR+Oj+UgI8oJa6yyxaB8a8pHaC8uqM6RrS1qbL7bf3Pwl5rHv0psm2CuDErgho6v5N+G+5fwtQ== + version "17.0.17" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.17.tgz#a8ddf6e0c2341718d74ee3dc413a13a042c45a0c" + integrity sha512-e8PUNQy1HgJGV3iU/Bp2+D/DXh3PYeyli8LgIwsQcs1Ar1LoaWHSIT6Rw+H2rNJmiq6SNWiDytfx8+gYj7wDHw== "@types/node@^16.11.10": - version "16.11.18" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.18.tgz#39ed7c52943b0cee6d7299b717707bd51b1f90b9" - integrity sha512-7N8AOYWWYuw0g+K+GKCmIwfU1VMHcexYNpLPYzFZ4Uq2W6C/ptfeC7XhXgy/4pcwhz/9KoS5yijMfnYQ0u0Udw== + version "16.11.24" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.24.tgz#9624338b685fea65fb1aba6c7b7eb45ca2df7188" + integrity sha512-Ezv33Rl4mIi6YdSHfIRNBd4Q9kUe5okiaw/ikvJiJDmuQZNW5kfdg7+oQPF8NO6sTcr3woIpj3jANzTXdvEZXA== "@types/responselike@*", "@types/responselike@^1.0.0": version "1.0.0" @@ -1211,9 +1207,9 @@ "@types/node" "*" "@types/websocket@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@types/websocket/-/websocket-1.0.4.tgz#1dc497280d8049a5450854dd698ee7e6ea9e60b8" - integrity sha512-qn1LkcFEKK8RPp459jkjzsfpbsx36BBt3oC3pITYtkoBw/aVX+EZFa5j3ThCRTNpLFvIMr5dSTD4RaMdilIOpA== + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/websocket/-/websocket-1.0.5.tgz#3fb80ed8e07f88e51961211cd3682a3a4a81569c" + integrity sha512-NbsqiNX9CnEfC1Z0Vf4mE1SgAJ07JnRYcNex7AJ9zAVzmiGHmjKFEk7O4TJIsgv2B1sLEb6owKFZrACwdYngsQ== dependencies: "@types/node" "*" @@ -1299,6 +1295,11 @@ bech32@1.1.4: resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== +blakejs@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.1.1.tgz#bf313053978b2cd4c444a48795710be05c785702" + integrity sha512-bLG6PHOCZJKNshTjGRBvET0vTciwQE6zFKOKKXPDJfwFBd4Ac0yBfPZqcGvGJap50l7ktvlpFqc2jGVaUgbJgg== + blob-to-it@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/blob-to-it/-/blob-to-it-1.0.4.tgz#f6caf7a4e90b7bb9215fa6a318ed6bd8ad9898cb" @@ -1372,12 +1373,12 @@ camelcase@5.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== -cborg@^1.5.4: - version "1.6.0" - resolved "https://registry.yarnpkg.com/cborg/-/cborg-1.6.0.tgz#07975681efb2a1ee33c696c5b7bf62092fddc542" - integrity sha512-zNgXCO0jlGDKh8EQO34PziChBZhOoLf3qjkS0VtKy4jEKjEX/PbrKYQ1QP+960rxmC3fUuN1yOeq4Frf2E9RTw== +camelcase@^6.2.1: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -cborg@^1.6.0: +cborg@^1.5.4, cborg@^1.6.0: version "1.6.1" resolved "https://registry.yarnpkg.com/cborg/-/cborg-1.6.1.tgz#d5c6f6cfa8539588918c3936814caddc65e8e5ec" integrity sha512-dOGlTG610S6t3j7EYFxPBH7KiF1OlSAdWtMI4Iv1dabcId/L/nUvkfOEPge+vDp9YoPerEMiDoy5+Vm2oEqmQw== @@ -1391,6 +1392,14 @@ chalk@2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +cipher-base@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + clone-response@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" @@ -1427,11 +1436,27 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= +create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + create-require@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== +cuint@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/cuint/-/cuint-0.2.2.tgz#408086d409550c2631155619e9fa7bcadc3b991b" + integrity sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs= + d@1, d@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" @@ -1508,6 +1533,11 @@ dotenv@^10.0.0: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== +dotenv@^16.0.0: + version "16.0.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.0.tgz#c619001253be89ebb638d027b609c75c26e47411" + integrity sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q== + duplexify@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.2.tgz#18b4f8d28289132fa0b9573c898d9f903f81c7b0" @@ -1532,7 +1562,7 @@ electron-fetch@^1.7.2: dependencies: encoding "^0.1.13" -elliptic@6.5.4: +elliptic@6.5.4, elliptic@^6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== @@ -1600,7 +1630,7 @@ esm@^3.2.25: resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== -ethers@^5.5.4: +ethers@^5.4.6, ethers@^5.5.4: version "5.5.4" resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.5.4.tgz#e1155b73376a2f5da448e4a33351b57a885f4352" integrity sha512-N9IAXsF8iKhgHIC6pquzRgPBJEzc9auw3JoRkaKe+y4Wl/LFBtDDunNe7YmdomontECAcC5APaAgWZBiu1kirw== @@ -1654,14 +1684,14 @@ ext@^1.1.2: type "^2.5.0" fast-fifo@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.0.0.tgz#9bc72e6860347bb045a876d1c5c0af11e9b984e7" - integrity sha512-4VEXmjxLj7sbs8J//cn2qhRap50dGzF5n8fjay8mau+Jn4hxSeR3xPFwxMaQq/pDaq7+KQk0PAbC2+nWDkJrmQ== + version "1.1.0" + resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.1.0.tgz#17d1a3646880b9891dfa0c54e69c5fef33cad779" + integrity sha512-Kl29QoNbNvn4nhDsLYjyIAaIqaJB6rBx5p3sL9VjaefJ+eMFBWVZiaoguaoZfzEKr5RhAti0UgM8703akGPJ6g== fast-redact@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.0.2.tgz#c940ba7162dde3aeeefc522926ae8c5231412904" - integrity sha512-YN+CYfCVRVMUZOUPeinHNKgytM1wPI/C/UCLEi56EsY2dwwvI00kIJHJoI7pMVqGoMew8SMZ2SSfHKHULHXDsg== + version "3.1.0" + resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.1.0.tgz#37c26cda9cab70bc04393f7ba1feb2d176da6c6b" + integrity sha512-dir8LOnvialLxiXDPESMDHGp82CHi6ZEYTVkcvdn5d7psdv9ZkkButXrOeXST4aqreIRR+N7CYlsrwFuorurVg== fast-safe-stringify@^2.0.7: version "2.1.1" @@ -1740,7 +1770,16 @@ has-flag@^3.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= -hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3: +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== @@ -1782,7 +1821,7 @@ ieee754@^1.2.1: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -inherits@^2.0.3, inherits@^2.0.4: +inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -2098,7 +2137,7 @@ joycon@^3.1.1: resolved "https://registry.yarnpkg.com/joycon/-/joycon-3.1.1.tgz#bce8596d6ae808f8b68168f5fc69280996894f03" integrity sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw== -js-sha3@0.8.0: +js-sha3@0.8.0, js-sha3@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== @@ -2114,9 +2153,9 @@ json-stringify-safe@^5.0.1: integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= keyv@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.0.4.tgz#f040b236ea2b06ed15ed86fbef8407e1a1c8e376" - integrity sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg== + version "4.1.1" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.1.1.tgz#02c538bfdbd2a9308cc932d4096f05ae42bfa06a" + integrity sha512-tGv1yP6snQVDSM4X6yxrv2zzq/EvpW+oYiUz6aueW1u9CtS8RzUQYxxmFwgZlO2jSgCxQbchhxaqXXp2hnKGpQ== dependencies: json-buffer "3.0.1" @@ -2145,6 +2184,15 @@ make-error@^1.1.1: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + merge-options@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/merge-options/-/merge-options-3.0.4.tgz#84709c2aa2a4b24c1981f66c179fe5565cc6dbb7" @@ -2152,11 +2200,16 @@ merge-options@^3.0.4: dependencies: is-plain-obj "^2.1.0" -micro-base@^0.10.0, micro-base@^0.10.2: +micro-base@^0.10.2: version "0.10.2" resolved "https://registry.yarnpkg.com/micro-base/-/micro-base-0.10.2.tgz#f6f9f0bd949ce511883e5a99f9147d80ddc32f5a" integrity sha512-lqqJrT7lfJtDmmiQ4zRLZuIJBk96t0RAc5pCrrWpL9zDeH5i/SUL85mku9HqzTI/OCZ8EQ3aicbMW+eK5Nyu5w== +micro-base@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/micro-base/-/micro-base-0.9.0.tgz#09cfe20285bec0ea97f41dc3d10e3fba3d0266ee" + integrity sha512-4+tOMKidYT5nQ6/UNmYrGVO5PMcnJdfuR4NC8HK8s2H61B4itOhA9yrsjBdqGV7ecdtej36x3YSIfPLRmPrspg== + mime-db@1.51.0: version "1.51.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c" @@ -2190,9 +2243,9 @@ minimalistic-crypto-utils@^1.0.1: integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + version "3.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.5.tgz#4da8f1290ee0f0f8e83d60ca69f8f134068604a3" + integrity sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw== dependencies: brace-expansion "^1.1.7" @@ -2240,16 +2293,11 @@ multiaddr@^10.0.0: uint8arrays "^3.0.0" varint "^6.0.0" -multiformats@^9.0.2, multiformats@^9.4.13, multiformats@^9.5.1: +multiformats@^9.0.2, multiformats@^9.4.1, multiformats@^9.4.13, multiformats@^9.4.2, multiformats@^9.4.5, multiformats@^9.5.1, multiformats@^9.5.4: version "9.6.3" resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-9.6.3.tgz#9f2aef711ddd0e7b05a1b5f1ad70928544c8c190" integrity sha512-yfXKI66fL0nFzt0nJl26i4wV1qAqbAEIBvfFbkbsne9GrLz6IHvHUoRyxUtlJcdP181ssOgjama6E/VSk4pbrA== -multiformats@^9.4.1, multiformats@^9.4.2, multiformats@^9.4.5, multiformats@^9.5.4: - version "9.5.5" - resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-9.5.5.tgz#d23c54b6ac99f40167024dc29ecb7c194f82c409" - integrity sha512-fz6TOZG1H3VRC0Bz7HHMiOk8gF67NRhCkACUAoaymOr3G3Exq44NWYwzdT5jcwnaoV+Des40RflmFET4lm3rgg== - nanoid@^3.0.2, nanoid@^3.1.12, nanoid@^3.1.20, nanoid@^3.1.23: version "3.2.0" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.2.0.tgz#62667522da6673971cca916a6d3eff3f415ff80c" @@ -2299,14 +2347,14 @@ node-fetch@3.2.0: fetch-blob "^3.1.4" formdata-polyfill "^4.0.10" -node-fetch@^2.6.6: - version "2.6.6" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.6.tgz#1751a7c01834e8e1697758732e9efb6eeadfaf89" - integrity sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA== +node-fetch@^2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== dependencies: whatwg-url "^5.0.0" -node-fetch@^2.6.7, "node-fetch@https://registry.npmjs.org/@achingbrain/node-fetch/-/node-fetch-2.6.7.tgz": +"node-fetch@https://registry.npmjs.org/@achingbrain/node-fetch/-/node-fetch-2.6.7.tgz": version "2.6.7" resolved "https://registry.npmjs.org/@achingbrain/node-fetch/-/node-fetch-2.6.7.tgz#1b5d62978f2ed07b99444f64f0df39f960a6d34d" @@ -2393,25 +2441,7 @@ pino-abstract-transport@^0.5.0, pino-abstract-transport@v0.5.0: duplexify "^4.1.2" split2 "^4.0.0" -pino-pretty@^7.2.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/pino-pretty/-/pino-pretty-7.3.0.tgz#277fdc2306a2f6d727a1127e7747d1c078efdd4b" - integrity sha512-HAhShJ2z2QzxXhYAn6XfwYpF13o1PQbjzSNA9q+30FAvhjOmeACit9lprhV/mCOw/8YFWSyyNk0YCq2EDYGYpw== - dependencies: - args "^5.0.1" - colorette "^2.0.7" - dateformat "^4.6.3" - fast-safe-stringify "^2.0.7" - joycon "^3.1.1" - pino-abstract-transport "^0.5.0" - pump "^3.0.0" - readable-stream "^3.6.0" - rfdc "^1.3.0" - secure-json-parse "^2.4.0" - sonic-boom "^2.2.0" - strip-json-comments "^3.1.1" - -pino-pretty@^7.5.1: +pino-pretty@^7.2.0, pino-pretty@^7.5.1: version "7.5.1" resolved "https://registry.yarnpkg.com/pino-pretty/-/pino-pretty-7.5.1.tgz#4614b8c1077b718428c5a630749c905247951693" integrity sha512-xEOUJiokdBGcZ9d0v7OY6SqEp+rrVH2drE3bHOUsK8elw44eh9V83InZqeL1dFwgD1IDnd6crUoec3hIXxfdBQ== @@ -2434,23 +2464,7 @@ pino-std-serializers@^4.0.0: resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz#1791ccd2539c091ae49ce9993205e2cd5dbba1e2" integrity sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q== -pino@^7.5.1: - version "7.6.2" - resolved "https://registry.yarnpkg.com/pino/-/pino-7.6.2.tgz#73d09dcf13079fd0a2fa7e8648f715d5082e63d8" - integrity sha512-GTzW+HHOzUTaPIyvK6tasky2jMXF1o3iw7Oc2ik7qFjcaexXfyn6ej72XwX4O+wuRyFCbp3oKpv00htrPddv5A== - dependencies: - fast-redact "^3.0.0" - on-exit-leak-free "^0.2.0" - pino-abstract-transport v0.5.0 - pino-std-serializers "^4.0.0" - process-warning "^1.0.0" - quick-format-unescaped "^4.0.3" - real-require "^0.1.0" - safe-stable-stringify "^2.1.0" - sonic-boom "^2.2.1" - thread-stream "^0.13.0" - -pino@^7.6.5: +pino@^7.5.1, pino@^7.6.5: version "7.6.5" resolved "https://registry.yarnpkg.com/pino/-/pino-7.6.5.tgz#a8bf9bfacbbcb78b4fe34f9378c29ef229b07b5d" integrity sha512-38tAwlJ7HevMENHD5FZE+yxSlAH5Wg3FoOjbB3MX2j3/kgpOEkmDHhTVKkecR57qxD5doHo2yi9nac94gqqbiQ== @@ -2573,21 +2587,22 @@ rfdc@^1.3.0: resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== -rxjs@^7.4.0: - version "7.5.1" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.1.tgz#af73df343cbcab37628197f43ea0c8256f54b157" - integrity sha512-KExVEeZWxMZnZhUZtsJcFwz8IvPvgu4G2Z2QyqjZQzUGr32KDYuSxrEYO4w3tFFNbfLozcrKUTvTPi+E9ywJkQ== +ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== dependencies: - tslib "^2.1.0" + hash-base "^3.0.0" + inherits "^2.0.1" -rxjs@^7.5.2: - version "7.5.3" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.3.tgz#1359f8a4704797bee74357d65a125dbc7d8f4a91" - integrity sha512-6162iC/N7L7K8q3UvdOMWix1ju+esADGrDaPrTu5XJmCv69YNdYoUaop/iatN8GHK+YHOdszPP+qygA0yi04zQ== +rxjs@^7.4.0, rxjs@^7.5.2: + version "7.5.4" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.4.tgz#3d6bd407e6b7ce9a123e76b1e770dc5761aa368d" + integrity sha512-h5M3Hk78r6wAheJF0a5YahB1yRQKCsZ4MsGdZ5O9ETbVtjPcScGfrMmoOq7EBsCRzd4BDkvDJ7ogP8Sz5tTFiQ== dependencies: tslib "^2.1.0" -safe-buffer@~5.2.0: +safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -2607,15 +2622,28 @@ scrypt-js@3.0.1: resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== +scryptsy@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/scryptsy/-/scryptsy-2.1.0.tgz#8d1e8d0c025b58fdd25b6fa9a0dc905ee8faa790" + integrity sha512-1CdSqHQowJBnMAFyPEBRfqag/YP9OF394FV+4YREIJX4ljD7OxvQRDayyoyyCk+senRjSkP6VnUNQmVQqB6g7w== + secure-json-parse@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/secure-json-parse/-/secure-json-parse-2.4.0.tgz#5aaeaaef85c7a417f76271a4f5b0cc3315ddca85" integrity sha512-Q5Z/97nbON5t/L/sH6mY2EacfjVGwrCcSi5D3btRO2GZ8pf1K1UN7Z9H5J57hjVU2Qzxr1xO+FmBhOvEkzCMmg== +sha.js@^2.4.0: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + sonic-boom@^2.2.0, sonic-boom@^2.2.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-2.4.2.tgz#34c0965b1a498abedaaca794c752d190f74b5e8f" - integrity sha512-zlOmAKFLJzTI+MbvmkWhnOOJ++NYo0Iy7F93ARNPmvZvpWG2l8Ff3uwM3CkpHqRw8v3pcRROScM5E+vbeTeOKw== + version "2.6.0" + resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-2.6.0.tgz#8786fc78be07c18a90381acd816d1d4afe3537a2" + integrity sha512-6xYZFRmDEtxGqfOKcDQ4cPLrNa0SPEDI+wlzDAHowXE6YV42NeXqg9mP2KkiM8JVu3lHfZ2iQKYlGOz+kTpphg== dependencies: atomic-sleep "^1.0.0" @@ -2656,9 +2684,9 @@ supports-color@^5.3.0: has-flag "^3.0.0" thread-stream@^0.13.0: - version "0.13.0" - resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-0.13.0.tgz#c68054bdea250c5d8d400caa3233a150d5461cca" - integrity sha512-kTMZeX4Dzlb1zZ00/01aerGaTw2i8NE4sWF0TvF1uXewRhCiUjCvatQkvxIvFqauWG2ADFS2Wpd3qBeYL9i3dg== + version "0.13.1" + resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-0.13.1.tgz#724e4c6ebaf6f5752a5dce54bef9153ecfdcb6df" + integrity sha512-+KNCqNxOSwYfXLtCIRDKQq29x9jvqnOFjYCPdB38sf4pT3QanPSNc8vRqMj+Q3z4tYIctb5opNZrMK/GwmgsAQ== dependencies: real-require "^0.1.0" @@ -2702,9 +2730,9 @@ tr46@~0.0.3: integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= ts-node@^10.4.0: - version "10.4.0" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.4.0.tgz#680f88945885f4e6cf450e7f0d6223dd404895f7" - integrity sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A== + version "10.5.0" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.5.0.tgz#618bef5854c1fbbedf5e31465cbb224a1d524ef9" + integrity sha512-6kEJKwVxAJ35W4akuiysfKwKmjkbYxwQMTBaAxo9KKAx/Yd26mPUyhGz3ji+EsJoAgrLqVsYHNuuYwQe22lbtw== dependencies: "@cspotcode/source-map-support" "0.7.0" "@tsconfig/node10" "^1.0.7" @@ -2717,6 +2745,7 @@ ts-node@^10.4.0: create-require "^1.1.0" diff "^4.0.1" make-error "^1.1.1" + v8-compile-cache-lib "^3.0.0" yn "3.1.1" tslib@^2.1.0: @@ -2735,9 +2764,9 @@ type@^1.0.1: integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== type@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/type/-/type-2.5.0.tgz#0a2e78c2e77907b252abe5f298c1b01c63f0db3d" - integrity sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw== + version "2.6.0" + resolved "https://registry.yarnpkg.com/type/-/type-2.6.0.tgz#3ca6099af5981d36ca86b78442973694278a219f" + integrity sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ== typedarray-to-buffer@^3.1.5: version "3.1.5" @@ -2747,9 +2776,9 @@ typedarray-to-buffer@^3.1.5: is-typedarray "^1.0.0" typescript@^4.5.3: - version "4.5.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.4.tgz#a17d3a0263bf5c8723b9c52f43c5084edf13c2e8" - integrity sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg== + version "4.5.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.5.tgz#d8c953832d28924a9e3d37c73d729c846c5896f3" + integrity sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA== uint8arrays@^3.0.0: version "3.0.0" @@ -2770,6 +2799,11 @@ util-deprecate@^1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= +v8-compile-cache-lib@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.0.tgz#0582bcb1c74f3a2ee46487ceecf372e46bce53e8" + integrity sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA== + varint@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/varint/-/varint-6.0.0.tgz#9881eb0ce8feaea6512439d19ddf84bf551661d0" @@ -2815,6 +2849,13 @@ ws@7.4.6: resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== +xxhashjs@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/xxhashjs/-/xxhashjs-0.2.2.tgz#8a6251567621a1c46a5ae204da0249c7f8caa9d8" + integrity sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw== + dependencies: + cuint "^0.2.2" + yaeti@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" diff --git a/package.json b/package.json index 9e3ea2d..3dc159f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,6 @@ "mock-enclave:vm": "cd mock-enclave && yarn vm", "mock-enclave:serve": "cd mock-enclave && yarn serve", - "chaos:party": "cd chaos && yarn party" + "chaos:party": "cd skw-tools-chaos && yarn party" } }