From a7391ce693d0423c3150615e76b0ea2875ef5f68 Mon Sep 17 00:00:00 2001 From: "Ching-Hua (Vivian) Lin" Date: Tue, 29 Oct 2024 17:07:54 +0800 Subject: [PATCH 01/55] fix(iota-e2e-tests): Skip apy test (#3731) --- crates/iota-e2e-tests/tests/apy_test.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/iota-e2e-tests/tests/apy_test.rs b/crates/iota-e2e-tests/tests/apy_test.rs index 1d5607226fd..63660264dfb 100644 --- a/crates/iota-e2e-tests/tests/apy_test.rs +++ b/crates/iota-e2e-tests/tests/apy_test.rs @@ -41,6 +41,7 @@ use test_cluster::TestClusterBuilder; /// calculate APY from epoch 1 and 2. Since we need epoch 0 to start staking /// anyway, and only have the stake of the pool at the expected number (a /// quarter of 3.5B IOTAs) starting from epoch 1, this is totally fine. +#[ignore = "https://github.com/iotaledger/iota/issues/3552"] #[sim_test] async fn test_apy() { // We need a large stake for low enough APY values such that they are not From 8882941537fc9d96484943e2a6e6364597d5cc6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bego=C3=B1a=20=C3=81lvarez=20de=20la=20Cruz?= Date: Tue, 29 Oct 2024 11:03:02 +0100 Subject: [PATCH 02/55] chore(ts-sdk): update SDK with latest schemas (#3729) --- sdk/graphql-transport/src/generated/queries.ts | 4 ++-- sdk/graphql-transport/src/methods.ts | 1 + sdk/typescript/src/client/types/generated.ts | 9 +++++++-- .../src/graphql/generated/2024.10/schema.graphql | 4 ++-- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/sdk/graphql-transport/src/generated/queries.ts b/sdk/graphql-transport/src/generated/queries.ts index ac36d66bdf4..af75693d249 100644 --- a/sdk/graphql-transport/src/generated/queries.ts +++ b/sdk/graphql-transport/src/generated/queries.ts @@ -342,7 +342,7 @@ export type AuthenticatorStateCreateTransaction = { export type AuthenticatorStateExpireTransaction = { __typename?: 'AuthenticatorStateExpireTransaction'; - /** The initial version that the AuthenticatorStateUpdate was shared at. */ + /** The initial version that the AuthenticatorStateUpdateV1 was shared at. */ authenticatorObjInitialSharedVersion: Scalars['UInt53']['output']; /** Expire JWKs that have a lower epoch than this. */ minEpoch?: Maybe; @@ -5018,7 +5018,7 @@ export type Validator = { stakingPool?: Maybe; /** The epoch at which this pool became active. */ stakingPoolActivationEpoch?: Maybe; - /** The ID of this validator's `0x3::staking_pool::StakingPool`. */ + /** The ID of this validator's `0x3::staking_pool::StakingPoolV1`. */ stakingPoolId: Scalars['IotaAddress']['output']; /** The total number of IOTA tokens in this pool. */ stakingPoolIotaBalance?: Maybe; diff --git a/sdk/graphql-transport/src/methods.ts b/sdk/graphql-transport/src/methods.ts index 67d420b43ce..46c91c9656c 100644 --- a/sdk/graphql-transport/src/methods.ts +++ b/sdk/graphql-transport/src/methods.ts @@ -799,6 +799,7 @@ export const RPC_METHODS: { iotaTotalSupply: String(systemState.iotaTotalSupply), iotaTreasuryCapId: String(systemState.iotaTreasuryCapId), maxValidatorCount: String(systemState.systemParameters?.maxValidatorCount), + minValidatorCount: String(systemState.systemParameters?.minValidatorCount), minValidatorJoiningStake: String( systemState.systemParameters?.minValidatorJoiningStake, ), diff --git a/sdk/typescript/src/client/types/generated.ts b/sdk/typescript/src/client/types/generated.ts index a8a48b0e2a6..30bcba8d817 100644 --- a/sdk/typescript/src/client/types/generated.ts +++ b/sdk/typescript/src/client/types/generated.ts @@ -228,7 +228,7 @@ export interface EndOfEpochInfo { epochEndTimestamp: string; lastCheckpointId: string; mintedTokensAmount: string; - /** existing fields from `SystemEpochInfoEvent` (without epoch) */ + /** existing fields from `SystemEpochInfoEventV1` (without epoch) */ protocolVersion: string; referenceGasPrice: string; storageCharge: string; @@ -690,6 +690,11 @@ export interface IotaSystemStateSummary { * epoch to go above this. */ maxValidatorCount: string; + /** + * Minimum number of active validators at any moment. We do not allow the number of validators in any + * epoch to go under this. + */ + minValidatorCount: string; /** Lower-bound on the amount of stake required to become a validator. */ minValidatorJoiningStake: string; /** ID of the object that contains the list of new validators that will join at the end of the epoch. */ @@ -1479,7 +1484,7 @@ export type IotaTransactionBlockKind = } /** A transaction which updates global authenticator state */ | { epoch: string; - kind: 'AuthenticatorStateUpdate'; + kind: 'AuthenticatorStateUpdateV1'; new_active_jwks: IotaActiveJwk[]; round: string; } /** A transaction which updates global randomness state */ diff --git a/sdk/typescript/src/graphql/generated/2024.10/schema.graphql b/sdk/typescript/src/graphql/generated/2024.10/schema.graphql index fba63a69734..be787e02e22 100644 --- a/sdk/typescript/src/graphql/generated/2024.10/schema.graphql +++ b/sdk/typescript/src/graphql/generated/2024.10/schema.graphql @@ -191,7 +191,7 @@ type AuthenticatorStateExpireTransaction { """ minEpoch: Epoch """ - The initial version that the AuthenticatorStateUpdate was shared at. + The initial version that the AuthenticatorStateUpdateV1 was shared at. """ authenticatorObjInitialSharedVersion: UInt53! } @@ -4400,7 +4400,7 @@ type Validator { """ stakingPool: MoveObject @deprecated(reason: "The staking pool is a wrapped object. Access its fields directly on the `Validator` type.") """ - The ID of this validator's `0x3::staking_pool::StakingPool`. + The ID of this validator's `0x3::staking_pool::StakingPoolV1`. """ stakingPoolId: IotaAddress! """ From f5b64c5bf62690262f3976b73dc8529a638848ec Mon Sep 17 00:00:00 2001 From: Thoralf-M <46689931+Thoralf-M@users.noreply.github.com> Date: Tue, 29 Oct 2024 11:32:20 +0100 Subject: [PATCH 03/55] feat!(iota): remove KeyToolCommand::{LoadKeypair, Unpack} (#3223) * feat!(iota): remove KeyToolCommand::LoadKeypair * Remove unused struct KeypairData * feat!(iota): remove KeyToolCommand::Unpack --------- Co-authored-by: Thibault Martinez --- crates/iota/src/keytool.rs | 73 +------------------------ docs/content/references/cli/keytool.mdx | 5 -- 2 files changed, 2 insertions(+), 76 deletions(-) diff --git a/crates/iota/src/keytool.rs b/crates/iota/src/keytool.rs index 059eccb635d..2c9eaf01877 100644 --- a/crates/iota/src/keytool.rs +++ b/crates/iota/src/keytool.rs @@ -4,8 +4,7 @@ use std::{ fmt::{Debug, Display, Formatter}, - fs, - path::{Path, PathBuf}, + path::PathBuf, sync::Arc, }; @@ -150,12 +149,6 @@ pub enum KeyToolCommand { #[clap(long, short = 's')] sort_by_alias: bool, }, - /// This reads the content at the provided file path. The accepted format - /// is a Bech32 encoded [enum IotaKeyPair] or `type AuthorityKeyPair` - /// (Base64 encoded `privkey`). This prints out the account keypair as - /// Base64 encoded `flag || privkey`, the network keypair, protocol - /// keypair, authority keypair as Base64 encoded `privkey`. - LoadKeypair { file: PathBuf }, /// To MultiSig Iota Address. Pass in a list of all public keys `flag || pk` /// in Base64. See `keytool list` for example public keys. MultiSigAddress { @@ -220,11 +213,6 @@ pub enum KeyToolCommand { #[clap(long)] base64pk: String, }, - /// This takes a bech32 encoded [enum IotaKeyPair]. It outputs the keypair - /// into a file at the current directory where the address is the - /// filename, and prints out its Iota address, Base64 encoded public - /// key, the key scheme, and the key scheme flag. - Unpack { keypair: String }, // Commented for now: https://github.com/iotaledger/iota/issues/1777 // /// Given the max_epoch, generate an OAuth url, ask user to paste the // /// redirect with id_token, call salt server, then call the prover server, @@ -356,15 +344,6 @@ pub struct ExportedKey { key: Key, } -#[derive(Serialize)] -#[serde(rename_all = "camelCase")] -pub struct KeypairData { - account_keypair: String, - network_keypair: Option, - protocol_keypair: Option, - key_scheme: String, -} - #[derive(Serialize)] #[serde(rename_all = "camelCase")] pub struct MultiSigAddress { @@ -456,7 +435,6 @@ pub enum CommandOutput { Import(Key), Export(ExportedKey), List(Vec), - LoadKeypair(KeypairData), MultiSigAddress(MultiSigAddress), MultiSigCombinePartialSig(MultiSigCombinePartialSig), Show(Key), @@ -665,44 +643,6 @@ impl KeyToolCommand { } CommandOutput::List(keys) } - KeyToolCommand::LoadKeypair { file } => { - let output = match read_keypair_from_file(&file) { - Ok(keypair) => { - // Account keypair is encoded with the key scheme flag {}, - // and network and protocol keypair are not. - let network_protocol_keypair = match &keypair { - IotaKeyPair::Ed25519(kp) => kp.encode_base64(), - IotaKeyPair::Secp256k1(kp) => kp.encode_base64(), - IotaKeyPair::Secp256r1(kp) => kp.encode_base64(), - }; - KeypairData { - account_keypair: keypair.encode_base64(), - network_keypair: Some(network_protocol_keypair.clone()), - protocol_keypair: Some(network_protocol_keypair), - key_scheme: keypair.public().scheme().to_string(), - } - } - Err(_) => { - // Authority keypair file is not stored with the flag, it will try read as - // BLS keypair.. - match read_authority_keypair_from_file(&file) { - Ok(keypair) => KeypairData { - account_keypair: keypair.encode_base64(), - network_keypair: None, - protocol_keypair: None, - key_scheme: SignatureScheme::BLS12381.to_string(), - }, - Err(e) => { - return Err(anyhow!(format!( - "Failed to read keypair at path {:?} err: {:?}", - file, e - ))); - } - } - } - }; - CommandOutput::LoadKeypair(output) - } KeyToolCommand::MultiSigAddress { threshold, pks, @@ -854,16 +794,7 @@ impl KeyToolCommand { serialized_sig_base64: serialized_sig, }) } - KeyToolCommand::Unpack { keypair } => { - let key = Key::from( - &IotaKeyPair::decode(&keypair) - .map_err(|_| anyhow!("Invalid Bech32 encoded keypair"))?, - ); - let path_str = format!("{}.key", key.iota_address).to_lowercase(); - let path = Path::new(&path_str); - fs::write(path, keypair)?; - CommandOutput::Show(key) - } /* Commented for now: https://github.com/iotaledger/iota/issues/1777 + /* Commented for now: https://github.com/iotaledger/iota/issues/1777 * KeyToolCommand::ZkLoginInsecureSignPersonalMessage { data, max_epoch } => { * let msg = PersonalMessage { * message: data.as_bytes().to_vec(), diff --git a/docs/content/references/cli/keytool.mdx b/docs/content/references/cli/keytool.mdx index f9ab9bcddc2..77a4581fe3b 100644 --- a/docs/content/references/cli/keytool.mdx +++ b/docs/content/references/cli/keytool.mdx @@ -29,9 +29,6 @@ Commands: provided, the tool will automatically generate one export Output the private key of the given key identity in Iota CLI Keystore as Bech32 encoded string starting with `iotaprivkey` list List all keys by its Iota address, Base64 encoded public key, key scheme name in iota.keystore - load-keypair This reads the content at the provided file path. The accepted format can be [enum IotaKeyPair] (Base64 encoded of 33-byte `flag || privkey`) or `type - AuthorityKeyPair` (Base64 encoded `privkey`). This prints out the account keypair as Base64 encoded `flag || privkey`, the network keypair, protocol keypair, - authority keypair as Base64 encoded `privkey` multi-sig-address To MultiSig Iota Address. Pass in a list of all public keys `flag || pk` in Base64. See `keytool list` for example public keys multi-sig-combine-partial-sig Provides a list of participating signatures (`flag || sig || pk` encoded in Base64), threshold, a list of all public keys and a list of their weights that define the MultiSig address. Returns a valid MultiSig signature and its sender address. The result can be used as signature field for `iota client @@ -43,8 +40,6 @@ Commands: sign-kms Creates a signature by leveraging AWS KMS. Pass in a key-id to leverage Amazon KMS to sign a message and the base64 pubkey. Generate PubKey from pem using iotaledger/base64pemkey Any signature commits to a [struct IntentMessage] consisting of the Base64 encoded of the BCS serialized transaction bytes itself and its intent. If intent is absent, default will be used - unpack This takes [enum IotaKeyPair] of Base64 encoded of 33-byte `flag || privkey`). It outputs the keypair into a file at the current directory where the address is - the filename, and prints out its Iota address, Base64 encoded public key, the key scheme, and the key scheme flag help Print this message or the help of the given subcommand(s) Options: From 605d02886e71ce3b84b40a358ce015790429e100 Mon Sep 17 00:00:00 2001 From: Bing-Yang <51323441+bingyanglin@users.noreply.github.com> Date: Tue, 29 Oct 2024 19:06:52 +0800 Subject: [PATCH 04/55] fix(iota-benchmark): fix `test_upgrade_compatibility` (#3732) * Fix test_upgrade_compatibility * Update crates/iota-benchmark/tests/simtest.rs Co-authored-by: muXxer * Modify the ProtocolVersion::MAX_ALLOWED * Revert the MAX_ALLOWED to avoid breaking other testings * Use MAX + 1 for protocol upgrade testing for now --------- Co-authored-by: muXxer --- crates/iota-benchmark/tests/simtest.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/iota-benchmark/tests/simtest.rs b/crates/iota-benchmark/tests/simtest.rs index f903d1db610..d59d8a0b66f 100644 --- a/crates/iota-benchmark/tests/simtest.rs +++ b/crates/iota-benchmark/tests/simtest.rs @@ -668,7 +668,8 @@ mod test { } async fn test_protocol_upgrade_compatibility_impl() { - let max_ver = ProtocolVersion::MAX.as_u64(); + // TODO: Remove the `+ 1` after we have Protocol version 2 + let max_ver = ProtocolVersion::MAX.as_u64() + 1; let manifest = iota_framework_snapshot::load_bytecode_snapshot_manifest(); let Some((&starting_version, _)) = manifest.range(..max_ver).last() else { From 83f048346e8fd498485e3ecdd2a36e2b5a8be2ac Mon Sep 17 00:00:00 2001 From: Bing-Yang <51323441+bingyanglin@users.noreply.github.com> Date: Tue, 29 Oct 2024 19:07:21 +0800 Subject: [PATCH 05/55] feat(node): Remove multiple versions of types (Part 2) (#3672) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Remove ExecutionResultsV1 * Rename ExecutionResults::V2 to be V1 * Rename V2 to V1 * Rebase * Fix clippy * refactor(iota-types): remove TransactionEffectsV2 * refactor(iota-types): update specs * Rename UID versions (#3658) * refactor(core-node): rename `ExecuteTransactionRequest`/`ResponseV3` to version 1 (#3598) * Rebase the new develop * Rename ExecuteTransactionRequestV1::new_v2 to be new_v1 * Rename execute_transaction_v3 to be execute_transaction_v1 * Remove VerifiedExecuteTransactionResponseV1/ExecuteTransactionResponse * Remove ExecuteTransactionRequest * new_v1 to new * refactor(core-node): rename `IotaGasStatusV2` to be `IotaGasStatusV1` (#3660) * Rename gas status versions * Rename gas_v2 to be gas_v1 * Update crates/iota-types/src/gas.rs Co-authored-by: Mirko Zichichi --------- Co-authored-by: Mirko Zichichi * refactor(iota-core): Remove old versions for CheckpointResponse and CheckpointRequest. * refactor(iota-core): Rename CheckpointResponseV2 and CheckpointRequestV2 to CheckpointResponse and CheckpointRequest * refactor(iota-core): Rename handle_checkpoint_request_v2 to handle_checkpoint_request * Update iota-rust-sdk --------- Co-authored-by: miker83z Co-authored-by: Mirko Zichichi Co-authored-by: Daria Dziubałtowska Co-authored-by: Daria Dziubałtowska <44535712+daria305@users.noreply.github.com> Co-authored-by: muXxer Co-authored-by: Thoralf Müller --- Cargo.lock | 2 +- Cargo.toml | 2 +- crates/iota-core/src/authority.rs | 33 +- crates/iota-core/src/authority_client.rs | 22 +- crates/iota-core/src/authority_server.rs | 21 +- crates/iota-core/src/checkpoints/mod.rs | 16 +- crates/iota-core/src/safe_client.rs | 76 -- .../iota-core/src/test_authority_clients.rs | 27 +- .../iota-core/src/validator_tx_finalizer.rs | 11 +- crates/iota-core/tests/staged/iota.yaml | 79 -- crates/iota-network/build.rs | 9 - .../src/displays/gas_status_displays.rs | 8 +- crates/iota-tool/src/commands.rs | 1 + crates/iota-types/src/effects/effects_v1.rs | 721 +++++++++++------- crates/iota-types/src/effects/effects_v2.rs | 613 --------------- crates/iota-types/src/effects/mod.rs | 73 +- .../src/effects/test_effects_builder.rs | 2 +- crates/iota-types/src/execution.rs | 15 +- .../iota-types/src/full_checkpoint_content.rs | 65 +- crates/iota-types/src/gas.rs | 12 +- .../src/gas_model/{gas_v2.rs => gas_v1.rs} | 0 crates/iota-types/src/gas_model/mod.rs | 2 +- crates/iota-types/src/messages_checkpoint.rs | 18 - crates/iota-types/src/quorum_driver_types.rs | 27 - .../iota-adapter/src/execution_engine.rs | 6 +- .../src/programmable_transactions/context.rs | 4 +- .../iota-adapter/src/temporary_store.rs | 18 +- .../src/object_runtime/mod.rs | 12 +- .../v0/iota-adapter/src/execution_engine.rs | 6 +- .../src/programmable_transactions/context.rs | 4 +- .../v0/iota-adapter/src/temporary_store.rs | 18 +- .../src/object_runtime/mod.rs | 12 +- 32 files changed, 553 insertions(+), 1382 deletions(-) delete mode 100644 crates/iota-types/src/effects/effects_v2.rs rename crates/iota-types/src/gas_model/{gas_v2.rs => gas_v1.rs} (100%) diff --git a/Cargo.lock b/Cargo.lock index c2fd51fc912..a580c1205b5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7626,7 +7626,7 @@ dependencies = [ [[package]] name = "iota-rust-sdk" version = "0.0.0" -source = "git+ssh://git@github.com/iotaledger/iota-rust-sdk.git?rev=46d46d64237e001e8e23f322caecb3211c9a8c97#46d46d64237e001e8e23f322caecb3211c9a8c97" +source = "git+ssh://git@github.com/iotaledger/iota-rust-sdk.git?rev=ed6173d434c77604ddc93aaa1550168fdbe97b09#ed6173d434c77604ddc93aaa1550168fdbe97b09" dependencies = [ "base64ct", "bcs", diff --git a/Cargo.toml b/Cargo.toml index 141904a44f1..08e8fa83e47 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -419,7 +419,7 @@ iota-rosetta = { path = "crates/iota-rosetta" } iota-rpc-loadgen = { path = "crates/iota-rpc-loadgen" } iota-sdk = { path = "crates/iota-sdk" } # core-types with json format for REST api -iota-sdk2 = { package = "iota-rust-sdk", git = "ssh://git@github.com/iotaledger/iota-rust-sdk.git", rev = "46d46d64237e001e8e23f322caecb3211c9a8c97", features = ["hash", "serde", "schemars"] } +iota-sdk2 = { package = "iota-rust-sdk", git = "ssh://git@github.com/iotaledger/iota-rust-sdk.git", rev = "ed6173d434c77604ddc93aaa1550168fdbe97b09", features = ["hash", "serde", "schemars"] } iota-simulator = { path = "crates/iota-simulator" } iota-snapshot = { path = "crates/iota-snapshot" } iota-source-validation = { path = "crates/iota-source-validation" } diff --git a/crates/iota-core/src/authority.rs b/crates/iota-core/src/authority.rs index 7eee6f5e8eb..b783c447b90 100644 --- a/crates/iota-core/src/authority.rs +++ b/crates/iota-core/src/authority.rs @@ -84,10 +84,9 @@ use iota_types::{ message_envelope::Message, messages_checkpoint::{ CertifiedCheckpointSummary, CheckpointCommitment, CheckpointContents, - CheckpointContentsDigest, CheckpointDigest, CheckpointRequest, CheckpointRequestV2, - CheckpointResponse, CheckpointResponseV2, CheckpointSequenceNumber, CheckpointSummary, - CheckpointSummaryResponse, CheckpointTimestamp, ECMHLiveObjectSetDigest, - VerifiedCheckpoint, + CheckpointContentsDigest, CheckpointDigest, CheckpointRequest, CheckpointResponse, + CheckpointSequenceNumber, CheckpointSummary, CheckpointSummaryResponse, + CheckpointTimestamp, ECMHLiveObjectSetDigest, VerifiedCheckpoint, }, messages_consensus::AuthorityCapabilitiesV1, messages_grpc::{ @@ -2558,30 +2557,6 @@ impl AuthorityState { &self, request: &CheckpointRequest, ) -> IotaResult { - let summary = match request.sequence_number { - Some(seq) => self - .checkpoint_store - .get_checkpoint_by_sequence_number(seq)?, - None => self.checkpoint_store.get_latest_certified_checkpoint(), - } - .map(|v| v.into_inner()); - let contents = match &summary { - Some(s) => self - .checkpoint_store - .get_checkpoint_contents(&s.content_digest)?, - None => None, - }; - Ok(CheckpointResponse { - checkpoint: summary, - contents, - }) - } - - #[instrument(level = "trace", skip_all)] - pub fn handle_checkpoint_request_v2( - &self, - request: &CheckpointRequestV2, - ) -> IotaResult { let summary = if request.certified { let summary = match request.sequence_number { Some(seq) => self @@ -2606,7 +2581,7 @@ impl AuthorityState { .get_checkpoint_contents(&s.content_digest())?, None => None, }; - Ok(CheckpointResponseV2 { + Ok(CheckpointResponse { checkpoint: summary, contents, }) diff --git a/crates/iota-core/src/authority_client.rs b/crates/iota-core/src/authority_client.rs index 23457b75321..82ace64486f 100644 --- a/crates/iota-core/src/authority_client.rs +++ b/crates/iota-core/src/authority_client.rs @@ -18,9 +18,7 @@ use iota_types::{ committee::CommitteeWithNetworkMetadata, error::{IotaError, IotaResult}, iota_system_state::IotaSystemState, - messages_checkpoint::{ - CheckpointRequest, CheckpointRequestV2, CheckpointResponse, CheckpointResponseV2, - }, + messages_checkpoint::{CheckpointRequest, CheckpointResponse}, messages_grpc::{ HandleCertificateRequestV3, HandleCertificateResponseV2, HandleCertificateResponseV3, HandleSoftBundleCertificatesRequestV3, HandleSoftBundleCertificatesResponseV3, @@ -81,12 +79,6 @@ pub trait AuthorityAPI { request: CheckpointRequest, ) -> Result; - /// Handles a `CheckpointRequestV2` for this account. - async fn handle_checkpoint_v2( - &self, - request: CheckpointRequestV2, - ) -> Result; - // This API is exclusively used by the benchmark code. // Hence it's OK to return a fixed system state type. async fn handle_system_state_object( @@ -243,18 +235,6 @@ impl AuthorityAPI for NetworkAuthorityClient { .map_err(Into::into) } - /// Handles a `CheckpointRequestV2` for this account. - async fn handle_checkpoint_v2( - &self, - request: CheckpointRequestV2, - ) -> Result { - self.client()? - .checkpoint_v2(request) - .await - .map(tonic::Response::into_inner) - .map_err(Into::into) - } - /// This API is exclusively used by the benchmark code. async fn handle_system_state_object( &self, diff --git a/crates/iota-core/src/authority_server.rs b/crates/iota-core/src/authority_server.rs index b842127274f..6c6f12c8ae0 100644 --- a/crates/iota-core/src/authority_server.rs +++ b/crates/iota-core/src/authority_server.rs @@ -23,9 +23,7 @@ use iota_types::{ error::*, fp_ensure, iota_system_state::IotaSystemState, - messages_checkpoint::{ - CheckpointRequest, CheckpointRequestV2, CheckpointResponse, CheckpointResponseV2, - }, + messages_checkpoint::{CheckpointRequest, CheckpointResponse}, messages_consensus::ConsensusTransaction, messages_grpc::{ HandleCertificateRequestV3, HandleCertificateResponseV2, HandleCertificateResponseV3, @@ -927,15 +925,6 @@ impl ValidatorService { Ok((tonic::Response::new(response), Weight::one())) } - async fn checkpoint_v2_impl( - &self, - request: tonic::Request, - ) -> WrappedServiceResponse { - let request = request.into_inner(); - let response = self.state.handle_checkpoint_request_v2(&request)?; - Ok((tonic::Response::new(response), Weight::one())) - } - async fn get_system_state_object_impl( &self, _request: tonic::Request, @@ -1213,14 +1202,6 @@ impl Validator for ValidatorService { handle_with_decoration!(self, checkpoint_impl, request) } - /// Handles a `CheckpointRequestV2` request. - async fn checkpoint_v2( - &self, - request: tonic::Request, - ) -> Result, tonic::Status> { - handle_with_decoration!(self, checkpoint_v2_impl, request) - } - /// Gets the `IotaSystemState` response. async fn get_system_state_object( &self, diff --git a/crates/iota-core/src/checkpoints/mod.rs b/crates/iota-core/src/checkpoints/mod.rs index c7b56a7cd34..f23767c8f84 100644 --- a/crates/iota-core/src/checkpoints/mod.rs +++ b/crates/iota-core/src/checkpoints/mod.rs @@ -42,8 +42,8 @@ use iota_types::{ }, message_envelope::Message, messages_checkpoint::{ - CertifiedCheckpointSummary, CheckpointCommitment, CheckpointContents, CheckpointRequestV2, - CheckpointResponseV2, CheckpointSequenceNumber, CheckpointSignatureMessage, + CertifiedCheckpointSummary, CheckpointCommitment, CheckpointContents, CheckpointRequest, + CheckpointResponse, CheckpointSequenceNumber, CheckpointSignatureMessage, CheckpointSummary, CheckpointSummaryResponse, CheckpointTimestamp, EndOfEpochData, FullCheckpointContents, SignedCheckpointSummary, TrustedCheckpoint, VerifiedCheckpoint, VerifiedCheckpointContents, @@ -2078,12 +2078,12 @@ async fn diagnose_split_brain( let client = network_clients .get(&validator) .expect("Failed to get network client"); - let request = CheckpointRequestV2 { + let request = CheckpointRequest { sequence_number: Some(local_summary.sequence_number), request_content: true, certified: false, }; - client.handle_checkpoint_v2(request) + client.handle_checkpoint(request) }) .collect::>(); @@ -2094,17 +2094,17 @@ async fn diagnose_split_brain( .zip(digest_name_pair) .filter_map(|(response, (digest, name))| match response { Ok(response) => match response { - CheckpointResponseV2 { + CheckpointResponse { checkpoint: Some(CheckpointSummaryResponse::Pending(summary)), contents: Some(contents), } => Some((*name, *digest, summary, contents)), - CheckpointResponseV2 { + CheckpointResponse { checkpoint: Some(CheckpointSummaryResponse::Certified(_)), contents: _, } => { panic!("Expected pending checkpoint, but got certified checkpoint"); } - CheckpointResponseV2 { + CheckpointResponse { checkpoint: None, contents: _, } => { @@ -2114,7 +2114,7 @@ async fn diagnose_split_brain( ); None } - CheckpointResponseV2 { + CheckpointResponse { checkpoint: _, contents: None, } => { diff --git a/crates/iota-core/src/safe_client.rs b/crates/iota-core/src/safe_client.rs index 29468152c1a..57b38aafedd 100644 --- a/crates/iota-core/src/safe_client.rs +++ b/crates/iota-core/src/safe_client.rs @@ -14,9 +14,6 @@ use iota_types::{ error::{IotaError, IotaResult}, fp_ensure, iota_system_state::IotaSystemState, - messages_checkpoint::{ - CertifiedCheckpointSummary, CheckpointRequest, CheckpointResponse, CheckpointSequenceNumber, - }, messages_grpc::{ HandleCertificateRequestV3, HandleCertificateResponseV2, HandleCertificateResponseV3, ObjectInfoRequest, ObjectInfoResponse, SystemStateRequest, TransactionInfoRequest, @@ -529,79 +526,6 @@ where Ok(transaction_info) } - fn verify_checkpoint_sequence( - &self, - expected_seq: Option, - checkpoint: &Option, - ) -> IotaResult { - let observed_seq = checkpoint.as_ref().map(|c| c.sequence_number); - - if let (Some(e), Some(o)) = (expected_seq, observed_seq) { - fp_ensure!( - e == o, - IotaError::from("Expected checkpoint number doesn't match with returned") - ); - } - Ok(()) - } - - fn verify_contents_exist( - &self, - request_content: bool, - checkpoint: &Option, - contents: &Option, - ) -> IotaResult { - match (request_content, checkpoint, contents) { - // If content is requested, checkpoint is not None, but we are not getting any content, - // it's an error. - // If content is not requested, or checkpoint is None, yet we are still getting content, - // it's an error. - (true, Some(_), None) | (false, _, Some(_)) | (_, None, Some(_)) => Err( - IotaError::from("Checkpoint contents inconsistent with request"), - ), - _ => Ok(()), - } - } - - fn verify_checkpoint_response( - &self, - request: &CheckpointRequest, - response: &CheckpointResponse, - ) -> IotaResult { - // Verify response data was correct for request - let CheckpointResponse { - checkpoint, - contents, - } = &response; - // Checks that the sequence number is correct. - self.verify_checkpoint_sequence(request.sequence_number, checkpoint)?; - self.verify_contents_exist(request.request_content, checkpoint, contents)?; - // Verify signature. - match checkpoint { - Some(c) => { - let epoch_id = c.epoch; - c.verify_with_contents(&*self.get_committee(&epoch_id)?, contents.as_ref()) - } - None => Ok(()), - } - } - - #[instrument(level = "trace", skip_all, fields(authority = ?self.address.concise()))] - pub async fn handle_checkpoint( - &self, - request: CheckpointRequest, - ) -> Result { - let resp = self - .authority_client - .handle_checkpoint(request.clone()) - .await?; - self.verify_checkpoint_response(&request, &resp) - .tap_err(|err| { - error!(?err, authority=?self.address, "Client error in handle_checkpoint"); - })?; - Ok(resp) - } - #[instrument(level = "trace", skip_all, fields(authority = ?self.address.concise()))] pub async fn handle_system_state_object(&self) -> Result { self.authority_client diff --git a/crates/iota-core/src/test_authority_clients.rs b/crates/iota-core/src/test_authority_clients.rs index f4272029d0c..fc2d12898d3 100644 --- a/crates/iota-core/src/test_authority_clients.rs +++ b/crates/iota-core/src/test_authority_clients.rs @@ -17,9 +17,7 @@ use iota_types::{ effects::TransactionEffectsAPI, error::{IotaError, IotaResult}, iota_system_state::IotaSystemState, - messages_checkpoint::{ - CheckpointRequest, CheckpointRequestV2, CheckpointResponse, CheckpointResponseV2, - }, + messages_checkpoint::{CheckpointRequest, CheckpointResponse}, messages_grpc::{ HandleCertificateRequestV3, HandleCertificateResponseV2, HandleCertificateResponseV3, HandleSoftBundleCertificatesRequestV3, HandleSoftBundleCertificatesResponseV3, @@ -155,15 +153,6 @@ impl AuthorityAPI for LocalAuthorityClient { state.handle_checkpoint_request(&request) } - async fn handle_checkpoint_v2( - &self, - request: CheckpointRequestV2, - ) -> Result { - let state = self.state.clone(); - - state.handle_checkpoint_request_v2(&request) - } - async fn handle_system_state_object( &self, _request: SystemStateRequest, @@ -355,13 +344,6 @@ impl AuthorityAPI for MockAuthorityApi { unimplemented!(); } - async fn handle_checkpoint_v2( - &self, - _request: CheckpointRequestV2, - ) -> Result { - unimplemented!(); - } - async fn handle_system_state_object( &self, _request: SystemStateRequest, @@ -440,13 +422,6 @@ impl AuthorityAPI for HandleTransactionTestAuthorityClient { unimplemented!() } - async fn handle_checkpoint_v2( - &self, - _request: CheckpointRequestV2, - ) -> Result { - unimplemented!() - } - async fn handle_system_state_object( &self, _request: SystemStateRequest, diff --git a/crates/iota-core/src/validator_tx_finalizer.rs b/crates/iota-core/src/validator_tx_finalizer.rs index 607ad914920..12a2ad27a80 100644 --- a/crates/iota-core/src/validator_tx_finalizer.rs +++ b/crates/iota-core/src/validator_tx_finalizer.rs @@ -289,9 +289,7 @@ mod tests { error::IotaError, executable_transaction::VerifiedExecutableTransaction, iota_system_state::IotaSystemState, - messages_checkpoint::{ - CheckpointRequest, CheckpointRequestV2, CheckpointResponse, CheckpointResponseV2, - }, + messages_checkpoint::{CheckpointRequest, CheckpointResponse}, messages_grpc::{ HandleCertificateRequestV3, HandleCertificateResponseV2, HandleCertificateResponseV3, HandleSoftBundleCertificatesRequestV3, HandleSoftBundleCertificatesResponseV3, @@ -406,13 +404,6 @@ mod tests { unimplemented!() } - async fn handle_checkpoint_v2( - &self, - _request: CheckpointRequestV2, - ) -> Result { - unimplemented!() - } - async fn handle_system_state_object( &self, _request: SystemStateRequest, diff --git a/crates/iota-core/tests/staged/iota.yaml b/crates/iota-core/tests/staged/iota.yaml index 93612022d94..7a2a28721f5 100644 --- a/crates/iota-core/tests/staged/iota.yaml +++ b/crates/iota-core/tests/staged/iota.yaml @@ -868,89 +868,10 @@ TransactionEffects: V1: NEWTYPE: TYPENAME: TransactionEffectsV1 - 1: - V2: - NEWTYPE: - TYPENAME: TransactionEffectsV2 TransactionEffectsDigest: NEWTYPESTRUCT: TYPENAME: Digest TransactionEffectsV1: - STRUCT: - - status: - TYPENAME: ExecutionStatus - - executed_epoch: U64 - - gas_used: - TYPENAME: GasCostSummary - - modified_at_versions: - SEQ: - TUPLE: - - TYPENAME: ObjectID - - TYPENAME: SequenceNumber - - shared_objects: - SEQ: - TUPLE: - - TYPENAME: ObjectID - - TYPENAME: SequenceNumber - - TYPENAME: ObjectDigest - - transaction_digest: - TYPENAME: TransactionDigest - - created: - SEQ: - TUPLE: - - TUPLE: - - TYPENAME: ObjectID - - TYPENAME: SequenceNumber - - TYPENAME: ObjectDigest - - TYPENAME: Owner - - mutated: - SEQ: - TUPLE: - - TUPLE: - - TYPENAME: ObjectID - - TYPENAME: SequenceNumber - - TYPENAME: ObjectDigest - - TYPENAME: Owner - - unwrapped: - SEQ: - TUPLE: - - TUPLE: - - TYPENAME: ObjectID - - TYPENAME: SequenceNumber - - TYPENAME: ObjectDigest - - TYPENAME: Owner - - deleted: - SEQ: - TUPLE: - - TYPENAME: ObjectID - - TYPENAME: SequenceNumber - - TYPENAME: ObjectDigest - - unwrapped_then_deleted: - SEQ: - TUPLE: - - TYPENAME: ObjectID - - TYPENAME: SequenceNumber - - TYPENAME: ObjectDigest - - wrapped: - SEQ: - TUPLE: - - TYPENAME: ObjectID - - TYPENAME: SequenceNumber - - TYPENAME: ObjectDigest - - gas_object: - TUPLE: - - TUPLE: - - TYPENAME: ObjectID - - TYPENAME: SequenceNumber - - TYPENAME: ObjectDigest - - TYPENAME: Owner - - events_digest: - OPTION: - TYPENAME: TransactionEventsDigest - - dependencies: - SEQ: - TYPENAME: TransactionDigest -TransactionEffectsV2: STRUCT: - status: TYPENAME: ExecutionStatus diff --git a/crates/iota-network/build.rs b/crates/iota-network/build.rs index 088e92e429f..5f0b6b057ac 100644 --- a/crates/iota-network/build.rs +++ b/crates/iota-network/build.rs @@ -96,15 +96,6 @@ fn main() -> Result<()> { .codec_path(codec_path) .build(), ) - .method( - Method::builder() - .name("checkpoint_v2") - .route_name("CheckpointV2") - .input_type("iota_types::messages_checkpoint::CheckpointRequestV2") - .output_type("iota_types::messages_checkpoint::CheckpointResponseV2") - .codec_path(codec_path) - .build(), - ) .method( Method::builder() .name("get_system_state_object") diff --git a/crates/iota-replay/src/displays/gas_status_displays.rs b/crates/iota-replay/src/displays/gas_status_displays.rs index ad8b8ce9d74..0237a95449c 100644 --- a/crates/iota-replay/src/displays/gas_status_displays.rs +++ b/crates/iota-replay/src/displays/gas_status_displays.rs @@ -4,7 +4,7 @@ use std::fmt::{Display, Formatter}; -use iota_types::{gas::IotaGasStatus, gas_model::gas_v2::IotaGasStatus as GasStatusV2}; +use iota_types::{gas::IotaGasStatus, gas_model::gas_v1::IotaGasStatus as GasStatusV1}; use tabled::{ builder::Builder as TableBuilder, settings::{Style as TableStyle, style::HorizontalLine}, @@ -16,7 +16,7 @@ impl<'a> Display for Pretty<'a, IotaGasStatus> { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { let Pretty(iota_gas_status) = self; match iota_gas_status { - IotaGasStatus::V2(s) => { + IotaGasStatus::V1(s) => { display_info(f, s)?; per_object_storage_table(f, s)?; } @@ -25,7 +25,7 @@ impl<'a> Display for Pretty<'a, IotaGasStatus> { } } -fn per_object_storage_table(f: &mut Formatter, iota_gas_status: &GasStatusV2) -> std::fmt::Result { +fn per_object_storage_table(f: &mut Formatter, iota_gas_status: &GasStatusV1) -> std::fmt::Result { let mut builder = TableBuilder::default(); builder.push_record(vec!["Object ID", "Bytes", "Old Rebate", "New Rebate"]); for (object_id, per_obj_storage) in iota_gas_status.per_object_storage() { @@ -45,7 +45,7 @@ fn per_object_storage_table(f: &mut Formatter, iota_gas_status: &GasStatusV2) -> write!(f, "\n{}\n", table) } -fn display_info(f: &mut Formatter<'_>, iota_gas_status: &GasStatusV2) -> std::fmt::Result { +fn display_info(f: &mut Formatter<'_>, iota_gas_status: &GasStatusV1) -> std::fmt::Result { let mut builder = TableBuilder::default(); builder.push_record(vec!["Gas Info".to_string()]); builder.push_record(vec![format!( diff --git a/crates/iota-tool/src/commands.rs b/crates/iota-tool/src/commands.rs index ab139db7e78..7c4a03eabcb 100644 --- a/crates/iota-tool/src/commands.rs +++ b/crates/iota-tool/src/commands.rs @@ -639,6 +639,7 @@ impl ToolCommand { .handle_checkpoint(CheckpointRequest { sequence_number, request_content: true, + certified: true, }) .await .unwrap(); diff --git a/crates/iota-types/src/effects/effects_v1.rs b/crates/iota-types/src/effects/effects_v1.rs index ea26901b1a8..75210c4344b 100644 --- a/crates/iota-types/src/effects/effects_v1.rs +++ b/crates/iota-types/src/effects/effects_v1.rs @@ -2,24 +2,29 @@ // Modifications Copyright (c) 2024 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -use std::{ - collections::{BTreeMap, HashSet}, - fmt::{Display, Formatter, Write}, -}; +#[cfg(debug_assertions)] +use std::collections::HashSet; +use std::collections::{BTreeMap, BTreeSet}; use serde::{Deserialize, Serialize}; -use super::{IDOperation, ObjectChange}; +use super::{ + EffectsObjectChange, IDOperation, ObjectChange, + object_change::{ObjectIn, ObjectOut}, +}; +#[cfg(debug_assertions)] +use crate::is_system_package; use crate::{ base_types::{ - EpochId, IotaAddress, ObjectID, ObjectRef, SequenceNumber, TransactionDigest, - random_object_ref, + EpochId, IotaAddress, ObjectDigest, ObjectID, ObjectRef, SequenceNumber, TransactionDigest, + VersionDigest, }, - digests::{ObjectDigest, TransactionEventsDigest}, - effects::{InputSharedObject, TransactionEffectsAPI, UnchangedSharedKind}, + digests::{EffectsAuxDataDigest, TransactionEventsDigest}, + effects::{InputSharedObject, TransactionEffectsAPI}, + execution::SharedInput, execution_status::ExecutionStatus, gas::GasCostSummary, - object::Owner, + object::{OBJECT_START_VERSION, Owner}, }; /// The response from processing a transaction or a certified transaction @@ -30,102 +35,33 @@ pub struct TransactionEffectsV1 { /// The epoch when this transaction was executed. executed_epoch: EpochId, gas_used: GasCostSummary, - /// The version that every modified (mutated or deleted) object had before - /// it was modified by this transaction. - modified_at_versions: Vec<(ObjectID, SequenceNumber)>, - /// The object references of the shared objects used in this transaction. - /// Empty if no shared objects were used. - shared_objects: Vec, /// The transaction digest transaction_digest: TransactionDigest, - - // TODO: All the SequenceNumbers in the ObjectRefs below equal the same value (the lamport - // timestamp of the transaction). Consider factoring this out into one place in the effects. - /// ObjectRef and owner of new objects created. - created: Vec<(ObjectRef, Owner)>, - /// ObjectRef and owner of mutated objects, including gas object. - mutated: Vec<(ObjectRef, Owner)>, - /// ObjectRef and owner of objects that are unwrapped in this transaction. - /// Unwrapped objects are objects that were wrapped into other objects in - /// the past, and just got extracted out. - unwrapped: Vec<(ObjectRef, Owner)>, - /// Object Refs of objects now deleted (the new refs). - deleted: Vec, - /// Object refs of objects previously wrapped in other objects but now - /// deleted. - unwrapped_then_deleted: Vec, - /// Object refs of objects now wrapped in other objects. - wrapped: Vec, - /// The updated gas object reference. Have a dedicated field for convenient - /// access. It's also included in mutated. - gas_object: (ObjectRef, Owner), + /// The updated gas object reference, as an index into the `changed_objects` + /// vector. Having a dedicated field for convenient access. + /// System transaction that don't require gas will leave this as None. + gas_object_index: Option, /// The digest of the events emitted during execution, /// can be None if the transaction does not emit any event. events_digest: Option, /// The set of transaction digests this transaction depends on. dependencies: Vec, -} - -impl TransactionEffectsV1 { - pub fn new( - status: ExecutionStatus, - executed_epoch: EpochId, - gas_used: GasCostSummary, - modified_at_versions: Vec<(ObjectID, SequenceNumber)>, - shared_objects: Vec, - transaction_digest: TransactionDigest, - created: Vec<(ObjectRef, Owner)>, - mutated: Vec<(ObjectRef, Owner)>, - unwrapped: Vec<(ObjectRef, Owner)>, - deleted: Vec, - unwrapped_then_deleted: Vec, - wrapped: Vec, - gas_object: (ObjectRef, Owner), - events_digest: Option, - dependencies: Vec, - ) -> Self { - Self { - status, - executed_epoch, - gas_used, - modified_at_versions, - shared_objects, - transaction_digest, - created, - mutated, - unwrapped, - deleted, - unwrapped_then_deleted, - wrapped, - gas_object, - events_digest, - dependencies, - } - } - - pub fn modified_at_versions(&self) -> &[(ObjectID, SequenceNumber)] { - &self.modified_at_versions - } - - pub fn mutated(&self) -> &[(ObjectRef, Owner)] { - &self.mutated - } - - pub fn created(&self) -> &[(ObjectRef, Owner)] { - &self.created - } - pub fn unwrapped(&self) -> &[(ObjectRef, Owner)] { - &self.unwrapped - } - - pub fn deleted(&self) -> &[ObjectRef] { - &self.deleted - } - - pub fn wrapped(&self) -> &[ObjectRef] { - &self.wrapped - } + /// The version number of all the written Move objects by this transaction. + pub(crate) lamport_version: SequenceNumber, + /// Objects whose state are changed in the object store. + changed_objects: Vec<(ObjectID, EffectsObjectChange)>, + /// Shared objects that are not mutated in this transaction. Unlike owned + /// objects, read-only shared objects' version are not committed in the + /// transaction, and in order for a node to catch up and execute it + /// without consensus sequencing, the version needs to be committed in + /// the effects. + unchanged_shared_objects: Vec<(ObjectID, UnchangedSharedKind)>, + /// Auxiliary data that are not protocol-critical, generated as part of the + /// effects but are stored separately. Storing it separately allows us + /// to avoid bloating the effects with data that are not critical. + /// It also provides more flexibility on the format and type of the data. + aux_data_digest: Option, } impl TransactionEffectsAPI for TransactionEffectsV1 { @@ -142,127 +78,238 @@ impl TransactionEffectsAPI for TransactionEffectsV1 { } fn modified_at_versions(&self) -> Vec<(ObjectID, SequenceNumber)> { - self.modified_at_versions.clone() + self.changed_objects + .iter() + .filter_map(|(id, change)| { + if let ObjectIn::Exist(((version, _digest), _owner)) = &change.input_state { + Some((*id, *version)) + } else { + None + } + }) + .collect() } fn lamport_version(&self) -> SequenceNumber { - SequenceNumber::lamport_increment(self.modified_at_versions.iter().map(|(_, v)| *v)) + self.lamport_version } fn old_object_metadata(&self) -> Vec<(ObjectRef, Owner)> { - unimplemented!("Only supposed by v2 and above"); + self.changed_objects + .iter() + .filter_map(|(id, change)| { + if let ObjectIn::Exist(((version, digest), owner)) = &change.input_state { + Some(((*id, *version, *digest), *owner)) + } else { + None + } + }) + .collect() } fn input_shared_objects(&self) -> Vec { - let modified: HashSet<_> = self.modified_at_versions.iter().map(|(r, _)| r).collect(); - self.shared_objects + self.changed_objects .iter() - .map(|r| { - if modified.contains(&r.0) { - InputSharedObject::Mutate(*r) - } else { - InputSharedObject::ReadOnly(*r) + .filter_map(|(id, change)| match &change.input_state { + ObjectIn::Exist(((version, digest), Owner::Shared { .. })) => { + Some(InputSharedObject::Mutate((*id, *version, *digest))) } + _ => None, }) + .chain( + self.unchanged_shared_objects + .iter() + .filter_map(|(id, change_kind)| match change_kind { + UnchangedSharedKind::ReadOnlyRoot((version, digest)) => { + Some(InputSharedObject::ReadOnly((*id, *version, *digest))) + } + UnchangedSharedKind::MutateDeleted(seqno) => { + Some(InputSharedObject::MutateDeleted(*id, *seqno)) + } + UnchangedSharedKind::ReadDeleted(seqno) => { + Some(InputSharedObject::ReadDeleted(*id, *seqno)) + } + UnchangedSharedKind::Cancelled(seqno) => { + Some(InputSharedObject::Cancelled(*id, *seqno)) + } + // We can not expose the per epoch config object as input shared object, + // since it does not require sequencing, and hence shall not be considered + // as a normal input shared object. + UnchangedSharedKind::PerEpochConfig => None, + }), + ) .collect() } fn created(&self) -> Vec<(ObjectRef, Owner)> { - self.created.clone() + self.changed_objects + .iter() + .filter_map(|(id, change)| { + match ( + &change.input_state, + &change.output_state, + &change.id_operation, + ) { + ( + ObjectIn::NotExist, + ObjectOut::ObjectWrite((digest, owner)), + IDOperation::Created, + ) => Some(((*id, self.lamport_version, *digest), *owner)), + ( + ObjectIn::NotExist, + ObjectOut::PackageWrite((version, digest)), + IDOperation::Created, + ) => Some(((*id, *version, *digest), Owner::Immutable)), + _ => None, + } + }) + .collect() } fn mutated(&self) -> Vec<(ObjectRef, Owner)> { - self.mutated.clone() + self.changed_objects + .iter() + .filter_map( + |(id, change)| match (&change.input_state, &change.output_state) { + (ObjectIn::Exist(_), ObjectOut::ObjectWrite((digest, owner))) => { + Some(((*id, self.lamport_version, *digest), *owner)) + } + (ObjectIn::Exist(_), ObjectOut::PackageWrite((version, digest))) => { + Some(((*id, *version, *digest), Owner::Immutable)) + } + _ => None, + }, + ) + .collect() } fn unwrapped(&self) -> Vec<(ObjectRef, Owner)> { - self.unwrapped.clone() + self.changed_objects + .iter() + .filter_map(|(id, change)| { + match ( + &change.input_state, + &change.output_state, + &change.id_operation, + ) { + ( + ObjectIn::NotExist, + ObjectOut::ObjectWrite((digest, owner)), + IDOperation::None, + ) => Some(((*id, self.lamport_version, *digest), *owner)), + _ => None, + } + }) + .collect() } fn deleted(&self) -> Vec { - self.deleted.clone() + self.changed_objects + .iter() + .filter_map(|(id, change)| { + match ( + &change.input_state, + &change.output_state, + &change.id_operation, + ) { + (ObjectIn::Exist(_), ObjectOut::NotExist, IDOperation::Deleted) => Some(( + *id, + self.lamport_version, + ObjectDigest::OBJECT_DIGEST_DELETED, + )), + _ => None, + } + }) + .collect() } fn unwrapped_then_deleted(&self) -> Vec { - self.unwrapped_then_deleted.clone() + self.changed_objects + .iter() + .filter_map(|(id, change)| { + match ( + &change.input_state, + &change.output_state, + &change.id_operation, + ) { + (ObjectIn::NotExist, ObjectOut::NotExist, IDOperation::Deleted) => Some(( + *id, + self.lamport_version, + ObjectDigest::OBJECT_DIGEST_DELETED, + )), + _ => None, + } + }) + .collect() } fn wrapped(&self) -> Vec { - self.wrapped.clone() + self.changed_objects + .iter() + .filter_map(|(id, change)| { + match ( + &change.input_state, + &change.output_state, + &change.id_operation, + ) { + (ObjectIn::Exist(_), ObjectOut::NotExist, IDOperation::None) => Some(( + *id, + self.lamport_version, + ObjectDigest::OBJECT_DIGEST_WRAPPED, + )), + _ => None, + } + }) + .collect() } fn object_changes(&self) -> Vec { - let modified_at: BTreeMap<_, _> = self.modified_at_versions.iter().copied().collect(); - - let created = self.created.iter().map(|((id, v, d), _)| ObjectChange { - id: *id, - input_version: None, - input_digest: None, - output_version: Some(*v), - output_digest: Some(*d), - id_operation: IDOperation::Created, - }); - - let mutated = self.mutated.iter().map(|((id, v, d), _)| ObjectChange { - id: *id, - input_version: modified_at.get(id).copied(), - input_digest: None, - output_version: Some(*v), - output_digest: Some(*d), - id_operation: IDOperation::None, - }); - - let unwrapped = self.unwrapped.iter().map(|((id, v, d), _)| ObjectChange { - id: *id, - input_version: None, - input_digest: None, - output_version: Some(*v), - output_digest: Some(*d), - id_operation: IDOperation::None, - }); + self.changed_objects + .iter() + .map(|(id, change)| { + let input_version_digest = match &change.input_state { + ObjectIn::NotExist => None, + ObjectIn::Exist((vd, _)) => Some(*vd), + }; + + let output_version_digest = match &change.output_state { + ObjectOut::NotExist => None, + ObjectOut::ObjectWrite((d, _)) => Some((self.lamport_version, *d)), + ObjectOut::PackageWrite(vd) => Some(*vd), + }; + + ObjectChange { + id: *id, - let deleted = self.deleted.iter().map(|(id, _, _)| ObjectChange { - id: *id, - input_version: modified_at.get(id).copied(), - input_digest: None, - output_version: None, - output_digest: None, - id_operation: IDOperation::Deleted, - }); + input_version: input_version_digest.map(|k| k.0), + input_digest: input_version_digest.map(|k| k.1), - let unwrapped_then_deleted = - self.unwrapped_then_deleted - .iter() - .map(|(id, _, _)| ObjectChange { - id: *id, - input_version: None, - input_digest: None, - output_version: None, - output_digest: None, - id_operation: IDOperation::Deleted, - }); - - let wrapped = self.wrapped.iter().map(|(id, _, _)| ObjectChange { - id: *id, - input_version: modified_at.get(id).copied(), - input_digest: None, - output_version: None, - output_digest: None, - id_operation: IDOperation::None, - }); + output_version: output_version_digest.map(|k| k.0), + output_digest: output_version_digest.map(|k| k.1), - created - .chain(mutated) - .chain(unwrapped) - .chain(deleted) - .chain(unwrapped_then_deleted) - .chain(wrapped) + id_operation: change.id_operation, + } + }) .collect() } fn gas_object(&self) -> (ObjectRef, Owner) { - self.gas_object + if let Some(gas_object_index) = self.gas_object_index { + let entry = &self.changed_objects[gas_object_index as usize]; + match entry.1.output_state { + ObjectOut::ObjectWrite((digest, owner)) => { + ((entry.0, self.lamport_version, digest), owner) + } + _ => panic!("Gas object must be an ObjectWrite in changed_objects"), + } + } else { + ( + (ObjectID::ZERO, SequenceNumber::default(), ObjectDigest::MIN), + Owner::AddressOwner(IotaAddress::default()), + ) + } } + fn events_digest(&self) -> Option<&TransactionEventsDigest> { self.events_digest.as_ref() } @@ -280,16 +327,7 @@ impl TransactionEffectsAPI for TransactionEffectsV1 { } fn unchanged_shared_objects(&self) -> Vec<(ObjectID, UnchangedSharedKind)> { - self.input_shared_objects() - .iter() - .filter_map(|o| match o { - // In effects v1, the only unchanged shared objects are read-only shared objects. - InputSharedObject::ReadOnly(oref) => { - Some((oref.0, UnchangedSharedKind::ReadOnlyRoot((oref.1, oref.2)))) - } - _ => None, - }) - .collect() + self.unchanged_shared_objects.clone() } fn status_mut_for_testing(&mut self) -> &mut ExecutionStatus { @@ -311,96 +349,265 @@ impl TransactionEffectsAPI for TransactionEffectsV1 { fn unsafe_add_input_shared_object_for_testing(&mut self, kind: InputSharedObject) { match kind { InputSharedObject::Mutate(obj_ref) => { - self.shared_objects.push(obj_ref); - self.modified_at_versions.push((obj_ref.0, obj_ref.1)); - } - InputSharedObject::ReadOnly(obj_ref) => { - self.shared_objects.push(obj_ref); - } - InputSharedObject::ReadDeleted(id, version) - | InputSharedObject::MutateDeleted(id, version) => { - self.shared_objects - .push((id, version, ObjectDigest::OBJECT_DIGEST_DELETED)); - } - InputSharedObject::Cancelled(..) => { - panic!("Transaction cancellation is not supported in effect v1"); + self.changed_objects.push((obj_ref.0, EffectsObjectChange { + input_state: ObjectIn::Exist(((obj_ref.1, obj_ref.2), Owner::Shared { + initial_shared_version: OBJECT_START_VERSION, + })), + output_state: ObjectOut::ObjectWrite((obj_ref.2, Owner::Shared { + initial_shared_version: obj_ref.1, + })), + id_operation: IDOperation::None, + })) } + InputSharedObject::ReadOnly(obj_ref) => self.unchanged_shared_objects.push(( + obj_ref.0, + UnchangedSharedKind::ReadOnlyRoot((obj_ref.1, obj_ref.2)), + )), + InputSharedObject::ReadDeleted(obj_id, seqno) => self + .unchanged_shared_objects + .push((obj_id, UnchangedSharedKind::ReadDeleted(seqno))), + InputSharedObject::MutateDeleted(obj_id, seqno) => self + .unchanged_shared_objects + .push((obj_id, UnchangedSharedKind::MutateDeleted(seqno))), + InputSharedObject::Cancelled(obj_id, seqno) => self + .unchanged_shared_objects + .push((obj_id, UnchangedSharedKind::Cancelled(seqno))), } } - fn unsafe_add_deleted_live_object_for_testing(&mut self, object: ObjectRef) { - self.modified_at_versions.push((object.0, object.1)); + fn unsafe_add_deleted_live_object_for_testing(&mut self, obj_ref: ObjectRef) { + self.changed_objects.push((obj_ref.0, EffectsObjectChange { + input_state: ObjectIn::Exist(( + (obj_ref.1, obj_ref.2), + Owner::AddressOwner(IotaAddress::default()), + )), + output_state: ObjectOut::ObjectWrite(( + obj_ref.2, + Owner::AddressOwner(IotaAddress::default()), + )), + id_operation: IDOperation::None, + })) } - fn unsafe_add_object_tombstone_for_testing(&mut self, object: ObjectRef) { - self.deleted.push(object); + fn unsafe_add_object_tombstone_for_testing(&mut self, obj_ref: ObjectRef) { + self.changed_objects.push((obj_ref.0, EffectsObjectChange { + input_state: ObjectIn::Exist(( + (obj_ref.1, obj_ref.2), + Owner::AddressOwner(IotaAddress::default()), + )), + output_state: ObjectOut::NotExist, + id_operation: IDOperation::Deleted, + })) } } -impl Display for TransactionEffectsV1 { - fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { - let mut writer = String::new(); - writeln!(writer, "Status : {:?}", self.status)?; - if !self.created.is_empty() { - writeln!(writer, "Created Objects:")?; - for ((id, _, _), owner) in &self.created { - writeln!(writer, " - ID: {} , Owner: {}", id, owner)?; - } - } - if !self.mutated.is_empty() { - writeln!(writer, "Mutated Objects:")?; - for ((id, _, _), owner) in &self.mutated { - writeln!(writer, " - ID: {} , Owner: {}", id, owner)?; - } - } - if !self.deleted.is_empty() { - writeln!(writer, "Deleted Objects:")?; - for (id, _, _) in &self.deleted { - writeln!(writer, " - ID: {}", id)?; - } - } - if !self.wrapped.is_empty() { - writeln!(writer, "Wrapped Objects:")?; - for (id, _, _) in &self.wrapped { - writeln!(writer, " - ID: {}", id)?; +impl TransactionEffectsV1 { + pub fn new( + status: ExecutionStatus, + executed_epoch: EpochId, + gas_used: GasCostSummary, + shared_objects: Vec, + loaded_per_epoch_config_objects: BTreeSet, + transaction_digest: TransactionDigest, + lamport_version: SequenceNumber, + changed_objects: BTreeMap, + gas_object: Option, + events_digest: Option, + dependencies: Vec, + ) -> Self { + let unchanged_shared_objects = shared_objects + .into_iter() + .filter_map(|shared_input| match shared_input { + SharedInput::Existing((id, version, digest)) => { + if changed_objects.contains_key(&id) { + None + } else { + Some((id, UnchangedSharedKind::ReadOnlyRoot((version, digest)))) + } + } + SharedInput::Deleted((id, version, mutable, _)) => { + debug_assert!(!changed_objects.contains_key(&id)); + if mutable { + Some((id, UnchangedSharedKind::MutateDeleted(version))) + } else { + Some((id, UnchangedSharedKind::ReadDeleted(version))) + } + } + SharedInput::Cancelled((id, version)) => { + debug_assert!(!changed_objects.contains_key(&id)); + Some((id, UnchangedSharedKind::Cancelled(version))) + } + }) + .chain( + loaded_per_epoch_config_objects + .into_iter() + .map(|id| (id, UnchangedSharedKind::PerEpochConfig)), + ) + .collect(); + let changed_objects: Vec<_> = changed_objects.into_iter().collect(); + + let gas_object_index = gas_object.map(|gas_id| { + changed_objects + .iter() + .position(|(id, _)| id == &gas_id) + .unwrap() as u32 + }); + + #[allow(clippy::let_and_return)] + let result = Self { + status, + executed_epoch, + gas_used, + transaction_digest, + lamport_version, + changed_objects, + unchanged_shared_objects, + gas_object_index, + events_digest, + dependencies, + aux_data_digest: None, + }; + #[cfg(debug_assertions)] + result.check_invariant(); + + result + } + + /// This function demonstrates what's the invariant of the effects. + /// It also documents the semantics of different combinations in object + /// changes. + #[cfg(debug_assertions)] + fn check_invariant(&self) { + let mut unique_ids = HashSet::new(); + for (id, change) in &self.changed_objects { + assert!(unique_ids.insert(*id)); + match ( + &change.input_state, + &change.output_state, + &change.id_operation, + ) { + (ObjectIn::NotExist, ObjectOut::NotExist, IDOperation::Created) => { + // created and then wrapped Move object. + } + (ObjectIn::NotExist, ObjectOut::NotExist, IDOperation::Deleted) => { + // unwrapped and then deleted Move object. + } + (ObjectIn::NotExist, ObjectOut::ObjectWrite((_, owner)), IDOperation::None) => { + // unwrapped Move object. + // It's not allowed to make an object shared after unwrapping. + assert!(!owner.is_shared()); + } + (ObjectIn::NotExist, ObjectOut::ObjectWrite(..), IDOperation::Created) => { + // created Move object. + } + (ObjectIn::NotExist, ObjectOut::PackageWrite(_), IDOperation::Created) => { + // created Move package or user Move package upgrade. + } + ( + ObjectIn::Exist(((old_version, _), old_owner)), + ObjectOut::NotExist, + IDOperation::None, + ) => { + // wrapped. + assert!(old_version.value() < self.lamport_version.value()); + assert!( + !old_owner.is_shared() && !old_owner.is_immutable(), + "Cannot wrap shared or immutable object" + ); + } + ( + ObjectIn::Exist(((old_version, _), old_owner)), + ObjectOut::NotExist, + IDOperation::Deleted, + ) => { + // deleted. + assert!(old_version.value() < self.lamport_version.value()); + assert!(!old_owner.is_immutable(), "Cannot delete immutable object"); + } + ( + ObjectIn::Exist(((old_version, old_digest), old_owner)), + ObjectOut::ObjectWrite((new_digest, new_owner)), + IDOperation::None, + ) => { + // mutated. + assert!(old_version.value() < self.lamport_version.value()); + assert_ne!(old_digest, new_digest); + assert!(!old_owner.is_immutable(), "Cannot mutate immutable object"); + if old_owner.is_shared() { + assert!(new_owner.is_shared(), "Cannot un-share an object"); + } else { + assert!(!new_owner.is_shared(), "Cannot share an existing object"); + } + } + ( + ObjectIn::Exist(((old_version, old_digest), old_owner)), + ObjectOut::PackageWrite((new_version, new_digest)), + IDOperation::None, + ) => { + // system package upgrade. + assert!( + old_owner.is_immutable() && is_system_package(*id), + "Must be a system package" + ); + assert_eq!(old_version.value() + 1, new_version.value()); + assert_ne!(old_digest, new_digest); + } + _ => { + panic!("Impossible object change: {:?}, {:?}", id, change); + } } } - if !self.unwrapped.is_empty() { - writeln!(writer, "Unwrapped Objects:")?; - for ((id, _, _), owner) in &self.unwrapped { - writeln!(writer, " - ID: {} , Owner: {}", id, owner)?; - } + // Make sure that gas object exists in changed_objects. + let (_, owner) = self.gas_object(); + assert!(matches!(owner, Owner::AddressOwner(_))); + + for (id, _) in &self.unchanged_shared_objects { + assert!( + unique_ids.insert(*id), + "Duplicate object id: {:?}\n{:#?}", + id, + self + ); } - write!(f, "{}", writer) + } + + pub fn changed_objects(&self) -> &[(ObjectID, EffectsObjectChange)] { + &self.changed_objects } } impl Default for TransactionEffectsV1 { fn default() -> Self { - TransactionEffectsV1 { + Self { status: ExecutionStatus::Success, executed_epoch: 0, - gas_used: GasCostSummary { - computation_cost: 0, - storage_cost: 0, - storage_rebate: 0, - non_refundable_storage_fee: 0, - }, - modified_at_versions: Vec::new(), - shared_objects: Vec::new(), - transaction_digest: TransactionDigest::random(), - created: Vec::new(), - mutated: Vec::new(), - unwrapped: Vec::new(), - deleted: Vec::new(), - unwrapped_then_deleted: Vec::new(), - wrapped: Vec::new(), - gas_object: ( - random_object_ref(), - Owner::AddressOwner(IotaAddress::default()), - ), + gas_used: GasCostSummary::default(), + transaction_digest: TransactionDigest::default(), + lamport_version: SequenceNumber::default(), + changed_objects: vec![], + unchanged_shared_objects: vec![], + gas_object_index: None, events_digest: None, - dependencies: Vec::new(), + dependencies: vec![], + aux_data_digest: None, } } } + +#[derive(Eq, PartialEq, Clone, Debug, Serialize, Deserialize)] +pub enum UnchangedSharedKind { + /// Read-only shared objects from the input. We don't really need + /// ObjectDigest for protocol correctness, but it will make it easier to + /// verify untrusted read. + ReadOnlyRoot(VersionDigest), + /// Deleted shared objects that appear mutably/owned in the input. + MutateDeleted(SequenceNumber), + /// Deleted shared objects that appear as read-only in the input. + ReadDeleted(SequenceNumber), + /// Shared objects in cancelled transaction. The sequence number embed + /// cancellation reason. + Cancelled(SequenceNumber), + /// Read of a per-epoch config object that should remain the same during an + /// epoch. + PerEpochConfig, +} diff --git a/crates/iota-types/src/effects/effects_v2.rs b/crates/iota-types/src/effects/effects_v2.rs deleted file mode 100644 index 68184453467..00000000000 --- a/crates/iota-types/src/effects/effects_v2.rs +++ /dev/null @@ -1,613 +0,0 @@ -// Copyright (c) Mysten Labs, Inc. -// Modifications Copyright (c) 2024 IOTA Stiftung -// SPDX-License-Identifier: Apache-2.0 - -#[cfg(debug_assertions)] -use std::collections::HashSet; -use std::collections::{BTreeMap, BTreeSet}; - -use serde::{Deserialize, Serialize}; - -use super::{ - EffectsObjectChange, IDOperation, ObjectChange, - object_change::{ObjectIn, ObjectOut}, -}; -#[cfg(debug_assertions)] -use crate::is_system_package; -use crate::{ - base_types::{ - EpochId, IotaAddress, ObjectDigest, ObjectID, ObjectRef, SequenceNumber, TransactionDigest, - VersionDigest, - }, - digests::{EffectsAuxDataDigest, TransactionEventsDigest}, - effects::{InputSharedObject, TransactionEffectsAPI}, - execution::SharedInput, - execution_status::ExecutionStatus, - gas::GasCostSummary, - object::{OBJECT_START_VERSION, Owner}, -}; - -/// The response from processing a transaction or a certified transaction -#[derive(Eq, PartialEq, Clone, Debug, Serialize, Deserialize)] -pub struct TransactionEffectsV2 { - /// The status of the execution - status: ExecutionStatus, - /// The epoch when this transaction was executed. - executed_epoch: EpochId, - gas_used: GasCostSummary, - /// The transaction digest - transaction_digest: TransactionDigest, - /// The updated gas object reference, as an index into the `changed_objects` - /// vector. Having a dedicated field for convenient access. - /// System transaction that don't require gas will leave this as None. - gas_object_index: Option, - /// The digest of the events emitted during execution, - /// can be None if the transaction does not emit any event. - events_digest: Option, - /// The set of transaction digests this transaction depends on. - dependencies: Vec, - - /// The version number of all the written Move objects by this transaction. - pub(crate) lamport_version: SequenceNumber, - /// Objects whose state are changed in the object store. - changed_objects: Vec<(ObjectID, EffectsObjectChange)>, - /// Shared objects that are not mutated in this transaction. Unlike owned - /// objects, read-only shared objects' version are not committed in the - /// transaction, and in order for a node to catch up and execute it - /// without consensus sequencing, the version needs to be committed in - /// the effects. - unchanged_shared_objects: Vec<(ObjectID, UnchangedSharedKind)>, - /// Auxiliary data that are not protocol-critical, generated as part of the - /// effects but are stored separately. Storing it separately allows us - /// to avoid bloating the effects with data that are not critical. - /// It also provides more flexibility on the format and type of the data. - aux_data_digest: Option, -} - -impl TransactionEffectsAPI for TransactionEffectsV2 { - fn status(&self) -> &ExecutionStatus { - &self.status - } - - fn into_status(self) -> ExecutionStatus { - self.status - } - - fn executed_epoch(&self) -> EpochId { - self.executed_epoch - } - - fn modified_at_versions(&self) -> Vec<(ObjectID, SequenceNumber)> { - self.changed_objects - .iter() - .filter_map(|(id, change)| { - if let ObjectIn::Exist(((version, _digest), _owner)) = &change.input_state { - Some((*id, *version)) - } else { - None - } - }) - .collect() - } - - fn lamport_version(&self) -> SequenceNumber { - self.lamport_version - } - - fn old_object_metadata(&self) -> Vec<(ObjectRef, Owner)> { - self.changed_objects - .iter() - .filter_map(|(id, change)| { - if let ObjectIn::Exist(((version, digest), owner)) = &change.input_state { - Some(((*id, *version, *digest), *owner)) - } else { - None - } - }) - .collect() - } - - fn input_shared_objects(&self) -> Vec { - self.changed_objects - .iter() - .filter_map(|(id, change)| match &change.input_state { - ObjectIn::Exist(((version, digest), Owner::Shared { .. })) => { - Some(InputSharedObject::Mutate((*id, *version, *digest))) - } - _ => None, - }) - .chain( - self.unchanged_shared_objects - .iter() - .filter_map(|(id, change_kind)| match change_kind { - UnchangedSharedKind::ReadOnlyRoot((version, digest)) => { - Some(InputSharedObject::ReadOnly((*id, *version, *digest))) - } - UnchangedSharedKind::MutateDeleted(seqno) => { - Some(InputSharedObject::MutateDeleted(*id, *seqno)) - } - UnchangedSharedKind::ReadDeleted(seqno) => { - Some(InputSharedObject::ReadDeleted(*id, *seqno)) - } - UnchangedSharedKind::Cancelled(seqno) => { - Some(InputSharedObject::Cancelled(*id, *seqno)) - } - // We can not expose the per epoch config object as input shared object, - // since it does not require sequencing, and hence shall not be considered - // as a normal input shared object. - UnchangedSharedKind::PerEpochConfig => None, - }), - ) - .collect() - } - - fn created(&self) -> Vec<(ObjectRef, Owner)> { - self.changed_objects - .iter() - .filter_map(|(id, change)| { - match ( - &change.input_state, - &change.output_state, - &change.id_operation, - ) { - ( - ObjectIn::NotExist, - ObjectOut::ObjectWrite((digest, owner)), - IDOperation::Created, - ) => Some(((*id, self.lamport_version, *digest), *owner)), - ( - ObjectIn::NotExist, - ObjectOut::PackageWrite((version, digest)), - IDOperation::Created, - ) => Some(((*id, *version, *digest), Owner::Immutable)), - _ => None, - } - }) - .collect() - } - - fn mutated(&self) -> Vec<(ObjectRef, Owner)> { - self.changed_objects - .iter() - .filter_map( - |(id, change)| match (&change.input_state, &change.output_state) { - (ObjectIn::Exist(_), ObjectOut::ObjectWrite((digest, owner))) => { - Some(((*id, self.lamport_version, *digest), *owner)) - } - (ObjectIn::Exist(_), ObjectOut::PackageWrite((version, digest))) => { - Some(((*id, *version, *digest), Owner::Immutable)) - } - _ => None, - }, - ) - .collect() - } - - fn unwrapped(&self) -> Vec<(ObjectRef, Owner)> { - self.changed_objects - .iter() - .filter_map(|(id, change)| { - match ( - &change.input_state, - &change.output_state, - &change.id_operation, - ) { - ( - ObjectIn::NotExist, - ObjectOut::ObjectWrite((digest, owner)), - IDOperation::None, - ) => Some(((*id, self.lamport_version, *digest), *owner)), - _ => None, - } - }) - .collect() - } - - fn deleted(&self) -> Vec { - self.changed_objects - .iter() - .filter_map(|(id, change)| { - match ( - &change.input_state, - &change.output_state, - &change.id_operation, - ) { - (ObjectIn::Exist(_), ObjectOut::NotExist, IDOperation::Deleted) => Some(( - *id, - self.lamport_version, - ObjectDigest::OBJECT_DIGEST_DELETED, - )), - _ => None, - } - }) - .collect() - } - - fn unwrapped_then_deleted(&self) -> Vec { - self.changed_objects - .iter() - .filter_map(|(id, change)| { - match ( - &change.input_state, - &change.output_state, - &change.id_operation, - ) { - (ObjectIn::NotExist, ObjectOut::NotExist, IDOperation::Deleted) => Some(( - *id, - self.lamport_version, - ObjectDigest::OBJECT_DIGEST_DELETED, - )), - _ => None, - } - }) - .collect() - } - - fn wrapped(&self) -> Vec { - self.changed_objects - .iter() - .filter_map(|(id, change)| { - match ( - &change.input_state, - &change.output_state, - &change.id_operation, - ) { - (ObjectIn::Exist(_), ObjectOut::NotExist, IDOperation::None) => Some(( - *id, - self.lamport_version, - ObjectDigest::OBJECT_DIGEST_WRAPPED, - )), - _ => None, - } - }) - .collect() - } - - fn object_changes(&self) -> Vec { - self.changed_objects - .iter() - .map(|(id, change)| { - let input_version_digest = match &change.input_state { - ObjectIn::NotExist => None, - ObjectIn::Exist((vd, _)) => Some(*vd), - }; - - let output_version_digest = match &change.output_state { - ObjectOut::NotExist => None, - ObjectOut::ObjectWrite((d, _)) => Some((self.lamport_version, *d)), - ObjectOut::PackageWrite(vd) => Some(*vd), - }; - - ObjectChange { - id: *id, - - input_version: input_version_digest.map(|k| k.0), - input_digest: input_version_digest.map(|k| k.1), - - output_version: output_version_digest.map(|k| k.0), - output_digest: output_version_digest.map(|k| k.1), - - id_operation: change.id_operation, - } - }) - .collect() - } - - fn gas_object(&self) -> (ObjectRef, Owner) { - if let Some(gas_object_index) = self.gas_object_index { - let entry = &self.changed_objects[gas_object_index as usize]; - match entry.1.output_state { - ObjectOut::ObjectWrite((digest, owner)) => { - ((entry.0, self.lamport_version, digest), owner) - } - _ => panic!("Gas object must be an ObjectWrite in changed_objects"), - } - } else { - ( - (ObjectID::ZERO, SequenceNumber::default(), ObjectDigest::MIN), - Owner::AddressOwner(IotaAddress::default()), - ) - } - } - - fn events_digest(&self) -> Option<&TransactionEventsDigest> { - self.events_digest.as_ref() - } - - fn dependencies(&self) -> &[TransactionDigest] { - &self.dependencies - } - - fn transaction_digest(&self) -> &TransactionDigest { - &self.transaction_digest - } - - fn gas_cost_summary(&self) -> &GasCostSummary { - &self.gas_used - } - - fn unchanged_shared_objects(&self) -> Vec<(ObjectID, UnchangedSharedKind)> { - self.unchanged_shared_objects.clone() - } - - fn status_mut_for_testing(&mut self) -> &mut ExecutionStatus { - &mut self.status - } - - fn gas_cost_summary_mut_for_testing(&mut self) -> &mut GasCostSummary { - &mut self.gas_used - } - - fn transaction_digest_mut_for_testing(&mut self) -> &mut TransactionDigest { - &mut self.transaction_digest - } - - fn dependencies_mut_for_testing(&mut self) -> &mut Vec { - &mut self.dependencies - } - - fn unsafe_add_input_shared_object_for_testing(&mut self, kind: InputSharedObject) { - match kind { - InputSharedObject::Mutate(obj_ref) => { - self.changed_objects.push((obj_ref.0, EffectsObjectChange { - input_state: ObjectIn::Exist(((obj_ref.1, obj_ref.2), Owner::Shared { - initial_shared_version: OBJECT_START_VERSION, - })), - output_state: ObjectOut::ObjectWrite((obj_ref.2, Owner::Shared { - initial_shared_version: obj_ref.1, - })), - id_operation: IDOperation::None, - })) - } - InputSharedObject::ReadOnly(obj_ref) => self.unchanged_shared_objects.push(( - obj_ref.0, - UnchangedSharedKind::ReadOnlyRoot((obj_ref.1, obj_ref.2)), - )), - InputSharedObject::ReadDeleted(obj_id, seqno) => self - .unchanged_shared_objects - .push((obj_id, UnchangedSharedKind::ReadDeleted(seqno))), - InputSharedObject::MutateDeleted(obj_id, seqno) => self - .unchanged_shared_objects - .push((obj_id, UnchangedSharedKind::MutateDeleted(seqno))), - InputSharedObject::Cancelled(obj_id, seqno) => self - .unchanged_shared_objects - .push((obj_id, UnchangedSharedKind::Cancelled(seqno))), - } - } - - fn unsafe_add_deleted_live_object_for_testing(&mut self, obj_ref: ObjectRef) { - self.changed_objects.push((obj_ref.0, EffectsObjectChange { - input_state: ObjectIn::Exist(( - (obj_ref.1, obj_ref.2), - Owner::AddressOwner(IotaAddress::default()), - )), - output_state: ObjectOut::ObjectWrite(( - obj_ref.2, - Owner::AddressOwner(IotaAddress::default()), - )), - id_operation: IDOperation::None, - })) - } - - fn unsafe_add_object_tombstone_for_testing(&mut self, obj_ref: ObjectRef) { - self.changed_objects.push((obj_ref.0, EffectsObjectChange { - input_state: ObjectIn::Exist(( - (obj_ref.1, obj_ref.2), - Owner::AddressOwner(IotaAddress::default()), - )), - output_state: ObjectOut::NotExist, - id_operation: IDOperation::Deleted, - })) - } -} - -impl TransactionEffectsV2 { - pub fn new( - status: ExecutionStatus, - executed_epoch: EpochId, - gas_used: GasCostSummary, - shared_objects: Vec, - loaded_per_epoch_config_objects: BTreeSet, - transaction_digest: TransactionDigest, - lamport_version: SequenceNumber, - changed_objects: BTreeMap, - gas_object: Option, - events_digest: Option, - dependencies: Vec, - ) -> Self { - let unchanged_shared_objects = shared_objects - .into_iter() - .filter_map(|shared_input| match shared_input { - SharedInput::Existing((id, version, digest)) => { - if changed_objects.contains_key(&id) { - None - } else { - Some((id, UnchangedSharedKind::ReadOnlyRoot((version, digest)))) - } - } - SharedInput::Deleted((id, version, mutable, _)) => { - debug_assert!(!changed_objects.contains_key(&id)); - if mutable { - Some((id, UnchangedSharedKind::MutateDeleted(version))) - } else { - Some((id, UnchangedSharedKind::ReadDeleted(version))) - } - } - SharedInput::Cancelled((id, version)) => { - debug_assert!(!changed_objects.contains_key(&id)); - Some((id, UnchangedSharedKind::Cancelled(version))) - } - }) - .chain( - loaded_per_epoch_config_objects - .into_iter() - .map(|id| (id, UnchangedSharedKind::PerEpochConfig)), - ) - .collect(); - let changed_objects: Vec<_> = changed_objects.into_iter().collect(); - - let gas_object_index = gas_object.map(|gas_id| { - changed_objects - .iter() - .position(|(id, _)| id == &gas_id) - .unwrap() as u32 - }); - - #[allow(clippy::let_and_return)] - let result = Self { - status, - executed_epoch, - gas_used, - transaction_digest, - lamport_version, - changed_objects, - unchanged_shared_objects, - gas_object_index, - events_digest, - dependencies, - aux_data_digest: None, - }; - #[cfg(debug_assertions)] - result.check_invariant(); - - result - } - - /// This function demonstrates what's the invariant of the effects. - /// It also documents the semantics of different combinations in object - /// changes. - #[cfg(debug_assertions)] - fn check_invariant(&self) { - let mut unique_ids = HashSet::new(); - for (id, change) in &self.changed_objects { - assert!(unique_ids.insert(*id)); - match ( - &change.input_state, - &change.output_state, - &change.id_operation, - ) { - (ObjectIn::NotExist, ObjectOut::NotExist, IDOperation::Created) => { - // created and then wrapped Move object. - } - (ObjectIn::NotExist, ObjectOut::NotExist, IDOperation::Deleted) => { - // unwrapped and then deleted Move object. - } - (ObjectIn::NotExist, ObjectOut::ObjectWrite((_, owner)), IDOperation::None) => { - // unwrapped Move object. - // It's not allowed to make an object shared after unwrapping. - assert!(!owner.is_shared()); - } - (ObjectIn::NotExist, ObjectOut::ObjectWrite(..), IDOperation::Created) => { - // created Move object. - } - (ObjectIn::NotExist, ObjectOut::PackageWrite(_), IDOperation::Created) => { - // created Move package or user Move package upgrade. - } - ( - ObjectIn::Exist(((old_version, _), old_owner)), - ObjectOut::NotExist, - IDOperation::None, - ) => { - // wrapped. - assert!(old_version.value() < self.lamport_version.value()); - assert!( - !old_owner.is_shared() && !old_owner.is_immutable(), - "Cannot wrap shared or immutable object" - ); - } - ( - ObjectIn::Exist(((old_version, _), old_owner)), - ObjectOut::NotExist, - IDOperation::Deleted, - ) => { - // deleted. - assert!(old_version.value() < self.lamport_version.value()); - assert!(!old_owner.is_immutable(), "Cannot delete immutable object"); - } - ( - ObjectIn::Exist(((old_version, old_digest), old_owner)), - ObjectOut::ObjectWrite((new_digest, new_owner)), - IDOperation::None, - ) => { - // mutated. - assert!(old_version.value() < self.lamport_version.value()); - assert_ne!(old_digest, new_digest); - assert!(!old_owner.is_immutable(), "Cannot mutate immutable object"); - if old_owner.is_shared() { - assert!(new_owner.is_shared(), "Cannot un-share an object"); - } else { - assert!(!new_owner.is_shared(), "Cannot share an existing object"); - } - } - ( - ObjectIn::Exist(((old_version, old_digest), old_owner)), - ObjectOut::PackageWrite((new_version, new_digest)), - IDOperation::None, - ) => { - // system package upgrade. - assert!( - old_owner.is_immutable() && is_system_package(*id), - "Must be a system package" - ); - assert_eq!(old_version.value() + 1, new_version.value()); - assert_ne!(old_digest, new_digest); - } - _ => { - panic!("Impossible object change: {:?}, {:?}", id, change); - } - } - } - // Make sure that gas object exists in changed_objects. - let (_, owner) = self.gas_object(); - assert!(matches!(owner, Owner::AddressOwner(_))); - - for (id, _) in &self.unchanged_shared_objects { - assert!( - unique_ids.insert(*id), - "Duplicate object id: {:?}\n{:#?}", - id, - self - ); - } - } - - pub fn changed_objects(&self) -> &[(ObjectID, EffectsObjectChange)] { - &self.changed_objects - } -} - -impl Default for TransactionEffectsV2 { - fn default() -> Self { - Self { - status: ExecutionStatus::Success, - executed_epoch: 0, - gas_used: GasCostSummary::default(), - transaction_digest: TransactionDigest::default(), - lamport_version: SequenceNumber::default(), - changed_objects: vec![], - unchanged_shared_objects: vec![], - gas_object_index: None, - events_digest: None, - dependencies: vec![], - aux_data_digest: None, - } - } -} - -#[derive(Eq, PartialEq, Clone, Debug, Serialize, Deserialize)] -pub enum UnchangedSharedKind { - /// Read-only shared objects from the input. We don't really need - /// ObjectDigest for protocol correctness, but it will make it easier to - /// verify untrusted read. - ReadOnlyRoot(VersionDigest), - /// Deleted shared objects that appear mutably/owned in the input. - MutateDeleted(SequenceNumber), - /// Deleted shared objects that appear as read-only in the input. - ReadDeleted(SequenceNumber), - /// Shared objects in cancelled transaction. The sequence number embed - /// cancellation reason. - Cancelled(SequenceNumber), - /// Read of a per-epoch config object that should remain the same during an - /// epoch. - PerEpochConfig, -} diff --git a/crates/iota-types/src/effects/mod.rs b/crates/iota-types/src/effects/mod.rs index 8d9b507562c..24f7f528259 100644 --- a/crates/iota-types/src/effects/mod.rs +++ b/crates/iota-types/src/effects/mod.rs @@ -5,14 +5,13 @@ use std::collections::{BTreeMap, BTreeSet}; use effects_v1::TransactionEffectsV1; -pub use effects_v2::UnchangedSharedKind; +pub use effects_v1::UnchangedSharedKind; use enum_dispatch::enum_dispatch; pub use object_change::{EffectsObjectChange, ObjectIn, ObjectOut}; use serde::{Deserialize, Serialize}; use shared_crypto::intent::{Intent, IntentScope}; pub use test_effects_builder::TestEffectsBuilder; -use self::effects_v2::TransactionEffectsV2; use crate::{ base_types::{ExecutionDigests, ObjectID, ObjectRef, SequenceNumber}, committee::{Committee, EpochId}, @@ -32,7 +31,6 @@ use crate::{ }; mod effects_v1; -mod effects_v2; mod object_change; mod test_effects_builder; @@ -59,7 +57,6 @@ pub const APPROX_SIZE_OF_OWNER: usize = 48; #[allow(clippy::large_enum_variant)] pub enum TransactionEffects { V1(TransactionEffectsV1), - V2(TransactionEffectsV2), } impl Message for TransactionEffects { @@ -74,7 +71,7 @@ impl Message for TransactionEffects { // TODO: Get rid of this and use TestEffectsBuilder instead. impl Default for TransactionEffects { fn default() -> Self { - TransactionEffects::V2(Default::default()) + TransactionEffects::V1(Default::default()) } } @@ -87,44 +84,6 @@ impl TransactionEffects { /// Creates a TransactionEffects message from the results of execution, /// choosing the correct format for the current protocol version. pub fn new_from_execution_v1( - status: ExecutionStatus, - executed_epoch: EpochId, - gas_used: GasCostSummary, - modified_at_versions: Vec<(ObjectID, SequenceNumber)>, - shared_objects: Vec, - transaction_digest: TransactionDigest, - created: Vec<(ObjectRef, Owner)>, - mutated: Vec<(ObjectRef, Owner)>, - unwrapped: Vec<(ObjectRef, Owner)>, - deleted: Vec, - unwrapped_then_deleted: Vec, - wrapped: Vec, - gas_object: (ObjectRef, Owner), - events_digest: Option, - dependencies: Vec, - ) -> Self { - Self::V1(TransactionEffectsV1::new( - status, - executed_epoch, - gas_used, - modified_at_versions, - shared_objects, - transaction_digest, - created, - mutated, - unwrapped, - deleted, - unwrapped_then_deleted, - wrapped, - gas_object, - events_digest, - dependencies, - )) - } - - /// Creates a TransactionEffects message from the results of execution, - /// choosing the correct format for the current protocol version. - pub fn new_from_execution_v2( status: ExecutionStatus, executed_epoch: EpochId, gas_used: GasCostSummary, @@ -137,7 +96,7 @@ impl TransactionEffects { events_digest: Option, dependencies: Vec, ) -> Self { - Self::V2(TransactionEffectsV2::new( + Self::V1(TransactionEffectsV1::new( status, executed_epoch, gas_used, @@ -160,30 +119,6 @@ impl TransactionEffects { } pub fn estimate_effects_size_upperbound_v1( - num_writes: usize, - num_mutables: usize, - num_deletes: usize, - num_deps: usize, - ) -> usize { - let fixed_sizes = APPROX_SIZE_OF_EXECUTION_STATUS - + APPROX_SIZE_OF_EPOCH_ID - + APPROX_SIZE_OF_GAS_COST_SUMMARY - + APPROX_SIZE_OF_OPT_TX_EVENTS_DIGEST; - - // Each write or delete contributes at roughly this amount because: - // Each write can be a mutation which can show up in `mutated` and - // `modified_at_versions` `num_delete` is added for padding - let approx_change_entry_size = 1_000 - + (APPROX_SIZE_OF_OWNER + APPROX_SIZE_OF_OBJECT_REF) * num_writes - + (APPROX_SIZE_OF_OBJECT_REF * num_mutables) - + (APPROX_SIZE_OF_OBJECT_REF * num_deletes); - - let deps_size = 1_000 + APPROX_SIZE_OF_TX_DIGEST * num_deps; - - fixed_sizes + approx_change_entry_size + deps_size - } - - pub fn estimate_effects_size_upperbound_v2( num_writes: usize, num_modifies: usize, num_deps: usize, @@ -317,7 +252,7 @@ pub trait TransactionEffectsAPI { /// Metadata of objects prior to modification. This includes any object that /// exists in the store prior to this transaction and is modified in /// this transaction. It includes objects that are mutated, wrapped and - /// deleted. This API is only available on effects v2 and above. + /// deleted. fn old_object_metadata(&self) -> Vec<(ObjectRef, Owner)>; /// Returns the list of sequenced shared objects used in the input. /// This is needed in effects because in transaction we only have object ID diff --git a/crates/iota-types/src/effects/test_effects_builder.rs b/crates/iota-types/src/effects/test_effects_builder.rs index 8ddf8d51717..4bc63afdd88 100644 --- a/crates/iota-types/src/effects/test_effects_builder.rs +++ b/crates/iota-types/src/effects/test_effects_builder.rs @@ -134,7 +134,7 @@ impl TestEffectsBuilder { let gas_object_id = self.transaction.transaction_data().gas()[0].0; let event_digest = self.events_digest; let dependencies = vec![]; - TransactionEffects::new_from_execution_v2( + TransactionEffects::new_from_execution_v1( status, executed_epoch, GasCostSummary::default(), diff --git a/crates/iota-types/src/execution.rs b/crates/iota-types/src/execution.rs index d7dadb98fb2..abbc6c69ee3 100644 --- a/crates/iota-types/src/execution.rs +++ b/crates/iota-types/src/execution.rs @@ -14,7 +14,7 @@ use crate::{ event::Event, is_system_package, object::{Data, Object, Owner}, - storage::{BackingPackageStore, ObjectChange}, + storage::BackingPackageStore, transaction::Argument, }; @@ -56,20 +56,13 @@ impl TypeLayoutStore for T where T: BackingPackageStore {} #[derive(Debug)] pub enum ExecutionResults { V1(ExecutionResultsV1), - V2(ExecutionResultsV2), -} - -#[derive(Debug)] -pub struct ExecutionResultsV1 { - pub object_changes: BTreeMap, - pub user_events: Vec, } /// Used by iota-execution v1 and above, to capture the execution results from /// Move. The results represent the primitive information that can then be used -/// to construct both transaction effects V1 and V2. +/// to construct both transaction effect V1. #[derive(Debug, Default)] -pub struct ExecutionResultsV2 { +pub struct ExecutionResultsV1 { /// All objects written regardless of whether they were mutated, created, or /// unwrapped. pub written_objects: BTreeMap, @@ -94,7 +87,7 @@ pub type ExecutionResult = ( Vec<(Vec, TypeTag)>, ); -impl ExecutionResultsV2 { +impl ExecutionResultsV1 { pub fn drop_writes(&mut self) { self.written_objects.clear(); self.modified_objects.clear(); diff --git a/crates/iota-types/src/full_checkpoint_content.rs b/crates/iota-types/src/full_checkpoint_content.rs index cd8c5bbf299..db44a808589 100644 --- a/crates/iota-types/src/full_checkpoint_content.rs +++ b/crates/iota-types/src/full_checkpoint_content.rs @@ -4,7 +4,6 @@ use std::collections::BTreeMap; -use itertools::Either; use serde::{Deserialize, Serialize}; use tap::Pipe; @@ -95,25 +94,8 @@ impl CheckpointTransaction { pub fn removed_objects_pre_version(&self) -> impl Iterator { // Iterator over id and versions for all deleted or wrapped objects match &self.effects { - TransactionEffects::V1(v1) => Either::Left( - // Effects v1 has deleted and wrapped objects versions as the "new" version, not - // the old one that was actually removed. So we need to take these - // and then look them up in the `modified_at_versions`. - // No need to chain unwrapped_then_deleted because these objects must have been - // wrapped before the transaction, hence they will not be in - // modified_at_versions / input_objects. - v1.deleted().iter().chain(v1.wrapped()).map(|(id, _, _)| { - // lookup the old version for mutated objects - let (_, old_version) = v1 - .modified_at_versions() - .iter() - .find(|(oid, _old_version)| oid == id) - .expect("deleted/wrapped object must have entry in 'modified_at_versions'"); - (id, old_version) - }), - ), - TransactionEffects::V2(v2) => { - Either::Right(v2.changed_objects().iter().filter_map(|(id, change)| { + TransactionEffects::V1(v1) => { + v1.changed_objects().iter().filter_map(|(id, change)| { match ( &change.input_state, &change.output_state, @@ -134,7 +116,7 @@ impl CheckpointTransaction { ) => Some((id, version)), _ => None, } - })) + }) } } // Use id and version to lookup in input Objects @@ -156,24 +138,8 @@ impl CheckpointTransaction { pub fn changed_objects(&self) -> impl Iterator)> { // Iterator over ((ObjectId, new version), Option) match &self.effects { - TransactionEffects::V1(v1) => Either::Left( - v1.created() - .iter() - .chain(v1.unwrapped()) - .map(|((id, version, _), _)| ((id, version), None)) - .chain(v1.mutated().iter().map(|((id, version, _), _)| { - // lookup the old version for mutated objects - let (_, old_version) = v1 - .modified_at_versions() - .iter() - .find(|(oid, _old_version)| oid == id) - .expect("mutated object must have entry in modified_at_versions"); - - ((id, version), Some(old_version)) - })), - ), - TransactionEffects::V2(v2) => { - Either::Right(v2.changed_objects().iter().filter_map(|(id, change)| { + TransactionEffects::V1(v1) => { + v1.changed_objects().iter().filter_map(|(id, change)| { match ( &change.input_state, &change.output_state, @@ -181,7 +147,7 @@ impl CheckpointTransaction { ) { // Created Objects (ObjectIn::NotExist, ObjectOut::ObjectWrite(_), IDOperation::Created) => { - Some(((id, &v2.lamport_version), None)) + Some(((id, &v1.lamport_version), None)) } ( ObjectIn::NotExist, @@ -191,12 +157,12 @@ impl CheckpointTransaction { // Unwrapped Objects (ObjectIn::NotExist, ObjectOut::ObjectWrite(_), IDOperation::None) => { - Some(((id, &v2.lamport_version), None)) + Some(((id, &v1.lamport_version), None)) } // Mutated Objects (ObjectIn::Exist(((old_version, _), _)), ObjectOut::ObjectWrite(_), _) => { - Some(((id, &v2.lamport_version), Some(old_version))) + Some(((id, &v1.lamport_version), Some(old_version))) } ( ObjectIn::Exist(((old_version, _), _)), @@ -206,7 +172,7 @@ impl CheckpointTransaction { _ => None, } - })) + }) } } // Lookup Objects in output Objects as well as old versions for mutated objects @@ -231,13 +197,8 @@ impl CheckpointTransaction { pub fn created_objects(&self) -> impl Iterator { // Iterator over (ObjectId, version) for created objects match &self.effects { - TransactionEffects::V1(v1) => Either::Left( - v1.created() - .iter() - .map(|((id, version, _), _)| (id, version)), - ), - TransactionEffects::V2(v2) => { - Either::Right(v2.changed_objects().iter().filter_map(|(id, change)| { + TransactionEffects::V1(v1) => { + v1.changed_objects().iter().filter_map(|(id, change)| { match ( &change.input_state, &change.output_state, @@ -245,7 +206,7 @@ impl CheckpointTransaction { ) { // Created Objects (ObjectIn::NotExist, ObjectOut::ObjectWrite(_), IDOperation::Created) => { - Some((id, &v2.lamport_version)) + Some((id, &v1.lamport_version)) } ( ObjectIn::NotExist, @@ -255,7 +216,7 @@ impl CheckpointTransaction { _ => None, } - })) + }) } } // Lookup Objects in output Objects as well as old versions for mutated objects diff --git a/crates/iota-types/src/gas.rs b/crates/iota-types/src/gas.rs index 9cad8bdf882..39b7bd9edff 100644 --- a/crates/iota-types/src/gas.rs +++ b/crates/iota-types/src/gas.rs @@ -20,7 +20,7 @@ pub mod checked { effects::{TransactionEffects, TransactionEffectsAPI}, error::{ExecutionError, IotaResult, UserInputError, UserInputResult}, gas_model::{ - gas_predicates::gas_price_too_high, gas_v2::IotaGasStatus as IotaGasStatusV2, + gas_predicates::gas_price_too_high, gas_v1::IotaGasStatus as IotaGasStatusV1, tables::GasStatus, }, iota_serde::{BigInt, Readable}, @@ -57,9 +57,7 @@ pub mod checked { #[enum_dispatch(IotaGasStatusAPI)] #[derive(Debug)] pub enum IotaGasStatus { - // V1 does not exists any longer as it was a pre mainnet version. - // So we start the enum from V2 - V2(IotaGasStatusV2), + V1(IotaGasStatusV1), } impl IotaGasStatus { @@ -88,7 +86,7 @@ pub mod checked { .into()); } - Ok(Self::V2(IotaGasStatusV2::new_with_budget( + Ok(Self::V1(IotaGasStatusV1::new_with_budget( gas_budget, gas_price, reference_gas_price, @@ -97,7 +95,7 @@ pub mod checked { } pub fn new_unmetered() -> Self { - Self::V2(IotaGasStatusV2::new_unmetered()) + Self::V1(IotaGasStatusV1::new_unmetered()) } // This is the only public API on IotaGasStatus, all other gas related @@ -108,7 +106,7 @@ pub mod checked { gas_budget: u64, ) -> UserInputResult { match self { - Self::V2(status) => status.check_gas_balance(gas_objs, gas_budget), + Self::V1(status) => status.check_gas_balance(gas_objs, gas_budget), } } } diff --git a/crates/iota-types/src/gas_model/gas_v2.rs b/crates/iota-types/src/gas_model/gas_v1.rs similarity index 100% rename from crates/iota-types/src/gas_model/gas_v2.rs rename to crates/iota-types/src/gas_model/gas_v1.rs diff --git a/crates/iota-types/src/gas_model/mod.rs b/crates/iota-types/src/gas_model/mod.rs index 8e61cdcbc3a..22abf53106c 100644 --- a/crates/iota-types/src/gas_model/mod.rs +++ b/crates/iota-types/src/gas_model/mod.rs @@ -3,6 +3,6 @@ // SPDX-License-Identifier: Apache-2.0 pub mod gas_predicates; -pub mod gas_v2; +pub mod gas_v1; pub mod tables; pub mod units_types; diff --git a/crates/iota-types/src/messages_checkpoint.rs b/crates/iota-types/src/messages_checkpoint.rs index 69c61c53d7b..4dad931676c 100644 --- a/crates/iota-types/src/messages_checkpoint.rs +++ b/crates/iota-types/src/messages_checkpoint.rs @@ -48,17 +48,6 @@ use iota_metrics::histogram::Histogram; #[derive(Clone, Debug, Serialize, Deserialize)] pub struct CheckpointRequest { - /// if a sequence number is specified, return the checkpoint with that - /// sequence number; otherwise if None returns the latest authenticated - /// checkpoint stored. - pub sequence_number: Option, - // A flag, if true also return the contents of the - // checkpoint besides the meta-data. - pub request_content: bool, -} - -#[derive(Clone, Debug, Serialize, Deserialize)] -pub struct CheckpointRequestV2 { /// if a sequence number is specified, return the checkpoint with that /// sequence number; otherwise if None returns the latest checkpoint /// stored (authenticated or pending, depending on the value of @@ -90,13 +79,6 @@ impl CheckpointSummaryResponse { #[allow(clippy::large_enum_variant)] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct CheckpointResponse { - pub checkpoint: Option, - pub contents: Option, -} - -#[allow(clippy::large_enum_variant)] -#[derive(Clone, Debug, Serialize, Deserialize)] -pub struct CheckpointResponseV2 { pub checkpoint: Option, pub contents: Option, } diff --git a/crates/iota-types/src/quorum_driver_types.rs b/crates/iota-types/src/quorum_driver_types.rs index 8a8a0e15c15..2af88f912bf 100644 --- a/crates/iota-types/src/quorum_driver_types.rs +++ b/crates/iota-types/src/quorum_driver_types.rs @@ -103,17 +103,6 @@ pub enum EffectsFinalityInfo { /// is confirmed to be executed on this node before the response returns. pub type IsTransactionExecutedLocally = bool; -#[derive(Serialize, Deserialize, Clone, Debug)] -pub enum ExecuteTransactionResponse { - EffectsCert( - Box<( - FinalizedEffects, - TransactionEvents, - IsTransactionExecutedLocally, - )>, - ), -} - #[derive(Clone, Debug)] pub struct QuorumDriverRequest { pub transaction: VerifiedTransaction, @@ -131,22 +120,6 @@ pub struct QuorumDriverResponse { pub auxiliary_data: Option>, } -#[derive(Serialize, Deserialize, Clone, Debug)] -pub struct ExecuteTransactionRequest { - pub transaction: Transaction, - pub request_type: ExecuteTransactionRequestType, -} - -impl ExecuteTransactionRequest { - pub fn transaction_type(&self) -> TransactionType { - if self.transaction.contains_shared_object() { - TransactionType::SharedObject - } else { - TransactionType::SingleWriter - } - } -} - #[derive(Serialize, Deserialize, Clone, Debug)] pub struct ExecuteTransactionRequestV1 { pub transaction: Transaction, diff --git a/iota-execution/latest/iota-adapter/src/execution_engine.rs b/iota-execution/latest/iota-adapter/src/execution_engine.rs index e40a42debb1..26353e36d0a 100644 --- a/iota-execution/latest/iota-adapter/src/execution_engine.rs +++ b/iota-execution/latest/iota-adapter/src/execution_engine.rs @@ -38,7 +38,7 @@ mod checked { digests::{ChainIdentifier, get_mainnet_chain_identifier, get_testnet_chain_identifier}, effects::TransactionEffects, error::{ExecutionError, ExecutionErrorKind}, - execution::{ExecutionResults, ExecutionResultsV2, is_certificate_denied}, + execution::{ExecutionResults, ExecutionResultsV1, is_certificate_denied}, execution_config_utils::to_binary_config, execution_status::{CongestedObjects, ExecutionStatus}, gas::{GasCostSummary, IotaGasStatus}, @@ -624,8 +624,8 @@ mod checked { } } - temporary_store.record_execution_results(ExecutionResults::V2( - ExecutionResultsV2 { + temporary_store.record_execution_results(ExecutionResults::V1( + ExecutionResultsV1 { user_events: events, ..Default::default() }, diff --git a/iota-execution/latest/iota-adapter/src/programmable_transactions/context.rs b/iota-execution/latest/iota-adapter/src/programmable_transactions/context.rs index d8048eefd9e..3881633441a 100644 --- a/iota-execution/latest/iota-adapter/src/programmable_transactions/context.rs +++ b/iota-execution/latest/iota-adapter/src/programmable_transactions/context.rs @@ -22,7 +22,7 @@ mod checked { coin::Coin, error::{ExecutionError, ExecutionErrorKind, command_argument_error}, event::Event, - execution::{ExecutionResults, ExecutionResultsV2}, + execution::{ExecutionResults, ExecutionResultsV1}, execution_status::CommandArgumentError, metrics::LimitsMetrics, move_package::MovePackage, @@ -841,7 +841,7 @@ mod checked { }) .collect(); - Ok(ExecutionResults::V2(ExecutionResultsV2 { + Ok(ExecutionResults::V1(ExecutionResultsV1 { written_objects, modified_objects: loaded_runtime_objects .into_iter() diff --git a/iota-execution/latest/iota-adapter/src/temporary_store.rs b/iota-execution/latest/iota-adapter/src/temporary_store.rs index 8f2f6b1da22..1f35ae0fcf2 100644 --- a/iota-execution/latest/iota-adapter/src/temporary_store.rs +++ b/iota-execution/latest/iota-adapter/src/temporary_store.rs @@ -16,7 +16,7 @@ use iota_types::{ effects::{EffectsObjectChange, TransactionEffects, TransactionEvents}, error::{ExecutionError, IotaError, IotaResult}, execution::{ - DynamicallyLoadedObjectMetadata, ExecutionResults, ExecutionResultsV2, SharedInput, + DynamicallyLoadedObjectMetadata, ExecutionResults, ExecutionResultsV1, SharedInput, }, execution_config_utils::to_binary_config, execution_status::ExecutionStatus, @@ -53,7 +53,7 @@ pub struct TemporaryStore<'backing> { /// this store. lamport_timestamp: SequenceNumber, mutable_input_refs: BTreeMap, // Inputs that are mutable - execution_results: ExecutionResultsV2, + execution_results: ExecutionResultsV1, /// Objects that were loaded during execution (dynamic fields + received /// objects). loaded_runtime_objects: BTreeMap, @@ -117,7 +117,7 @@ impl<'backing> TemporaryStore<'backing> { input_objects: objects, lamport_timestamp, mutable_input_refs, - execution_results: ExecutionResultsV2::default(), + execution_results: ExecutionResultsV1::default(), protocol_config, loaded_runtime_objects: BTreeMap::new(), wrapped_object_containers: BTreeMap::new(), @@ -257,7 +257,7 @@ impl<'backing> TemporaryStore<'backing> { let loaded_per_epoch_config_objects = self.loaded_per_epoch_config_objects.read().clone(); let inner = self.into_inner(); - let effects = TransactionEffects::new_from_execution_v2( + let effects = TransactionEffects::new_from_execution_v1( status, epoch, gas_cost_summary, @@ -444,7 +444,7 @@ impl<'backing> TemporaryStore<'backing> { } pub fn estimate_effects_size_upperbound(&self) -> usize { - TransactionEffects::estimate_effects_size_upperbound_v2( + TransactionEffects::estimate_effects_size_upperbound_v1( self.execution_results.written_objects.len(), self.execution_results.modified_objects.len(), self.input_objects.len(), @@ -1025,12 +1025,10 @@ impl<'backing> Storage for TemporaryStore<'backing> { TemporaryStore::read_object(self, id) } - /// Take execution results v2, and translate it back to be compatible with - /// effects v1. + /// Take execution results v1. fn record_execution_results(&mut self, results: ExecutionResults) { - let ExecutionResults::V2(results) = results else { - panic!("ExecutionResults::V2 expected in iota-execution v1 and above"); - }; + let ExecutionResults::V1(results) = results; + // It's important to merge instead of override results because it's // possible to execute PT more than once during tx execution. self.execution_results.merge_results(results); diff --git a/iota-execution/latest/iota-move-natives/src/object_runtime/mod.rs b/iota-execution/latest/iota-move-natives/src/object_runtime/mod.rs index 88466de596f..9244a158540 100644 --- a/iota-execution/latest/iota-move-natives/src/object_runtime/mod.rs +++ b/iota-execution/latest/iota-move-natives/src/object_runtime/mod.rs @@ -693,15 +693,15 @@ pub fn get_all_uids( bcs_bytes: &[u8], ) -> Result, /* invariant violation */ String> { let mut ids = BTreeSet::new(); - struct UIDTraversalV2<'i>(&'i mut BTreeSet); - struct UIDCollectorV2<'i>(&'i mut BTreeSet); + struct UIDTraversalV1<'i>(&'i mut BTreeSet); + struct UIDCollectorV1<'i>(&'i mut BTreeSet); - impl<'i> AV::Traversal for UIDTraversalV2<'i> { + impl<'i> AV::Traversal for UIDTraversalV1<'i> { type Error = AV::Error; fn traverse_struct(&mut self, driver: &mut AV::StructDriver) -> Result<(), Self::Error> { if driver.struct_layout().type_ == UID::type_() { - while driver.next_field(&mut UIDCollectorV2(self.0))?.is_some() {} + while driver.next_field(&mut UIDCollectorV1(self.0))?.is_some() {} } else { while driver.next_field(self)?.is_some() {} } @@ -709,7 +709,7 @@ pub fn get_all_uids( } } - impl<'i> AV::Traversal for UIDCollectorV2<'i> { + impl<'i> AV::Traversal for UIDCollectorV1<'i> { type Error = AV::Error; fn traverse_address(&mut self, value: AccountAddress) -> Result<(), Self::Error> { self.0.insert(value.into()); @@ -720,7 +720,7 @@ pub fn get_all_uids( MoveValue::visit_deserialize( bcs_bytes, fully_annotated_layout, - &mut UIDTraversalV2(&mut ids), + &mut UIDTraversalV1(&mut ids), ) .map_err(|e| format!("Failed to deserialize. {e:?}"))?; Ok(ids) diff --git a/iota-execution/v0/iota-adapter/src/execution_engine.rs b/iota-execution/v0/iota-adapter/src/execution_engine.rs index bfbc94ffc70..c4361c81a06 100644 --- a/iota-execution/v0/iota-adapter/src/execution_engine.rs +++ b/iota-execution/v0/iota-adapter/src/execution_engine.rs @@ -38,7 +38,7 @@ mod checked { digests::{ChainIdentifier, get_mainnet_chain_identifier, get_testnet_chain_identifier}, effects::TransactionEffects, error::{ExecutionError, ExecutionErrorKind}, - execution::{ExecutionResults, ExecutionResultsV2, is_certificate_denied}, + execution::{ExecutionResults, ExecutionResultsV1, is_certificate_denied}, execution_config_utils::to_binary_config, execution_status::{CongestedObjects, ExecutionStatus}, gas::{GasCostSummary, IotaGasStatus}, @@ -577,8 +577,8 @@ mod checked { } } - temporary_store.record_execution_results(ExecutionResults::V2( - ExecutionResultsV2 { + temporary_store.record_execution_results(ExecutionResults::V1( + ExecutionResultsV1 { user_events: events, ..Default::default() }, diff --git a/iota-execution/v0/iota-adapter/src/programmable_transactions/context.rs b/iota-execution/v0/iota-adapter/src/programmable_transactions/context.rs index 542e93ab75b..f5c630c28ec 100644 --- a/iota-execution/v0/iota-adapter/src/programmable_transactions/context.rs +++ b/iota-execution/v0/iota-adapter/src/programmable_transactions/context.rs @@ -22,7 +22,7 @@ mod checked { coin::Coin, error::{ExecutionError, ExecutionErrorKind, command_argument_error}, event::Event, - execution::{ExecutionResults, ExecutionResultsV2}, + execution::{ExecutionResults, ExecutionResultsV1}, execution_status::CommandArgumentError, metrics::LimitsMetrics, move_package::MovePackage, @@ -834,7 +834,7 @@ mod checked { }) .collect(); - Ok(ExecutionResults::V2(ExecutionResultsV2 { + Ok(ExecutionResults::V1(ExecutionResultsV1 { written_objects, modified_objects: loaded_runtime_objects .into_iter() diff --git a/iota-execution/v0/iota-adapter/src/temporary_store.rs b/iota-execution/v0/iota-adapter/src/temporary_store.rs index 8f2f6b1da22..1f35ae0fcf2 100644 --- a/iota-execution/v0/iota-adapter/src/temporary_store.rs +++ b/iota-execution/v0/iota-adapter/src/temporary_store.rs @@ -16,7 +16,7 @@ use iota_types::{ effects::{EffectsObjectChange, TransactionEffects, TransactionEvents}, error::{ExecutionError, IotaError, IotaResult}, execution::{ - DynamicallyLoadedObjectMetadata, ExecutionResults, ExecutionResultsV2, SharedInput, + DynamicallyLoadedObjectMetadata, ExecutionResults, ExecutionResultsV1, SharedInput, }, execution_config_utils::to_binary_config, execution_status::ExecutionStatus, @@ -53,7 +53,7 @@ pub struct TemporaryStore<'backing> { /// this store. lamport_timestamp: SequenceNumber, mutable_input_refs: BTreeMap, // Inputs that are mutable - execution_results: ExecutionResultsV2, + execution_results: ExecutionResultsV1, /// Objects that were loaded during execution (dynamic fields + received /// objects). loaded_runtime_objects: BTreeMap, @@ -117,7 +117,7 @@ impl<'backing> TemporaryStore<'backing> { input_objects: objects, lamport_timestamp, mutable_input_refs, - execution_results: ExecutionResultsV2::default(), + execution_results: ExecutionResultsV1::default(), protocol_config, loaded_runtime_objects: BTreeMap::new(), wrapped_object_containers: BTreeMap::new(), @@ -257,7 +257,7 @@ impl<'backing> TemporaryStore<'backing> { let loaded_per_epoch_config_objects = self.loaded_per_epoch_config_objects.read().clone(); let inner = self.into_inner(); - let effects = TransactionEffects::new_from_execution_v2( + let effects = TransactionEffects::new_from_execution_v1( status, epoch, gas_cost_summary, @@ -444,7 +444,7 @@ impl<'backing> TemporaryStore<'backing> { } pub fn estimate_effects_size_upperbound(&self) -> usize { - TransactionEffects::estimate_effects_size_upperbound_v2( + TransactionEffects::estimate_effects_size_upperbound_v1( self.execution_results.written_objects.len(), self.execution_results.modified_objects.len(), self.input_objects.len(), @@ -1025,12 +1025,10 @@ impl<'backing> Storage for TemporaryStore<'backing> { TemporaryStore::read_object(self, id) } - /// Take execution results v2, and translate it back to be compatible with - /// effects v1. + /// Take execution results v1. fn record_execution_results(&mut self, results: ExecutionResults) { - let ExecutionResults::V2(results) = results else { - panic!("ExecutionResults::V2 expected in iota-execution v1 and above"); - }; + let ExecutionResults::V1(results) = results; + // It's important to merge instead of override results because it's // possible to execute PT more than once during tx execution. self.execution_results.merge_results(results); diff --git a/iota-execution/v0/iota-move-natives/src/object_runtime/mod.rs b/iota-execution/v0/iota-move-natives/src/object_runtime/mod.rs index 88466de596f..9244a158540 100644 --- a/iota-execution/v0/iota-move-natives/src/object_runtime/mod.rs +++ b/iota-execution/v0/iota-move-natives/src/object_runtime/mod.rs @@ -693,15 +693,15 @@ pub fn get_all_uids( bcs_bytes: &[u8], ) -> Result, /* invariant violation */ String> { let mut ids = BTreeSet::new(); - struct UIDTraversalV2<'i>(&'i mut BTreeSet); - struct UIDCollectorV2<'i>(&'i mut BTreeSet); + struct UIDTraversalV1<'i>(&'i mut BTreeSet); + struct UIDCollectorV1<'i>(&'i mut BTreeSet); - impl<'i> AV::Traversal for UIDTraversalV2<'i> { + impl<'i> AV::Traversal for UIDTraversalV1<'i> { type Error = AV::Error; fn traverse_struct(&mut self, driver: &mut AV::StructDriver) -> Result<(), Self::Error> { if driver.struct_layout().type_ == UID::type_() { - while driver.next_field(&mut UIDCollectorV2(self.0))?.is_some() {} + while driver.next_field(&mut UIDCollectorV1(self.0))?.is_some() {} } else { while driver.next_field(self)?.is_some() {} } @@ -709,7 +709,7 @@ pub fn get_all_uids( } } - impl<'i> AV::Traversal for UIDCollectorV2<'i> { + impl<'i> AV::Traversal for UIDCollectorV1<'i> { type Error = AV::Error; fn traverse_address(&mut self, value: AccountAddress) -> Result<(), Self::Error> { self.0.insert(value.into()); @@ -720,7 +720,7 @@ pub fn get_all_uids( MoveValue::visit_deserialize( bcs_bytes, fully_annotated_layout, - &mut UIDTraversalV2(&mut ids), + &mut UIDTraversalV1(&mut ids), ) .map_err(|e| format!("Failed to deserialize. {e:?}"))?; Ok(ids) From d3bd054874a3f820fab4e33597228b2eb7090c20 Mon Sep 17 00:00:00 2001 From: Mirko Zichichi Date: Tue, 29 Oct 2024 12:38:56 +0100 Subject: [PATCH 06/55] fix(move-stackless-bytecode): ordering (#3742) --- .../src/function_target_pipeline.rs | 85 +++++++------------ 1 file changed, 32 insertions(+), 53 deletions(-) diff --git a/external-crates/move/crates/move-stackless-bytecode/src/function_target_pipeline.rs b/external-crates/move/crates/move-stackless-bytecode/src/function_target_pipeline.rs index 337c5c5a23d..6b10f0f78f8 100644 --- a/external-crates/move/crates/move-stackless-bytecode/src/function_target_pipeline.rs +++ b/external-crates/move/crates/move-stackless-bytecode/src/function_target_pipeline.rs @@ -5,8 +5,7 @@ use core::fmt; use std::{ - cmp::Ordering, - collections::{btree_map::Entry as MapEntry, BTreeMap, BTreeSet}, + collections::{BTreeMap, BTreeSet, btree_map::Entry as MapEntry}, fmt::Formatter, fs, }; @@ -14,10 +13,7 @@ use std::{ use itertools::{Either, Itertools}; use log::{debug, info}; use move_model::model::{FunId, FunctionEnv, GlobalEnv, QualifiedId}; -use petgraph::{ - algo::has_path_connecting, - graph::{DiGraph, NodeIndex}, -}; +use petgraph::graph::{DiGraph, NodeIndex}; use crate::{ function_target::{FunctionData, FunctionTarget}, @@ -345,12 +341,19 @@ impl FunctionTargetPipeline { } /// Collect strongly connected components (SCCs) from the call graph. + /// Returns a list of node SCCs in reverse topological order, and a map from + /// function id to other functions in the same SCC. fn derive_call_graph_sccs( env: &GlobalEnv, graph: &DiGraph, ()>, - ) -> BTreeMap, Option>>> { + ) -> ( + Vec>, + BTreeMap, Option>>>, + ) { let mut sccs = BTreeMap::new(); - for scc in petgraph::algo::tarjan_scc(graph) { + // Returned SCCs are in reverse topological order. + let scc_nodes = petgraph::algo::tarjan_scc(graph); + for scc in scc_nodes.clone() { let mut part = BTreeSet::new(); let mut is_cyclic = scc.len() > 1; for node_idx in scc { @@ -374,7 +377,7 @@ impl FunctionTargetPipeline { assert!(existing.is_none()); } } - sccs + (scc_nodes, sccs) } /// Sort the call graph in topological order with strongly connected @@ -384,11 +387,11 @@ impl FunctionTargetPipeline { targets: &FunctionTargetsHolder, ) -> Vec, Vec>>> { // collect sccs - let (graph, nodes) = Self::build_call_graph(env, targets); - let sccs = Self::derive_call_graph_sccs(env, &graph); + let (graph, _nodes) = Self::build_call_graph(env, targets); + let (scc_nodes, scc_map) = Self::derive_call_graph_sccs(env, &graph); let mut scc_staging = BTreeMap::new(); - for scc_opt in sccs.values() { + for scc_opt in scc_map.values() { match scc_opt.as_ref() { None => (), Some(scc) => { @@ -397,51 +400,30 @@ impl FunctionTargetPipeline { } } - // construct the work list (with a deterministic ordering) + // Construct the work list from a deterministic topological ordering. let mut worklist = vec![]; - for fun in targets.get_funs() { - let fun_env = env.get_function(fun); - worklist.push(( - fun, - fun_env.get_called_functions().into_iter().collect_vec(), - )); + for scc in scc_nodes.into_iter().rev() { + for node_idx in scc { + let fun_id = *graph.node_weight(node_idx).unwrap(); + let fun_env = env.get_function(fun_id); + worklist.push(( + fun_id, + fun_env.get_called_functions().into_iter().collect_vec(), + )); + } } // analyze bottom-up from the leaves of the call graph // NOTE: this algorithm produces a deterministic ordering of functions to be // analyzed let mut dep_ordered = vec![]; - while !worklist.is_empty() { - worklist.sort_by(|(caller1, callees1), (caller2, callees2)| { - // rules of ordering: - // - if function A depends on B (i.e., calls B), put B towards the end of the - // worklist - // - if there are no dependencies among A and B, rank them by callee size - - let node1 = *nodes.get(caller1).unwrap(); - let node2 = *nodes.get(caller2).unwrap(); - match ( - has_path_connecting(&graph, node1, node2, None), - has_path_connecting(&graph, node2, node1, None), - ) { - (true, true) => Ordering::Equal, - (true, false) => Ordering::Less, - (false, true) => Ordering::Greater, - (false, false) => { - // Put functions with 0 calls first in line, at the end of the vector - callees2.len().cmp(&callees1.len()) - } - } - }); - - let (call_id, callees) = worklist.pop().unwrap(); - + while let Some((call_id, callees)) = worklist.pop() { // At this point, one of two things is true: // 1. callees is empty (common case) // 2. callees is nonempty and call_id is part of a recursive or mutually // recursive function group - match sccs.get(&call_id).unwrap().as_ref() { + match scc_map.get(&call_id).unwrap().as_ref() { None => { // case 1: non-recursive call assert!(callees.is_empty()); @@ -589,14 +571,11 @@ impl FunctionTargetPipeline { targets: &FunctionTargetsHolder, processor: &dyn FunctionTargetProcessor, ) -> String { - let mut dump = format!( - "{}", - ProcessorResultDisplay { - env, - targets, - processor, - } - ); + let mut dump = format!("{}", ProcessorResultDisplay { + env, + targets, + processor, + }); if !processor.is_single_run() { if !dump.is_empty() { dump = format!("\n\n{}", dump); From 0c635fb40c25b96057f2499815c4f63b3e7422b8 Mon Sep 17 00:00:00 2001 From: Pavlo Botnar Date: Tue, 29 Oct 2024 14:01:36 +0200 Subject: [PATCH 07/55] fix(iota-light-client)regenerate checkpoints after transaction effects v1 changes (#3723) * Remove ExecutionResultsV1 * Rename ExecutionResults::V2 to be V1 * Rename V2 to V1 * Rebase * Fix clippy * refactor(iota-types): remove TransactionEffectsV2 * refactor(iota-types): update specs * fix(iota-light-client): regenerate checkpoints for proof tests, added ability to generate checkpoints in explicit way * use fixes * fmt fix * Clippy fix * Instruction of checkpoints generating has been added. * dprint --------- Co-authored-by: Bing-Yang Lin Co-authored-by: miker83z --- Cargo.lock | 19 +- crates/iota-light-client/Cargo.toml | 2 +- .../iota-light-client/example_config/528.chk | Bin 15668 -> 0 bytes .../iota-light-client/example_config/534.chk | Bin 0 -> 15460 bytes .../example_config/{528.json => 534.json} | 26 +- .../{528_full.json => 534_full.json} | 8902 ++++++----- .../iota-light-client/example_config/794.chk | Bin 17320 -> 0 bytes .../iota-light-client/example_config/800.chk | Bin 0 -> 14584 bytes .../example_config/{794.json => 800.json} | 34 +- .../{794_full.json => 800_full.json} | 12510 +++++++--------- .../example_config/checkpoints.yaml | 4 +- .../src/bin/generate_chk_snapshots.rs | 56 + .../iota-light-client/src/bin/light_client.rs | 275 + crates/iota-light-client/src/lib.rs | 1 + .../src/{main.rs => utils.rs} | 538 +- crates/iota-light-client/tests/README.md | 7 + crates/iota-light-client/tests/check_proof.rs | 20 +- 17 files changed, 10141 insertions(+), 12253 deletions(-) delete mode 100644 crates/iota-light-client/example_config/528.chk create mode 100644 crates/iota-light-client/example_config/534.chk rename crates/iota-light-client/example_config/{528.json => 534.json} (72%) rename crates/iota-light-client/example_config/{528_full.json => 534_full.json} (82%) delete mode 100644 crates/iota-light-client/example_config/794.chk create mode 100644 crates/iota-light-client/example_config/800.chk rename crates/iota-light-client/example_config/{794.json => 800.json} (62%) rename crates/iota-light-client/example_config/{794_full.json => 800_full.json} (73%) create mode 100644 crates/iota-light-client/src/bin/generate_chk_snapshots.rs create mode 100644 crates/iota-light-client/src/bin/light_client.rs rename crates/iota-light-client/src/{main.rs => utils.rs} (60%) create mode 100644 crates/iota-light-client/tests/README.md diff --git a/Cargo.lock b/Cargo.lock index a580c1205b5..52b6617ad8c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1085,9 +1085,9 @@ dependencies = [ [[package]] name = "aws-lc-rs" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f95446d919226d587817a7d21379e6eb099b97b45110a7f272a444ca5c54070" +checksum = "cdd82dba44d209fddb11c190e0a94b78651f95299598e472215667417a03ff1d" dependencies = [ "aws-lc-sys", "mirai-annotations", @@ -1097,9 +1097,9 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.21.1" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "234314bd569802ec87011d653d6815c6d7b9ffb969e9fee5b8b20ef860e8dce9" +checksum = "df7a4168111d7eb622a31b214057b8509c0a7e1794f44c546d742330dc793972" dependencies = [ "bindgen 0.69.5", "cc", @@ -1858,7 +1858,7 @@ dependencies = [ "bitflags 2.6.0", "cexpr", "clang-sys", - "itertools 0.12.1", + "itertools 0.10.5", "lazy_static", "lazycell", "log", @@ -15101,23 +15101,22 @@ dependencies = [ [[package]] name = "tonic-build" -version = "0.12.3" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9557ce109ea773b399c9b9e5dca39294110b74f1f342cb347a80d1fce8c26a11" +checksum = "fe4ee8877250136bd7e3d2331632810a4df4ea5e004656990d8d66d2f5ee8a67" dependencies = [ "prettyplease", "proc-macro2 1.0.86", "prost-build", - "prost-types", "quote 1.0.37", "syn 2.0.77", ] [[package]] name = "tonic-health" -version = "0.12.3" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1eaf34ddb812120f5c601162d5429933c9b527d901ab0e7f930d3147e33a09b2" +checksum = "ec0a34e6f706bae26b2b490e1da5c3f6a6ff87cae442bcbc7c881bab9631b5a7" dependencies = [ "async-stream", "prost", diff --git a/crates/iota-light-client/Cargo.toml b/crates/iota-light-client/Cargo.toml index 0def8e35755..9d318e928ca 100644 --- a/crates/iota-light-client/Cargo.toml +++ b/crates/iota-light-client/Cargo.toml @@ -11,7 +11,7 @@ path = "src/lib.rs" [[bin]] name = "iota-light-client" -path = "src/main.rs" +path = "src/bin/light_client.rs" [dependencies] # external dependencies diff --git a/crates/iota-light-client/example_config/528.chk b/crates/iota-light-client/example_config/528.chk deleted file mode 100644 index 80f0fc681b2fb14c66c737ce057ada7a2b4e6743..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15668 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 M3M#ne`&S#{zbFm&=Kufz diff --git a/crates/iota-light-client/example_config/534.chk b/crates/iota-light-client/example_config/534.chk new file mode 100644 index 0000000000000000000000000000000000000000..dedcc190a9390a385eb0edce5366f6c744def382 GIT binary patch literal 15460 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 literal 0 HcmV?d00001 diff --git a/crates/iota-light-client/example_config/528.json b/crates/iota-light-client/example_config/534.json similarity index 72% rename from crates/iota-light-client/example_config/528.json rename to crates/iota-light-client/example_config/534.json index 331b8173efc..372d5101092 100644 --- a/crates/iota-light-client/example_config/528.json +++ b/crates/iota-light-client/example_config/534.json @@ -1,17 +1,17 @@ { "data": { "epoch": 1, - "sequence_number": 528, - "network_total_transactions": 2297, - "content_digest": "CoTC2SBtCwR1DnZHwr26PL4fHVgdcEFk4nRTy2Vm2f7Q", - "previous_digest": "BDdU4PsyAgEvVtBWAx2UFwVwpHZD69yGHZRVQQtiQkLR", + "sequence_number": 534, + "network_total_transactions": 2330, + "content_digest": "9FHJDZDPvWTCMDeD4U6D9dfGA4LDwHDounTRsUwmipd8", + "previous_digest": "6vFifUu76GsxEwUvQwi4Wmn1HEw7ErfaTidGmZu1CCSx", "epoch_rolling_gas_cost_summary": { - "computationCost": "2000000", - "storageCost": "49156800", - "storageRebate": "988000", + "computationCost": "0", + "storageCost": "0", + "storageRebate": "0", "nonRefundableStorageFee": "0" }, - "timestamp_ms": 1729529127725, + "timestamp_ms": 1730123560473, "checkpoint_commitments": [], "end_of_epoch_data": { "nextEpochCommittee": [ @@ -36,16 +36,16 @@ "epochCommitments": [ { "ECMHLiveObjectSetDigest": { - "digest": "9HWmXguz7819cCZjTkrGVo4JZRW2xouuU48mzXn2kBLF" + "digest": "GrEtoqsvySv4D6G9csGL4mXUrnf87s23jJigugHGcvTv" } } ], - "epochSupplyChange": 766999998000000 + "epochSupplyChange": 767000000000000 }, "version_specific_data": [ 0, 1, - 110, + 109, 0, 0, 0, @@ -57,7 +57,7 @@ }, "auth_signature": { "epoch": 1, - "signature": "r9m20hZ9J6rx5wmfXQb5hCf/5KlUivWgLZYmD7L0X+E/psUu7Zt2/nv2QeJuv8Pa", + "signature": "pKCPIaUkdDkBuWUUnpncNRLTMbAzVfomTehSvvmeSKhNLKz0jm31y/pWZWmUpBK8", "signers_map": [ 58, 48, @@ -79,7 +79,7 @@ 0, 1, 0, - 2, + 3, 0 ] } diff --git a/crates/iota-light-client/example_config/528_full.json b/crates/iota-light-client/example_config/534_full.json similarity index 82% rename from crates/iota-light-client/example_config/528_full.json rename to crates/iota-light-client/example_config/534_full.json index 8f8066816cb..b9df7c88058 100644 --- a/crates/iota-light-client/example_config/528_full.json +++ b/crates/iota-light-client/example_config/534_full.json @@ -2,17 +2,17 @@ "checkpoint_summary": { "data": { "epoch": 1, - "sequence_number": 528, - "network_total_transactions": 2297, - "content_digest": "CoTC2SBtCwR1DnZHwr26PL4fHVgdcEFk4nRTy2Vm2f7Q", - "previous_digest": "BDdU4PsyAgEvVtBWAx2UFwVwpHZD69yGHZRVQQtiQkLR", + "sequence_number": 534, + "network_total_transactions": 2330, + "content_digest": "9FHJDZDPvWTCMDeD4U6D9dfGA4LDwHDounTRsUwmipd8", + "previous_digest": "6vFifUu76GsxEwUvQwi4Wmn1HEw7ErfaTidGmZu1CCSx", "epoch_rolling_gas_cost_summary": { - "computationCost": "2000000", - "storageCost": "49156800", - "storageRebate": "988000", + "computationCost": "0", + "storageCost": "0", + "storageRebate": "0", "nonRefundableStorageFee": "0" }, - "timestamp_ms": 1729529127725, + "timestamp_ms": 1730123560473, "checkpoint_commitments": [], "end_of_epoch_data": { "nextEpochCommittee": [ @@ -37,16 +37,16 @@ "epochCommitments": [ { "ECMHLiveObjectSetDigest": { - "digest": "9HWmXguz7819cCZjTkrGVo4JZRW2xouuU48mzXn2kBLF" + "digest": "GrEtoqsvySv4D6G9csGL4mXUrnf87s23jJigugHGcvTv" } } ], - "epochSupplyChange": 766999998000000 + "epochSupplyChange": 767000000000000 }, "version_specific_data": [ 0, 1, - 110, + 109, 0, 0, 0, @@ -58,7 +58,7 @@ }, "auth_signature": { "epoch": 1, - "signature": "r9m20hZ9J6rx5wmfXQb5hCf/5KlUivWgLZYmD7L0X+E/psUu7Zt2/nv2QeJuv8Pa", + "signature": "pKCPIaUkdDkBuWUUnpncNRLTMbAzVfomTehSvvmeSKhNLKz0jm31y/pWZWmUpBK8", "signers_map": [ 58, 48, @@ -80,7 +80,7 @@ 0, 1, 0, - 2, + 3, 0 ] } @@ -89,12 +89,12 @@ "V1": { "transactions": [ { - "transaction": "9DHpHwoFnZzxHuv1Gyir6YFKWS8Ku9sJiTKw4k5qpM9W", - "effects": "6gy6Px9yi2dfPQDChyNHd4xcVHjQSB2DLcH7VrLpB3S4" + "transaction": "5J29vBytWmvVQR6CCDfEDsXaT8BvNTMf4TonTTpBtFNm", + "effects": "81KuBFJj5si4MNbvadsuhXyzpQd4x3TPcVR4tKo9eWcU" }, { - "transaction": "Ai7U4nQvUNhzdARMaAGfisbHdNMHfRoTm1Z6xo74Q9Sr", - "effects": "XQ6d8gneNKRAWyLTATnwQ5UwvWLHsYhhcbCvLoahUpy" + "transaction": "7gtSzcRCnPVpmESfZRpQaHVh65UfDPZZqwfcDjwKqj7U", + "effects": "BpjWuYrzXjEna2e3vuKAJirW6TXAG9x5buBN1eoFD6qW" } ], "user_signatures": [ @@ -121,56 +121,56 @@ "kind": { "RandomnessStateUpdate": { "epoch": 1, - "randomness_round": 110, + "randomness_round": 109, "random_bytes": [ - 169, - 45, - 27, - 184, + 130, + 248, + 233, + 164, + 28, + 6, + 210, + 192, + 50, + 73, + 124, + 63, + 93, 119, - 216, - 23, - 247, - 111, - 140, - 41, 202, - 131, - 216, - 167, - 51, - 45, - 67, - 188, - 52, - 155, - 45, - 176, - 207, - 224, - 46, - 196, - 218, - 115, + 158, + 21, + 6, + 160, + 0, + 158, + 171, + 2, + 10, + 114, + 10, + 64, + 57, + 82, + 14, + 215, 27, - 67, - 60, - 255, + 20, + 239, + 2, + 156, + 23, + 102, + 104, + 239, + 219, + 12, + 56, + 254, + 169, 26, - 222, - 250, - 81, - 240, - 137, - 108, 88, - 16, - 93, - 210, - 33, - 101, - 39, - 2 + 5 ], "randomness_obj_initial_shared_version": 1 } @@ -200,7 +200,7 @@ "auth_signature": {} }, "effects": { - "V2": { + "V1": { "status": "Success", "executed_epoch": 1, "gas_used": { @@ -209,13 +209,13 @@ "storageRebate": "0", "nonRefundableStorageFee": "0" }, - "transaction_digest": "9DHpHwoFnZzxHuv1Gyir6YFKWS8Ku9sJiTKw4k5qpM9W", + "transaction_digest": "5J29vBytWmvVQR6CCDfEDsXaT8BvNTMf4TonTTpBtFNm", "gas_object_index": null, "events_digest": null, "dependencies": [ - "BywXXNQzNfPoqE5Uyk5GiexC4NbAsaRwYkEckTQSsheU" + "4PR98BNNAdHHWe5kDfq89VexEs932FeRoRJ3YXURjQND" ], - "lamport_version": 221, + "lamport_version": 220, "changed_objects": [ [ "0x0000000000000000000000000000000000000000000000000000000000000008", @@ -223,8 +223,8 @@ "input_state": { "Exist": [ [ - 220, - "7VTrWLbAFEFnNgTqjT2DJxDkztzxLtqfiYeiETG8ebaG" + 219, + "CZqXJ8Z79beKroZzzm12LPoUHNYehYEJ4vUkeCrC9sGy" ], { "Shared": { @@ -235,7 +235,7 @@ }, "output_state": { "ObjectWrite": [ - "C8Hx6y4tpctFTnLoroP6AH36ZzzJQAf5TTqHtG6DyNAm", + "2NviAc1jBtvru7AtJwZur9421NQ1VPmM6QENp79CsnmY", { "Shared": { "initial_shared_version": 1 @@ -247,24 +247,24 @@ } ], [ - "0x4d0a9bc4f3f924ec2ca5cf0a21231f9395356135046cb04479b5693adbebf5f5", + "0x97b25a65146d7ed593e002954460c19c051477008816f01d8cd2ad181f4ac233", { "input_state": { "Exist": [ [ - 220, - "9crQgJS7fJPiC7xjUDv2gNjecT95kJY8AMDGwBkGZFE5" + 219, + "F8R3Bp5gCMzvnV2gy4PFJwHZaofgKpi5JCfLScFfYYZL" ], { - "ObjectOwner": "0xca1970ef1eabdfedde54a846911e62209c9b48dc8b53498440bfc81ec5e0e113" + "ObjectOwner": "0xd505ea988a5709426d129324686d8b87a1b765570a73a43a798e9ed83f9d012f" } ] }, "output_state": { "ObjectWrite": [ - "6KULDLPma3WbFVNaGQLSTV2fNRsq7wcMxg4KzEiyPveY", + "HHQ8DZqkgm4nchnJcV1aS5Qt62ARC49mbmQx43kQmRvx", { - "ObjectOwner": "0xca1970ef1eabdfedde54a846911e62209c9b48dc8b53498440bfc81ec5e0e113" + "ObjectOwner": "0xd505ea988a5709426d129324686d8b87a1b765570a73a43a798e9ed83f9d012f" } ] }, @@ -290,7 +290,7 @@ } }, "has_public_transfer": false, - "version": 220, + "version": 219, "contents": [ 0, 0, @@ -324,38 +324,38 @@ 0, 0, 8, - 202, - 25, - 112, - 239, - 30, - 171, - 223, - 237, - 222, - 84, - 168, - 70, - 145, - 30, - 98, - 32, - 156, - 155, - 72, - 220, + 213, + 5, + 234, + 152, + 138, + 87, + 9, + 66, + 109, + 18, + 147, + 36, + 104, + 109, 139, - 83, - 73, - 132, - 64, - 191, - 200, - 30, - 197, - 224, - 225, - 19, + 135, + 161, + 183, + 101, + 87, + 10, + 115, + 164, + 58, + 121, + 142, + 158, + 216, + 63, + 157, + 1, + 47, 1, 0, 0, @@ -372,7 +372,7 @@ "initial_shared_version": 1 } }, - "previous_transaction": "BywXXNQzNfPoqE5Uyk5GiexC4NbAsaRwYkEckTQSsheU", + "previous_transaction": "4PR98BNNAdHHWe5kDfq89VexEs932FeRoRJ3YXURjQND", "storage_rebate": 0 }, { @@ -397,40 +397,40 @@ } }, "has_public_transfer": false, - "version": 220, + "version": 219, "contents": [ - 77, - 10, - 155, - 196, - 243, - 249, - 36, - 236, - 44, - 165, - 207, - 10, - 33, - 35, - 31, + 151, + 178, + 90, + 101, + 20, + 109, + 126, + 213, 147, + 224, + 2, 149, - 53, - 97, - 53, - 4, - 108, - 176, 68, - 121, - 181, - 105, - 58, - 219, - 235, - 245, - 245, + 96, + 193, + 156, + 5, + 20, + 119, + 0, + 136, + 22, + 240, + 29, + 140, + 210, + 173, + 24, + 31, + 74, + 194, + 51, 1, 0, 0, @@ -455,7 +455,7 @@ 0, 0, 0, - 109, + 108, 0, 0, 0, @@ -464,61 +464,61 @@ 0, 0, 48, - 178, - 73, - 19, - 137, + 183, + 209, 216, - 244, - 38, - 243, - 68, - 112, - 79, - 205, - 70, - 148, - 181, + 45, 220, - 242, - 200, - 85, - 98, - 114, - 54, - 194, - 244, - 118, - 57, - 1, - 38, - 169, - 55, - 84, - 239, - 1, - 109, - 120, - 253, - 167, + 60, + 32, 174, - 43, - 29, - 43, - 176, - 22, - 136, - 78, - 173, + 250, + 211, + 150, + 61, + 15, + 83, + 214, + 186, + 46, + 224, + 217, + 93, 74, - 69 + 50, + 76, + 89, + 177, + 219, + 147, + 137, + 189, + 251, + 232, + 187, + 67, + 27, + 88, + 106, + 19, + 148, + 206, + 126, + 85, + 14, + 141, + 48, + 252, + 4, + 125, + 29 ] } }, "owner": { - "ObjectOwner": "0xca1970ef1eabdfedde54a846911e62209c9b48dc8b53498440bfc81ec5e0e113" + "ObjectOwner": "0xd505ea988a5709426d129324686d8b87a1b765570a73a43a798e9ed83f9d012f" }, - "previous_transaction": "BywXXNQzNfPoqE5Uyk5GiexC4NbAsaRwYkEckTQSsheU", + "previous_transaction": "4PR98BNNAdHHWe5kDfq89VexEs932FeRoRJ3YXURjQND", "storage_rebate": 0 } ], @@ -535,7 +535,7 @@ } }, "has_public_transfer": false, - "version": 221, + "version": 220, "contents": [ 0, 0, @@ -569,38 +569,38 @@ 0, 0, 8, - 202, - 25, - 112, - 239, - 30, - 171, - 223, - 237, - 222, - 84, - 168, - 70, - 145, - 30, - 98, - 32, - 156, - 155, - 72, - 220, + 213, + 5, + 234, + 152, + 138, + 87, + 9, + 66, + 109, + 18, + 147, + 36, + 104, + 109, 139, - 83, - 73, - 132, - 64, - 191, - 200, - 30, - 197, - 224, - 225, - 19, + 135, + 161, + 183, + 101, + 87, + 10, + 115, + 164, + 58, + 121, + 142, + 158, + 216, + 63, + 157, + 1, + 47, 1, 0, 0, @@ -617,7 +617,7 @@ "initial_shared_version": 1 } }, - "previous_transaction": "9DHpHwoFnZzxHuv1Gyir6YFKWS8Ku9sJiTKw4k5qpM9W", + "previous_transaction": "5J29vBytWmvVQR6CCDfEDsXaT8BvNTMf4TonTTpBtFNm", "storage_rebate": 0 }, { @@ -642,40 +642,40 @@ } }, "has_public_transfer": false, - "version": 221, + "version": 220, "contents": [ - 77, - 10, - 155, - 196, - 243, - 249, - 36, - 236, - 44, - 165, - 207, - 10, - 33, - 35, - 31, + 151, + 178, + 90, + 101, + 20, + 109, + 126, + 213, 147, + 224, + 2, 149, - 53, - 97, - 53, - 4, - 108, - 176, 68, - 121, - 181, - 105, - 58, - 219, - 235, - 245, - 245, + 96, + 193, + 156, + 5, + 20, + 119, + 0, + 136, + 22, + 240, + 29, + 140, + 210, + 173, + 24, + 31, + 74, + 194, + 51, 1, 0, 0, @@ -700,7 +700,7 @@ 0, 0, 0, - 110, + 109, 0, 0, 0, @@ -709,61 +709,61 @@ 0, 0, 48, - 169, - 45, - 27, - 184, + 130, + 248, + 233, + 164, + 28, + 6, + 210, + 192, + 50, + 73, + 124, + 63, + 93, 119, - 216, - 23, - 247, - 111, - 140, - 41, 202, - 131, - 216, - 167, - 51, - 45, - 67, - 188, - 52, - 155, - 45, - 176, - 207, - 224, - 46, - 196, - 218, - 115, + 158, + 21, + 6, + 160, + 0, + 158, + 171, + 2, + 10, + 114, + 10, + 64, + 57, + 82, + 14, + 215, 27, - 67, - 60, - 255, + 20, + 239, + 2, + 156, + 23, + 102, + 104, + 239, + 219, + 12, + 56, + 254, + 169, 26, - 222, - 250, - 81, - 240, - 137, - 108, 88, - 16, - 93, - 210, - 33, - 101, - 39, - 2 + 5 ] } }, "owner": { - "ObjectOwner": "0xca1970ef1eabdfedde54a846911e62209c9b48dc8b53498440bfc81ec5e0e113" + "ObjectOwner": "0xd505ea988a5709426d129324686d8b87a1b765570a73a43a798e9ed83f9d012f" }, - "previous_transaction": "9DHpHwoFnZzxHuv1Gyir6YFKWS8Ku9sJiTKw4k5qpM9W", + "previous_transaction": "5J29vBytWmvVQR6CCDfEDsXaT8BvNTMf4TonTTpBtFNm", "storage_rebate": 0 } ] @@ -786,11 +786,11 @@ "ChangeEpoch": { "epoch": 2, "protocol_version": 1, - "storage_charge": 49156800, - "computation_charge": 2000000, - "storage_rebate": 988000, + "storage_charge": 0, + "computation_charge": 0, + "storage_rebate": 0, "non_refundable_storage_fee": 0, - "epoch_start_timestamp_ms": 1729529127725, + "epoch_start_timestamp_ms": 1730123560473, "system_packages": [] } } @@ -821,7 +821,7 @@ "auth_signature": {} }, "effects": { - "V2": { + "V1": { "status": "Success", "executed_epoch": 1, "gas_used": { @@ -830,13 +830,13 @@ "storageRebate": "0", "nonRefundableStorageFee": "0" }, - "transaction_digest": "Ai7U4nQvUNhzdARMaAGfisbHdNMHfRoTm1Z6xo74Q9Sr", + "transaction_digest": "7gtSzcRCnPVpmESfZRpQaHVh65UfDPZZqwfcDjwKqj7U", "gas_object_index": null, - "events_digest": "CNr4zqN3Tar2Gnad3oWszg67f9yabe4ssp5761SJbBiA", + "events_digest": "EBV2MNn1MMvGRwyyt6stfqsa9rzmt2AYWxirJq3KUian", "dependencies": [ - "CMc4L2hi22SFYwap6sHkdxoKaZp9h1q7hGfbXwyTkwsM" + "7MqVp96jyVqYUyhcwMuBY9ZY2ANAyhuLGJXTi5Uh459M" ], - "lamport_version": 4, + "lamport_version": 3, "changed_objects": [ [ "0x0000000000000000000000000000000000000000000000000000000000000005", @@ -844,8 +844,8 @@ "input_state": { "Exist": [ [ - 3, - "FTk3uefficRMCaXJsQ5rFG9KNfJk4jrq5z1pn2ekHhG1" + 2, + "6eqTP643g1AG4mfQmLTbPQUYtDRejTFHhY9UmUyB7kd1" ], { "Shared": { @@ -856,7 +856,7 @@ }, "output_state": { "ObjectWrite": [ - "AtwD4qLHVejaPeFHhvi4LXrqzLE42JXg4JeFrP9p8xQj", + "5u1FEdHb4shFkhfNdKvHnF83sD5ZJLwQA3Doh7AnQuJR", { "Shared": { "initial_shared_version": 1 @@ -868,14 +868,14 @@ } ], [ - "0x228fd64cc34bce9703ab9c065757de80230e077a24ee530719e2ab5e182a5285", + "0x0070a376d6769a07305be360bb6d365c5099ac85633ce7e932e182d72cab6a7e", { "input_state": "NotExist", "output_state": { "ObjectWrite": [ - "C4ZagH2ZXEKudq2rNPENMZzpSzeYKvaMaQj7wcPKpjaq", + "9mTnhZv2XXhhfz9eiEVDZ1sXGUdhkvDzhSMuKcNQCeHf", { - "AddressOwner": "0xc7035483b90ae369f3ce48c3971bf58c19417997746c67320c35d154a6425ab7" + "AddressOwner": "0x5940b64eb29720ea0c35d49ee3d599b3477879d68b7e652904b236edd6ead88a" } ] }, @@ -883,14 +883,14 @@ } ], [ - "0x2d4fdbf664df716f49e8986c6445ad598c96b983f82bed3a37462b219b9e575f", + "0x1944fe5703109f3a3906477762d0b167af901582b00c9ae422044cf245250c46", { "input_state": "NotExist", "output_state": { "ObjectWrite": [ - "H5GAmbyesbwsxbMVDNTpUfQP2q44TB2ZFaGRcHCjqpUp", + "E25h5igtJtMTvxy5CZcwoNXKEQozxNUTGBcW6Mo7FV4B", { - "ObjectOwner": "0x7b94ac5bbd010c6a775455e3df1b6c9a8d24a9f6c2a9c20255b872b812fdbf87" + "AddressOwner": "0x0ff37e13505ed907d908cf37919a29117a0ab7669311f26e154dffbe492e8a5d" } ] }, @@ -898,14 +898,14 @@ } ], [ - "0x3e2565c8c1c67806479a9104630757720e1f84e1fb32ae7aa858e9f47dbee7da", + "0x442cd8095c28811a5e1d47893ce386eb27cb239bc291bb70bdd942d8cc1de60d", { "input_state": "NotExist", "output_state": { "ObjectWrite": [ - "8Fso3Xpi58J9L45Cr3J8NtfxG56KJ7X5ZLthQuf9oFcK", + "HmDnSmy16z158ZxmsHq5PQxHfSVZ32dF9HH9uSLG7Vya", { - "ObjectOwner": "0xc2c9ddd800c90e8a9f7f02f35379fdebe07532f71e953937fcd04fa84c7a24c0" + "ObjectOwner": "0x5e76bfe85bb87207b617ee6d9b8e5dddb2ab4ee399629f18a5c90d246425692e" } ] }, @@ -913,14 +913,14 @@ } ], [ - "0x56288acf67d53b7dc2d75798e7212c4ea76c2d470822da30a32b8cbae2ff8276", + "0x4f3d4791476c9c4b0d446523545db5d7c9f2d85c8ef6e28f34a94862652a6646", { "input_state": "NotExist", "output_state": { "ObjectWrite": [ - "4qynmiRn3xtLn6qpQBwezRHBHWa8n5CSsisjHBmQ4diK", + "6NWSorVT4dVCkUxPNj4cf9c4aRCJrgTsfvpyCDjoXRLh", { - "AddressOwner": "0x98346c29a0a99b9d0a80c9ede37a77c7fd93ead295fdb01b895ef1392c5087b5" + "AddressOwner": "0x08c27e08962112dddbc4d4fb5dc0159fd37594094a8d99825e6085b336490f4a" } ] }, @@ -933,8 +933,8 @@ "input_state": { "Exist": [ [ - 3, - "9pHbG4dGV5ZcqW5xXDifYyRbmcJ1UhgXBXDssNTGU5UE" + 2, + "Dz4qzGAScypSZPZ4ZLthGcrmnpQz2zzNuYQNAdKBDgcz" ], { "ObjectOwner": "0x0000000000000000000000000000000000000000000000000000000000000005" @@ -943,7 +943,7 @@ }, "output_state": { "ObjectWrite": [ - "2imNmGQQ91Pi4xfVvzJPEWfCnMwtoNDvXGQogUYBH7U2", + "BAhqeCeYr17aQKD1MpaGuHAgXxnLmP5mwZgyPYdrXSt2", { "ObjectOwner": "0x0000000000000000000000000000000000000000000000000000000000000005" } @@ -953,14 +953,14 @@ } ], [ - "0x89f2e6295f5f72668d7a6277002c2b3e06432100137163b7dbf0e9a2fef48e27", + "0x7194b92e28148639108ccbe71d7cd16e5c68fc071c5dbdce542e634469638de1", { "input_state": "NotExist", "output_state": { "ObjectWrite": [ - "7MKfZeY4tuZr5L7wRju57EAvK9rXyTeVCpnEgarqSVm1", + "5NYafPoxnHbpp5xwibdvKFCF7rWLDeXaXb2reZWpZBvg", { - "ObjectOwner": "0xa4c38f903d9744ca22430baeded1bc37c0ed3d75ce55683e69bd3d1fc40b6730" + "ObjectOwner": "0x39e10c0206c65f3422f505e4b3bcf750d39409405e685e457f4f931af8a0f1bb" } ] }, @@ -968,14 +968,14 @@ } ], [ - "0xa01889812ec4f96f22525724e67f03b6b38776564a4cf22d7d6470f4388746c6", + "0x88149f433c89e0baa0403b70f2bc84ebe9452bbfdc7c6b3bfc715a87f16c9239", { "input_state": "NotExist", "output_state": { "ObjectWrite": [ - "9m7Z3SqT2ZkSCVenEXSCVqx9Y9YGmvZfoYw5fUaFsRDY", + "ExvdZAG3KrJsqPBy22UMieEezzNSDntLX2PLbxvG88qh", { - "AddressOwner": "0x48d90f650bf4d87ad129ec47392ec38a8c6c0bb5ea4b6dab610e3a841431ab99" + "AddressOwner": "0xaed89eac64cc1efe9fc3e93d9058add5f49cc64b0ce8dab136b679c7b9f3b689" } ] }, @@ -983,14 +983,14 @@ } ], [ - "0xe9a964b1b1723371ec453f21598f118456e5c939ddcc690afb624b302b6aae1d", + "0x9f4b2273f23d190df6d92e0b2d4f5caa834fded19837d2a0c386bf76b6279ba0", { "input_state": "NotExist", "output_state": { "ObjectWrite": [ - "5XMs3ivfZB1EyYAULSh2gHbXCgGDjoGtfLKv5LBrpSEY", + "JzkRLpDYvfeAwNye11nhsnbzRHhXh6tZVrafCXkhMYD", { - "AddressOwner": "0x3282178ff167d02a033e89d1280a1ec25f9dd069a0f1400c244192f1f75cbabc" + "ObjectOwner": "0xa4514f63b362d130f8d8549edc1ce7932c0722e1260dfc0d5115e1b620158701" } ] }, @@ -998,14 +998,14 @@ } ], [ - "0xf7511e85963352008dc8824dfd04ecc0b0e4e5c51ba04529bfb88fc5a2355dff", + "0xbf85fe4977f21053e5c27bedcc7b5e05c4a502757385db675a83fbb57600433a", { "input_state": "NotExist", "output_state": { "ObjectWrite": [ - "B36V95Pu7Eq8WQhw5dpCeWiEMXNzQeDh84wDnox4UMXS", + "6mMbebaGQkYQEC7YesCbd2qUgzwXAd7TrsNJZy1EZZiV", { - "ObjectOwner": "0x3f6b931f79fd0b2a14ed76a5b23714344c421f99a2ccd1978ef2270e167614cc" + "ObjectOwner": "0xbecc6872d3acd4009c30abd519c3be7ed7eb50f8decb7510863a40eefc41922b" } ] }, @@ -1030,102 +1030,102 @@ "type_args": [] }, "contents": [ - 232, - 14, - 72, - 38, - 40, - 13, + 210, + 7, + 175, 121, - 140, - 248, - 193, - 87, - 156, - 150, - 228, - 154, - 136, - 166, - 92, - 15, - 240, - 225, - 156, - 124, - 227, - 251, - 244, - 22, - 171, - 191, - 166, - 19, + 62, + 202, + 57, + 178, + 71, + 217, + 66, + 234, + 143, + 76, + 127, + 97, + 57, + 85, + 68, + 60, + 84, + 148, + 47, + 76, + 83, + 76, + 253, + 91, + 64, + 161, + 158, + 165, 174, + 216, + 158, + 172, + 100, + 204, + 30, + 254, + 159, + 195, + 233, + 61, + 144, + 88, + 173, + 213, + 244, + 156, + 198, + 75, + 12, + 232, + 218, + 177, + 54, + 182, + 121, 199, - 3, - 84, - 131, 185, - 10, - 227, - 105, 243, - 206, - 72, + 182, + 137, + 174, + 216, + 158, + 172, + 100, + 204, + 30, + 254, + 159, 195, - 151, - 27, - 245, - 140, - 25, - 65, - 121, - 151, - 116, - 108, - 103, - 50, + 233, + 61, + 144, + 88, + 173, + 213, + 244, + 156, + 198, + 75, 12, - 53, - 209, - 84, - 166, - 66, - 90, - 183, + 232, + 218, + 177, + 54, + 182, + 121, 199, - 3, - 84, - 131, 185, - 10, - 227, - 105, 243, - 206, - 72, - 195, - 151, - 27, - 245, - 140, - 25, - 65, - 121, - 151, - 116, - 108, - 103, - 50, - 12, - 53, - 209, - 84, - 166, - 66, - 90, - 183, + 182, + 137, 1, 0, 0, @@ -1155,102 +1155,102 @@ "type_args": [] }, "contents": [ - 251, - 91, - 71, + 203, + 80, + 5, + 66, + 182, + 197, + 54, + 201, + 219, 93, - 58, - 113, - 7, - 34, - 32, - 73, - 58, - 239, - 215, - 234, - 130, - 32, - 211, + 163, 15, - 101, - 233, - 95, - 183, - 248, - 96, - 141, - 116, - 3, - 192, - 80, - 95, - 180, - 167, - 152, - 52, - 108, - 41, - 160, - 169, - 155, - 157, + 25, + 198, + 242, + 133, 10, + 23, + 218, + 216, + 177, + 129, + 50, + 43, + 101, + 250, 128, - 201, - 237, - 227, - 122, - 119, - 199, - 253, 147, - 234, - 210, - 149, - 253, - 176, - 27, - 137, - 94, - 241, 57, - 44, - 80, - 135, - 181, - 152, - 52, - 108, + 45, + 43, 41, - 160, - 169, - 155, - 157, - 10, - 128, - 201, - 237, - 227, - 122, - 119, - 199, - 253, - 147, - 234, - 210, - 149, - 253, - 176, - 27, - 137, + 8, + 194, + 126, + 8, + 150, + 33, + 18, + 221, + 219, + 196, + 212, + 251, + 93, + 192, + 21, + 159, + 211, + 117, + 148, + 9, + 74, + 141, + 153, + 130, 94, - 241, - 57, - 44, - 80, - 135, - 181, + 96, + 133, + 179, + 54, + 73, + 15, + 74, + 8, + 194, + 126, + 8, + 150, + 33, + 18, + 221, + 219, + 196, + 212, + 251, + 93, + 192, + 21, + 159, + 211, + 117, + 148, + 9, + 74, + 141, + 153, + 130, + 94, + 96, + 133, + 179, + 54, + 73, + 15, + 74, 1, 0, 0, @@ -1280,102 +1280,102 @@ "type_args": [] }, "contents": [ - 87, - 237, + 61, + 204, + 132, + 220, + 80, + 55, + 5, + 242, + 131, + 99, + 205, + 122, + 85, 32, - 86, - 222, + 214, + 232, + 30, + 96, + 9, + 153, + 102, + 138, + 88, + 227, + 89, + 211, + 37, + 226, + 170, + 230, + 165, + 66, + 89, + 64, + 182, + 78, + 178, + 151, 32, - 49, - 210, + 234, + 12, 53, - 230, - 10, - 194, - 125, - 91, - 46, - 170, - 128, - 158, - 85, + 212, 158, - 11, - 173, - 248, - 152, - 226, - 64, - 231, - 208, - 252, - 170, - 26, - 8, - 72, - 217, - 15, + 227, + 213, + 153, + 179, + 71, + 120, + 121, + 214, + 139, + 126, 101, - 11, - 244, - 216, - 122, - 209, 41, - 236, - 71, - 57, - 46, - 195, + 4, + 178, + 54, + 237, + 214, + 234, + 216, 138, - 140, - 108, - 11, - 181, + 89, + 64, + 182, + 78, + 178, + 151, + 32, 234, - 75, - 109, - 171, - 97, - 14, - 58, - 132, - 20, - 49, - 171, + 12, + 53, + 212, + 158, + 227, + 213, 153, - 72, - 217, - 15, + 179, + 71, + 120, + 121, + 214, + 139, + 126, 101, - 11, - 244, - 216, - 122, - 209, 41, - 236, - 71, - 57, - 46, - 195, - 138, - 140, - 108, - 11, - 181, + 4, + 178, + 54, + 237, + 214, 234, - 75, - 109, - 171, - 97, - 14, - 58, - 132, - 20, - 49, - 171, - 153, + 216, + 138, 1, 0, 0, @@ -1405,102 +1405,102 @@ "type_args": [] }, "contents": [ - 12, - 179, - 128, - 203, - 50, - 90, - 131, - 15, - 3, - 238, - 75, - 218, - 121, + 29, + 249, + 67, + 164, + 123, + 138, + 6, 11, - 5, - 225, - 117, - 83, - 128, - 22, - 245, - 212, - 124, - 179, - 82, - 201, - 60, - 198, - 218, - 220, - 19, - 4, - 50, + 45, + 207, + 2, + 237, + 185, + 30, + 13, 130, - 23, - 143, - 241, - 103, - 208, - 42, - 3, - 62, - 137, - 209, - 40, - 10, - 30, - 194, - 95, - 157, - 208, - 105, - 160, - 241, + 229, + 33, 64, - 12, - 36, - 65, - 146, - 241, + 4, + 156, + 170, 247, - 92, - 186, - 188, - 50, - 130, - 23, - 143, - 241, - 103, 208, - 42, - 3, - 62, - 137, - 209, - 40, - 10, - 30, - 194, - 95, - 157, + 168, + 153, + 67, + 98, + 48, + 135, 208, - 105, - 160, - 241, - 64, - 12, - 36, - 65, - 146, - 241, - 247, - 92, - 186, - 188, + 185, + 15, + 243, + 126, + 19, + 80, + 94, + 217, + 7, + 217, + 8, + 207, + 55, + 145, + 154, + 41, + 17, + 122, + 10, + 183, + 102, + 147, + 17, + 242, + 110, + 21, + 77, + 255, + 190, + 73, + 46, + 138, + 93, + 15, + 243, + 126, + 19, + 80, + 94, + 217, + 7, + 217, + 8, + 207, + 55, + 145, + 154, + 41, + 17, + 122, + 10, + 183, + 102, + 147, + 17, + 242, + 110, + 21, + 77, + 255, + 190, + 73, + 46, + 138, + 93, 1, 0, 0, @@ -1538,38 +1538,38 @@ 0, 0, 0, + 174, + 216, + 158, + 172, + 100, + 204, + 30, + 254, + 159, + 195, + 233, + 61, + 144, + 88, + 173, + 213, + 244, + 156, + 198, + 75, + 12, + 232, + 218, + 177, + 54, + 182, + 121, 199, - 3, - 84, - 131, 185, - 10, - 227, - 105, 243, - 206, - 72, - 195, - 151, - 27, - 245, - 140, - 25, - 65, - 121, - 151, - 116, - 108, - 103, - 50, - 12, - 53, - 209, - 84, - 166, - 66, - 90, - 183, + 182, + 137, 232, 3, 0, @@ -1656,38 +1656,38 @@ 0, 0, 0, - 152, - 52, - 108, - 41, - 160, - 169, - 155, - 157, - 10, - 128, - 201, - 237, - 227, - 122, - 119, - 199, - 253, - 147, - 234, - 210, - 149, - 253, - 176, - 27, - 137, + 8, + 194, + 126, + 8, + 150, + 33, + 18, + 221, + 219, + 196, + 212, + 251, + 93, + 192, + 21, + 159, + 211, + 117, + 148, + 9, + 74, + 141, + 153, + 130, 94, - 241, - 57, - 44, - 80, - 135, - 181, + 96, + 133, + 179, + 54, + 73, + 15, + 74, 232, 3, 0, @@ -1774,38 +1774,38 @@ 0, 0, 0, - 72, - 217, - 15, + 89, + 64, + 182, + 78, + 178, + 151, + 32, + 234, + 12, + 53, + 212, + 158, + 227, + 213, + 153, + 179, + 71, + 120, + 121, + 214, + 139, + 126, 101, - 11, - 244, - 216, - 122, - 209, 41, - 236, - 71, - 57, - 46, - 195, - 138, - 140, - 108, - 11, - 181, + 4, + 178, + 54, + 237, + 214, 234, - 75, - 109, - 171, - 97, - 14, - 58, - 132, - 20, - 49, - 171, - 153, + 216, + 138, 232, 3, 0, @@ -1892,38 +1892,38 @@ 0, 0, 0, - 50, - 130, - 23, - 143, - 241, - 103, - 208, - 42, - 3, - 62, - 137, - 209, - 40, + 15, + 243, + 126, + 19, + 80, + 94, + 217, + 7, + 217, + 8, + 207, + 55, + 145, + 154, + 41, + 17, + 122, 10, - 30, - 194, - 95, - 157, - 208, - 105, - 160, - 241, - 64, - 12, - 36, - 65, - 146, - 241, - 247, - 92, - 186, - 188, + 183, + 102, + 147, + 17, + 242, + 110, + 21, + 77, + 255, + 190, + 73, + 46, + 138, + 93, 232, 3, 0, @@ -2034,33 +2034,33 @@ 196, 26, 0, - 192, - 18, - 238, - 2, 0, 0, 0, 0, - 96, - 19, - 15, 0, 0, 0, 0, 0, - 96, - 255, - 222, - 2, 0, 0, 0, 0, - 128, - 132, - 30, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, 0, 0, 0, @@ -2082,9 +2082,9 @@ 0, 0, 0, - 128, - 107, - 108, + 0, + 240, + 138, 26, 149, 185, @@ -2107,7 +2107,7 @@ } }, "has_public_transfer": false, - "version": 3, + "version": 2, "contents": [ 0, 0, @@ -2157,8 +2157,8 @@ "initial_shared_version": 1 } }, - "previous_transaction": "CMc4L2hi22SFYwap6sHkdxoKaZp9h1q7hGfbXwyTkwsM", - "storage_rebate": 1451600 + "previous_transaction": "7MqVp96jyVqYUyhcwMuBY9ZY2ANAyhuLGJXTi5Uh459M", + "storage_rebate": 0 }, { "data": { @@ -2182,7 +2182,7 @@ } }, "has_public_transfer": false, - "version": 3, + "version": 2, "contents": [ 91, 137, @@ -2248,38 +2248,38 @@ 0, 0, 0, - 79, - 119, - 144, - 163, - 247, - 191, - 45, - 221, - 234, + 235, + 80, + 81, + 188, + 82, + 54, + 128, + 152, + 95, + 131, + 193, + 49, + 226, + 212, + 212, + 46, 6, - 103, - 112, + 207, + 172, + 155, + 77, + 248, + 124, 156, - 173, - 41, - 65, - 7, - 198, - 139, + 93, + 124, + 109, + 206, + 232, + 47, 39, - 85, - 185, - 144, - 234, - 233, - 27, - 255, - 32, - 224, - 150, - 115, - 205, + 137, 0, 240, 105, @@ -2297,38 +2297,38 @@ 24, 0, 4, + 174, + 216, + 158, + 172, + 100, + 204, + 30, + 254, + 159, + 195, + 233, + 61, + 144, + 88, + 173, + 213, + 244, + 156, + 198, + 75, + 12, + 232, + 218, + 177, + 54, + 182, + 121, 199, - 3, - 84, - 131, 185, - 10, - 227, - 105, 243, - 206, - 72, - 195, - 151, - 27, - 245, - 140, - 25, - 65, - 121, - 151, - 116, - 108, - 103, - 50, - 12, - 53, - 209, - 84, - 166, - 66, - 90, - 183, + 182, + 137, 96, 141, 207, @@ -2427,120 +2427,120 @@ 56, 212, 32, - 54, + 109, + 235, + 35, + 7, + 201, + 239, + 185, + 254, + 209, + 111, + 122, + 55, + 135, + 92, + 135, + 145, + 234, + 34, + 205, + 172, + 200, + 167, + 206, + 76, + 83, + 189, + 105, + 186, + 194, + 69, + 97, + 182, + 32, + 233, 229, - 149, - 160, - 153, - 0, - 149, - 41, + 74, + 177, + 163, + 194, + 251, + 42, 2, - 12, - 159, - 11, + 77, + 108, + 140, + 235, + 238, + 171, + 17, + 178, + 173, + 55, + 71, + 146, + 50, + 124, + 82, + 10, + 10, + 129, + 151, + 215, + 205, + 212, 237, - 183, - 232, - 172, - 239, - 21, - 94, - 208, - 184, - 219, - 158, - 170, + 48, + 133, + 10, + 155, + 203, + 47, + 247, + 198, + 115, 43, - 150, - 93, - 242, - 32, 222, - 246, - 207, - 32, - 245, - 64, - 76, - 18, - 227, - 129, - 141, - 164, - 251, - 225, - 193, + 83, + 188, + 159, + 173, + 91, + 96, 225, - 255, - 222, - 40, - 239, - 108, - 248, - 77, - 176, - 165, + 142, + 9, + 106, 136, - 148, - 156, - 113, - 25, - 160, + 182, + 107, + 125, + 168, + 83, + 123, + 49, + 185, + 228, + 0, + 172, 250, - 14, - 98, - 198, - 178, - 48, - 148, - 81, - 45, - 99, - 42, - 80, - 47, - 61, - 69, - 193, - 153, - 23, - 69, - 77, - 65, - 148, - 12, - 218, - 166, - 136, - 89, - 61, - 102, - 137, - 39, - 225, + 235, 90, - 67, - 159, - 177, - 77, - 46, - 144, - 186, - 192, - 151, - 223, - 1, - 151, - 220, - 117, 33, - 235, + 169, + 255, + 193, + 15, + 174, + 111, + 249, + 22, + 108, + 133, 142, - 101, - 76, - 246, - 207, + 171, 11, 118, 97, @@ -2577,10 +2577,10 @@ 112, 47, 53, + 53, 50, - 49, - 48, - 49, + 55, + 55, 47, 104, 116, @@ -2607,34 +2607,9 @@ 112, 47, 53, - 50, - 49, - 48, - 51, - 24, - 47, - 105, - 112, - 52, - 47, - 49, - 50, - 55, - 46, - 48, - 46, - 48, - 46, - 49, - 47, - 117, - 100, - 112, - 47, 53, 50, - 49, - 48, + 55, 57, 24, 47, @@ -2657,11 +2632,10 @@ 112, 47, 53, + 53, 50, - 49, - 49, - 49, - 0, + 56, + 53, 0, 0, 0, @@ -2669,38 +2643,38 @@ 0, 0, 0, - 158, - 21, - 4, - 132, - 147, + 203, + 238, + 102, + 51, + 150, + 252, + 160, + 66, + 122, + 198, + 160, + 124, + 201, 197, - 55, + 225, + 25, 157, - 104, - 199, - 11, - 82, + 66, + 182, 210, - 44, - 230, - 232, - 51, - 81, - 13, - 89, - 112, - 234, - 251, - 255, - 56, - 23, - 190, - 253, - 67, - 99, - 84, - 234, + 4, + 225, + 203, + 214, + 0, + 223, + 240, + 182, + 73, + 222, + 163, + 201, 0, 0, 0, @@ -2717,38 +2691,38 @@ 0, 0, 0, - 58, - 173, - 132, - 75, - 224, - 93, - 90, - 60, - 253, - 176, - 39, - 11, - 172, - 153, - 12, - 113, - 237, - 20, - 103, - 149, - 114, + 97, + 221, + 158, + 52, + 171, + 9, + 5, + 134, + 63, + 50, + 83, + 248, + 184, 8, - 32, + 206, + 72, + 100, + 138, + 246, + 112, 12, - 59, - 244, + 199, + 158, + 228, + 46, 40, - 38, - 44, - 61, - 175, - 1, + 45, + 224, + 144, + 243, + 160, + 141, 232, 3, 0, @@ -2757,42 +2731,42 @@ 0, 0, 0, - 232, - 14, - 72, - 38, - 40, - 13, + 210, + 7, + 175, 121, - 140, - 248, - 193, - 87, - 156, - 150, - 228, - 154, - 136, - 166, - 92, - 15, - 240, - 225, - 156, - 124, - 227, - 251, - 244, - 22, - 171, - 191, - 166, - 19, - 174, - 1, - 0, - 0, - 0, + 62, + 202, + 57, + 178, + 71, + 217, + 66, + 234, + 143, + 76, + 127, + 97, + 57, + 85, + 68, + 60, + 84, + 148, + 47, + 76, + 83, + 76, + 253, + 91, + 64, + 161, + 158, + 165, + 1, + 0, + 0, + 0, 0, 0, 0, @@ -2823,38 +2797,38 @@ 87, 5, 0, - 194, - 201, - 221, - 216, - 0, - 201, - 14, - 138, - 159, - 127, + 57, + 225, + 12, 2, - 243, - 83, - 121, - 253, - 235, - 224, - 117, - 50, + 6, + 198, + 95, + 52, + 34, + 245, + 5, + 228, + 179, + 188, 247, - 30, - 149, - 57, - 55, - 252, - 208, + 80, + 211, + 148, + 9, + 64, + 94, + 104, + 94, + 69, + 127, 79, - 168, - 76, - 122, - 36, - 192, + 147, + 26, + 248, + 160, + 241, + 187, 2, 0, 0, @@ -2887,38 +2861,38 @@ 0, 0, 0, - 28, - 3, - 133, - 57, - 100, - 73, - 32, - 113, - 183, - 112, - 201, - 166, - 191, - 35, - 47, - 34, - 32, - 159, - 48, - 137, - 3, + 186, 222, - 105, - 110, 220, - 204, - 41, + 101, 226, - 63, - 78, - 18, + 201, + 82, + 157, + 46, + 57, + 10, + 148, + 31, + 76, + 176, + 102, + 174, + 80, + 162, + 243, + 250, + 248, + 0, + 8, + 138, + 168, + 116, + 228, 254, + 14, + 76, + 200, 0, 0, 0, @@ -2959,38 +2933,38 @@ 0, 0, 0, - 215, - 233, - 197, - 73, - 0, - 103, - 112, - 32, - 41, - 241, - 60, - 231, - 183, - 150, - 128, - 181, - 240, - 93, - 160, - 34, - 202, - 137, - 79, + 169, + 116, + 83, + 179, + 30, + 83, + 164, + 114, + 56, + 178, + 138, + 6, + 113, + 37, + 192, + 68, + 224, + 109, + 126, + 222, + 16, + 239, + 255, + 106, 180, - 142, - 204, - 252, - 45, - 63, - 115, - 54, - 18, + 38, + 47, + 81, + 34, + 62, + 5, + 39, 0, 0, 0, @@ -2999,44 +2973,44 @@ 0, 0, 0, - 152, - 52, - 108, - 41, - 160, - 169, - 155, - 157, - 10, - 128, - 201, - 237, - 227, - 122, - 119, - 199, - 253, - 147, - 234, - 210, - 149, - 253, - 176, - 27, - 137, - 94, - 241, - 57, - 44, - 80, - 135, - 181, - 96, - 153, - 242, - 94, - 246, - 31, + 8, + 194, + 126, + 8, + 150, + 33, + 18, + 221, + 219, + 196, + 212, + 251, + 93, + 192, + 21, + 159, + 211, + 117, + 148, + 9, + 74, + 141, + 153, + 130, + 94, + 96, + 133, + 179, + 54, + 73, + 15, + 74, + 96, + 153, + 242, + 94, + 246, + 31, 128, 50, 185, @@ -3129,120 +3103,120 @@ 26, 16, 32, - 203, - 102, - 81, - 231, - 227, - 62, - 133, - 128, - 82, - 172, - 128, + 83, + 177, + 140, + 254, + 247, + 77, + 131, + 149, + 28, 160, - 66, - 220, - 100, - 44, - 76, - 81, - 90, + 125, + 7, + 72, + 46, + 230, + 145, + 93, 157, - 141, - 9, - 51, - 103, - 152, - 49, - 100, - 219, - 11, - 122, - 111, + 220, + 116, + 168, + 106, + 190, + 63, + 4, + 6, + 57, + 205, + 36, 172, + 145, + 144, 32, - 207, - 136, - 11, - 207, - 233, - 27, - 111, - 229, - 25, - 40, - 88, - 39, - 71, - 22, - 200, - 16, - 132, + 26, + 30, + 17, + 236, + 148, + 90, 203, - 110, - 41, - 43, - 82, - 213, - 213, - 214, - 217, - 106, + 178, + 12, + 50, + 117, + 142, + 162, + 38, + 177, + 144, + 254, + 153, + 185, + 52, + 160, + 238, + 93, + 9, + 64, + 89, + 162, + 62, + 206, + 202, + 232, + 49, 48, + 174, + 9, + 63, + 228, + 159, + 110, + 193, + 170, + 116, + 63, + 210, + 118, + 97, + 229, + 201, + 73, + 155, 242, - 227, - 234, - 136, - 48, - 132, - 51, - 104, + 213, 180, - 35, - 134, - 184, - 250, - 233, - 184, - 252, - 132, - 203, - 143, - 130, - 190, - 89, - 79, - 35, - 164, - 172, - 124, - 161, + 22, 131, - 231, - 233, - 47, - 142, - 173, - 185, - 209, - 100, - 170, - 167, - 145, + 235, + 219, + 135, + 158, + 228, + 18, + 28, + 253, + 221, + 123, + 126, + 245, + 62, + 146, + 114, + 230, + 99, + 84, + 13, + 146, 170, - 117, - 169, - 65, - 129, - 197, - 80, - 165, - 227, - 124, - 52, - 71, - 172, + 151, + 221, + 189, + 51, + 252, 11, 118, 97, @@ -3279,9 +3253,9 @@ 112, 47, 53, + 53, 50, - 48, - 56, + 54, 55, 47, 104, @@ -3309,9 +3283,9 @@ 112, 47, 53, + 53, 50, - 48, - 56, + 54, 57, 24, 47, @@ -3334,36 +3308,10 @@ 112, 47, 53, - 50, - 48, - 57, 53, - 24, - 47, - 105, - 112, - 52, - 47, - 49, 50, 55, - 46, - 48, - 46, - 48, - 46, - 49, - 47, - 117, - 100, - 112, - 47, 53, - 50, - 48, - 57, - 55, - 0, 0, 0, 0, @@ -3371,38 +3319,38 @@ 0, 0, 0, - 111, - 108, - 251, - 55, - 106, - 70, - 0, - 83, - 166, - 65, - 77, - 255, - 24, - 35, + 97, + 202, + 254, + 158, 226, - 124, - 182, - 112, + 147, + 233, + 52, + 217, + 232, + 234, + 168, + 221, + 170, + 20, 225, - 195, - 108, - 2, + 139, + 81, + 115, + 8, + 242, + 35, 145, - 10, - 215, - 79, - 160, - 179, - 110, - 91, - 27, - 7, + 171, + 245, + 145, + 96, + 32, + 85, + 175, + 251, + 63, 0, 0, 0, @@ -3419,38 +3367,38 @@ 0, 0, 0, - 182, - 37, - 132, - 69, - 191, - 87, - 35, - 192, - 23, - 153, - 64, - 68, - 151, - 249, + 111, 39, - 198, - 66, - 80, - 154, - 234, - 83, - 180, - 249, + 18, + 222, + 47, + 141, + 116, + 93, + 65, + 120, + 49, + 246, + 53, + 240, + 104, + 24, + 8, + 131, + 2, + 130, + 36, + 94, + 229, + 173, + 144, + 149, + 191, + 25, 23, - 44, - 27, - 124, - 233, - 248, - 200, - 162, - 175, + 108, + 111, + 204, 232, 3, 0, @@ -3459,38 +3407,38 @@ 0, 0, 0, - 251, - 91, - 71, + 203, + 80, + 5, + 66, + 182, + 197, + 54, + 201, + 219, 93, - 58, - 113, - 7, - 34, - 32, - 73, - 58, - 239, - 215, - 234, - 130, - 32, - 211, + 163, 15, + 25, + 198, + 242, + 133, + 10, + 23, + 218, + 216, + 177, + 129, + 50, + 43, 101, - 233, - 95, - 183, - 248, - 96, - 141, - 116, - 3, - 192, - 80, - 95, - 180, - 167, + 250, + 128, + 147, + 57, + 45, + 43, + 41, 1, 0, 0, @@ -3525,38 +3473,38 @@ 87, 5, 0, - 164, - 195, - 143, - 144, - 61, - 151, - 68, - 202, - 34, - 67, - 11, - 174, - 222, - 209, - 188, - 55, - 192, - 237, - 61, - 117, - 206, - 85, - 104, - 62, + 94, + 118, + 191, + 232, + 91, + 184, + 114, + 7, + 182, + 23, + 238, + 109, + 155, + 142, + 93, + 221, + 178, + 171, + 78, + 227, + 153, + 98, + 159, + 24, + 165, + 201, + 13, + 36, + 100, + 37, 105, - 189, - 61, - 31, - 196, - 11, - 103, - 48, + 46, 2, 0, 0, @@ -3589,38 +3537,38 @@ 0, 0, 0, - 86, - 11, - 133, - 42, - 34, - 128, - 46, - 144, - 245, - 237, - 103, - 194, - 141, - 145, - 70, - 227, - 187, - 103, - 72, - 225, - 126, - 12, 195, - 94, - 216, - 109, - 11, - 185, - 136, - 231, - 209, - 101, + 26, + 157, + 156, + 152, + 230, + 112, + 55, + 198, + 28, + 12, + 166, + 13, + 115, + 175, + 228, + 246, + 114, + 142, + 96, + 159, + 229, + 38, + 233, + 9, + 23, + 150, + 105, + 71, + 114, + 223, + 227, 0, 0, 0, @@ -3661,38 +3609,38 @@ 0, 0, 0, - 48, - 196, - 28, - 202, - 166, - 13, - 73, - 199, - 135, - 166, - 25, + 247, + 53, + 237, + 130, 93, - 219, - 125, - 63, - 116, - 202, - 177, + 12, 217, - 91, - 147, - 64, - 31, - 161, - 218, - 162, - 170, - 69, - 161, - 76, - 100, - 232, + 118, + 223, + 124, + 29, + 29, + 216, + 27, + 171, + 113, + 211, + 82, + 134, + 121, + 213, + 9, + 54, + 221, + 188, + 217, + 96, + 247, + 18, + 146, + 243, + 57, 0, 0, 0, @@ -3701,38 +3649,38 @@ 0, 0, 0, - 72, - 217, - 15, + 89, + 64, + 182, + 78, + 178, + 151, + 32, + 234, + 12, + 53, + 212, + 158, + 227, + 213, + 153, + 179, + 71, + 120, + 121, + 214, + 139, + 126, 101, - 11, - 244, - 216, - 122, - 209, 41, - 236, - 71, - 57, - 46, - 195, - 138, - 140, - 108, - 11, - 181, + 4, + 178, + 54, + 237, + 214, 234, - 75, - 109, - 171, - 97, - 14, - 58, - 132, - 20, - 49, - 171, - 153, + 216, + 138, 96, 173, 222, @@ -3831,120 +3779,120 @@ 88, 242, 32, - 157, - 111, - 65, + 101, + 41, 91, - 154, - 116, - 26, + 166, + 21, + 8, + 15, + 183, + 171, + 43, + 105, + 62, + 143, + 42, + 220, + 160, + 18, + 204, + 18, + 177, + 143, + 95, + 250, + 143, + 90, + 251, + 80, + 79, + 19, + 151, + 254, + 253, 32, + 250, + 209, + 183, + 196, + 197, + 121, + 33, + 21, + 211, + 65, + 227, + 216, + 234, + 249, + 192, + 236, + 194, + 255, + 190, 81, + 208, + 224, + 251, 165, - 157, - 125, - 130, - 182, - 69, - 127, - 200, - 123, - 212, - 219, - 165, - 4, - 238, - 15, + 53, + 30, + 220, + 75, + 192, + 117, 68, - 169, - 73, - 115, - 59, - 197, - 138, - 254, - 32, - 72, - 185, - 38, - 230, - 150, - 233, - 38, - 148, - 165, - 17, - 3, - 58, - 186, - 78, - 49, - 172, - 39, - 198, - 43, - 231, - 128, - 216, - 233, - 5, - 174, - 222, - 133, - 66, - 72, - 216, - 253, - 39, + 159, 48, - 179, - 18, + 131, + 47, + 168, + 134, + 246, + 248, 62, - 181, + 162, + 31, + 28, + 191, + 186, + 169, + 214, 29, - 193, - 154, - 105, - 231, - 94, + 44, + 57, + 33, + 25, + 25, + 44, + 176, + 119, + 148, + 150, + 83, + 118, + 177, + 138, + 121, + 73, + 214, + 93, + 173, + 153, + 142, 0, - 253, - 147, - 164, - 152, - 191, - 209, - 90, - 200, - 210, - 59, - 88, - 101, - 171, - 112, - 145, - 55, - 221, - 230, - 140, - 56, - 240, - 86, - 84, - 193, - 49, + 13, + 99, + 3, + 2, 6, - 45, - 237, - 198, - 215, - 147, - 111, - 94, - 143, - 129, - 109, - 183, + 80, + 65, + 227, + 213, + 201, + 148, 11, 118, 97, @@ -3981,10 +3929,10 @@ 112, 47, 53, - 50, - 49, - 49, 53, + 50, + 56, + 55, 47, 104, 116, @@ -4011,35 +3959,10 @@ 112, 47, 53, - 50, - 49, - 49, - 55, - 24, - 47, - 105, - 112, - 52, - 47, - 49, - 50, - 55, - 46, - 48, - 46, - 48, - 46, - 49, - 47, - 117, - 100, - 112, - 47, 53, 50, - 49, - 50, - 51, + 56, + 57, 24, 47, 105, @@ -4061,9 +3984,9 @@ 112, 47, 53, + 53, 50, - 49, - 50, + 57, 53, 0, 0, @@ -4072,39 +3995,38 @@ 0, 0, 0, - 0, - 245, - 129, - 174, + 93, 94, - 253, - 236, - 254, - 169, - 210, - 13, - 151, - 145, - 128, - 169, - 56, - 66, - 49, - 90, - 127, - 254, - 26, - 181, - 229, - 54, - 109, - 20, - 56, - 103, - 14, - 16, + 172, + 116, + 57, + 179, + 239, 207, - 50, + 144, + 27, + 132, + 104, + 105, + 24, + 250, + 86, + 59, + 116, + 175, + 56, + 192, + 191, + 240, + 188, + 164, + 84, + 48, + 8, + 231, + 242, + 206, + 176, 0, 0, 0, @@ -4121,38 +4043,38 @@ 0, 0, 0, - 53, - 11, - 141, - 159, - 199, - 174, - 192, - 150, - 68, - 81, - 180, - 184, - 90, - 118, - 142, - 78, - 57, - 233, - 107, - 245, - 123, - 23, - 55, - 108, - 96, - 29, - 244, - 253, - 107, - 49, - 76, + 24, + 193, + 114, + 17, + 242, + 33, + 238, + 190, + 226, + 0, + 112, + 189, + 167, + 166, + 20, + 99, + 106, + 37, + 13, + 77, + 9, + 46, + 181, + 132, + 22, + 22, + 78, + 155, + 179, + 78, 18, + 24, 232, 3, 0, @@ -4161,38 +4083,38 @@ 0, 0, 0, - 87, - 237, - 32, - 86, - 222, - 32, - 49, - 210, - 53, - 230, - 10, - 194, - 125, - 91, - 46, - 170, - 128, - 158, + 61, + 204, + 132, + 220, + 80, + 55, + 5, + 242, + 131, + 99, + 205, + 122, 85, - 158, - 11, - 173, - 248, - 152, + 32, + 214, + 232, + 30, + 96, + 9, + 153, + 102, + 138, + 88, + 227, + 89, + 211, + 37, 226, - 64, - 231, - 208, - 252, 170, - 26, - 8, + 230, + 165, + 66, 1, 0, 0, @@ -4227,38 +4149,38 @@ 87, 5, 0, - 63, - 107, - 147, - 31, - 121, - 253, - 11, - 42, - 20, - 237, - 118, - 165, - 178, - 55, - 20, - 52, - 76, - 66, - 31, - 153, - 162, - 204, + 164, + 81, + 79, + 99, + 179, + 98, 209, - 151, - 142, - 242, - 39, - 14, - 22, - 118, - 20, - 204, + 48, + 248, + 216, + 84, + 158, + 220, + 28, + 231, + 147, + 44, + 7, + 34, + 225, + 38, + 13, + 252, + 13, + 81, + 21, + 225, + 182, + 32, + 21, + 135, + 1, 2, 0, 0, @@ -4291,38 +4213,38 @@ 0, 0, 0, - 13, - 83, - 208, - 2, - 216, - 71, - 135, - 76, - 196, - 240, - 55, - 169, - 172, + 61, + 144, + 54, + 63, + 188, + 84, + 183, + 232, + 59, + 187, + 215, + 110, + 137, + 253, 163, - 129, - 77, - 167, + 135, 141, - 222, - 234, - 139, - 250, - 125, + 124, + 244, + 59, + 190, + 246, + 48, + 35, + 107, 75, + 144, 145, - 233, - 139, - 57, - 119, - 196, - 24, - 85, + 128, + 78, + 72, + 92, 0, 0, 0, @@ -4363,78 +4285,78 @@ 0, 0, 0, - 219, - 119, - 163, - 77, - 109, - 87, + 56, + 61, + 226, + 138, + 104, + 93, + 45, + 197, + 22, 164, - 155, - 190, - 236, - 145, - 24, - 50, - 181, - 141, - 163, - 62, - 29, - 37, + 57, 149, - 161, - 187, - 246, - 10, - 50, - 162, - 143, - 252, - 237, - 179, - 142, + 214, + 114, + 56, + 102, 209, + 165, + 84, + 204, + 248, + 151, + 75, + 253, + 242, + 209, + 2, + 115, + 134, + 154, + 217, + 70, 0, 0, 0, 0, 0, - 0, - 0, - 0, - 50, - 130, - 23, - 143, - 241, - 103, - 208, - 42, - 3, - 62, - 137, - 209, - 40, + 0, + 0, + 0, + 15, + 243, + 126, + 19, + 80, + 94, + 217, + 7, + 217, + 8, + 207, + 55, + 145, + 154, + 41, + 17, + 122, 10, - 30, - 194, - 95, - 157, - 208, - 105, - 160, - 241, - 64, - 12, - 36, - 65, - 146, - 241, - 247, - 92, - 186, - 188, + 183, + 102, + 147, + 17, + 242, + 110, + 21, + 77, + 255, + 190, + 73, + 46, + 138, + 93, 96, 179, 253, @@ -4533,124 +4455,124 @@ 116, 244, 32, - 186, - 104, - 213, - 91, - 218, - 163, - 181, - 223, - 208, - 177, - 219, - 199, - 179, - 145, - 245, + 54, + 9, + 111, + 246, + 41, + 152, 154, - 172, - 70, - 98, + 252, + 170, + 180, + 28, + 224, + 99, + 153, 48, - 93, - 0, - 253, - 230, - 76, - 154, - 76, - 110, - 236, - 134, - 14, - 117, + 72, + 228, + 145, + 126, + 47, + 135, + 247, + 206, + 187, + 229, + 63, + 51, + 41, + 58, + 126, + 34, + 100, 32, - 7, - 134, - 124, - 99, - 82, - 250, - 224, - 138, - 194, - 105, + 22, + 80, 98, - 161, - 155, - 103, 211, - 145, - 87, - 27, - 138, + 32, + 28, + 217, + 185, + 224, + 64, + 36, + 2, + 136, + 84, + 153, + 1, + 84, 230, + 250, + 131, + 229, + 53, + 253, 219, - 213, - 59, - 58, - 230, - 35, - 134, - 160, - 69, - 70, - 5, - 103, + 124, + 122, + 31, + 32, + 168, + 31, + 46, + 231, 48, - 144, - 238, + 167, + 36, + 95, + 91, + 231, + 215, + 230, + 126, + 189, + 151, + 25, + 9, + 73, + 51, + 246, 206, - 27, - 158, - 108, + 167, + 172, + 17, + 4, + 217, + 222, + 123, + 225, + 162, + 176, + 231, + 17, 237, + 115, + 158, + 51, + 23, + 222, + 35, + 116, 242, - 132, - 172, - 88, - 33, - 180, + 80, + 161, + 91, + 134, + 241, 55, - 105, - 22, - 117, - 124, - 154, - 184, - 220, - 33, - 23, - 196, - 29, - 87, - 181, - 60, - 222, - 146, - 252, - 251, - 23, - 170, - 22, - 100, - 150, - 209, - 54, - 177, - 108, - 181, - 12, - 50, - 42, - 25, - 133, - 43, - 11, - 118, - 97, - 108, + 42, + 7, + 228, + 206, + 245, + 11, + 118, + 97, + 108, 105, 100, 97, @@ -4683,10 +4605,10 @@ 112, 47, 53, - 50, - 49, + 53, 50, 57, + 55, 47, 104, 116, @@ -4713,10 +4635,10 @@ 112, 47, 53, + 53, 50, - 49, - 51, - 49, + 57, + 57, 24, 47, 105, @@ -4738,36 +4660,10 @@ 112, 47, 53, - 50, - 49, + 53, 51, - 55, - 24, - 47, - 105, - 112, - 52, - 47, - 49, - 50, - 55, - 46, 48, - 46, - 48, - 46, - 49, - 47, - 117, - 100, - 112, - 47, 53, - 50, - 49, - 51, - 57, - 0, 0, 0, 0, @@ -4775,38 +4671,38 @@ 0, 0, 0, - 167, - 69, - 231, - 171, - 22, - 87, - 230, - 137, - 122, - 155, - 115, - 67, - 34, - 144, - 147, - 123, - 26, - 4, - 108, - 11, - 211, - 40, - 136, - 229, - 98, - 147, - 57, - 133, + 235, + 179, + 105, + 207, + 36, + 221, + 187, + 70, + 238, + 33, + 154, + 254, + 246, + 183, + 177, + 9, + 104, + 44, + 193, + 238, 122, - 176, - 98, - 125, + 236, + 62, + 199, + 243, + 148, + 112, + 79, + 189, + 153, + 68, + 49, 0, 0, 0, @@ -4823,38 +4719,38 @@ 0, 0, 0, - 98, - 84, - 73, - 35, - 238, - 36, - 120, - 182, - 53, - 204, - 253, - 142, - 197, - 168, - 56, - 27, - 133, - 121, - 187, - 11, - 224, - 185, - 166, - 209, - 34, - 6, - 52, - 1, - 193, - 148, + 179, + 221, + 122, + 59, + 55, + 201, + 79, + 239, + 24, + 218, + 236, + 58, + 226, + 113, + 77, + 240, 253, - 48, + 30, + 164, + 96, + 249, + 64, + 120, + 145, + 186, + 57, + 164, + 79, + 39, + 28, + 176, + 72, 232, 3, 0, @@ -4863,57 +4759,57 @@ 0, 0, 0, - 12, - 179, - 128, - 203, - 50, - 90, - 131, - 15, - 3, - 238, - 75, - 218, - 121, + 29, + 249, + 67, + 164, + 123, + 138, + 6, 11, - 5, - 225, - 117, - 83, - 128, - 22, - 245, - 212, - 124, - 179, - 82, - 201, - 60, - 198, - 218, - 220, - 19, - 4, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 124, - 204, - 61, - 163, + 45, + 207, 2, - 6, - 0, - 0, + 237, + 185, + 30, + 13, + 130, + 229, + 33, + 64, + 4, + 156, + 170, + 247, + 208, + 168, + 153, + 67, + 98, + 48, + 135, + 208, + 185, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 124, + 204, + 61, + 163, + 2, + 6, + 0, + 0, 174, 210, 94, @@ -4929,38 +4825,38 @@ 87, 5, 0, - 123, - 148, - 172, - 91, - 189, - 1, - 12, - 106, - 119, - 84, - 85, - 227, - 223, - 27, - 108, - 154, - 141, - 36, - 169, - 246, - 194, - 169, - 194, - 2, - 85, - 184, + 190, + 204, + 104, 114, - 184, - 18, - 253, - 191, - 135, + 211, + 172, + 212, + 0, + 156, + 48, + 171, + 213, + 25, + 195, + 190, + 126, + 215, + 235, + 80, + 248, + 222, + 203, + 117, + 16, + 134, + 58, + 64, + 238, + 252, + 65, + 146, + 43, 2, 0, 0, @@ -4993,38 +4889,38 @@ 0, 0, 0, - 120, - 242, - 231, - 14, - 134, - 130, - 104, - 11, - 103, - 210, - 189, + 213, + 21, + 71, 19, - 28, + 243, + 146, + 139, + 123, + 244, + 60, + 220, + 212, 11, - 147, + 201, + 18, + 95, + 226, + 88, 107, - 81, - 11, - 11, - 65, - 86, - 11, - 202, - 206, - 15, - 46, - 158, - 1, - 100, - 197, - 160, - 6, + 56, + 193, + 98, + 233, + 241, + 203, + 165, + 192, + 253, + 213, + 8, + 238, + 31, 0, 0, 0, @@ -5065,39 +4961,38 @@ 0, 0, 0, - 211, - 120, - 82, - 183, - 112, - 80, - 203, - 13, - 147, - 76, - 148, - 115, - 172, - 242, - 93, - 194, - 226, - 79, - 116, - 169, + 188, + 16, + 251, + 56, 48, - 72, - 230, - 175, - 70, - 79, - 244, - 144, - 173, - 213, - 121, - 156, - 0, + 249, + 56, + 85, + 197, + 190, + 210, + 84, + 232, + 49, + 249, + 44, + 59, + 38, + 195, + 10, + 157, + 140, + 152, + 218, + 163, + 86, + 229, + 89, + 68, + 253, + 36, + 155, 0, 0, 0, @@ -5105,38 +5000,39 @@ 0, 0, 0, - 89, 0, - 134, - 29, - 192, - 94, - 22, - 228, + 210, + 97, + 218, 35, - 15, - 103, - 223, - 102, - 125, - 164, - 0, - 182, - 241, - 173, - 148, - 115, - 76, - 12, - 134, - 255, - 200, - 115, - 21, - 201, - 216, - 29, - 213, + 110, + 84, + 230, + 212, + 68, + 151, + 3, + 139, + 166, + 197, + 152, + 87, + 236, + 158, + 62, + 1, + 25, + 194, + 29, + 254, + 92, + 59, + 243, + 114, + 155, + 55, + 37, + 193, 0, 0, 0, @@ -5146,39 +5042,39 @@ 0, 0, 0, - 116, - 140, - 27, - 170, - 209, - 171, - 17, - 61, + 49, + 22, + 112, + 182, + 45, + 165, + 30, + 181, + 253, 7, - 56, - 218, - 138, - 21, + 140, + 143, + 160, + 44, 4, - 220, - 241, - 80, - 162, - 255, - 203, - 11, - 22, - 170, - 48, + 207, + 155, 59, - 7, - 101, - 161, - 69, - 24, - 201, - 112, - 5, + 143, + 30, + 11, + 129, + 150, + 184, + 120, + 218, + 44, + 130, + 213, + 80, + 62, + 240, + 4, 0, 0, 0, @@ -5186,38 +5082,38 @@ 0, 0, 0, - 247, - 48, - 198, - 197, - 187, - 95, + 136, + 109, + 166, + 116, + 47, + 73, + 243, + 234, + 205, + 28, + 33, 147, - 209, - 15, + 249, + 90, + 136, + 131, + 97, + 13, + 48, + 193, + 142, + 96, + 9, + 177, + 3, + 249, + 121, + 92, 245, - 38, + 84, 60, - 142, - 201, - 225, - 91, - 113, - 53, - 180, - 225, - 99, - 175, - 83, - 223, - 59, - 116, - 194, - 11, - 151, - 235, - 146, - 196, + 237, 0, 0, 0, @@ -5226,39 +5122,38 @@ 0, 0, 0, - 80, - 80, - 142, - 127, 158, - 232, - 36, + 215, + 123, + 250, + 241, + 176, + 30, + 81, + 128, + 135, + 200, + 4, + 143, 13, - 132, - 21, - 170, - 224, - 230, - 25, - 125, - 12, - 24, - 68, - 177, - 231, - 44, - 91, - 31, - 217, - 105, + 77, + 253, 9, - 198, - 144, - 96, - 16, - 146, - 139, - 1, + 45, + 39, + 186, + 95, + 41, + 158, + 40, + 129, + 114, + 220, + 159, + 226, + 255, + 15, + 212, 0, 0, 0, @@ -5267,38 +5162,39 @@ 0, 0, 0, - 117, - 254, - 42, - 52, - 238, - 250, - 101, - 84, - 49, - 145, + 0, + 178, + 53, + 96, 237, - 191, - 142, - 110, - 6, - 188, - 55, - 241, - 1, + 161, + 189, + 128, + 101, + 109, + 250, + 77, + 232, + 78, + 130, + 196, + 17, + 8, + 175, + 162, + 140, + 219, + 136, + 123, + 157, + 157, + 93, + 148, + 176, + 98, + 136, + 157, 107, - 182, - 234, - 227, - 213, - 34, - 177, - 229, - 70, - 184, - 220, - 217, - 51, 0, 0, 0, @@ -5379,38 +5275,38 @@ 0, 0, 0, - 153, - 48, - 123, - 170, - 237, - 150, - 85, - 58, + 168, + 39, + 55, + 226, + 93, + 238, + 212, + 208, + 113, + 17, + 187, + 15, + 37, + 138, + 190, + 0, + 62, + 233, + 236, + 152, 253, - 170, - 119, - 84, - 156, - 116, - 215, - 211, - 179, - 29, - 196, - 212, - 126, - 30, - 21, - 144, - 136, - 246, - 168, + 39, 36, - 73, - 149, - 230, - 173, + 227, + 180, + 208, + 51, + 59, + 231, + 117, + 225, + 84, 0, 0, 0, @@ -5461,46 +5357,46 @@ 0, 0, 0, - 130, - 55, - 247, - 175, + 141, + 138, + 101, + 211, 146, 1, 0, 0, - 141, - 159, - 48, - 47, - 164, - 128, - 59, - 91, - 130, - 122, - 142, - 115, - 144, - 23, - 163, - 64, - 108, - 107, - 72, - 181, - 174, - 239, - 219, - 205, - 93, - 109, - 38, - 203, - 113, - 12, + 81, + 202, + 247, + 222, + 99, + 100, + 118, 216, - 183, + 129, + 151, + 106, + 147, + 217, + 85, + 216, + 192, + 15, + 140, + 225, + 29, + 103, + 63, + 0, + 129, + 21, + 92, + 202, + 106, + 150, + 85, + 113, + 22, 0, 0, 0, @@ -5515,8 +5411,8 @@ "owner": { "ObjectOwner": "0x0000000000000000000000000000000000000000000000000000000000000005" }, - "previous_transaction": "CMc4L2hi22SFYwap6sHkdxoKaZp9h1q7hGfbXwyTkwsM", - "storage_rebate": 26980000 + "previous_transaction": "7MqVp96jyVqYUyhcwMuBY9ZY2ANAyhuLGJXTi5Uh459M", + "storage_rebate": 0 } ], "output_objects": [ @@ -5532,7 +5428,7 @@ } }, "has_public_transfer": false, - "version": 4, + "version": 3, "contents": [ 0, 0, @@ -5582,8 +5478,8 @@ "initial_shared_version": 1 } }, - "previous_transaction": "Ai7U4nQvUNhzdARMaAGfisbHdNMHfRoTm1Z6xo74Q9Sr", - "storage_rebate": 28431600 + "previous_transaction": "7gtSzcRCnPVpmESfZRpQaHVh65UfDPZZqwfcDjwKqj7U", + "storage_rebate": 0 }, { "data": { @@ -5607,7 +5503,7 @@ } }, "has_public_transfer": false, - "version": 4, + "version": 3, "contents": [ 91, 137, @@ -5673,41 +5569,41 @@ 0, 0, 0, - 79, - 119, - 144, - 163, - 247, - 191, - 45, - 221, - 234, + 235, + 80, + 81, + 188, + 82, + 54, + 128, + 152, + 95, + 131, + 193, + 49, + 226, + 212, + 212, + 46, 6, - 103, - 112, + 207, + 172, + 155, + 77, + 248, + 124, 156, - 173, - 41, - 65, - 7, - 198, - 139, + 93, + 124, + 109, + 206, + 232, + 47, 39, - 85, - 185, - 144, - 234, - 233, - 27, - 255, - 32, + 137, + 0, 224, - 150, - 115, - 205, - 128, - 91, - 214, + 244, 68, 154, 59, @@ -5722,38 +5618,38 @@ 26, 0, 4, + 174, + 216, + 158, + 172, + 100, + 204, + 30, + 254, + 159, + 195, + 233, + 61, + 144, + 88, + 173, + 213, + 244, + 156, + 198, + 75, + 12, + 232, + 218, + 177, + 54, + 182, + 121, 199, - 3, - 84, - 131, 185, - 10, - 227, - 105, 243, - 206, - 72, - 195, - 151, - 27, - 245, - 140, - 25, - 65, - 121, - 151, - 116, - 108, - 103, - 50, - 12, - 53, - 209, - 84, - 166, - 66, - 90, - 183, + 182, + 137, 96, 141, 207, @@ -5852,120 +5748,120 @@ 56, 212, 32, - 54, + 109, + 235, + 35, + 7, + 201, + 239, + 185, + 254, + 209, + 111, + 122, + 55, + 135, + 92, + 135, + 145, + 234, + 34, + 205, + 172, + 200, + 167, + 206, + 76, + 83, + 189, + 105, + 186, + 194, + 69, + 97, + 182, + 32, + 233, 229, - 149, - 160, - 153, - 0, - 149, - 41, + 74, + 177, + 163, + 194, + 251, + 42, 2, - 12, - 159, - 11, + 77, + 108, + 140, + 235, + 238, + 171, + 17, + 178, + 173, + 55, + 71, + 146, + 50, + 124, + 82, + 10, + 10, + 129, + 151, + 215, + 205, + 212, 237, - 183, - 232, - 172, - 239, - 21, - 94, - 208, - 184, - 219, - 158, - 170, + 48, + 133, + 10, + 155, + 203, + 47, + 247, + 198, + 115, 43, - 150, - 93, - 242, - 32, 222, - 246, - 207, - 32, - 245, - 64, - 76, - 18, - 227, - 129, - 141, - 164, - 251, - 225, - 193, + 83, + 188, + 159, + 173, + 91, + 96, 225, - 255, - 222, - 40, - 239, - 108, - 248, - 77, - 176, - 165, + 142, + 9, + 106, 136, - 148, - 156, - 113, - 25, - 160, + 182, + 107, + 125, + 168, + 83, + 123, + 49, + 185, + 228, + 0, + 172, 250, - 14, - 98, - 198, - 178, - 48, - 148, - 81, - 45, - 99, - 42, - 80, - 47, - 61, - 69, - 193, - 153, - 23, - 69, - 77, - 65, - 148, - 12, - 218, - 166, - 136, - 89, - 61, - 102, - 137, - 39, - 225, + 235, 90, - 67, - 159, - 177, - 77, - 46, - 144, - 186, - 192, - 151, - 223, - 1, - 151, - 220, - 117, 33, - 235, + 169, + 255, + 193, + 15, + 174, + 111, + 249, + 22, + 108, + 133, 142, - 101, - 76, - 246, - 207, + 171, 11, 118, 97, @@ -6002,10 +5898,10 @@ 112, 47, 53, + 53, 50, - 49, - 48, - 49, + 55, + 55, 47, 104, 116, @@ -6032,34 +5928,9 @@ 112, 47, 53, - 50, - 49, - 48, - 51, - 24, - 47, - 105, - 112, - 52, - 47, - 49, - 50, - 55, - 46, - 48, - 46, - 48, - 46, - 49, - 47, - 117, - 100, - 112, - 47, 53, 50, - 49, - 48, + 55, 57, 24, 47, @@ -6082,11 +5953,10 @@ 112, 47, 53, + 53, 50, - 49, - 49, - 49, - 0, + 56, + 53, 0, 0, 0, @@ -6094,38 +5964,38 @@ 0, 0, 0, - 158, - 21, - 4, - 132, - 147, - 197, - 55, - 157, - 104, - 199, - 11, - 82, - 210, - 44, - 230, - 232, + 203, + 238, + 102, 51, - 81, - 13, - 89, - 112, - 234, - 251, - 255, - 56, - 23, - 190, - 253, - 67, - 99, - 84, - 234, + 150, + 252, + 160, + 66, + 122, + 198, + 160, + 124, + 201, + 197, + 225, + 25, + 157, + 66, + 182, + 210, + 4, + 225, + 203, + 214, + 0, + 223, + 240, + 182, + 73, + 222, + 163, + 201, 0, 0, 0, @@ -6142,38 +6012,38 @@ 0, 0, 0, - 58, - 173, - 132, - 75, - 224, - 93, - 90, - 60, - 253, - 176, - 39, - 11, - 172, - 153, - 12, - 113, - 237, - 20, - 103, - 149, - 114, + 97, + 221, + 158, + 52, + 171, + 9, + 5, + 134, + 63, + 50, + 83, + 248, + 184, 8, - 32, + 206, + 72, + 100, + 138, + 246, + 112, 12, - 59, - 244, + 199, + 158, + 228, + 46, 40, - 38, - 44, - 61, - 175, - 1, + 45, + 224, + 144, + 243, + 160, + 141, 232, 3, 0, @@ -6182,38 +6052,38 @@ 0, 0, 0, - 232, - 14, - 72, - 38, - 40, - 13, + 210, + 7, + 175, 121, - 140, - 248, - 193, - 87, - 156, - 150, - 228, - 154, - 136, - 166, - 92, - 15, - 240, - 225, - 156, - 124, - 227, - 251, - 244, - 22, - 171, - 191, - 166, - 19, - 174, + 62, + 202, + 57, + 178, + 71, + 217, + 66, + 234, + 143, + 76, + 127, + 97, + 57, + 85, + 68, + 60, + 84, + 148, + 47, + 76, + 83, + 76, + 253, + 91, + 64, + 161, + 158, + 165, 1, 0, 0, @@ -6248,38 +6118,38 @@ 90, 5, 0, - 194, - 201, - 221, - 216, - 0, - 201, - 14, - 138, - 159, - 127, + 57, + 225, + 12, 2, - 243, - 83, - 121, - 253, - 235, - 224, - 117, - 50, + 6, + 198, + 95, + 52, + 34, + 245, + 5, + 228, + 179, + 188, 247, - 30, - 149, - 57, - 55, - 252, - 208, + 80, + 211, + 148, + 9, + 64, + 94, + 104, + 94, + 69, + 127, 79, - 168, - 76, - 122, - 36, - 192, + 147, + 26, + 248, + 160, + 241, + 187, 3, 0, 0, @@ -6312,38 +6182,38 @@ 0, 0, 0, - 28, - 3, - 133, - 57, - 100, - 73, - 32, - 113, - 183, - 112, - 201, - 166, - 191, - 35, - 47, - 34, - 32, - 159, - 48, - 137, - 3, + 186, 222, - 105, - 110, 220, - 204, - 41, + 101, 226, - 63, - 78, - 18, + 201, + 82, + 157, + 46, + 57, + 10, + 148, + 31, + 76, + 176, + 102, + 174, + 80, + 162, + 243, + 250, + 248, + 0, + 8, + 138, + 168, + 116, + 228, 254, + 14, + 76, + 200, 0, 0, 0, @@ -6384,38 +6254,38 @@ 0, 0, 0, - 215, - 233, - 197, - 73, - 0, - 103, - 112, - 32, - 41, - 241, - 60, - 231, - 183, - 150, - 128, - 181, - 240, - 93, - 160, - 34, - 202, - 137, - 79, + 169, + 116, + 83, + 179, + 30, + 83, + 164, + 114, + 56, + 178, + 138, + 6, + 113, + 37, + 192, + 68, + 224, + 109, + 126, + 222, + 16, + 239, + 255, + 106, 180, - 142, - 204, - 252, - 45, - 63, - 115, - 54, - 18, + 38, + 47, + 81, + 34, + 62, + 5, + 39, 0, 0, 0, @@ -6424,38 +6294,38 @@ 0, 0, 0, - 152, - 52, - 108, - 41, - 160, - 169, - 155, - 157, - 10, - 128, - 201, - 237, - 227, - 122, - 119, - 199, - 253, - 147, - 234, - 210, - 149, - 253, - 176, - 27, - 137, + 8, + 194, + 126, + 8, + 150, + 33, + 18, + 221, + 219, + 196, + 212, + 251, + 93, + 192, + 21, + 159, + 211, + 117, + 148, + 9, + 74, + 141, + 153, + 130, 94, - 241, - 57, - 44, - 80, - 135, - 181, + 96, + 133, + 179, + 54, + 73, + 15, + 74, 96, 153, 242, @@ -6554,120 +6424,120 @@ 26, 16, 32, - 203, - 102, - 81, - 231, - 227, - 62, - 133, - 128, - 82, - 172, - 128, + 83, + 177, + 140, + 254, + 247, + 77, + 131, + 149, + 28, 160, - 66, - 220, - 100, - 44, - 76, - 81, - 90, + 125, + 7, + 72, + 46, + 230, + 145, + 93, 157, - 141, - 9, - 51, - 103, - 152, - 49, - 100, - 219, - 11, - 122, - 111, + 220, + 116, + 168, + 106, + 190, + 63, + 4, + 6, + 57, + 205, + 36, 172, + 145, + 144, 32, - 207, - 136, - 11, - 207, - 233, - 27, - 111, - 229, - 25, - 40, - 88, - 39, - 71, - 22, - 200, - 16, - 132, + 26, + 30, + 17, + 236, + 148, + 90, 203, - 110, - 41, - 43, - 82, - 213, - 213, - 214, - 217, - 106, + 178, + 12, + 50, + 117, + 142, + 162, + 38, + 177, + 144, + 254, + 153, + 185, + 52, + 160, + 238, + 93, + 9, + 64, + 89, + 162, + 62, + 206, + 202, + 232, + 49, 48, + 174, + 9, + 63, + 228, + 159, + 110, + 193, + 170, + 116, + 63, + 210, + 118, + 97, + 229, + 201, + 73, + 155, 242, - 227, - 234, - 136, - 48, - 132, - 51, - 104, + 213, 180, - 35, - 134, - 184, - 250, - 233, - 184, - 252, - 132, - 203, - 143, - 130, - 190, - 89, - 79, - 35, - 164, - 172, - 124, - 161, + 22, 131, - 231, - 233, - 47, - 142, - 173, - 185, - 209, - 100, - 170, - 167, - 145, + 235, + 219, + 135, + 158, + 228, + 18, + 28, + 253, + 221, + 123, + 126, + 245, + 62, + 146, + 114, + 230, + 99, + 84, + 13, + 146, 170, - 117, - 169, - 65, - 129, - 197, - 80, - 165, - 227, - 124, - 52, - 71, - 172, + 151, + 221, + 189, + 51, + 252, 11, 118, 97, @@ -6704,9 +6574,9 @@ 112, 47, 53, + 53, 50, - 48, - 56, + 54, 55, 47, 104, @@ -6734,9 +6604,9 @@ 112, 47, 53, + 53, 50, - 48, - 56, + 54, 57, 24, 47, @@ -6759,36 +6629,10 @@ 112, 47, 53, - 50, - 48, - 57, 53, - 24, - 47, - 105, - 112, - 52, - 47, - 49, 50, 55, - 46, - 48, - 46, - 48, - 46, - 49, - 47, - 117, - 100, - 112, - 47, 53, - 50, - 48, - 57, - 55, - 0, 0, 0, 0, @@ -6796,38 +6640,38 @@ 0, 0, 0, - 111, - 108, - 251, - 55, - 106, - 70, - 0, - 83, - 166, - 65, - 77, - 255, - 24, - 35, + 97, + 202, + 254, + 158, 226, - 124, - 182, - 112, + 147, + 233, + 52, + 217, + 232, + 234, + 168, + 221, + 170, + 20, 225, - 195, - 108, - 2, + 139, + 81, + 115, + 8, + 242, + 35, 145, - 10, - 215, - 79, - 160, - 179, - 110, - 91, - 27, - 7, + 171, + 245, + 145, + 96, + 32, + 85, + 175, + 251, + 63, 0, 0, 0, @@ -6844,38 +6688,38 @@ 0, 0, 0, - 182, - 37, - 132, - 69, - 191, - 87, - 35, - 192, - 23, - 153, - 64, - 68, - 151, - 249, + 111, 39, - 198, - 66, - 80, - 154, - 234, - 83, - 180, - 249, + 18, + 222, + 47, + 141, + 116, + 93, + 65, + 120, + 49, + 246, + 53, + 240, + 104, + 24, + 8, + 131, + 2, + 130, + 36, + 94, + 229, + 173, + 144, + 149, + 191, + 25, 23, - 44, - 27, - 124, - 233, - 248, - 200, - 162, - 175, + 108, + 111, + 204, 232, 3, 0, @@ -6884,38 +6728,38 @@ 0, 0, 0, - 251, - 91, - 71, + 203, + 80, + 5, + 66, + 182, + 197, + 54, + 201, + 219, 93, - 58, - 113, - 7, - 34, - 32, - 73, - 58, - 239, - 215, - 234, - 130, - 32, - 211, + 163, 15, + 25, + 198, + 242, + 133, + 10, + 23, + 218, + 216, + 177, + 129, + 50, + 43, 101, - 233, - 95, - 183, - 248, - 96, - 141, - 116, - 3, - 192, - 80, - 95, - 180, - 167, + 250, + 128, + 147, + 57, + 45, + 43, + 41, 1, 0, 0, @@ -6950,38 +6794,38 @@ 90, 5, 0, - 164, - 195, - 143, - 144, - 61, - 151, - 68, - 202, - 34, - 67, - 11, - 174, - 222, - 209, - 188, - 55, - 192, - 237, - 61, - 117, - 206, - 85, - 104, - 62, + 94, + 118, + 191, + 232, + 91, + 184, + 114, + 7, + 182, + 23, + 238, + 109, + 155, + 142, + 93, + 221, + 178, + 171, + 78, + 227, + 153, + 98, + 159, + 24, + 165, + 201, + 13, + 36, + 100, + 37, 105, - 189, - 61, - 31, - 196, - 11, - 103, - 48, + 46, 3, 0, 0, @@ -7014,38 +6858,38 @@ 0, 0, 0, - 86, - 11, - 133, - 42, - 34, - 128, - 46, - 144, - 245, - 237, - 103, - 194, - 141, - 145, - 70, - 227, - 187, - 103, - 72, - 225, - 126, - 12, 195, - 94, - 216, - 109, - 11, - 185, - 136, - 231, - 209, - 101, + 26, + 157, + 156, + 152, + 230, + 112, + 55, + 198, + 28, + 12, + 166, + 13, + 115, + 175, + 228, + 246, + 114, + 142, + 96, + 159, + 229, + 38, + 233, + 9, + 23, + 150, + 105, + 71, + 114, + 223, + 227, 0, 0, 0, @@ -7086,38 +6930,38 @@ 0, 0, 0, - 48, - 196, - 28, - 202, - 166, - 13, - 73, - 199, - 135, - 166, - 25, + 247, + 53, + 237, + 130, 93, - 219, - 125, - 63, - 116, - 202, - 177, + 12, 217, - 91, - 147, - 64, - 31, - 161, - 218, - 162, - 170, - 69, - 161, - 76, - 100, - 232, + 118, + 223, + 124, + 29, + 29, + 216, + 27, + 171, + 113, + 211, + 82, + 134, + 121, + 213, + 9, + 54, + 221, + 188, + 217, + 96, + 247, + 18, + 146, + 243, + 57, 0, 0, 0, @@ -7126,38 +6970,38 @@ 0, 0, 0, - 72, - 217, - 15, + 89, + 64, + 182, + 78, + 178, + 151, + 32, + 234, + 12, + 53, + 212, + 158, + 227, + 213, + 153, + 179, + 71, + 120, + 121, + 214, + 139, + 126, 101, - 11, - 244, - 216, - 122, - 209, 41, - 236, - 71, - 57, - 46, - 195, - 138, - 140, - 108, - 11, - 181, + 4, + 178, + 54, + 237, + 214, 234, - 75, - 109, - 171, - 97, - 14, - 58, - 132, - 20, - 49, - 171, - 153, + 216, + 138, 96, 173, 222, @@ -7256,120 +7100,120 @@ 88, 242, 32, - 157, - 111, - 65, + 101, + 41, 91, - 154, - 116, - 26, - 32, - 81, - 165, - 157, - 125, - 130, - 182, - 69, - 127, - 200, - 123, - 212, - 219, - 165, - 4, - 238, + 166, + 21, + 8, 15, - 68, - 169, - 73, - 115, - 59, - 197, - 138, + 183, + 171, + 43, + 105, + 62, + 143, + 42, + 220, + 160, + 18, + 204, + 18, + 177, + 143, + 95, + 250, + 143, + 90, + 251, + 80, + 79, + 19, + 151, 254, + 253, 32, - 72, - 185, - 38, - 230, - 150, - 233, - 38, - 148, - 165, - 17, - 3, - 58, - 186, - 78, - 49, - 172, - 39, - 198, - 43, - 231, - 128, - 216, - 233, - 5, - 174, - 222, - 133, - 66, - 72, + 250, + 209, + 183, + 196, + 197, + 121, + 33, + 21, + 211, + 65, + 227, 216, - 253, - 39, + 234, + 249, + 192, + 236, + 194, + 255, + 190, + 81, + 208, + 224, + 251, + 165, + 53, + 30, + 220, + 75, + 192, + 117, + 68, + 159, 48, - 179, - 18, + 131, + 47, + 168, + 134, + 246, + 248, 62, - 181, + 162, + 31, + 28, + 191, + 186, + 169, + 214, 29, - 193, - 154, - 105, - 231, - 94, + 44, + 57, + 33, + 25, + 25, + 44, + 176, + 119, + 148, + 150, + 83, + 118, + 177, + 138, + 121, + 73, + 214, + 93, + 173, + 153, + 142, 0, - 253, - 147, - 164, - 152, - 191, - 209, - 90, - 200, - 210, - 59, - 88, - 101, - 171, - 112, - 145, - 55, - 221, - 230, - 140, - 56, - 240, - 86, - 84, - 193, - 49, + 13, + 99, + 3, + 2, 6, - 45, - 237, - 198, - 215, - 147, - 111, - 94, - 143, - 129, - 109, - 183, + 80, + 65, + 227, + 213, + 201, + 148, 11, 118, 97, @@ -7406,40 +7250,15 @@ 112, 47, 53, - 50, - 49, - 49, - 53, - 47, - 104, - 116, - 116, - 112, - 24, - 47, - 105, - 112, - 52, - 47, - 49, - 50, - 55, - 46, - 48, - 46, - 48, - 46, - 49, - 47, - 117, - 100, - 112, - 47, 53, 50, - 49, - 49, + 56, 55, + 47, + 104, + 116, + 116, + 112, 24, 47, 105, @@ -7461,10 +7280,10 @@ 112, 47, 53, + 53, 50, - 49, - 50, - 51, + 56, + 57, 24, 47, 105, @@ -7486,9 +7305,9 @@ 112, 47, 53, + 53, 50, - 49, - 50, + 57, 53, 0, 0, @@ -7497,39 +7316,38 @@ 0, 0, 0, - 0, - 245, - 129, - 174, + 93, 94, - 253, - 236, - 254, - 169, - 210, - 13, - 151, - 145, - 128, - 169, - 56, - 66, - 49, - 90, - 127, - 254, - 26, - 181, - 229, - 54, - 109, - 20, - 56, - 103, - 14, - 16, + 172, + 116, + 57, + 179, + 239, 207, - 50, + 144, + 27, + 132, + 104, + 105, + 24, + 250, + 86, + 59, + 116, + 175, + 56, + 192, + 191, + 240, + 188, + 164, + 84, + 48, + 8, + 231, + 242, + 206, + 176, 0, 0, 0, @@ -7546,38 +7364,38 @@ 0, 0, 0, - 53, - 11, - 141, - 159, - 199, - 174, - 192, - 150, - 68, - 81, - 180, - 184, - 90, - 118, - 142, + 24, + 193, + 114, + 17, + 242, + 33, + 238, + 190, + 226, + 0, + 112, + 189, + 167, + 166, + 20, + 99, + 106, + 37, + 13, + 77, + 9, + 46, + 181, + 132, + 22, + 22, + 78, + 155, + 179, 78, - 57, - 233, - 107, - 245, - 123, - 23, - 55, - 108, - 96, - 29, - 244, - 253, - 107, - 49, - 76, 18, + 24, 232, 3, 0, @@ -7586,38 +7404,38 @@ 0, 0, 0, - 87, - 237, - 32, - 86, - 222, - 32, - 49, - 210, - 53, - 230, - 10, - 194, - 125, - 91, - 46, - 170, - 128, - 158, + 61, + 204, + 132, + 220, + 80, + 55, + 5, + 242, + 131, + 99, + 205, + 122, 85, - 158, - 11, - 173, - 248, - 152, + 32, + 214, + 232, + 30, + 96, + 9, + 153, + 102, + 138, + 88, + 227, + 89, + 211, + 37, 226, - 64, - 231, - 208, - 252, 170, - 26, - 8, + 230, + 165, + 66, 1, 0, 0, @@ -7652,38 +7470,38 @@ 90, 5, 0, - 63, - 107, - 147, - 31, - 121, - 253, - 11, - 42, - 20, - 237, - 118, - 165, - 178, - 55, - 20, - 52, - 76, - 66, - 31, - 153, - 162, - 204, + 164, + 81, + 79, + 99, + 179, + 98, 209, - 151, - 142, - 242, - 39, - 14, - 22, - 118, - 20, - 204, + 48, + 248, + 216, + 84, + 158, + 220, + 28, + 231, + 147, + 44, + 7, + 34, + 225, + 38, + 13, + 252, + 13, + 81, + 21, + 225, + 182, + 32, + 21, + 135, + 1, 3, 0, 0, @@ -7716,38 +7534,38 @@ 0, 0, 0, - 13, - 83, - 208, - 2, - 216, - 71, - 135, - 76, - 196, - 240, - 55, - 169, - 172, + 61, + 144, + 54, + 63, + 188, + 84, + 183, + 232, + 59, + 187, + 215, + 110, + 137, + 253, 163, - 129, - 77, - 167, + 135, 141, - 222, - 234, - 139, - 250, - 125, + 124, + 244, + 59, + 190, + 246, + 48, + 35, + 107, 75, + 144, 145, - 233, - 139, - 57, - 119, - 196, - 24, - 85, + 128, + 78, + 72, + 92, 0, 0, 0, @@ -7788,38 +7606,38 @@ 0, 0, 0, - 219, - 119, - 163, - 77, - 109, - 87, + 56, + 61, + 226, + 138, + 104, + 93, + 45, + 197, + 22, 164, - 155, - 190, - 236, - 145, - 24, - 50, - 181, - 141, - 163, - 62, - 29, - 37, + 57, 149, - 161, - 187, - 246, - 10, - 50, - 162, - 143, - 252, - 237, - 179, - 142, + 214, + 114, + 56, + 102, + 209, + 165, + 84, + 204, + 248, + 151, + 75, + 253, + 242, 209, + 2, + 115, + 134, + 154, + 217, + 70, 0, 0, 0, @@ -7828,38 +7646,38 @@ 0, 0, 0, - 50, - 130, - 23, - 143, - 241, - 103, - 208, - 42, - 3, - 62, - 137, - 209, - 40, + 15, + 243, + 126, + 19, + 80, + 94, + 217, + 7, + 217, + 8, + 207, + 55, + 145, + 154, + 41, + 17, + 122, 10, - 30, - 194, - 95, - 157, - 208, - 105, - 160, - 241, - 64, - 12, - 36, - 65, - 146, - 241, - 247, - 92, - 186, - 188, + 183, + 102, + 147, + 17, + 242, + 110, + 21, + 77, + 255, + 190, + 73, + 46, + 138, + 93, 96, 179, 253, @@ -7958,120 +7776,120 @@ 116, 244, 32, - 186, - 104, - 213, - 91, - 218, - 163, - 181, - 223, - 208, - 177, - 219, - 199, - 179, - 145, - 245, + 54, + 9, + 111, + 246, + 41, + 152, 154, - 172, - 70, - 98, + 252, + 170, + 180, + 28, + 224, + 99, + 153, 48, - 93, - 0, - 253, - 230, - 76, - 154, - 76, - 110, - 236, - 134, - 14, - 117, + 72, + 228, + 145, + 126, + 47, + 135, + 247, + 206, + 187, + 229, + 63, + 51, + 41, + 58, + 126, + 34, + 100, 32, - 7, - 134, - 124, - 99, - 82, - 250, - 224, - 138, - 194, - 105, + 22, + 80, 98, - 161, - 155, - 103, 211, - 145, - 87, - 27, - 138, + 32, + 28, + 217, + 185, + 224, + 64, + 36, + 2, + 136, + 84, + 153, + 1, + 84, 230, + 250, + 131, + 229, + 53, + 253, 219, - 213, - 59, - 58, - 230, - 35, - 134, - 160, - 69, - 70, - 5, - 103, + 124, + 122, + 31, + 32, + 168, + 31, + 46, + 231, 48, - 144, - 238, + 167, + 36, + 95, + 91, + 231, + 215, + 230, + 126, + 189, + 151, + 25, + 9, + 73, + 51, + 246, 206, - 27, - 158, - 108, - 237, - 242, - 132, + 167, 172, - 88, - 33, - 180, - 55, - 105, - 22, - 117, - 124, - 154, - 184, - 220, - 33, - 23, - 196, - 29, - 87, - 181, - 60, + 17, + 4, + 217, 222, - 146, - 252, - 251, + 123, + 225, + 162, + 176, + 231, + 17, + 237, + 115, + 158, + 51, 23, - 170, - 22, - 100, - 150, - 209, - 54, - 177, - 108, - 181, - 12, - 50, + 222, + 35, + 116, + 242, + 80, + 161, + 91, + 134, + 241, + 55, 42, - 25, - 133, - 43, + 7, + 228, + 206, + 245, 11, 118, 97, @@ -8108,10 +7926,10 @@ 112, 47, 53, - 50, - 49, + 53, 50, 57, + 55, 47, 104, 116, @@ -8138,10 +7956,10 @@ 112, 47, 53, + 53, 50, - 49, - 51, - 49, + 57, + 57, 24, 47, 105, @@ -8163,36 +7981,10 @@ 112, 47, 53, - 50, - 49, + 53, 51, - 55, - 24, - 47, - 105, - 112, - 52, - 47, - 49, - 50, - 55, - 46, - 48, - 46, 48, - 46, - 49, - 47, - 117, - 100, - 112, - 47, 53, - 50, - 49, - 51, - 57, - 0, 0, 0, 0, @@ -8200,38 +7992,38 @@ 0, 0, 0, - 167, - 69, - 231, - 171, - 22, - 87, - 230, - 137, - 122, - 155, - 115, - 67, - 34, - 144, - 147, - 123, - 26, - 4, - 108, - 11, - 211, - 40, - 136, - 229, - 98, - 147, - 57, - 133, + 235, + 179, + 105, + 207, + 36, + 221, + 187, + 70, + 238, + 33, + 154, + 254, + 246, + 183, + 177, + 9, + 104, + 44, + 193, + 238, 122, - 176, - 98, - 125, + 236, + 62, + 199, + 243, + 148, + 112, + 79, + 189, + 153, + 68, + 49, 0, 0, 0, @@ -8244,42 +8036,42 @@ 9, 0, 0, - 0, - 0, - 0, - 0, - 98, - 84, - 73, - 35, - 238, - 36, - 120, - 182, - 53, - 204, - 253, - 142, - 197, - 168, - 56, - 27, - 133, - 121, - 187, - 11, - 224, - 185, - 166, - 209, - 34, - 6, - 52, - 1, - 193, - 148, + 0, + 0, + 0, + 0, + 179, + 221, + 122, + 59, + 55, + 201, + 79, + 239, + 24, + 218, + 236, + 58, + 226, + 113, + 77, + 240, 253, - 48, + 30, + 164, + 96, + 249, + 64, + 120, + 145, + 186, + 57, + 164, + 79, + 39, + 28, + 176, + 72, 232, 3, 0, @@ -8288,38 +8080,38 @@ 0, 0, 0, - 12, - 179, - 128, - 203, - 50, - 90, - 131, - 15, - 3, - 238, - 75, - 218, - 121, + 29, + 249, + 67, + 164, + 123, + 138, + 6, 11, - 5, - 225, - 117, - 83, - 128, - 22, - 245, - 212, - 124, - 179, - 82, - 201, - 60, - 198, - 218, - 220, - 19, + 45, + 207, + 2, + 237, + 185, + 30, + 13, + 130, + 229, + 33, + 64, 4, + 156, + 170, + 247, + 208, + 168, + 153, + 67, + 98, + 48, + 135, + 208, + 185, 1, 0, 0, @@ -8354,38 +8146,38 @@ 90, 5, 0, - 123, - 148, - 172, - 91, - 189, - 1, - 12, - 106, - 119, - 84, - 85, - 227, - 223, - 27, - 108, - 154, - 141, - 36, - 169, - 246, - 194, - 169, - 194, - 2, - 85, - 184, + 190, + 204, + 104, 114, - 184, - 18, - 253, - 191, - 135, + 211, + 172, + 212, + 0, + 156, + 48, + 171, + 213, + 25, + 195, + 190, + 126, + 215, + 235, + 80, + 248, + 222, + 203, + 117, + 16, + 134, + 58, + 64, + 238, + 252, + 65, + 146, + 43, 3, 0, 0, @@ -8418,38 +8210,38 @@ 0, 0, 0, - 120, - 242, - 231, - 14, - 134, - 130, - 104, - 11, - 103, - 210, - 189, + 213, + 21, + 71, 19, - 28, + 243, + 146, + 139, + 123, + 244, + 60, + 220, + 212, 11, - 147, + 201, + 18, + 95, + 226, + 88, 107, - 81, - 11, - 11, - 65, - 86, - 11, - 202, - 206, - 15, - 46, - 158, - 1, - 100, - 197, - 160, - 6, + 56, + 193, + 98, + 233, + 241, + 203, + 165, + 192, + 253, + 213, + 8, + 238, + 31, 0, 0, 0, @@ -8490,39 +8282,38 @@ 0, 0, 0, - 211, - 120, - 82, - 183, - 112, - 80, - 203, - 13, - 147, - 76, - 148, - 115, - 172, - 242, - 93, - 194, - 226, - 79, - 116, - 169, + 188, + 16, + 251, + 56, 48, - 72, - 230, - 175, - 70, - 79, - 244, - 144, - 173, - 213, - 121, - 156, - 0, + 249, + 56, + 85, + 197, + 190, + 210, + 84, + 232, + 49, + 249, + 44, + 59, + 38, + 195, + 10, + 157, + 140, + 152, + 218, + 163, + 86, + 229, + 89, + 68, + 253, + 36, + 155, 0, 0, 0, @@ -8530,38 +8321,39 @@ 0, 0, 0, - 89, 0, - 134, - 29, - 192, - 94, - 22, - 228, + 210, + 97, + 218, 35, - 15, - 103, - 223, - 102, - 125, - 164, - 0, - 182, - 241, - 173, - 148, - 115, - 76, - 12, - 134, - 255, - 200, - 115, - 21, - 201, - 216, + 110, + 84, + 230, + 212, + 68, + 151, + 3, + 139, + 166, + 197, + 152, + 87, + 236, + 158, + 62, + 1, + 25, + 194, 29, - 213, + 254, + 92, + 59, + 243, + 114, + 155, + 55, + 37, + 193, 0, 0, 0, @@ -8571,39 +8363,39 @@ 0, 0, 0, - 116, - 140, - 27, - 170, - 209, - 171, - 17, - 61, + 49, + 22, + 112, + 182, + 45, + 165, + 30, + 181, + 253, 7, - 56, - 218, - 138, - 21, + 140, + 143, + 160, + 44, 4, - 220, - 241, - 80, - 162, - 255, - 203, - 11, - 22, - 170, - 48, + 207, + 155, 59, - 7, - 101, - 161, - 69, - 24, - 201, - 112, - 5, + 143, + 30, + 11, + 129, + 150, + 184, + 120, + 218, + 44, + 130, + 213, + 80, + 62, + 240, + 4, 0, 0, 0, @@ -8611,38 +8403,38 @@ 0, 0, 0, - 247, - 48, - 198, - 197, - 187, - 95, + 136, + 109, + 166, + 116, + 47, + 73, + 243, + 234, + 205, + 28, + 33, 147, - 209, - 15, + 249, + 90, + 136, + 131, + 97, + 13, + 48, + 193, + 142, + 96, + 9, + 177, + 3, + 249, + 121, + 92, 245, - 38, + 84, 60, - 142, - 201, - 225, - 91, - 113, - 53, - 180, - 225, - 99, - 175, - 83, - 223, - 59, - 116, - 194, - 11, - 151, - 235, - 146, - 196, + 237, 0, 0, 0, @@ -8651,39 +8443,38 @@ 0, 0, 0, - 80, - 80, - 142, - 127, 158, - 232, - 36, + 215, + 123, + 250, + 241, + 176, + 30, + 81, + 128, + 135, + 200, + 4, + 143, 13, - 132, - 21, - 170, - 224, - 230, - 25, - 125, - 12, - 24, - 68, - 177, - 231, - 44, - 91, - 31, - 217, - 105, + 77, + 253, 9, - 198, - 144, - 96, - 16, - 146, - 139, - 1, + 45, + 39, + 186, + 95, + 41, + 158, + 40, + 129, + 114, + 220, + 159, + 226, + 255, + 15, + 212, 0, 0, 0, @@ -8692,38 +8483,39 @@ 0, 0, 0, - 117, - 254, - 42, - 52, - 238, - 250, - 101, - 84, - 49, - 145, + 0, + 178, + 53, + 96, 237, - 191, - 142, - 110, - 6, - 188, - 55, - 241, - 1, + 161, + 189, + 128, + 101, + 109, + 250, + 77, + 232, + 78, + 130, + 196, + 17, + 8, + 175, + 162, + 140, + 219, + 136, + 123, + 157, + 157, + 93, + 148, + 176, + 98, + 136, + 157, 107, - 182, - 234, - 227, - 213, - 34, - 177, - 229, - 70, - 184, - 220, - 217, - 51, 0, 0, 0, @@ -8732,10 +8524,10 @@ 0, 0, 0, - 96, - 255, - 222, - 2, + 0, + 0, + 0, + 0, 0, 0, 0, @@ -8804,38 +8596,38 @@ 0, 0, 0, - 153, - 48, - 123, - 170, - 237, - 150, - 85, - 58, - 253, - 170, - 119, - 84, - 156, - 116, - 215, - 211, - 179, - 29, - 196, - 212, - 126, - 30, - 21, - 144, - 136, - 246, 168, + 39, + 55, + 226, + 93, + 238, + 212, + 208, + 113, + 17, + 187, + 15, + 37, + 138, + 190, + 0, + 62, + 233, + 236, + 152, + 253, + 39, 36, - 73, - 149, - 230, - 173, + 227, + 180, + 208, + 51, + 59, + 231, + 117, + 225, + 84, 0, 0, 0, @@ -8886,46 +8678,46 @@ 0, 0, 0, - 45, - 35, - 248, - 175, + 25, + 118, + 102, + 211, 146, 1, 0, 0, - 141, - 159, - 48, - 47, - 164, - 128, - 59, - 91, - 130, - 122, - 142, - 115, - 144, - 23, - 163, - 64, - 108, - 107, - 72, - 181, - 174, - 239, - 219, - 205, - 93, - 109, - 38, - 203, - 113, - 12, + 81, + 202, + 247, + 222, + 99, + 100, + 118, 216, - 183, + 129, + 151, + 106, + 147, + 217, + 85, + 216, + 192, + 15, + 140, + 225, + 29, + 103, + 63, + 0, + 129, + 21, + 92, + 202, + 106, + 150, + 85, + 113, + 22, 0, 0, 0, @@ -8940,80 +8732,80 @@ "owner": { "ObjectOwner": "0x0000000000000000000000000000000000000000000000000000000000000005" }, - "previous_transaction": "Ai7U4nQvUNhzdARMaAGfisbHdNMHfRoTm1Z6xo74Q9Sr", - "storage_rebate": 0 - }, - { - "data": { - "Move": { - "type_": "StakedIota", - "has_public_transfer": true, - "version": 4, - "contents": [ - 34, - 143, - 214, - 76, - 195, - 75, - 206, - 151, - 3, - 171, - 156, - 6, - 87, - 87, - 222, - 128, - 35, - 14, - 7, - 122, - 36, - 238, - 83, - 7, - 25, - 226, - 171, - 94, - 24, - 42, - 82, - 133, - 232, - 14, - 72, - 38, - 40, - 13, - 121, - 140, - 248, - 193, - 87, - 156, - 150, - 228, + "previous_transaction": "7gtSzcRCnPVpmESfZRpQaHVh65UfDPZZqwfcDjwKqj7U", + "storage_rebate": 0 + }, + { + "data": { + "Move": { + "type_": "StakedIota", + "has_public_transfer": true, + "version": 3, + "contents": [ + 0, + 112, + 163, + 118, + 214, + 118, 154, - 136, - 166, + 7, + 48, + 91, + 227, + 96, + 187, + 109, + 54, 92, - 15, - 240, + 80, + 153, + 172, + 133, + 99, + 60, + 231, + 233, + 50, 225, - 156, - 124, - 227, - 251, - 244, - 22, + 130, + 215, + 44, 171, - 191, - 166, - 19, - 174, + 106, + 126, + 61, + 204, + 132, + 220, + 80, + 55, + 5, + 242, + 131, + 99, + 205, + 122, + 85, + 32, + 214, + 232, + 30, + 96, + 9, + 153, + 102, + 138, + 88, + 227, + 89, + 211, + 37, + 226, + 170, + 230, + 165, + 66, 2, 0, 0, @@ -9034,67 +8826,82 @@ } }, "owner": { - "AddressOwner": "0xc7035483b90ae369f3ce48c3971bf58c19417997746c67320c35d154a6425ab7" + "AddressOwner": "0x5940b64eb29720ea0c35d49ee3d599b3477879d68b7e652904b236edd6ead88a" }, - "previous_transaction": "Ai7U4nQvUNhzdARMaAGfisbHdNMHfRoTm1Z6xo74Q9Sr", + "previous_transaction": "7gtSzcRCnPVpmESfZRpQaHVh65UfDPZZqwfcDjwKqj7U", "storage_rebate": 0 }, { "data": { "Move": { - "type_": { - "Other": { - "address": "0000000000000000000000000000000000000000000000000000000000000002", - "module": "dynamic_field", - "name": "Field", - "type_args": [ - "u64", - { - "struct": { - "address": "0000000000000000000000000000000000000000000000000000000000000003", - "module": "staking_pool", - "name": "PoolTokenExchangeRate", - "type_args": [] - } - } - ] - } - }, - "has_public_transfer": false, - "version": 4, + "type_": "StakedIota", + "has_public_transfer": true, + "version": 3, "contents": [ - 45, - 79, - 219, - 246, - 100, - 223, - 113, - 111, - 73, - 232, - 152, - 108, - 100, - 69, - 173, - 89, - 140, - 150, - 185, - 131, - 248, - 43, - 237, + 25, + 68, + 254, + 87, + 3, + 16, + 159, 58, - 55, + 57, + 6, + 71, + 119, + 98, + 208, + 177, + 103, + 175, + 144, + 21, + 130, + 176, + 12, + 154, + 228, + 34, + 4, + 76, + 242, + 69, + 37, + 12, 70, - 43, + 29, + 249, + 67, + 164, + 123, + 138, + 6, + 11, + 45, + 207, + 2, + 237, + 185, + 30, + 13, + 130, + 229, 33, - 155, - 158, - 87, - 95, + 64, + 4, + 156, + 170, + 247, + 208, + 168, + 153, + 67, + 98, + 48, + 135, + 208, + 185, 2, 0, 0, @@ -9104,28 +8911,20 @@ 0, 0, 0, - 56, - 111, - 132, - 8, - 177, - 6, + 14, + 208, + 231, + 124, + 3, 0, - 161, - 32, - 121, - 162, - 33, - 90, - 5, 0 ] } }, "owner": { - "ObjectOwner": "0x7b94ac5bbd010c6a775455e3df1b6c9a8d24a9f6c2a9c20255b872b812fdbf87" + "AddressOwner": "0x0ff37e13505ed907d908cf37919a29117a0ab7669311f26e154dffbe492e8a5d" }, - "previous_transaction": "Ai7U4nQvUNhzdARMaAGfisbHdNMHfRoTm1Z6xo74Q9Sr", + "previous_transaction": "7gtSzcRCnPVpmESfZRpQaHVh65UfDPZZqwfcDjwKqj7U", "storage_rebate": 0 }, { @@ -9150,40 +8949,40 @@ } }, "has_public_transfer": false, - "version": 4, + "version": 3, "contents": [ - 62, - 37, - 101, - 200, - 193, - 198, - 120, - 6, - 71, - 154, - 145, - 4, - 99, - 7, - 87, - 114, - 14, - 31, - 132, - 225, - 251, - 50, - 174, - 122, - 168, - 88, - 233, - 244, - 125, - 190, - 231, - 218, + 68, + 44, + 216, + 9, + 92, + 40, + 129, + 26, + 94, + 29, + 71, + 137, + 60, + 227, + 134, + 235, + 39, + 203, + 35, + 155, + 194, + 145, + 187, + 112, + 189, + 217, + 66, + 216, + 204, + 29, + 230, + 13, 2, 0, 0, @@ -9212,9 +9011,9 @@ } }, "owner": { - "ObjectOwner": "0xc2c9ddd800c90e8a9f7f02f35379fdebe07532f71e953937fcd04fa84c7a24c0" + "ObjectOwner": "0x5e76bfe85bb87207b617ee6d9b8e5dddb2ab4ee399629f18a5c90d246425692e" }, - "previous_transaction": "Ai7U4nQvUNhzdARMaAGfisbHdNMHfRoTm1Z6xo74Q9Sr", + "previous_transaction": "7gtSzcRCnPVpmESfZRpQaHVh65UfDPZZqwfcDjwKqj7U", "storage_rebate": 0 }, { @@ -9222,72 +9021,72 @@ "Move": { "type_": "StakedIota", "has_public_transfer": true, - "version": 4, + "version": 3, "contents": [ - 86, - 40, - 138, - 207, - 103, - 213, - 59, - 125, - 194, - 215, - 87, - 152, - 231, - 33, - 44, - 78, - 167, - 108, - 45, + 79, + 61, 71, - 8, - 34, - 218, - 48, - 163, - 43, - 140, - 186, - 226, - 255, - 130, - 118, - 251, - 91, + 145, 71, + 108, + 156, + 75, + 13, + 68, + 101, + 35, + 84, 93, - 58, - 113, - 7, - 34, - 32, - 73, - 58, - 239, + 181, 215, - 234, - 130, - 32, - 211, - 15, + 201, + 242, + 216, + 92, + 142, + 246, + 226, + 143, + 52, + 169, + 72, + 98, 101, - 233, - 95, - 183, - 248, - 96, - 141, - 116, - 3, - 192, + 42, + 102, + 70, + 203, 80, - 95, - 180, - 167, + 5, + 66, + 182, + 197, + 54, + 201, + 219, + 93, + 163, + 15, + 25, + 198, + 242, + 133, + 10, + 23, + 218, + 216, + 177, + 129, + 50, + 43, + 101, + 250, + 128, + 147, + 57, + 45, + 43, + 41, 2, 0, 0, @@ -9308,9 +9107,9 @@ } }, "owner": { - "AddressOwner": "0x98346c29a0a99b9d0a80c9ede37a77c7fd93ead295fdb01b895ef1392c5087b5" + "AddressOwner": "0x08c27e08962112dddbc4d4fb5dc0159fd37594094a8d99825e6085b336490f4a" }, - "previous_transaction": "Ai7U4nQvUNhzdARMaAGfisbHdNMHfRoTm1Z6xo74Q9Sr", + "previous_transaction": "7gtSzcRCnPVpmESfZRpQaHVh65UfDPZZqwfcDjwKqj7U", "storage_rebate": 0 }, { @@ -9335,40 +9134,40 @@ } }, "has_public_transfer": false, - "version": 4, + "version": 3, "contents": [ - 137, - 242, - 230, - 41, - 95, - 95, - 114, - 102, - 141, - 122, - 98, - 119, - 0, - 44, - 43, - 62, - 6, - 67, - 33, - 0, - 19, 113, + 148, + 185, + 46, + 40, + 20, + 134, + 57, + 16, + 140, + 203, + 231, + 29, + 124, + 209, + 110, + 92, + 104, + 252, + 7, + 28, + 93, + 189, + 206, + 84, + 46, 99, - 183, - 219, - 240, - 233, - 162, - 254, - 244, - 142, - 39, + 68, + 105, + 99, + 141, + 225, 2, 0, 0, @@ -9397,9 +9196,9 @@ } }, "owner": { - "ObjectOwner": "0xa4c38f903d9744ca22430baeded1bc37c0ed3d75ce55683e69bd3d1fc40b6730" + "ObjectOwner": "0x39e10c0206c65f3422f505e4b3bcf750d39409405e685e457f4f931af8a0f1bb" }, - "previous_transaction": "Ai7U4nQvUNhzdARMaAGfisbHdNMHfRoTm1Z6xo74Q9Sr", + "previous_transaction": "7gtSzcRCnPVpmESfZRpQaHVh65UfDPZZqwfcDjwKqj7U", "storage_rebate": 0 }, { @@ -9407,72 +9206,72 @@ "Move": { "type_": "StakedIota", "has_public_transfer": true, - "version": 4, + "version": 3, "contents": [ - 160, - 24, + 136, + 20, + 159, + 67, + 60, 137, - 129, - 46, - 196, - 249, - 111, - 34, - 82, - 87, - 36, - 230, + 224, + 186, + 160, + 64, + 59, + 112, + 242, + 188, + 132, + 235, + 233, + 69, + 43, + 191, + 220, + 124, + 107, + 59, + 252, + 113, + 90, + 135, + 241, + 108, + 146, + 57, + 210, + 7, + 175, + 121, + 62, + 202, + 57, + 178, + 71, + 217, + 66, + 234, + 143, + 76, 127, - 3, - 182, - 179, - 135, - 118, - 86, - 74, + 97, + 57, + 85, + 68, + 60, + 84, + 148, + 47, 76, - 242, - 45, - 125, - 100, - 112, - 244, - 56, - 135, - 70, - 198, - 87, - 237, - 32, - 86, - 222, - 32, - 49, - 210, - 53, - 230, - 10, - 194, - 125, + 83, + 76, + 253, 91, - 46, - 170, - 128, - 158, - 85, - 158, - 11, - 173, - 248, - 152, - 226, 64, - 231, - 208, - 252, - 170, - 26, - 8, + 161, + 158, + 165, 2, 0, 0, @@ -9493,82 +9292,67 @@ } }, "owner": { - "AddressOwner": "0x48d90f650bf4d87ad129ec47392ec38a8c6c0bb5ea4b6dab610e3a841431ab99" + "AddressOwner": "0xaed89eac64cc1efe9fc3e93d9058add5f49cc64b0ce8dab136b679c7b9f3b689" }, - "previous_transaction": "Ai7U4nQvUNhzdARMaAGfisbHdNMHfRoTm1Z6xo74Q9Sr", + "previous_transaction": "7gtSzcRCnPVpmESfZRpQaHVh65UfDPZZqwfcDjwKqj7U", "storage_rebate": 0 }, { "data": { "Move": { - "type_": "StakedIota", - "has_public_transfer": true, - "version": 4, + "type_": { + "Other": { + "address": "0000000000000000000000000000000000000000000000000000000000000002", + "module": "dynamic_field", + "name": "Field", + "type_args": [ + "u64", + { + "struct": { + "address": "0000000000000000000000000000000000000000000000000000000000000003", + "module": "staking_pool", + "name": "PoolTokenExchangeRate", + "type_args": [] + } + } + ] + } + }, + "has_public_transfer": false, + "version": 3, "contents": [ - 233, - 169, - 100, - 177, - 177, - 114, - 51, - 113, - 236, - 69, - 63, - 33, - 89, - 143, - 17, - 132, - 86, - 229, - 201, - 57, - 221, - 204, - 105, - 10, - 251, - 98, - 75, - 48, - 43, - 106, - 174, - 29, - 12, - 179, - 128, - 203, - 50, - 90, - 131, - 15, - 3, - 238, + 159, 75, - 218, - 121, + 34, + 115, + 242, + 61, + 25, + 13, + 246, + 217, + 46, 11, - 5, - 225, - 117, - 83, - 128, - 22, - 245, - 212, - 124, - 179, - 82, - 201, - 60, - 198, - 218, - 220, - 19, - 4, + 45, + 79, + 92, + 170, + 131, + 79, + 222, + 209, + 152, + 55, + 210, + 160, + 195, + 134, + 191, + 118, + 182, + 39, + 155, + 160, 2, 0, 0, @@ -9578,20 +9362,28 @@ 0, 0, 0, - 14, - 208, - 231, - 124, - 3, + 56, + 111, + 132, + 8, + 177, + 6, 0, + 161, + 32, + 121, + 162, + 33, + 90, + 5, 0 ] } }, "owner": { - "AddressOwner": "0x3282178ff167d02a033e89d1280a1ec25f9dd069a0f1400c244192f1f75cbabc" + "ObjectOwner": "0xa4514f63b362d130f8d8549edc1ce7932c0722e1260dfc0d5115e1b620158701" }, - "previous_transaction": "Ai7U4nQvUNhzdARMaAGfisbHdNMHfRoTm1Z6xo74Q9Sr", + "previous_transaction": "7gtSzcRCnPVpmESfZRpQaHVh65UfDPZZqwfcDjwKqj7U", "storage_rebate": 0 }, { @@ -9616,40 +9408,40 @@ } }, "has_public_transfer": false, - "version": 4, + "version": 3, "contents": [ - 247, - 81, - 30, + 191, 133, - 150, - 51, - 82, - 0, - 141, - 200, - 130, - 77, - 253, - 4, - 236, - 192, - 176, - 228, + 254, + 73, + 119, + 242, + 16, + 83, 229, - 197, - 27, - 160, - 69, - 41, - 191, - 184, - 143, - 197, - 162, - 53, - 93, - 255, + 194, + 123, + 237, + 204, + 123, + 94, + 5, + 196, + 165, + 2, + 117, + 115, + 133, + 219, + 103, + 90, + 131, + 251, + 181, + 118, + 0, + 67, + 58, 2, 0, 0, @@ -9678,9 +9470,9 @@ } }, "owner": { - "ObjectOwner": "0x3f6b931f79fd0b2a14ed76a5b23714344c421f99a2ccd1978ef2270e167614cc" + "ObjectOwner": "0xbecc6872d3acd4009c30abd519c3be7ed7eb50f8decb7510863a40eefc41922b" }, - "previous_transaction": "Ai7U4nQvUNhzdARMaAGfisbHdNMHfRoTm1Z6xo74Q9Sr", + "previous_transaction": "7gtSzcRCnPVpmESfZRpQaHVh65UfDPZZqwfcDjwKqj7U", "storage_rebate": 0 } ] diff --git a/crates/iota-light-client/example_config/794.chk b/crates/iota-light-client/example_config/794.chk deleted file mode 100644 index 5a46f24a9646a5d0ae1877e980583a61c2665de0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17320 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 diff --git a/crates/iota-light-client/example_config/800.chk b/crates/iota-light-client/example_config/800.chk new file mode 100644 index 0000000000000000000000000000000000000000..2270ea8e814f333072cf14d515e6b7834b587002 GIT binary patch literal 14584 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 literal 0 HcmV?d00001 diff --git a/crates/iota-light-client/example_config/794.json b/crates/iota-light-client/example_config/800.json similarity index 62% rename from crates/iota-light-client/example_config/794.json rename to crates/iota-light-client/example_config/800.json index b679df4679b..47578663998 100644 --- a/crates/iota-light-client/example_config/794.json +++ b/crates/iota-light-client/example_config/800.json @@ -1,50 +1,46 @@ { "data": { "epoch": 2, - "sequence_number": 794, - "network_total_transactions": 3462, - "content_digest": "AkKefNxm11SDHcgh8CvwhwaopKZkoYuXdx2C8mAPQPg3", - "previous_digest": "9a5ay9zMmg1bkyjV4HDcsgvj1Qi5hdnoyb7qzDdsE9rN", + "sequence_number": 800, + "network_total_transactions": 3488, + "content_digest": "6YzE4CzmvehXNT7qNGz2R6fvHhdtr2AbgidRZS1v7fiR", + "previous_digest": "EvpfuTBAFT2MWPUvfZ4oHRQXUL7j2JBQu34s43oG8Enk", "epoch_rolling_gas_cost_summary": { - "computationCost": "2000000", - "storageCost": "48092800", - "storageRebate": "50198000", + "computationCost": "0", + "storageCost": "0", + "storageRebate": "0", "nonRefundableStorageFee": "0" }, - "timestamp_ms": 1729529187939, + "timestamp_ms": 1730123620755, "checkpoint_commitments": [], "end_of_epoch_data": { "nextEpochCommittee": [ [ "jc/20VUECmVvSBmxMRG1LFdGqGunLzlfuv4uw4R9HoFA5iSnUf32tfIFC8cgXPnTAATJCwx0Cv/TJs5nPMKyOi0k1T4q/rKG38Zo/UBgCJ1tKxe3md02+Q0zLlSnozjU", - "2000" + "2500" ], [ "mfJe9h+AMrkUY2RgmCxcxvE07x3a52ZX8sv+wev8jQlzdAgN9vzw3Li8Sw2OCvXYDrv/K0xZn1T0LWMS38MUJ2B4wcw0fru+xRmL4lhRPzhrkw0CwnSagD4jMJVevRoQ", - "2000" - ], - [ - "pT5rnJ7YVGCXSDx/GLJ4hC4IadI0ZIl1MPIncR5dXA/nRmoYxt91nufZW0HTMyNZC/g69Ol2pAYAEoqXWOXzJmzB/pVRnLYxtUpuW/M0PKpiErWwf4WkzmhsNU1ezdzS", - "2000" + "2500" ], [ "rd7vlNiYyI5A297/kcXxBfnPLHR/tvK8N+wD1ske2y4aV4z1RL6LCTHiXyQ9WbDDDZihbOO6HWzx1/UEJpkusK2zE0sFW+gUDS218l+wDYP45CIr8B/WrJOh/0152ljy", - "2000" + "2500" ], [ "s/1e+1yHJAOkrRPxGZUTYG0jNUqEUkmuoVdWTCP/PBXGyeZSty10DoysuTy8wGhrDsDMDBx2C/tCtDZRn8WoBUt2UzqXqfI5h9CX75ax8lJrsgc/oQp3GZQXcjR+8nT0", - "2000" + "2500" ] ], "nextEpochProtocolVersion": "1", "epochCommitments": [ { "ECMHLiveObjectSetDigest": { - "digest": "5w6pMAo5Wn3d2xJ3FFWdQK4nxJ1NX5v3LWCeyYNDZ257" + "digest": "6xDYr2xzphsbhxyweBzL26xQZTXfX8KE5etAsSTbd3nz" } } ], - "epochSupplyChange": 766999998000000 + "epochSupplyChange": 767000000000000 }, "version_specific_data": [ 0, @@ -53,7 +49,7 @@ }, "auth_signature": { "epoch": 2, - "signature": "l/H0Y90spi0zenoiKKreyirHy/xVVogwTmwqeOvQBj7/CgSC0NTAzgPYHdvdwFJC", + "signature": "i3ZecWhnKjbi6SEkmP6L3Anp/urXITf2kzVV796IeE8/6+CuvKv0FMSXbBUc8oX2", "signers_map": [ 58, 48, diff --git a/crates/iota-light-client/example_config/794_full.json b/crates/iota-light-client/example_config/800_full.json similarity index 73% rename from crates/iota-light-client/example_config/794_full.json rename to crates/iota-light-client/example_config/800_full.json index d2cf9e0afe9..e3854f125d6 100644 --- a/crates/iota-light-client/example_config/794_full.json +++ b/crates/iota-light-client/example_config/800_full.json @@ -2,50 +2,46 @@ "checkpoint_summary": { "data": { "epoch": 2, - "sequence_number": 794, - "network_total_transactions": 3462, - "content_digest": "AkKefNxm11SDHcgh8CvwhwaopKZkoYuXdx2C8mAPQPg3", - "previous_digest": "9a5ay9zMmg1bkyjV4HDcsgvj1Qi5hdnoyb7qzDdsE9rN", + "sequence_number": 800, + "network_total_transactions": 3488, + "content_digest": "6YzE4CzmvehXNT7qNGz2R6fvHhdtr2AbgidRZS1v7fiR", + "previous_digest": "EvpfuTBAFT2MWPUvfZ4oHRQXUL7j2JBQu34s43oG8Enk", "epoch_rolling_gas_cost_summary": { - "computationCost": "2000000", - "storageCost": "48092800", - "storageRebate": "50198000", + "computationCost": "0", + "storageCost": "0", + "storageRebate": "0", "nonRefundableStorageFee": "0" }, - "timestamp_ms": 1729529187939, + "timestamp_ms": 1730123620755, "checkpoint_commitments": [], "end_of_epoch_data": { "nextEpochCommittee": [ [ "jc/20VUECmVvSBmxMRG1LFdGqGunLzlfuv4uw4R9HoFA5iSnUf32tfIFC8cgXPnTAATJCwx0Cv/TJs5nPMKyOi0k1T4q/rKG38Zo/UBgCJ1tKxe3md02+Q0zLlSnozjU", - "2000" + "2500" ], [ "mfJe9h+AMrkUY2RgmCxcxvE07x3a52ZX8sv+wev8jQlzdAgN9vzw3Li8Sw2OCvXYDrv/K0xZn1T0LWMS38MUJ2B4wcw0fru+xRmL4lhRPzhrkw0CwnSagD4jMJVevRoQ", - "2000" - ], - [ - "pT5rnJ7YVGCXSDx/GLJ4hC4IadI0ZIl1MPIncR5dXA/nRmoYxt91nufZW0HTMyNZC/g69Ol2pAYAEoqXWOXzJmzB/pVRnLYxtUpuW/M0PKpiErWwf4WkzmhsNU1ezdzS", - "2000" + "2500" ], [ "rd7vlNiYyI5A297/kcXxBfnPLHR/tvK8N+wD1ske2y4aV4z1RL6LCTHiXyQ9WbDDDZihbOO6HWzx1/UEJpkusK2zE0sFW+gUDS218l+wDYP45CIr8B/WrJOh/0152ljy", - "2000" + "2500" ], [ "s/1e+1yHJAOkrRPxGZUTYG0jNUqEUkmuoVdWTCP/PBXGyeZSty10DoysuTy8wGhrDsDMDBx2C/tCtDZRn8WoBUt2UzqXqfI5h9CX75ax8lJrsgc/oQp3GZQXcjR+8nT0", - "2000" + "2500" ] ], "nextEpochProtocolVersion": "1", "epochCommitments": [ { "ECMHLiveObjectSetDigest": { - "digest": "5w6pMAo5Wn3d2xJ3FFWdQK4nxJ1NX5v3LWCeyYNDZ257" + "digest": "6xDYr2xzphsbhxyweBzL26xQZTXfX8KE5etAsSTbd3nz" } } ], - "epochSupplyChange": 766999998000000 + "epochSupplyChange": 767000000000000 }, "version_specific_data": [ 0, @@ -54,7 +50,7 @@ }, "auth_signature": { "epoch": 2, - "signature": "l/H0Y90spi0zenoiKKreyirHy/xVVogwTmwqeOvQBj7/CgSC0NTAzgPYHdvdwFJC", + "signature": "i3ZecWhnKjbi6SEkmP6L3Anp/urXITf2kzVV796IeE8/6+CuvKv0FMSXbBUc8oX2", "signers_map": [ 58, 48, @@ -85,12 +81,12 @@ "V1": { "transactions": [ { - "transaction": "9AoR24Tcmss7K3DgBZYiUZNxHFuk8kdAbZEMcFe9mcAi", - "effects": "FKwupJzjb3Fivepci1CQ6P3woNhNM1X1hTTJbC4FVwH7" + "transaction": "3QnU5myG1an94ErHksixC5wJx7gKpdWVwPMdqJ4mdrJZ", + "effects": "f4Sab8eYuy33CwH56Z7RcNTQb6MERtQfyFzkpRxKYD5" }, { - "transaction": "93PPEMeHQJUoVDVpEyTAEsyByUjrQTs4SPhSgM2wyfy6", - "effects": "FSBWiogP3yZEvMWDwqFpnL6wBo8jgVrcx5TLJ8Wc2iE4" + "transaction": "DpSZVwqohRzF7ASz7PMM8xL1ZkMnNvWMLJfjadt9ybE9", + "effects": "3u5HT9dV3rqoXmhpWgpKj1HPTzbQUaqHAVVYEo4EdaUv" } ], "user_signatures": [ @@ -117,10 +113,10 @@ "kind": { "ConsensusCommitPrologueV1": { "epoch": 2, - "round": 1055, + "round": 1050, "sub_dag_index": null, - "commit_timestamp_ms": 1729529187939, - "consensus_commit_digest": "Ctg6sCr2iUJ2xCM5UvnMqUHcoX47AYrpJ1Bz6tcYHkRd", + "commit_timestamp_ms": 1730123620755, + "consensus_commit_digest": "t7np2LsgnDbZbdCYkQ4S4s6DpEExXP1EFP4kEL18iQT", "consensus_determined_version_assignments": { "CancelledTransactions": [] } @@ -151,7 +147,7 @@ "auth_signature": {} }, "effects": { - "V2": { + "V1": { "status": "Success", "executed_epoch": 2, "gas_used": { @@ -160,13 +156,13 @@ "storageRebate": "0", "nonRefundableStorageFee": "0" }, - "transaction_digest": "9AoR24Tcmss7K3DgBZYiUZNxHFuk8kdAbZEMcFe9mcAi", + "transaction_digest": "3QnU5myG1an94ErHksixC5wJx7gKpdWVwPMdqJ4mdrJZ", "gas_object_index": null, "events_digest": null, "dependencies": [ - "D5DhLqEFyptecwzoQ9nYjxyz5eE4TgYAMaBAYZRu9vYL" + "6DpBiWHS8WSswgFiGpU3xfKeG2xCd99kWDSpXovoH5bs" ], - "lamport_version": 3126, + "lamport_version": 3155, "changed_objects": [ [ "0x0000000000000000000000000000000000000000000000000000000000000006", @@ -174,8 +170,8 @@ "input_state": { "Exist": [ [ - 3125, - "HsHd4Lg7UPUuQ8Fn82bu7U6zc6WXmYEG1gQSnpVc6egP" + 3154, + "7a3RKbvgXmvrXoYcvctK1aMmhyfyGLLJ4rsyTEHyD26K" ], { "Shared": { @@ -186,7 +182,7 @@ }, "output_state": { "ObjectWrite": [ - "CkH6FUhb1zNsLqwoSRTcoK6R6aCkzUBZuVBpCK7ju8zY", + "D9kGegTRRhMW6vcP2g6kMrn1wrSJuBj2tFTumqVWvYXc", { "Shared": { "initial_shared_version": 1 @@ -216,7 +212,7 @@ } }, "has_public_transfer": false, - "version": 3125, + "version": 3154, "contents": [ 0, 0, @@ -250,10 +246,10 @@ 0, 0, 6, - 45, - 14, - 249, - 175, + 88, + 97, + 103, + 211, 146, 1, 0, @@ -266,7 +262,7 @@ "initial_shared_version": 1 } }, - "previous_transaction": "D5DhLqEFyptecwzoQ9nYjxyz5eE4TgYAMaBAYZRu9vYL", + "previous_transaction": "6DpBiWHS8WSswgFiGpU3xfKeG2xCd99kWDSpXovoH5bs", "storage_rebate": 0 } ], @@ -283,7 +279,7 @@ } }, "has_public_transfer": false, - "version": 3126, + "version": 3155, "contents": [ 0, 0, @@ -317,10 +313,10 @@ 0, 0, 6, - 99, - 14, - 249, - 175, + 147, + 97, + 103, + 211, 146, 1, 0, @@ -333,7 +329,7 @@ "initial_shared_version": 1 } }, - "previous_transaction": "9AoR24Tcmss7K3DgBZYiUZNxHFuk8kdAbZEMcFe9mcAi", + "previous_transaction": "3QnU5myG1an94ErHksixC5wJx7gKpdWVwPMdqJ4mdrJZ", "storage_rebate": 0 } ] @@ -356,11 +352,11 @@ "ChangeEpoch": { "epoch": 3, "protocol_version": 1, - "storage_charge": 48092800, - "computation_charge": 2000000, - "storage_rebate": 50198000, + "storage_charge": 0, + "computation_charge": 0, + "storage_rebate": 0, "non_refundable_storage_fee": 0, - "epoch_start_timestamp_ms": 1729529187939, + "epoch_start_timestamp_ms": 1730123620755, "system_packages": [] } } @@ -391,7 +387,7 @@ "auth_signature": {} }, "effects": { - "V2": { + "V1": { "status": "Success", "executed_epoch": 2, "gas_used": { @@ -400,13 +396,13 @@ "storageRebate": "0", "nonRefundableStorageFee": "0" }, - "transaction_digest": "93PPEMeHQJUoVDVpEyTAEsyByUjrQTs4SPhSgM2wyfy6", + "transaction_digest": "DpSZVwqohRzF7ASz7PMM8xL1ZkMnNvWMLJfjadt9ybE9", "gas_object_index": null, - "events_digest": "Bpcus8FBAfcoZZY23WtBaS6ZgDzQMV9hHgNo727qZdZZ", + "events_digest": "834DanfXhDFWEq2TtLmKaQ8tNAYhFU6W9nMbuL61fSHf", "dependencies": [ - "7D8EoGyF5bEHXCwfBJUZ6cJBbkFs7Fvzy9UY2jL6WXGm" + "7gtSzcRCnPVpmESfZRpQaHVh65UfDPZZqwfcDjwKqj7U" ], - "lamport_version": 7, + "lamport_version": 4, "changed_objects": [ [ "0x0000000000000000000000000000000000000000000000000000000000000005", @@ -414,8 +410,8 @@ "input_state": { "Exist": [ [ - 6, - "H2wKv6r33AVUm6KPfqMpabz6S5QVKcyMFNXfBN6btEcM" + 3, + "5u1FEdHb4shFkhfNdKvHnF83sD5ZJLwQA3Doh7AnQuJR" ], { "Shared": { @@ -426,7 +422,7 @@ }, "output_state": { "ObjectWrite": [ - "AikaXNgdX4Ypvzoq1yXzfBGTwXsdwf3VDmWVTRuEod5", + "eeD8knuTf1PUTbdD9ftmyHfEfmNCNnTrSNRjZWySRs5", { "Shared": { "initial_shared_version": 1 @@ -438,14 +434,14 @@ } ], [ - "0x1c7f007323d0e7f799c61af86124f0463dd0367770538d6b272054c2fd5ecd85", + "0x42923fd7772b154ed1760ad47ae5d415f93b529c9053f790bb3d9884e46b1094", { "input_state": "NotExist", "output_state": { "ObjectWrite": [ - "2rmhsb9iB9WAn8YpvPcV4d2rhmDNYxDEn7mi5bYkuMwr", + "JBmgsTfZa685xAAMXjAsKDx6uiwZfvY2UaNPm4JFjcDo", { - "ObjectOwner": "0x7b94ac5bbd010c6a775455e3df1b6c9a8d24a9f6c2a9c20255b872b812fdbf87" + "AddressOwner": "0x5940b64eb29720ea0c35d49ee3d599b3477879d68b7e652904b236edd6ead88a" } ] }, @@ -453,87 +449,54 @@ } ], [ - "0x33f9942f1cc7744ab6e291685e570ce2f93666984211836cb3c1ffab69f29a16", + "0x5b890eaf2abcfa2ab90b77b8e6f3d5d8609586c3e583baf3dccd5af17edf48d1", { - "input_state": "NotExist", - "output_state": { - "ObjectWrite": [ - "8FKgB1nNtbGvYUJ6YpveA5TpLubfQwKAf1xw1XG4frE2", + "input_state": { + "Exist": [ + [ + 3, + "BAhqeCeYr17aQKD1MpaGuHAgXxnLmP5mwZgyPYdrXSt2" + ], { - "ObjectOwner": "0x3f6b931f79fd0b2a14ed76a5b23714344c421f99a2ccd1978ef2270e167614cc" + "ObjectOwner": "0x0000000000000000000000000000000000000000000000000000000000000005" } ] }, - "id_operation": "Created" - } - ], - [ - "0x44525ac88ee91773ee91aefaa51407ae62b2b97fbb2ec198881f6d125b564467", - { - "input_state": "NotExist", "output_state": { "ObjectWrite": [ - "CYqtEAVGmTs9TWo5UjAuwiV982TLJ6QF3Asv19Lsyvv6", - { - "AddressOwner": "0x98346c29a0a99b9d0a80c9ede37a77c7fd93ead295fdb01b895ef1392c5087b5" - } - ] - }, - "id_operation": "Created" - } - ], - [ - "0x4acf88b2d557b8333e02206bfce6d03b8268ade48cdd0236a6d0d0cbf495d74b", - { - "input_state": { - "Exist": [ - [ - 6, - "8beTs5mn1WLkSKzqEoGMdzVDL5Jf8nkxoxp3LSzDnejz" - ], + "A7NYYiA5ofemN8tCViXcamfQyH1F5AB3vu9eNyTE35JB", { - "ObjectOwner": "0x5900861dc05e16e4230f67df667da400b6f1ad94734c0c86ffc87315c9d81dd5" + "ObjectOwner": "0x0000000000000000000000000000000000000000000000000000000000000005" } ] }, - "output_state": "NotExist", - "id_operation": "Deleted" + "id_operation": "None" } ], [ - "0x5b890eaf2abcfa2ab90b77b8e6f3d5d8609586c3e583baf3dccd5af17edf48d1", + "0x739ac09bd4f425f8b5243352124e33a55f8125a5ea1c190fd29d5d6473fbdbd8", { - "input_state": { - "Exist": [ - [ - 6, - "4NGemPTVSByE4Lxp8f8ovmciyF5Cxv9GrPHMNVUWS45q" - ], - { - "ObjectOwner": "0x0000000000000000000000000000000000000000000000000000000000000005" - } - ] - }, + "input_state": "NotExist", "output_state": { "ObjectWrite": [ - "Bu4nkNJDRiizsx4Y7TkKa3m4rnZ6UEsVayDgyY6SfRr8", + "Byfvv7G2czoGfBgwFLBXzTS5uNdo76JZRisQszw7MKdU", { - "ObjectOwner": "0x0000000000000000000000000000000000000000000000000000000000000005" + "AddressOwner": "0x08c27e08962112dddbc4d4fb5dc0159fd37594094a8d99825e6085b336490f4a" } ] }, - "id_operation": "None" + "id_operation": "Created" } ], [ - "0x69296bc880090a08cafa6af5a97b9df0ed1f02cb12a811fb51008ebfa4f44b21", + "0x88b3538f4536a489e1ae71bb4a2aa069fb80b0862f81c5c3fc22ae0a7d7ecbb3", { "input_state": "NotExist", "output_state": { "ObjectWrite": [ - "ACdmPpGSnRPmLrncELtQh5vhn8FEGPVwuG1vKwCQCqYX", + "4tmxufC4X34zzYdMGxdSA1uEyfRTMxgb7Ucvt1EE3rW8", { - "AddressOwner": "0x48d90f650bf4d87ad129ec47392ec38a8c6c0bb5ea4b6dab610e3a841431ab99" + "ObjectOwner": "0xbecc6872d3acd4009c30abd519c3be7ed7eb50f8decb7510863a40eefc41922b" } ] }, @@ -541,14 +504,14 @@ } ], [ - "0x8bc3e2849d46d85efa5498f38213bc9de90a21e48ec2ffed3e1149daa9cfaee6", + "0x9422d9126d4bad795b494d380de1208a557c82e831a719086c87c5f3b1370f25", { "input_state": "NotExist", "output_state": { "ObjectWrite": [ - "HDNjbi4wu19gRrgamZnd8fRiymRmCaSSGzR8DsewSn87", + "5wqUaXY9Nc6TDKcF3d5QdQXQ49yqbW2qMBjeMxxChjTH", { - "ObjectOwner": "0xa4c38f903d9744ca22430baeded1bc37c0ed3d75ce55683e69bd3d1fc40b6730" + "AddressOwner": "0xaed89eac64cc1efe9fc3e93d9058add5f49cc64b0ce8dab136b679c7b9f3b689" } ] }, @@ -556,14 +519,14 @@ } ], [ - "0xad1fa8864288ead331137a2d74a0cd37454b28ef8f7724ef933bf6da36a74fad", + "0x9a7f201f840c5a9c3c2019823366b2bd20ffcf90767b7c3a5c1423cdaeed1c72", { "input_state": "NotExist", "output_state": { "ObjectWrite": [ - "5cSjKfC2Juxm7WJmkygh6HBy2pqV7Q59qyq8eQJZmma2", + "Hgbcdi7cKGVaXHnzTBYfxMFnTGLdbuJ6PUkz3ts98uNF", { - "AddressOwner": "0xc7035483b90ae369f3ce48c3971bf58c19417997746c67320c35d154a6425ab7" + "ObjectOwner": "0xa4514f63b362d130f8d8549edc1ce7932c0722e1260dfc0d5115e1b620158701" } ] }, @@ -571,14 +534,14 @@ } ], [ - "0xbaf8c62cceab2a9537145168eb4e45c4ca05491d949774ce7509186a7fd55f64", + "0xbb3e4fe1a1a749788faae2157076507ad7017349ac10c813cc3c170d416f6254", { "input_state": "NotExist", "output_state": { "ObjectWrite": [ - "A2WLnzxY8u1FEh7yE6MA4c2XNoe8j9V6QppZajh5eN4Z", + "E6Uwiw7pPNtbbBmUfqXAB3G6nDhbhcCwzmTmaihudGuC", { - "AddressOwner": "0x3282178ff167d02a033e89d1280a1ec25f9dd069a0f1400c244192f1f75cbabc" + "AddressOwner": "0x0ff37e13505ed907d908cf37919a29117a0ab7669311f26e154dffbe492e8a5d" } ] }, @@ -586,14 +549,14 @@ } ], [ - "0xdbc7841f48d68276b0996669907d78068b10f71a0674aceebc454e43dfd99731", + "0xe4152b71c561296203dd5632ffc0f5f267a74876bc951239577689e2c23a461f", { "input_state": "NotExist", "output_state": { "ObjectWrite": [ - "J5PRx3Qf5gm7XK3q4KQJSTT1Zup7bunh8S4S6BaJrXK9", + "8hJy2ZRuBFsRXDQdAiisVMi6sgEgosCrXKJDTiH4wBRV", { - "ObjectOwner": "0xc2c9ddd800c90e8a9f7f02f35379fdebe07532f71e953937fcd04fa84c7a24c0" + "ObjectOwner": "0x5e76bfe85bb87207b617ee6d9b8e5dddb2ab4ee399629f18a5c90d246425692e" } ] }, @@ -601,14 +564,14 @@ } ], [ - "0xdfc0922b6d60397ecc543811c43a6cd1ad4535fa2c846aa6599447e6cc4795c0", + "0xe445785228a576b921477a7613919c0ff581aec2ff84d147ff52d0984b135ec6", { "input_state": "NotExist", "output_state": { "ObjectWrite": [ - "EvjjbZkfF5FdT48EShMHFvh6CFwANaAaoo7bcAzgRLvj", + "H8BA44jwqy6wiSy9b3Pvs13s3nmG9JVgoevmXzjzyhsh", { - "ObjectOwner": "0x6f2d03a861c6a388c75aa04ef956525f6fa2f05b067be9f9e436e98501c66f8b" + "ObjectOwner": "0x39e10c0206c65f3422f505e4b3bcf750d39409405e685e457f4f931af8a0f1bb" } ] }, @@ -633,102 +596,102 @@ "type_args": [] }, "contents": [ - 232, - 14, - 72, - 38, - 40, - 13, + 210, + 7, + 175, 121, - 140, - 248, - 193, - 87, - 156, - 150, - 228, - 154, - 136, - 166, - 92, - 15, - 240, - 225, - 156, - 124, - 227, - 251, - 244, - 22, - 171, - 191, - 166, - 19, + 62, + 202, + 57, + 178, + 71, + 217, + 66, + 234, + 143, + 76, + 127, + 97, + 57, + 85, + 68, + 60, + 84, + 148, + 47, + 76, + 83, + 76, + 253, + 91, + 64, + 161, + 158, + 165, 174, + 216, + 158, + 172, + 100, + 204, + 30, + 254, + 159, + 195, + 233, + 61, + 144, + 88, + 173, + 213, + 244, + 156, + 198, + 75, + 12, + 232, + 218, + 177, + 54, + 182, + 121, 199, - 3, - 84, - 131, 185, - 10, - 227, - 105, 243, - 206, - 72, + 182, + 137, + 174, + 216, + 158, + 172, + 100, + 204, + 30, + 254, + 159, 195, - 151, - 27, - 245, - 140, - 25, - 65, - 121, - 151, - 116, - 108, - 103, - 50, + 233, + 61, + 144, + 88, + 173, + 213, + 244, + 156, + 198, + 75, 12, - 53, - 209, - 84, - 166, - 66, - 90, - 183, + 232, + 218, + 177, + 54, + 182, + 121, 199, - 3, - 84, - 131, 185, - 10, - 227, - 105, 243, - 206, - 72, - 195, - 151, - 27, - 245, - 140, - 25, - 65, - 121, - 151, - 116, - 108, - 103, - 50, - 12, - 53, - 209, - 84, - 166, - 66, - 90, - 183, + 182, + 137, 2, 0, 0, @@ -758,114 +721,114 @@ "type_args": [] }, "contents": [ - 251, - 91, - 71, + 203, + 80, + 5, + 66, + 182, + 197, + 54, + 201, + 219, 93, - 58, - 113, - 7, - 34, - 32, - 73, - 58, - 239, - 215, - 234, - 130, - 32, - 211, + 163, 15, - 101, - 233, - 95, - 183, - 248, - 96, - 141, - 116, - 3, - 192, - 80, - 95, - 180, - 167, - 152, - 52, - 108, - 41, - 160, - 169, - 155, - 157, + 25, + 198, + 242, + 133, 10, + 23, + 218, + 216, + 177, + 129, + 50, + 43, + 101, + 250, 128, - 201, - 237, - 227, - 122, - 119, - 199, - 253, 147, - 234, - 210, - 149, - 253, - 176, - 27, - 137, - 94, - 241, 57, - 44, - 80, - 135, - 181, - 152, - 52, - 108, + 45, + 43, 41, - 160, - 169, - 155, - 157, - 10, - 128, - 201, - 237, - 227, - 122, - 119, - 199, - 253, - 147, - 234, - 210, - 149, - 253, - 176, - 27, - 137, - 94, - 241, - 57, - 44, - 80, - 135, - 181, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 14, - 208, - 231, + 8, + 194, + 126, + 8, + 150, + 33, + 18, + 221, + 219, + 196, + 212, + 251, + 93, + 192, + 21, + 159, + 211, + 117, + 148, + 9, + 74, + 141, + 153, + 130, + 94, + 96, + 133, + 179, + 54, + 73, + 15, + 74, + 8, + 194, + 126, + 8, + 150, + 33, + 18, + 221, + 219, + 196, + 212, + 251, + 93, + 192, + 21, + 159, + 211, + 117, + 148, + 9, + 74, + 141, + 153, + 130, + 94, + 96, + 133, + 179, + 54, + 73, + 15, + 74, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14, + 208, + 231, 124, 3, 0, @@ -883,102 +846,102 @@ "type_args": [] }, "contents": [ - 87, - 237, + 61, + 204, + 132, + 220, + 80, + 55, + 5, + 242, + 131, + 99, + 205, + 122, + 85, 32, - 86, - 222, + 214, + 232, + 30, + 96, + 9, + 153, + 102, + 138, + 88, + 227, + 89, + 211, + 37, + 226, + 170, + 230, + 165, + 66, + 89, + 64, + 182, + 78, + 178, + 151, 32, - 49, - 210, + 234, + 12, 53, - 230, - 10, - 194, - 125, - 91, - 46, - 170, - 128, - 158, - 85, + 212, 158, - 11, - 173, - 248, - 152, - 226, - 64, - 231, - 208, - 252, - 170, - 26, - 8, - 72, - 217, - 15, + 227, + 213, + 153, + 179, + 71, + 120, + 121, + 214, + 139, + 126, 101, - 11, - 244, - 216, - 122, - 209, 41, - 236, - 71, - 57, - 46, - 195, + 4, + 178, + 54, + 237, + 214, + 234, + 216, 138, - 140, - 108, - 11, - 181, + 89, + 64, + 182, + 78, + 178, + 151, + 32, 234, - 75, - 109, - 171, - 97, - 14, - 58, - 132, - 20, - 49, - 171, + 12, + 53, + 212, + 158, + 227, + 213, 153, - 72, - 217, - 15, + 179, + 71, + 120, + 121, + 214, + 139, + 126, 101, - 11, - 244, - 216, - 122, - 209, 41, - 236, - 71, - 57, - 46, - 195, - 138, - 140, - 108, - 11, - 181, + 4, + 178, + 54, + 237, + 214, 234, - 75, - 109, - 171, - 97, - 14, - 58, - 132, - 20, - 49, - 171, - 153, + 216, + 138, 2, 0, 0, @@ -1008,102 +971,102 @@ "type_args": [] }, "contents": [ - 12, - 179, - 128, - 203, - 50, - 90, - 131, - 15, - 3, - 238, - 75, - 218, - 121, + 29, + 249, + 67, + 164, + 123, + 138, + 6, 11, - 5, - 225, - 117, - 83, - 128, - 22, - 245, - 212, - 124, - 179, - 82, - 201, - 60, - 198, - 218, - 220, - 19, - 4, - 50, - 130, - 23, - 143, - 241, - 103, - 208, - 42, - 3, - 62, - 137, - 209, - 40, - 10, + 45, + 207, + 2, + 237, + 185, 30, - 194, - 95, - 157, - 208, - 105, - 160, - 241, + 13, + 130, + 229, + 33, 64, - 12, - 36, - 65, - 146, - 241, + 4, + 156, + 170, 247, - 92, - 186, - 188, - 50, - 130, - 23, - 143, - 241, - 103, - 208, - 42, - 3, - 62, - 137, - 209, - 40, - 10, - 30, - 194, - 95, - 157, 208, - 105, - 160, - 241, - 64, - 12, - 36, - 65, - 146, - 241, - 247, - 92, - 186, - 188, + 168, + 153, + 67, + 98, + 48, + 135, + 208, + 185, + 15, + 243, + 126, + 19, + 80, + 94, + 217, + 7, + 217, + 8, + 207, + 55, + 145, + 154, + 41, + 17, + 122, + 10, + 183, + 102, + 147, + 17, + 242, + 110, + 21, + 77, + 255, + 190, + 73, + 46, + 138, + 93, + 15, + 243, + 126, + 19, + 80, + 94, + 217, + 7, + 217, + 8, + 207, + 55, + 145, + 154, + 41, + 17, + 122, + 10, + 183, + 102, + 147, + 17, + 242, + 110, + 21, + 77, + 255, + 190, + 73, + 46, + 138, + 93, 2, 0, 0, @@ -1141,38 +1104,38 @@ 0, 0, 0, + 174, + 216, + 158, + 172, + 100, + 204, + 30, + 254, + 159, + 195, + 233, + 61, + 144, + 88, + 173, + 213, + 244, + 156, + 198, + 75, + 12, + 232, + 218, + 177, + 54, + 182, + 121, 199, - 3, - 84, - 131, 185, - 10, - 227, - 105, 243, - 206, - 72, - 195, - 151, - 27, - 245, - 140, - 25, - 65, - 121, - 151, - 116, - 108, - 103, - 50, - 12, - 53, - 209, - 84, - 166, - 66, - 90, - 183, + 182, + 137, 232, 3, 0, @@ -1259,38 +1222,38 @@ 0, 0, 0, - 152, - 52, - 108, - 41, - 160, - 169, - 155, - 157, - 10, - 128, - 201, - 237, - 227, - 122, - 119, - 199, - 253, - 147, - 234, - 210, - 149, - 253, - 176, - 27, - 137, + 8, + 194, + 126, + 8, + 150, + 33, + 18, + 221, + 219, + 196, + 212, + 251, + 93, + 192, + 21, + 159, + 211, + 117, + 148, + 9, + 74, + 141, + 153, + 130, 94, - 241, - 57, - 44, - 80, - 135, - 181, + 96, + 133, + 179, + 54, + 73, + 15, + 74, 232, 3, 0, @@ -1377,38 +1340,38 @@ 0, 0, 0, - 72, - 217, - 15, + 89, + 64, + 182, + 78, + 178, + 151, + 32, + 234, + 12, + 53, + 212, + 158, + 227, + 213, + 153, + 179, + 71, + 120, + 121, + 214, + 139, + 126, 101, - 11, - 244, - 216, - 122, - 209, 41, - 236, - 71, - 57, - 46, - 195, - 138, - 140, - 108, - 11, - 181, + 4, + 178, + 54, + 237, + 214, 234, - 75, - 109, - 171, - 97, - 14, - 58, - 132, - 20, - 49, - 171, - 153, + 216, + 138, 232, 3, 0, @@ -1495,38 +1458,38 @@ 0, 0, 0, - 50, - 130, - 23, - 143, - 241, - 103, - 208, - 42, - 3, - 62, - 137, - 209, - 40, + 15, + 243, + 126, + 19, + 80, + 94, + 217, + 7, + 217, + 8, + 207, + 55, + 145, + 154, + 41, + 17, + 122, 10, - 30, - 194, - 95, - 157, - 208, - 105, - 160, - 241, - 64, - 12, - 36, - 65, - 146, - 241, - 247, - 92, - 186, - 188, + 183, + 102, + 147, + 17, + 242, + 110, + 21, + 77, + 255, + 190, + 73, + 46, + 138, + 93, 232, 3, 0, @@ -1600,8 +1563,8 @@ "sender": "0x0000000000000000000000000000000000000000000000000000000000000000", "type_": { "address": "0000000000000000000000000000000000000000000000000000000000000003", - "module": "validator_set", - "name": "ValidatorJoinEvent", + "module": "iota_system_state_inner", + "name": "SystemEpochInfoEvent", "type_args": [] }, "contents": [ @@ -1613,83 +1576,15 @@ 0, 0, 0, - 245, - 102, - 129, - 54, - 96, - 157, - 170, - 89, - 196, - 43, - 209, - 118, - 250, - 95, - 88, - 86, - 6, - 162, - 244, - 209, - 239, - 219, - 71, - 136, - 52, - 112, - 134, - 45, - 59, - 63, - 115, - 136, - 148, - 42, - 142, - 98, - 212, - 124, 1, - 32, - 200, - 159, - 249, - 18, - 173, - 14, - 35, - 233, - 104, - 182, - 193, - 93, - 160, - 226, - 192, - 97, - 115, - 27, - 55, - 81, - 112, - 175, - 105, - 37 - ] - }, - { - "package_id": "0x0000000000000000000000000000000000000000000000000000000000000003", - "transaction_module": "iota_system", - "sender": "0x0000000000000000000000000000000000000000000000000000000000000000", - "type_": { - "address": "0000000000000000000000000000000000000000000000000000000000000003", - "module": "iota_system_state_inner", - "name": "SystemEpochInfoEvent", - "type_args": [] - }, - "contents": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 232, 3, 0, 0, @@ -1698,7 +1593,13 @@ 0, 0, 0, - 1, + 208, + 71, + 44, + 183, + 125, + 29, + 0, 0, 0, 0, @@ -1706,8 +1607,6 @@ 0, 0, 0, - 232, - 3, 0, 0, 0, @@ -1715,40 +1614,19 @@ 0, 0, 0, - 80, - 178, - 216, - 102, - 186, - 38, 0, - 128, - 214, - 221, - 2, 0, 0, 0, 0, - 240, - 245, - 253, - 2, 0, 0, 0, 0, - 240, - 223, - 190, - 2, 0, 0, 0, 0, - 128, - 132, - 30, 0, 0, 0, @@ -1770,9 +1648,9 @@ 0, 0, 0, - 128, - 107, - 108, + 0, + 240, + 138, 26, 149, 185, @@ -1795,7 +1673,7 @@ } }, "has_public_transfer": false, - "version": 6, + "version": 3, "contents": [ 0, 0, @@ -1845,8 +1723,8 @@ "initial_shared_version": 1 } }, - "previous_transaction": "7D8EoGyF5bEHXCwfBJUZ6cJBbkFs7Fvzy9UY2jL6WXGm", - "storage_rebate": 1451600 + "previous_transaction": "7gtSzcRCnPVpmESfZRpQaHVh65UfDPZZqwfcDjwKqj7U", + "storage_rebate": 0 }, { "data": { @@ -1861,8 +1739,8 @@ { "struct": { "address": "0000000000000000000000000000000000000000000000000000000000000003", - "module": "validator", - "name": "Validator", + "module": "iota_system_state_inner", + "name": "IotaSystemStateInnerV2", "type_args": [] } } @@ -1870,367 +1748,385 @@ } }, "has_public_transfer": false, - "version": 6, + "version": 3, "contents": [ - 74, - 207, - 136, - 178, - 213, - 87, + 91, + 137, + 14, + 175, + 42, + 188, + 250, + 42, + 185, + 11, + 119, 184, - 51, - 62, - 2, - 32, - 107, - 252, 230, - 208, - 59, - 130, - 104, - 173, - 228, - 140, - 221, - 2, - 54, - 166, - 208, - 208, - 203, - 244, + 243, + 213, + 216, + 96, 149, - 215, - 75, + 134, + 195, + 229, + 131, + 186, + 243, + 220, + 205, + 90, + 241, + 126, + 223, + 72, + 209, + 2, + 0, 0, 0, 0, 0, 0, 0, + 2, 0, 0, - 245, - 102, - 129, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 235, + 80, + 81, + 188, + 82, 54, - 96, - 157, - 170, - 89, - 196, - 43, - 209, - 118, - 250, + 128, + 152, 95, - 88, - 86, + 131, + 193, + 49, + 226, + 212, + 212, + 46, 6, - 162, + 207, + 172, + 155, + 77, + 248, + 124, + 156, + 93, + 124, + 109, + 206, + 232, + 47, + 39, + 137, + 0, + 224, 244, - 209, - 239, - 219, - 71, - 136, - 52, - 112, - 134, - 45, + 68, + 154, 59, - 63, - 115, - 136, - 96, - 165, - 62, - 107, - 156, - 158, + 103, + 43, + 0, + 224, + 188, + 17, + 34, + 196, + 26, + 0, + 4, + 174, 216, - 84, - 96, - 151, - 72, - 60, - 127, - 24, - 178, - 120, - 132, - 46, - 8, - 105, - 210, - 52, + 158, + 172, 100, - 137, - 117, - 48, - 242, - 39, - 113, + 204, 30, - 93, - 92, - 15, - 231, - 70, - 106, - 24, - 198, - 223, - 117, - 158, - 231, - 217, - 91, - 65, - 211, - 51, - 35, - 89, - 11, - 248, - 58, - 244, + 254, + 159, + 195, 233, - 118, - 164, - 6, - 0, - 18, - 138, - 151, + 61, + 144, 88, - 229, - 243, - 38, - 108, - 193, - 254, - 149, - 81, + 173, + 213, + 244, 156, + 198, + 75, + 12, + 232, + 218, + 177, + 54, 182, - 49, - 181, - 74, - 110, - 91, + 121, + 199, + 185, 243, - 52, - 60, - 170, - 98, - 18, - 181, - 176, - 127, - 133, - 164, - 206, - 104, - 108, - 53, - 77, - 94, - 205, - 220, - 210, - 32, - 207, - 129, - 54, - 12, 182, - 29, - 102, - 61, - 164, + 137, + 96, + 141, + 207, + 246, + 209, + 85, + 4, + 10, + 101, + 111, + 72, + 25, + 177, + 49, + 17, + 181, + 44, + 87, 70, - 65, - 92, - 223, - 12, - 100, - 100, - 218, - 182, - 114, + 168, + 107, + 167, + 47, + 57, + 95, + 186, + 254, + 46, + 195, + 132, + 125, + 30, + 129, 64, - 69, - 6, - 60, - 197, - 86, - 217, - 55, - 130, - 105, + 230, + 36, + 167, + 81, + 253, 246, - 35, - 198, - 32, - 20, - 87, - 228, - 166, - 96, - 203, - 177, - 45, - 143, + 181, + 242, + 5, + 11, + 199, 32, - 164, - 6, - 188, - 131, + 92, + 249, + 211, + 0, + 4, + 201, + 11, + 12, + 116, 10, - 49, - 73, - 253, - 43, - 70, - 97, - 189, - 91, - 77, - 165, - 139, - 113, - 6, - 239, - 124, - 39, - 16, - 48, - 180, - 146, - 1, + 255, + 211, 38, - 21, - 25, + 206, + 103, + 60, + 194, + 178, 58, - 185, - 14, - 59, - 219, - 52, - 229, - 98, - 216, + 45, + 36, + 213, + 62, + 42, + 254, + 178, + 134, + 223, + 198, + 104, + 253, 64, - 147, - 144, - 33, - 202, - 4, - 30, - 242, - 244, + 96, + 8, + 157, 109, - 108, - 93, - 207, + 43, + 23, + 183, + 153, + 221, + 54, + 249, + 13, + 51, + 46, + 84, 167, - 234, - 6, - 118, - 129, - 131, 163, - 47, - 169, 56, - 167, - 155, - 58, - 146, - 95, - 139, - 70, - 22, - 220, - 120, - 10, - 118, - 97, - 108, + 212, + 32, + 109, + 235, + 35, + 7, + 201, + 239, + 185, + 254, + 209, + 111, + 122, + 55, + 135, + 92, + 135, + 145, + 234, + 34, + 205, + 172, + 200, + 167, + 206, + 76, + 83, + 189, 105, - 100, + 186, + 194, + 69, 97, - 116, - 111, - 114, + 182, + 32, + 233, + 229, + 74, + 177, + 163, + 194, + 251, + 42, + 2, + 77, + 108, + 140, + 235, + 238, + 171, + 17, + 178, + 173, + 55, + 71, + 146, + 50, + 124, + 82, + 10, + 10, + 129, + 151, + 215, + 205, + 212, + 237, 48, - 11, - 100, - 101, - 115, - 99, - 114, - 105, - 112, - 116, - 105, - 111, - 110, - 25, - 104, - 116, - 116, - 112, - 115, - 58, - 47, + 133, + 10, + 155, + 203, 47, - 105, + 247, + 198, + 115, + 43, + 222, + 83, + 188, + 159, + 173, + 91, + 96, + 225, + 142, + 9, + 106, + 136, + 182, + 107, + 125, + 168, + 83, + 123, + 49, + 185, + 228, + 0, + 172, + 250, + 235, + 90, + 33, + 169, + 255, + 193, + 15, + 174, 111, - 116, + 249, + 22, + 108, + 133, + 142, + 171, + 11, + 118, 97, - 46, - 111, - 114, - 103, - 47, 108, - 111, - 103, - 111, - 46, - 112, - 110, - 103, - 20, - 104, - 116, - 116, - 112, - 115, - 58, - 47, - 47, - 119, - 119, - 119, - 46, 105, - 111, - 116, + 100, 97, - 46, + 116, 111, 114, - 103, - 28, + 45, + 49, + 0, + 0, + 0, + 29, 47, - 100, - 110, - 115, + 105, + 112, + 52, 47, 49, 50, @@ -2246,20 +2142,21 @@ 99, 112, 47, - 56, - 48, - 56, - 48, + 53, + 53, + 50, + 55, + 55, 47, 104, 116, 116, 112, - 23, + 24, 47, - 100, - 110, - 115, + 105, + 112, + 52, 47, 49, 50, @@ -2275,39 +2172,16 @@ 100, 112, 47, - 56, - 48, - 56, - 52, - 23, - 47, - 100, - 110, - 115, - 47, - 49, + 53, + 53, 50, 55, - 46, - 48, - 46, - 48, - 46, - 49, + 57, + 24, 47, - 117, - 100, + 105, 112, - 47, - 56, - 48, - 56, - 49, - 23, - 47, - 100, - 110, - 115, + 52, 47, 49, 50, @@ -2323,10 +2197,11 @@ 100, 112, 47, - 56, - 48, - 56, + 53, + 53, 50, + 56, + 53, 0, 0, 0, @@ -2334,41 +2209,38 @@ 0, 0, 0, - 0, - 76, - 179, - 167, - 126, - 18, + 203, 238, - 65, - 140, - 237, - 181, - 246, - 156, - 79, + 102, + 51, + 150, + 252, + 160, + 66, + 122, + 198, + 160, + 124, + 201, + 197, + 225, 25, - 121, - 145, - 179, - 60, - 69, - 239, - 45, - 52, - 76, 157, - 69, - 145, - 127, - 61, - 97, - 107, - 36, - 112, - 0, + 66, + 182, + 210, + 4, + 225, + 203, + 214, 0, + 223, + 240, + 182, + 73, + 222, + 163, + 201, 0, 0, 0, @@ -2377,44 +2249,46 @@ 0, 0, 0, + 196, + 9, 0, 0, 0, 0, 0, 0, - 74, - 147, - 61, - 94, - 223, - 159, - 108, - 51, - 148, - 133, - 235, - 178, - 86, - 145, - 162, - 162, - 82, - 76, - 36, - 48, - 67, - 60, - 227, - 173, - 4, - 51, - 128, - 14, - 236, - 227, + 97, 221, - 255, + 158, + 52, + 171, + 9, + 5, + 134, + 63, + 50, + 83, + 248, + 184, + 8, + 206, + 72, + 100, + 138, + 246, + 112, + 12, + 199, + 158, + 228, + 46, + 40, + 45, + 224, + 144, + 243, + 160, + 141, 232, 3, 0, @@ -2423,47 +2297,42 @@ 0, 0, 0, + 210, + 7, + 175, + 121, + 62, + 202, + 57, + 178, + 71, + 217, + 66, + 234, + 143, + 76, + 127, + 97, + 57, + 85, + 68, + 60, + 84, 148, - 42, - 142, - 98, - 212, - 124, + 47, + 76, + 83, + 76, + 253, + 91, + 64, + 161, + 158, + 165, 1, - 32, - 200, - 159, - 249, - 18, - 173, - 14, - 35, - 233, - 104, - 182, - 193, - 93, - 160, - 226, - 192, - 97, - 115, - 27, - 55, - 81, - 112, - 175, - 105, - 37, 0, 0, 0, - 128, - 106, - 172, - 175, - 60, - 9, 0, 0, 0, @@ -2471,71 +2340,62 @@ 0, 0, 0, + 56, + 111, + 132, + 8, + 177, + 6, 0, 0, + 92, + 165, + 189, + 208, + 85, + 1, 0, - 128, - 106, - 172, - 175, - 60, - 9, + 161, + 32, + 121, + 162, + 33, + 90, + 5, 0, - 111, - 45, - 3, - 168, - 97, + 57, + 225, + 12, + 2, + 6, 198, - 163, - 136, - 199, - 90, - 160, - 78, - 249, - 86, - 82, 95, - 111, - 162, - 240, - 91, - 6, - 123, - 233, - 249, + 52, + 34, + 245, + 5, 228, - 54, - 233, - 133, - 1, - 198, - 111, - 139, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, + 179, + 188, + 247, + 80, + 211, + 148, + 9, + 64, + 94, + 104, + 94, + 69, + 127, + 79, + 147, + 26, + 248, + 160, + 241, + 187, + 3, 0, 0, 0, @@ -2545,38 +2405,6 @@ 0, 0, 0, - 151, - 165, - 252, - 16, - 16, - 249, - 41, - 39, - 113, - 8, - 91, - 60, - 88, - 225, - 48, - 64, - 35, - 186, - 161, - 250, - 1, - 81, - 51, - 48, - 225, - 254, - 105, - 14, - 166, - 38, - 16, - 144, 0, 0, 0, @@ -2585,7 +2413,6 @@ 0, 0, 0, - 200, 0, 0, 0, @@ -2594,21 +2421,43 @@ 0, 0, 0, - 128, - 106, - 172, - 175, - 60, - 9, 0, - 232, - 3, 0, 0, 0, 0, 0, + 186, + 222, + 220, + 101, + 226, + 201, + 82, + 157, + 46, + 57, + 10, + 148, + 31, + 76, + 176, + 102, + 174, + 80, + 162, + 243, + 250, + 248, 0, + 8, + 138, + 168, + 116, + 228, + 254, + 14, + 76, 200, 0, 0, @@ -2617,136 +2466,72 @@ 0, 0, 0, - 85, - 6, - 129, - 107, - 168, - 182, - 56, - 113, - 98, - 53, - 93, - 4, - 125, - 158, - 41, - 70, - 117, - 96, - 211, - 191, - 19, - 133, - 196, - 76, - 28, - 116, - 110, - 128, - 178, - 221, - 195, - 186, - 0, - 0, - 0, - 0, 0, + 200, 0, 0, - 0 - ] - } - }, - "owner": { - "ObjectOwner": "0x5900861dc05e16e4230f67df667da400b6f1ad94734c0c86ffc87315c9d81dd5" - }, - "previous_transaction": "7D8EoGyF5bEHXCwfBJUZ6cJBbkFs7Fvzy9UY2jL6WXGm", - "storage_rebate": 7470800 - }, - { - "data": { - "Move": { - "type_": { - "Other": { - "address": "0000000000000000000000000000000000000000000000000000000000000002", - "module": "dynamic_field", - "name": "Field", - "type_args": [ - "u64", - { - "struct": { - "address": "0000000000000000000000000000000000000000000000000000000000000003", - "module": "iota_system_state_inner", - "name": "IotaSystemStateInnerV2", - "type_args": [] - } - } - ] - } - }, - "has_public_transfer": false, - "version": 6, - "contents": [ - 91, - 137, - 14, - 175, - 42, - 188, - 250, - 42, - 185, - 11, - 119, - 184, - 230, - 243, - 213, - 216, - 96, - 149, - 134, - 195, - 229, - 131, - 186, - 243, - 220, - 205, - 90, - 241, - 126, - 223, - 72, - 209, - 2, 0, 0, 0, 0, 0, 0, + 56, + 111, + 132, + 8, + 177, + 6, 0, - 2, + 232, + 3, 0, 0, 0, 0, 0, 0, + 200, 0, - 1, 0, 0, 0, 0, 0, 0, + 169, + 116, + 83, + 179, + 30, + 83, + 164, + 114, + 56, + 178, + 138, + 6, + 113, + 37, + 192, + 68, + 224, + 109, + 126, + 222, + 16, + 239, + 255, + 106, + 180, + 38, + 47, + 81, + 34, + 62, + 5, + 39, 0, - 2, 0, 0, 0, @@ -2754,299 +2539,250 @@ 0, 0, 0, - 79, - 119, - 144, - 163, - 247, - 191, - 45, - 221, - 234, - 6, - 103, - 112, - 156, - 173, - 41, - 65, - 7, - 198, - 139, - 39, - 85, - 185, - 144, - 234, - 233, - 27, - 255, - 32, - 224, + 8, + 194, + 126, + 8, 150, - 115, - 205, - 128, - 91, - 214, - 68, - 154, - 59, - 103, - 43, - 0, - 224, - 188, - 17, - 34, + 33, + 18, + 221, + 219, 196, - 26, - 0, - 4, - 199, - 3, - 84, - 131, - 185, - 10, - 227, - 105, - 243, - 206, - 72, - 195, - 151, - 27, - 245, - 140, - 25, - 65, - 121, - 151, - 116, - 108, - 103, - 50, - 12, - 53, - 209, - 84, - 166, - 66, - 90, - 183, - 96, + 212, + 251, + 93, + 192, + 21, + 159, + 211, + 117, + 148, + 9, + 74, 141, - 207, + 153, + 130, + 94, + 96, + 133, + 179, + 54, + 73, + 15, + 74, + 96, + 153, + 242, + 94, 246, - 209, - 85, - 4, - 10, - 101, - 111, - 72, - 25, - 177, - 49, - 17, - 181, + 31, + 128, + 50, + 185, + 20, + 99, + 100, + 96, + 152, 44, + 92, + 198, + 241, + 52, + 239, + 29, + 218, + 231, + 102, 87, - 70, - 168, - 107, - 167, - 47, - 57, - 95, - 186, - 254, - 46, - 195, - 132, - 125, - 30, - 129, - 64, - 230, - 36, - 167, - 81, - 253, - 246, - 181, 242, - 5, - 11, - 199, - 32, - 92, - 249, - 211, - 0, - 4, - 201, - 11, - 12, + 203, + 254, + 193, + 235, + 252, + 141, + 9, + 115, 116, + 8, + 13, + 246, + 252, + 240, + 220, + 184, + 188, + 75, + 13, + 142, 10, + 245, + 216, + 14, + 187, 255, - 211, - 38, - 206, - 103, - 60, - 194, - 178, - 58, + 43, + 76, + 89, + 159, + 84, + 244, 45, - 36, - 213, - 62, - 42, - 254, - 178, - 134, + 99, + 18, 223, - 198, - 104, - 253, - 64, + 195, + 20, + 39, 96, - 8, - 157, - 109, - 43, - 23, - 183, - 153, - 221, - 54, - 249, - 13, - 51, - 46, - 84, - 167, - 163, + 120, + 193, + 204, + 52, + 126, + 187, + 190, + 197, + 25, + 139, + 226, + 88, + 81, + 63, 56, - 212, - 32, - 54, - 229, - 149, - 160, - 153, - 0, - 149, - 41, + 107, + 147, + 13, 2, - 12, - 159, - 11, - 237, - 183, - 232, - 172, - 239, - 21, + 194, + 116, + 154, + 128, + 62, + 35, + 48, + 149, 94, - 208, - 184, - 219, - 158, - 170, - 43, - 150, - 93, - 242, - 32, - 222, - 246, - 207, + 189, + 26, + 16, 32, - 245, - 64, - 76, - 18, - 227, - 129, - 141, - 164, - 251, - 225, - 193, - 225, - 255, - 222, - 40, - 239, - 108, - 248, + 83, + 177, + 140, + 254, + 247, 77, - 176, - 165, - 136, - 148, - 156, - 113, - 25, + 131, + 149, + 28, 160, - 250, - 14, - 98, - 198, - 178, - 48, - 148, - 81, - 45, - 99, - 42, - 80, - 47, - 61, - 69, - 193, - 153, - 23, - 69, - 77, - 65, + 125, + 7, + 72, + 46, + 230, + 145, + 93, + 157, + 220, + 116, + 168, + 106, + 190, + 63, + 4, + 6, + 57, + 205, + 36, + 172, + 145, + 144, + 32, + 26, + 30, + 17, + 236, 148, - 12, - 218, - 166, - 136, - 89, - 61, - 102, - 137, - 39, - 225, 90, - 67, - 159, + 203, + 178, + 12, + 50, + 117, + 142, + 162, + 38, 177, - 77, - 46, 144, - 186, - 192, - 151, - 223, - 1, - 151, - 220, - 117, - 33, + 254, + 153, + 185, + 52, + 160, + 238, + 93, + 9, + 64, + 89, + 162, + 62, + 206, + 202, + 232, + 49, + 48, + 174, + 9, + 63, + 228, + 159, + 110, + 193, + 170, + 116, + 63, + 210, + 118, + 97, + 229, + 201, + 73, + 155, + 242, + 213, + 180, + 22, + 131, 235, - 142, - 101, - 76, - 246, - 207, + 219, + 135, + 158, + 228, + 18, + 28, + 253, + 221, + 123, + 126, + 245, + 62, + 146, + 114, + 230, + 99, + 84, + 13, + 146, + 170, + 151, + 221, + 189, + 51, + 252, 11, 118, 97, @@ -3058,7 +2794,7 @@ 111, 114, 45, - 49, + 48, 0, 0, 0, @@ -3083,10 +2819,10 @@ 112, 47, 53, + 53, 50, - 49, - 48, - 49, + 54, + 55, 47, 104, 116, @@ -3113,10 +2849,10 @@ 112, 47, 53, + 53, 50, - 49, - 48, - 51, + 54, + 57, 24, 47, 105, @@ -3138,36 +2874,10 @@ 112, 47, 53, - 50, - 49, - 48, - 57, - 24, - 47, - 105, - 112, - 52, - 47, - 49, + 53, 50, 55, - 46, - 48, - 46, - 48, - 46, - 49, - 47, - 117, - 100, - 112, - 47, 53, - 50, - 49, - 49, - 49, - 0, 0, 0, 0, @@ -3175,38 +2885,38 @@ 0, 0, 0, + 97, + 202, + 254, 158, - 21, - 4, - 132, + 226, 147, - 197, - 55, - 157, - 104, - 199, - 11, - 82, - 210, - 44, - 230, + 233, + 52, + 217, 232, - 51, - 81, - 13, - 89, - 112, 234, + 168, + 221, + 170, + 20, + 225, + 139, + 81, + 115, + 8, + 242, + 35, + 145, + 171, + 245, + 145, + 96, + 32, + 85, + 175, 251, - 255, - 56, - 23, - 190, - 253, - 67, - 99, - 84, - 234, + 63, 0, 0, 0, @@ -3223,38 +2933,38 @@ 0, 0, 0, - 58, - 173, - 132, - 75, - 224, - 93, - 90, - 60, - 253, - 176, + 111, 39, - 11, - 172, - 153, - 12, - 113, - 237, - 20, - 103, - 149, - 114, + 18, + 222, + 47, + 141, + 116, + 93, + 65, + 120, + 49, + 246, + 53, + 240, + 104, + 24, 8, - 32, - 12, - 59, - 244, - 40, - 38, - 44, - 61, - 175, - 1, + 131, + 2, + 130, + 36, + 94, + 229, + 173, + 144, + 149, + 191, + 25, + 23, + 108, + 111, + 204, 232, 3, 0, @@ -3263,38 +2973,38 @@ 0, 0, 0, - 232, - 14, - 72, - 38, - 40, - 13, - 121, - 140, - 248, - 193, - 87, - 156, - 150, - 228, - 154, - 136, - 166, - 92, + 203, + 80, + 5, + 66, + 182, + 197, + 54, + 201, + 219, + 93, + 163, 15, - 240, - 225, - 156, - 124, - 227, - 251, - 244, - 22, - 171, - 191, - 166, - 19, - 174, + 25, + 198, + 242, + 133, + 10, + 23, + 218, + 216, + 177, + 129, + 50, + 43, + 101, + 250, + 128, + 147, + 57, + 45, + 43, + 41, 1, 0, 0, @@ -3329,38 +3039,38 @@ 90, 5, 0, - 194, - 201, + 94, + 118, + 191, + 232, + 91, + 184, + 114, + 7, + 182, + 23, + 238, + 109, + 155, + 142, + 93, 221, - 216, - 0, - 201, - 14, - 138, + 178, + 171, + 78, + 227, + 153, + 98, 159, - 127, - 2, - 243, - 83, - 121, - 253, - 235, - 224, - 117, - 50, - 247, - 30, - 149, - 57, - 55, - 252, - 208, - 79, - 168, - 76, - 122, + 24, + 165, + 201, + 13, 36, - 192, + 100, + 37, + 105, + 46, 3, 0, 0, @@ -3393,38 +3103,38 @@ 0, 0, 0, + 195, + 26, + 157, + 156, + 152, + 230, + 112, + 55, + 198, 28, - 3, - 133, - 57, - 100, - 73, - 32, - 113, - 183, - 112, - 201, + 12, 166, - 191, - 35, - 47, - 34, - 32, + 13, + 115, + 175, + 228, + 246, + 114, + 142, + 96, 159, - 48, - 137, - 3, - 222, + 229, + 38, + 233, + 9, + 23, + 150, 105, - 110, - 220, - 204, - 41, - 226, - 63, - 78, - 18, - 254, + 71, + 114, + 223, + 227, 0, 0, 0, @@ -3465,38 +3175,38 @@ 0, 0, 0, - 215, - 233, - 197, - 73, - 0, - 103, - 112, - 32, - 41, - 241, - 60, - 231, - 183, - 150, - 128, - 181, - 240, + 247, + 53, + 237, + 130, 93, - 160, - 34, - 202, - 137, - 79, - 180, - 142, - 204, - 252, - 45, - 63, - 115, + 12, + 217, + 118, + 223, + 124, + 29, + 29, + 216, + 27, + 171, + 113, + 211, + 82, + 134, + 121, + 213, + 9, 54, + 221, + 188, + 217, + 96, + 247, 18, + 146, + 243, + 57, 0, 0, 0, @@ -3505,270 +3215,270 @@ 0, 0, 0, - 152, - 52, - 108, + 89, + 64, + 182, + 78, + 178, + 151, + 32, + 234, + 12, + 53, + 212, + 158, + 227, + 213, + 153, + 179, + 71, + 120, + 121, + 214, + 139, + 126, + 101, 41, - 160, - 169, - 155, - 157, - 10, - 128, - 201, + 4, + 178, + 54, 237, - 227, - 122, - 119, - 199, - 253, - 147, + 214, 234, - 210, - 149, - 253, - 176, - 27, - 137, - 94, - 241, - 57, - 44, - 80, - 135, - 181, - 96, - 153, - 242, - 94, - 246, - 31, - 128, - 50, - 185, - 20, - 99, - 100, + 216, + 138, 96, + 173, + 222, + 239, + 148, + 216, 152, - 44, - 92, - 198, + 200, + 142, + 64, + 219, + 222, + 255, + 145, + 197, 241, - 52, - 239, - 29, - 218, - 231, - 102, - 87, - 242, - 203, - 254, - 193, - 235, - 252, - 141, - 9, - 115, + 5, + 249, + 207, + 44, 116, - 8, - 13, - 246, - 252, - 240, - 220, - 184, + 127, + 182, + 242, 188, - 75, - 13, - 142, - 10, + 55, + 236, + 3, + 214, + 201, + 30, + 219, + 46, + 26, + 87, + 140, 245, - 216, - 14, - 187, - 255, - 43, - 76, + 68, + 190, + 139, + 9, + 49, + 226, + 95, + 36, + 61, 89, - 159, - 84, - 244, - 45, - 99, - 18, - 223, + 176, 195, - 20, - 39, - 96, - 120, - 193, - 204, - 52, - 126, - 187, - 190, - 197, - 25, - 139, - 226, - 88, - 81, - 63, - 56, - 107, - 147, 13, - 2, - 194, - 116, - 154, - 128, - 62, - 35, - 48, - 149, - 94, - 189, - 26, - 16, - 32, - 203, - 102, - 81, - 231, - 227, - 62, - 133, - 128, - 82, - 172, - 128, - 160, - 66, - 220, - 100, - 44, - 76, - 81, - 90, - 157, - 141, - 9, - 51, - 103, 152, - 49, - 100, - 219, - 11, - 122, - 111, + 161, + 108, + 227, + 186, + 29, + 108, + 241, + 215, + 245, + 4, + 38, + 153, + 46, + 176, + 173, + 179, + 19, + 75, + 5, + 91, + 232, + 20, + 13, + 45, + 181, + 242, + 95, + 176, + 13, + 131, + 248, + 228, + 34, + 43, + 240, + 31, + 214, 172, - 32, - 207, - 136, - 11, - 207, - 233, - 27, - 111, - 229, - 25, - 40, + 147, + 161, + 255, + 77, + 121, + 218, 88, - 39, - 71, - 22, - 200, - 16, - 132, - 203, - 110, + 242, + 32, + 101, 41, + 91, + 166, + 21, + 8, + 15, + 183, + 171, 43, - 82, - 213, - 213, - 214, - 217, - 106, - 48, - 242, - 227, - 234, - 136, - 48, - 132, - 51, - 104, - 180, - 35, - 134, - 184, + 105, + 62, + 143, + 42, + 220, + 160, + 18, + 204, + 18, + 177, + 143, + 95, 250, - 233, - 184, - 252, - 132, - 203, 143, - 130, - 190, - 89, + 90, + 251, + 80, 79, - 35, - 164, - 172, - 124, - 161, - 131, - 231, - 233, - 47, - 142, - 173, - 185, + 19, + 151, + 254, + 253, + 32, + 250, 209, - 100, - 170, - 167, - 145, - 170, - 117, - 169, - 65, - 129, + 183, + 196, 197, - 80, - 165, + 121, + 33, + 21, + 211, + 65, 227, - 124, - 52, - 71, - 172, - 11, - 118, - 97, - 108, - 105, - 100, - 97, - 116, - 111, - 114, - 45, + 216, + 234, + 249, + 192, + 236, + 194, + 255, + 190, + 81, + 208, + 224, + 251, + 165, + 53, + 30, + 220, + 75, + 192, + 117, + 68, + 159, 48, - 0, - 0, - 0, - 29, + 131, 47, - 105, - 112, - 52, + 168, + 134, + 246, + 248, + 62, + 162, + 31, + 28, + 191, + 186, + 169, + 214, + 29, + 44, + 57, + 33, + 25, + 25, + 44, + 176, + 119, + 148, + 150, + 83, + 118, + 177, + 138, + 121, + 73, + 214, + 93, + 173, + 153, + 142, + 0, + 13, + 99, + 3, + 2, + 6, + 80, + 65, + 227, + 213, + 201, + 148, + 11, + 118, + 97, + 108, + 105, + 100, + 97, + 116, + 111, + 114, + 45, + 50, + 0, + 0, + 0, + 29, + 47, + 105, + 112, + 52, 47, 49, 50, @@ -3785,8 +3495,8 @@ 112, 47, 53, + 53, 50, - 48, 56, 55, 47, @@ -3815,8 +3525,8 @@ 112, 47, 53, + 53, 50, - 48, 56, 57, 24, @@ -3840,75 +3550,49 @@ 112, 47, 53, - 50, - 48, - 57, - 53, - 24, - 47, - 105, - 112, - 52, - 47, - 49, - 50, - 55, - 46, - 48, - 46, - 48, - 46, - 49, - 47, - 117, - 100, - 112, - 47, 53, 50, - 48, 57, - 55, - 0, - 0, + 53, 0, 0, 0, 0, 0, 0, - 111, - 108, - 251, - 55, - 106, - 70, 0, - 83, - 166, - 65, - 77, - 255, - 24, - 35, - 226, - 124, - 182, - 112, - 225, - 195, - 108, - 2, - 145, - 10, - 215, - 79, - 160, + 93, + 94, + 172, + 116, + 57, 179, - 110, - 91, + 239, + 207, + 144, 27, - 7, + 132, + 104, + 105, + 24, + 250, + 86, + 59, + 116, + 175, + 56, + 192, + 191, + 240, + 188, + 164, + 84, + 48, + 8, + 231, + 242, + 206, + 176, 0, 0, 0, @@ -3925,38 +3609,38 @@ 0, 0, 0, - 182, + 24, + 193, + 114, + 17, + 242, + 33, + 238, + 190, + 226, + 0, + 112, + 189, + 167, + 166, + 20, + 99, + 106, 37, + 13, + 77, + 9, + 46, + 181, 132, - 69, - 191, - 87, - 35, - 192, - 23, - 153, - 64, - 68, - 151, - 249, - 39, - 198, - 66, - 80, - 154, - 234, - 83, - 180, - 249, - 23, - 44, - 27, - 124, - 233, - 248, - 200, - 162, - 175, + 22, + 22, + 78, + 155, + 179, + 78, + 18, + 24, 232, 3, 0, @@ -3965,38 +3649,38 @@ 0, 0, 0, - 251, - 91, - 71, - 93, - 58, - 113, - 7, - 34, - 32, - 73, - 58, - 239, - 215, - 234, - 130, + 61, + 204, + 132, + 220, + 80, + 55, + 5, + 242, + 131, + 99, + 205, + 122, + 85, 32, - 211, - 15, - 101, - 233, - 95, - 183, - 248, + 214, + 232, + 30, 96, - 141, - 116, - 3, - 192, - 80, - 95, - 180, - 167, + 9, + 153, + 102, + 138, + 88, + 227, + 89, + 211, + 37, + 226, + 170, + 230, + 165, + 66, 1, 0, 0, @@ -4032,37 +3716,37 @@ 5, 0, 164, - 195, - 143, - 144, - 61, - 151, - 68, - 202, - 34, - 67, - 11, - 174, - 222, + 81, + 79, + 99, + 179, + 98, 209, - 188, - 55, - 192, - 237, - 61, - 117, - 206, - 85, - 104, - 62, - 105, - 189, - 61, - 31, - 196, - 11, - 103, 48, + 248, + 216, + 84, + 158, + 220, + 28, + 231, + 147, + 44, + 7, + 34, + 225, + 38, + 13, + 252, + 13, + 81, + 21, + 225, + 182, + 32, + 21, + 135, + 1, 3, 0, 0, @@ -4095,38 +3779,38 @@ 0, 0, 0, - 86, - 11, - 133, - 42, - 34, - 128, - 46, + 61, 144, - 245, - 237, - 103, - 194, + 54, + 63, + 188, + 84, + 183, + 232, + 59, + 187, + 215, + 110, + 137, + 253, + 163, + 135, 141, + 124, + 244, + 59, + 190, + 246, + 48, + 35, + 107, + 75, + 144, 145, - 70, - 227, - 187, - 103, + 128, + 78, 72, - 225, - 126, - 12, - 195, - 94, - 216, - 109, - 11, - 185, - 136, - 231, - 209, - 101, + 92, 0, 0, 0, @@ -4167,38 +3851,38 @@ 0, 0, 0, - 48, - 196, - 28, - 202, - 166, - 13, - 73, - 199, - 135, - 166, - 25, + 56, + 61, + 226, + 138, + 104, 93, - 219, - 125, - 63, - 116, - 202, - 177, + 45, + 197, + 22, + 164, + 57, + 149, + 214, + 114, + 56, + 102, + 209, + 165, + 84, + 204, + 248, + 151, + 75, + 253, + 242, + 209, + 2, + 115, + 134, + 154, 217, - 91, - 147, - 64, - 31, - 161, - 218, - 162, - 170, - 69, - 161, - 76, - 100, - 232, + 70, 0, 0, 0, @@ -4207,250 +3891,250 @@ 0, 0, 0, - 72, - 217, 15, - 101, - 11, - 244, - 216, - 122, - 209, + 243, + 126, + 19, + 80, + 94, + 217, + 7, + 217, + 8, + 207, + 55, + 145, + 154, 41, - 236, - 71, - 57, + 17, + 122, + 10, + 183, + 102, + 147, + 17, + 242, + 110, + 21, + 77, + 255, + 190, + 73, 46, - 195, 138, - 140, - 108, - 11, - 181, - 234, - 75, - 109, - 171, - 97, - 14, - 58, - 132, - 20, - 49, - 171, - 153, + 93, 96, - 173, - 222, - 239, - 148, - 216, - 152, - 200, - 142, - 64, - 219, - 222, - 255, - 145, - 197, - 241, - 5, - 249, - 207, - 44, - 116, - 127, - 182, - 242, - 188, - 55, - 236, - 3, - 214, - 201, - 30, - 219, - 46, - 26, - 87, - 140, - 245, - 68, - 190, - 139, - 9, - 49, - 226, - 95, + 179, + 253, + 94, + 251, + 92, + 135, 36, - 61, - 89, - 176, - 195, - 13, - 152, - 161, - 108, - 227, - 186, - 29, - 108, - 241, - 215, - 245, - 4, - 38, - 153, - 46, - 176, + 3, + 164, 173, - 179, 19, - 75, - 5, - 91, - 232, - 20, - 13, + 241, + 25, + 149, + 19, + 96, + 109, + 35, + 53, + 74, + 132, + 82, + 73, + 174, + 161, + 87, + 86, + 76, + 35, + 255, + 60, + 21, + 198, + 201, + 230, + 82, + 183, 45, - 181, - 242, - 95, - 176, - 13, - 131, - 248, - 228, - 34, - 43, - 240, - 31, - 214, + 116, + 14, + 140, 172, - 147, + 185, + 60, + 188, + 192, + 104, + 107, + 14, + 192, + 204, + 12, + 28, + 118, + 11, + 251, + 66, + 180, + 54, + 81, + 159, + 197, + 168, + 5, + 75, + 118, + 83, + 58, + 151, + 169, + 242, + 57, + 135, + 208, + 151, + 239, + 150, + 177, + 242, + 82, + 107, + 178, + 7, + 63, 161, - 255, - 77, - 121, - 218, - 88, + 10, + 119, + 25, + 148, + 23, + 114, + 52, + 126, 242, + 116, + 244, 32, - 157, + 54, + 9, 111, - 65, - 91, + 246, + 41, + 152, 154, - 116, - 26, + 252, + 170, + 180, + 28, + 224, + 99, + 153, + 48, + 72, + 228, + 145, + 126, + 47, + 135, + 247, + 206, + 187, + 229, + 63, + 51, + 41, + 58, + 126, + 34, + 100, 32, - 81, - 165, - 157, - 125, - 130, - 182, - 69, - 127, - 200, - 123, - 212, - 219, - 165, - 4, - 238, - 15, - 68, - 169, - 73, - 115, - 59, - 197, - 138, - 254, + 22, + 80, + 98, + 211, 32, - 72, + 28, + 217, 185, - 38, + 224, + 64, + 36, + 2, + 136, + 84, + 153, + 1, + 84, 230, - 150, - 233, - 38, - 148, - 165, - 17, - 3, - 58, - 186, - 78, - 49, - 172, - 39, - 198, - 43, - 231, - 128, - 216, - 233, - 5, - 174, - 222, - 133, - 66, - 72, - 216, + 250, + 131, + 229, + 53, 253, - 39, + 219, + 124, + 122, + 31, + 32, + 168, + 31, + 46, + 231, 48, - 179, - 18, - 62, - 181, - 29, - 193, - 154, - 105, + 167, + 36, + 95, + 91, 231, - 94, - 0, - 253, - 147, - 164, - 152, - 191, - 209, - 90, - 200, - 210, - 59, - 88, - 101, - 171, - 112, - 145, - 55, - 221, + 215, 230, - 140, - 56, - 240, - 86, - 84, - 193, - 49, - 6, - 45, + 126, + 189, + 151, + 25, + 9, + 73, + 51, + 246, + 206, + 167, + 172, + 17, + 4, + 217, + 222, + 123, + 225, + 162, + 176, + 231, + 17, 237, - 198, - 215, - 147, - 111, - 94, - 143, - 129, - 109, - 183, + 115, + 158, + 51, + 23, + 222, + 35, + 116, + 242, + 80, + 161, + 91, + 134, + 241, + 55, + 42, + 7, + 228, + 206, + 245, 11, 118, 97, @@ -4462,7 +4146,7 @@ 111, 114, 45, - 50, + 51, 0, 0, 0, @@ -4487,10 +4171,10 @@ 112, 47, 53, - 50, - 49, - 49, 53, + 50, + 57, + 55, 47, 104, 116, @@ -4517,10 +4201,10 @@ 112, 47, 53, + 53, 50, - 49, - 49, - 55, + 57, + 57, 24, 47, 105, @@ -4542,34 +4226,9 @@ 112, 47, 53, - 50, - 49, - 50, + 53, 51, - 24, - 47, - 105, - 112, - 52, - 47, - 49, - 50, - 55, - 46, 48, - 46, - 48, - 46, - 49, - 47, - 117, - 100, - 112, - 47, - 53, - 50, - 49, - 50, 53, 0, 0, @@ -4578,39 +4237,38 @@ 0, 0, 0, - 0, - 245, - 129, - 174, - 94, - 253, - 236, + 235, + 179, + 105, + 207, + 36, + 221, + 187, + 70, + 238, + 33, + 154, 254, - 169, - 210, - 13, - 151, - 145, - 128, - 169, - 56, - 66, + 246, + 183, + 177, + 9, + 104, + 44, + 193, + 238, + 122, + 236, + 62, + 199, + 243, + 148, + 112, + 79, + 189, + 153, + 68, 49, - 90, - 127, - 254, - 26, - 181, - 229, - 54, - 109, - 20, - 56, - 103, - 14, - 16, - 207, - 50, 0, 0, 0, @@ -4627,38 +4285,38 @@ 0, 0, 0, - 53, - 11, - 141, - 159, - 199, - 174, - 192, - 150, - 68, - 81, - 180, - 184, - 90, - 118, - 142, - 78, - 57, - 233, - 107, - 245, - 123, - 23, + 179, + 221, + 122, + 59, 55, - 108, - 96, - 29, - 244, + 201, + 79, + 239, + 24, + 218, + 236, + 58, + 226, + 113, + 77, + 240, 253, - 107, - 49, - 76, - 18, + 30, + 164, + 96, + 249, + 64, + 120, + 145, + 186, + 57, + 164, + 79, + 39, + 28, + 176, + 72, 232, 3, 0, @@ -4667,38 +4325,38 @@ 0, 0, 0, - 87, - 237, - 32, - 86, - 222, - 32, - 49, - 210, - 53, - 230, - 10, - 194, - 125, - 91, - 46, - 170, - 128, - 158, - 85, - 158, + 29, + 249, + 67, + 164, + 123, + 138, + 6, 11, - 173, - 248, - 152, - 226, + 45, + 207, + 2, + 237, + 185, + 30, + 13, + 130, + 229, + 33, 64, - 231, - 208, - 252, + 4, + 156, 170, - 26, - 8, + 247, + 208, + 168, + 153, + 67, + 98, + 48, + 135, + 208, + 185, 1, 0, 0, @@ -4733,38 +4391,38 @@ 90, 5, 0, - 63, - 107, - 147, - 31, - 121, - 253, - 11, - 42, - 20, - 237, - 118, - 165, - 178, - 55, - 20, - 52, - 76, - 66, - 31, - 153, - 162, - 204, - 209, - 151, - 142, - 242, - 39, - 14, - 22, - 118, - 20, + 190, 204, + 104, + 114, + 211, + 172, + 212, + 0, + 156, + 48, + 171, + 213, + 25, + 195, + 190, + 126, + 215, + 235, + 80, + 248, + 222, + 203, + 117, + 16, + 134, + 58, + 64, + 238, + 252, + 65, + 146, + 43, 3, 0, 0, @@ -4797,38 +4455,38 @@ 0, 0, 0, - 13, - 83, - 208, - 2, - 216, + 213, + 21, 71, - 135, - 76, - 196, - 240, - 55, - 169, - 172, - 163, - 129, - 77, - 167, - 141, - 222, - 234, + 19, + 243, + 146, 139, - 250, - 125, - 75, - 145, + 123, + 244, + 60, + 220, + 212, + 11, + 201, + 18, + 95, + 226, + 88, + 107, + 56, + 193, + 98, 233, - 139, - 57, - 119, - 196, - 24, - 85, + 241, + 203, + 165, + 192, + 253, + 213, + 8, + 238, + 31, 0, 0, 0, @@ -4869,38 +4527,38 @@ 0, 0, 0, - 219, - 119, - 163, - 77, - 109, - 87, - 164, - 155, + 188, + 16, + 251, + 56, + 48, + 249, + 56, + 85, + 197, 190, - 236, - 145, - 24, - 50, - 181, - 141, - 163, - 62, - 29, - 37, - 149, - 161, - 187, - 246, + 210, + 84, + 232, + 49, + 249, + 44, + 59, + 38, + 195, 10, - 50, - 162, - 143, - 252, - 237, - 179, - 142, - 209, + 157, + 140, + 152, + 218, + 163, + 86, + 229, + 89, + 68, + 253, + 36, + 155, 0, 0, 0, @@ -4909,1689 +4567,119 @@ 0, 0, 0, - 50, - 130, - 23, - 143, - 241, - 103, - 208, - 42, - 3, - 62, - 137, - 209, - 40, - 10, - 30, - 194, - 95, - 157, - 208, - 105, - 160, - 241, - 64, - 12, - 36, - 65, - 146, - 241, - 247, - 92, - 186, - 188, - 96, - 179, - 253, - 94, - 251, - 92, - 135, - 36, - 3, - 164, - 173, - 19, - 241, - 25, - 149, - 19, - 96, - 109, - 35, - 53, - 74, - 132, - 82, - 73, - 174, - 161, - 87, - 86, - 76, + 210, + 97, + 218, 35, - 255, - 60, - 21, - 198, - 201, + 110, + 84, 230, - 82, - 183, - 45, - 116, - 14, - 140, - 172, - 185, - 60, - 188, - 192, - 104, - 107, - 14, - 192, - 204, - 12, - 28, - 118, - 11, - 251, - 66, - 180, - 54, - 81, - 159, - 197, - 168, - 5, - 75, - 118, - 83, - 58, - 151, - 169, - 242, - 57, - 135, - 208, + 212, + 68, 151, - 239, - 150, - 177, - 242, - 82, - 107, - 178, - 7, - 63, - 161, - 10, - 119, + 3, + 139, + 166, + 197, + 152, + 87, + 236, + 158, + 62, + 1, 25, - 148, - 23, + 194, + 29, + 254, + 92, + 59, + 243, 114, - 52, - 126, - 242, - 116, - 244, - 32, - 186, - 104, - 213, - 91, - 218, - 163, - 181, - 223, - 208, - 177, - 219, - 199, - 179, - 145, - 245, - 154, - 172, - 70, - 98, - 48, - 93, + 155, + 55, + 37, + 193, + 0, + 0, + 0, + 0, + 0, + 0, + 0, 0, + 0, + 49, + 22, + 112, + 182, + 45, + 165, + 30, + 181, 253, - 230, - 76, - 154, - 76, - 110, - 236, - 134, - 14, - 117, - 32, 7, - 134, - 124, - 99, - 82, - 250, - 224, - 138, - 194, - 105, - 98, - 161, + 140, + 143, + 160, + 44, + 4, + 207, 155, - 103, - 211, - 145, - 87, - 27, - 138, - 230, - 219, - 213, 59, - 58, - 230, - 35, - 134, - 160, - 69, - 70, - 5, - 103, - 48, - 144, - 238, - 206, - 27, - 158, - 108, - 237, - 242, - 132, - 172, - 88, - 33, - 180, - 55, - 105, - 22, - 117, - 124, - 154, - 184, - 220, - 33, - 23, - 196, - 29, - 87, - 181, - 60, - 222, - 146, - 252, - 251, - 23, - 170, - 22, - 100, - 150, - 209, - 54, - 177, - 108, - 181, - 12, - 50, - 42, - 25, - 133, - 43, + 143, + 30, 11, - 118, - 97, - 108, - 105, - 100, - 97, - 116, - 111, - 114, - 45, - 51, - 0, - 0, - 0, - 29, - 47, - 105, - 112, - 52, - 47, - 49, - 50, - 55, - 46, - 48, - 46, - 48, - 46, - 49, - 47, - 116, - 99, - 112, - 47, - 53, - 50, - 49, - 50, - 57, - 47, - 104, - 116, - 116, - 112, - 24, - 47, - 105, - 112, - 52, - 47, - 49, - 50, - 55, - 46, - 48, - 46, - 48, - 46, - 49, - 47, - 117, - 100, - 112, - 47, - 53, - 50, - 49, - 51, - 49, - 24, - 47, - 105, - 112, - 52, - 47, - 49, - 50, - 55, - 46, - 48, - 46, - 48, - 46, - 49, - 47, - 117, - 100, - 112, - 47, - 53, - 50, - 49, - 51, - 55, - 24, - 47, - 105, - 112, - 52, - 47, - 49, - 50, - 55, - 46, - 48, - 46, - 48, - 46, - 49, - 47, - 117, - 100, - 112, - 47, - 53, - 50, - 49, - 51, - 57, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 167, - 69, - 231, - 171, - 22, - 87, - 230, - 137, - 122, - 155, - 115, - 67, - 34, - 144, - 147, - 123, - 26, + 129, + 150, + 184, + 120, + 218, + 44, + 130, + 213, + 80, + 62, + 240, 4, - 108, - 11, - 211, - 40, - 136, - 229, - 98, - 147, - 57, - 133, - 122, - 176, - 98, - 125, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 196, - 9, 0, 0, 0, 0, 0, 0, - 98, - 84, - 73, - 35, - 238, - 36, - 120, - 182, - 53, - 204, - 253, - 142, - 197, - 168, - 56, - 27, - 133, - 121, - 187, - 11, - 224, - 185, - 166, - 209, - 34, - 6, - 52, - 1, - 193, - 148, - 253, - 48, - 232, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 12, - 179, - 128, - 203, - 50, - 90, - 131, - 15, - 3, - 238, - 75, - 218, - 121, - 11, - 5, - 225, - 117, - 83, - 128, - 22, - 245, - 212, - 124, - 179, - 82, - 201, - 60, - 198, - 218, - 220, - 19, - 4, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 56, - 111, - 132, - 8, - 177, - 6, - 0, - 0, - 92, - 165, - 189, - 208, - 85, - 1, - 0, - 161, - 32, - 121, - 162, - 33, - 90, - 5, - 0, - 123, - 148, - 172, - 91, - 189, - 1, - 12, - 106, - 119, - 84, - 85, - 227, - 223, - 27, - 108, - 154, - 141, - 36, - 169, - 246, - 194, - 169, - 194, - 2, - 85, - 184, - 114, - 184, - 18, - 253, - 191, - 135, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 120, - 242, - 231, - 14, - 134, - 130, - 104, - 11, - 103, - 210, - 189, - 19, - 28, - 11, - 147, - 107, - 81, - 11, - 11, - 65, - 86, - 11, - 202, - 206, - 15, - 46, - 158, - 1, - 100, - 197, - 160, - 6, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 200, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 56, - 111, - 132, - 8, - 177, - 6, - 0, - 232, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 200, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 211, - 120, - 82, - 183, - 112, - 80, - 203, - 13, - 147, - 76, - 148, - 115, - 172, - 242, - 93, - 194, - 226, - 79, - 116, - 169, - 48, - 72, - 230, - 175, - 70, - 79, - 244, - 144, - 173, - 213, - 121, - 156, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 89, - 0, - 134, - 29, - 192, - 94, - 22, - 228, - 35, - 15, - 103, - 223, - 102, - 125, - 164, - 0, - 182, - 241, - 173, - 148, - 115, - 76, - 12, - 134, - 255, - 200, - 115, - 21, - 201, - 216, - 29, - 213, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 116, - 140, - 27, - 170, - 209, - 171, - 17, - 61, - 7, - 56, - 218, - 138, - 21, - 4, - 220, - 241, - 80, - 162, - 255, - 203, - 11, - 22, - 170, - 48, - 59, - 7, - 101, - 161, - 69, - 24, - 201, - 112, - 5, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 247, - 48, - 198, - 197, - 187, - 95, - 147, - 209, - 15, - 245, - 38, - 60, - 142, - 201, - 225, - 91, - 113, - 53, - 180, - 225, - 99, - 175, - 83, - 223, - 59, - 116, - 194, - 11, - 151, - 235, - 146, - 196, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 80, - 80, - 142, - 127, - 158, - 232, - 36, - 13, - 132, - 21, - 170, - 224, - 230, - 25, - 125, - 12, - 24, - 68, - 177, - 231, - 44, - 91, - 31, - 217, - 105, - 9, - 198, - 144, - 96, - 16, - 146, - 139, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 117, - 254, - 42, - 52, - 238, - 250, - 101, - 84, - 49, - 145, - 237, - 191, - 142, - 110, - 6, - 188, - 55, - 241, - 1, - 107, - 182, - 234, - 227, - 213, - 34, - 177, - 229, - 70, - 184, - 220, - 217, - 51, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 96, - 255, - 222, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 96, - 234, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 150, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 141, - 73, - 253, - 26, - 7, - 0, - 0, - 192, - 41, - 247, - 61, - 84, - 5, - 0, - 0, - 128, - 198, - 164, - 126, - 141, - 3, - 0, - 7, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 153, - 48, - 123, - 170, - 237, - 150, - 85, - 58, - 253, - 170, - 119, - 84, - 156, - 116, - 215, - 211, - 179, - 29, - 196, - 212, - 126, - 30, - 21, - 144, - 136, - 246, - 168, - 36, - 73, - 149, - 230, - 173, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 232, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 45, - 35, - 248, - 175, - 146, - 1, - 0, - 0, - 141, - 159, - 48, - 47, - 164, - 128, - 59, - 91, - 130, - 122, - 142, - 115, - 144, - 23, - 163, - 64, - 108, - 107, - 72, - 181, - 174, - 239, - 219, - 205, - 93, - 109, - 38, - 203, - 113, - 12, - 216, - 183, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - } - }, - "owner": { - "ObjectOwner": "0x0000000000000000000000000000000000000000000000000000000000000005" - }, - "previous_transaction": "7D8EoGyF5bEHXCwfBJUZ6cJBbkFs7Fvzy9UY2jL6WXGm", - "storage_rebate": 26980000 - } - ], - "output_objects": [ - { - "data": { - "Move": { - "type_": { - "Other": { - "address": "0000000000000000000000000000000000000000000000000000000000000003", - "module": "iota_system", - "name": "IotaSystemState", - "type_args": [] - } - }, - "has_public_transfer": false, - "version": 7, - "contents": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - } - }, - "owner": { - "Shared": { - "initial_shared_version": 1 - } - }, - "previous_transaction": "93PPEMeHQJUoVDVpEyTAEsyByUjrQTs4SPhSgM2wyfy6", - "storage_rebate": 35902400 - }, - { - "data": { - "Move": { - "type_": { - "Other": { - "address": "0000000000000000000000000000000000000000000000000000000000000002", - "module": "dynamic_field", - "name": "Field", - "type_args": [ - "u64", - { - "struct": { - "address": "0000000000000000000000000000000000000000000000000000000000000003", - "module": "iota_system_state_inner", - "name": "IotaSystemStateInnerV2", - "type_args": [] - } - } - ] - } - }, - "has_public_transfer": false, - "version": 7, - "contents": [ - 91, - 137, - 14, - 175, - 42, - 188, - 250, - 42, - 185, - 11, - 119, - 184, - 230, - 243, - 213, - 216, - 96, - 149, - 134, - 195, - 229, - 131, - 186, - 243, - 220, - 205, - 90, - 241, - 126, - 223, - 72, - 209, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 79, - 119, - 144, - 163, - 247, - 191, - 45, - 221, - 234, - 6, - 103, - 112, - 156, - 173, - 41, - 65, - 7, - 198, - 139, - 39, - 85, - 185, - 144, - 234, - 233, - 27, - 255, - 32, - 224, - 150, - 115, - 205, - 0, - 199, - 66, - 95, - 47, - 245, - 105, - 43, - 0, - 80, - 178, - 216, - 102, - 186, - 38, - 0, - 5, - 199, - 3, - 84, - 131, - 185, - 10, - 227, - 105, - 243, - 206, - 72, - 195, - 151, - 27, - 245, - 140, - 25, - 65, - 121, - 151, - 116, - 108, - 103, - 50, - 12, - 53, - 209, - 84, - 166, - 66, - 90, - 183, - 96, - 141, - 207, - 246, - 209, - 85, - 4, - 10, - 101, - 111, - 72, - 25, - 177, - 49, - 17, - 181, - 44, - 87, - 70, - 168, - 107, - 167, - 47, - 57, - 95, - 186, - 254, - 46, - 195, - 132, - 125, - 30, - 129, - 64, - 230, - 36, - 167, - 81, - 253, - 246, - 181, - 242, - 5, - 11, - 199, - 32, - 92, - 249, - 211, - 0, - 4, - 201, - 11, - 12, - 116, - 10, - 255, - 211, - 38, - 206, - 103, - 60, - 194, - 178, - 58, - 45, - 36, - 213, - 62, - 42, - 254, - 178, - 134, - 223, - 198, - 104, - 253, - 64, - 96, - 8, - 157, - 109, - 43, - 23, - 183, - 153, - 221, - 54, - 249, - 13, - 51, - 46, - 84, - 167, - 163, - 56, - 212, - 32, - 54, - 229, - 149, - 160, - 153, - 0, - 149, - 41, - 2, - 12, - 159, - 11, - 237, - 183, - 232, - 172, - 239, - 21, - 94, - 208, - 184, - 219, - 158, - 170, - 43, - 150, - 93, - 242, - 32, - 222, - 246, - 207, - 32, - 245, - 64, - 76, - 18, - 227, - 129, - 141, - 164, - 251, - 225, - 193, - 225, - 255, - 222, - 40, - 239, - 108, - 248, - 77, - 176, - 165, - 136, - 148, - 156, - 113, - 25, - 160, - 250, - 14, - 98, - 198, - 178, - 48, - 148, - 81, - 45, - 99, - 42, - 80, - 47, - 61, - 69, - 193, - 153, - 23, - 69, - 77, - 65, - 148, - 12, - 218, - 166, - 136, - 89, - 61, - 102, - 137, - 39, - 225, - 90, - 67, - 159, - 177, - 77, - 46, - 144, - 186, - 192, - 151, - 223, - 1, - 151, - 220, - 117, - 33, - 235, - 142, - 101, - 76, - 246, - 207, - 11, - 118, - 97, - 108, - 105, - 100, - 97, - 116, - 111, - 114, - 45, - 49, - 0, - 0, - 0, - 29, - 47, - 105, - 112, - 52, - 47, - 49, - 50, - 55, - 46, - 48, - 46, - 48, - 46, - 49, - 47, - 116, - 99, - 112, - 47, - 53, - 50, - 49, - 48, - 49, - 47, - 104, - 116, - 116, - 112, - 24, - 47, - 105, - 112, - 52, - 47, - 49, - 50, - 55, - 46, - 48, - 46, - 48, - 46, - 49, - 47, - 117, - 100, - 112, - 47, - 53, - 50, - 49, - 48, - 51, - 24, - 47, - 105, - 112, - 52, - 47, - 49, - 50, - 55, - 46, - 48, - 46, - 48, - 46, - 49, - 47, - 117, - 100, - 112, - 47, - 53, - 50, - 49, - 48, - 57, - 24, - 47, - 105, - 112, - 52, + 0, + 136, + 109, + 166, + 116, 47, - 49, - 50, - 55, - 46, - 48, - 46, + 73, + 243, + 234, + 205, + 28, + 33, + 147, + 249, + 90, + 136, + 131, + 97, + 13, 48, - 46, - 49, - 47, - 117, - 100, - 112, - 47, - 53, - 50, - 49, - 49, - 49, + 193, + 142, + 96, + 9, + 177, + 3, + 249, + 121, + 92, + 245, + 84, + 60, + 237, 0, 0, 0, @@ -6601,37 +4689,190 @@ 0, 0, 158, - 21, - 4, - 132, - 147, - 197, - 55, - 157, - 104, - 199, - 11, - 82, - 210, - 44, - 230, - 232, - 51, + 215, + 123, + 250, + 241, + 176, + 30, 81, + 128, + 135, + 200, + 4, + 143, 13, - 89, - 112, - 234, - 251, + 77, + 253, + 9, + 45, + 39, + 186, + 95, + 41, + 158, + 40, + 129, + 114, + 220, + 159, + 226, 255, - 56, - 23, + 15, + 212, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 178, + 53, + 96, + 237, + 161, + 189, + 128, + 101, + 109, + 250, + 77, + 232, + 78, + 130, + 196, + 17, + 8, + 175, + 162, + 140, + 219, + 136, + 123, + 157, + 157, + 93, + 148, + 176, + 98, + 136, + 157, + 107, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 96, + 234, + 0, + 0, + 0, + 0, + 0, + 0, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 150, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 141, + 73, + 253, + 26, + 7, + 0, + 0, + 192, + 41, + 247, + 61, + 84, + 5, + 0, + 0, + 128, + 198, + 164, + 126, + 141, + 3, + 0, + 7, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 168, + 39, + 55, + 226, + 93, + 238, + 212, + 208, + 113, + 17, + 187, + 15, + 37, + 138, 190, + 0, + 62, + 233, + 236, + 152, 253, - 67, - 99, + 39, + 36, + 227, + 180, + 208, + 51, + 59, + 231, + 117, + 225, 84, - 234, 0, 0, 0, @@ -6640,87 +4881,24 @@ 0, 0, 0, - 208, - 7, + 232, + 3, + 0, + 0, + 0, + 0, 0, 0, 0, 0, 0, 0, - 58, - 173, - 132, - 75, - 224, - 93, - 90, - 60, - 253, - 176, - 39, - 11, - 172, - 153, - 12, - 113, - 237, - 20, - 103, - 149, - 114, - 8, - 32, - 12, - 59, - 244, - 40, - 38, - 44, - 61, - 175, - 1, - 232, - 3, 0, 0, 0, 0, 0, 0, - 232, - 14, - 72, - 38, - 40, - 13, - 121, - 140, - 248, - 193, - 87, - 156, - 150, - 228, - 154, - 136, - 166, - 92, - 15, - 240, - 225, - 156, - 124, - 227, - 251, - 244, - 22, - 171, - 191, - 166, - 19, - 174, - 1, 0, 0, 0, @@ -6731,63 +4909,60 @@ 0, 0, 0, - 244, - 17, - 203, - 109, - 95, - 7, 0, 0, - 10, - 120, - 28, - 185, 0, - 2, 0, - 73, - 5, - 86, - 4, - 171, - 92, - 5, 0, - 194, - 201, - 221, - 216, 0, - 201, - 14, - 138, - 159, - 127, - 2, - 243, - 83, - 121, - 253, - 235, - 224, - 117, - 50, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25, + 118, + 102, + 211, + 146, + 1, + 0, + 0, + 81, + 202, 247, - 30, - 149, - 57, - 55, - 252, - 208, - 79, - 168, - 76, - 122, - 36, + 222, + 99, + 100, + 118, + 216, + 129, + 151, + 106, + 147, + 217, + 85, + 216, 192, - 4, + 15, + 140, + 225, + 29, + 103, + 63, 0, + 129, + 21, + 92, + 202, + 106, + 150, + 85, + 113, + 22, 0, 0, 0, @@ -6795,6 +4970,32 @@ 0, 0, 0, + 0 + ] + } + }, + "owner": { + "ObjectOwner": "0x0000000000000000000000000000000000000000000000000000000000000005" + }, + "previous_transaction": "7gtSzcRCnPVpmESfZRpQaHVh65UfDPZZqwfcDjwKqj7U", + "storage_rebate": 0 + } + ], + "output_objects": [ + { + "data": { + "Move": { + "type_": { + "Other": { + "address": "0000000000000000000000000000000000000000000000000000000000000003", + "module": "iota_system", + "name": "IotaSystemState", + "type_args": [] + } + }, + "has_public_transfer": false, + "version": 4, + "contents": [ 0, 0, 0, @@ -6818,362 +5019,415 @@ 0, 0, 0, - 28, - 3, - 133, - 57, - 100, - 73, - 32, - 113, - 183, - 112, - 201, - 166, - 191, - 35, - 47, - 34, - 32, - 159, - 48, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + } + }, + "owner": { + "Shared": { + "initial_shared_version": 1 + } + }, + "previous_transaction": "DpSZVwqohRzF7ASz7PMM8xL1ZkMnNvWMLJfjadt9ybE9", + "storage_rebate": 0 + }, + { + "data": { + "Move": { + "type_": { + "Other": { + "address": "0000000000000000000000000000000000000000000000000000000000000002", + "module": "dynamic_field", + "name": "Field", + "type_args": [ + "u64", + { + "struct": { + "address": "0000000000000000000000000000000000000000000000000000000000000003", + "module": "iota_system_state_inner", + "name": "IotaSystemStateInnerV2", + "type_args": [] + } + } + ] + } + }, + "has_public_transfer": false, + "version": 4, + "contents": [ + 91, 137, - 3, - 222, - 105, - 110, + 14, + 175, + 42, + 188, + 250, + 42, + 185, + 11, + 119, + 184, + 230, + 243, + 213, + 216, + 96, + 149, + 134, + 195, + 229, + 131, + 186, + 243, 220, - 204, - 41, - 226, - 63, - 78, - 18, - 254, - 0, - 0, - 0, + 205, + 90, + 241, + 126, + 223, + 72, + 209, + 2, 0, 0, 0, 0, 0, - 200, 0, 0, + 3, 0, 0, 0, 0, 0, 0, - 244, - 17, - 203, - 109, - 95, - 7, 0, - 232, - 3, + 1, 0, 0, 0, 0, 0, 0, - 200, 0, + 2, 0, 0, 0, 0, 0, 0, - 215, - 233, - 197, - 73, 0, - 103, - 112, - 32, - 41, - 241, - 60, - 231, - 183, - 150, + 235, + 80, + 81, + 188, + 82, + 54, 128, - 181, - 240, + 152, + 95, + 131, + 193, + 49, + 226, + 212, + 212, + 46, + 6, + 207, + 172, + 155, + 77, + 248, + 124, + 156, 93, - 160, - 34, - 202, + 124, + 109, + 206, + 232, + 47, + 39, 137, - 79, - 180, - 142, - 204, - 252, - 45, - 63, - 115, - 54, - 18, - 0, - 0, - 0, - 0, - 0, 0, + 208, + 127, + 95, + 47, + 245, + 105, + 43, 0, + 208, + 71, + 44, + 183, + 125, + 29, 0, - 152, - 52, - 108, - 41, - 160, - 169, - 155, - 157, - 10, - 128, - 201, - 237, - 227, - 122, - 119, + 4, + 174, + 216, + 158, + 172, + 100, + 204, + 30, + 254, + 159, + 195, + 233, + 61, + 144, + 88, + 173, + 213, + 244, + 156, + 198, + 75, + 12, + 232, + 218, + 177, + 54, + 182, + 121, 199, - 253, - 147, - 234, - 210, - 149, - 253, - 176, - 27, + 185, + 243, + 182, 137, - 94, - 241, - 57, - 44, - 80, - 135, - 181, 96, - 153, - 242, - 94, + 141, + 207, 246, - 31, - 128, - 50, - 185, - 20, - 99, - 100, - 96, - 152, + 209, + 85, + 4, + 10, + 101, + 111, + 72, + 25, + 177, + 49, + 17, + 181, 44, - 92, - 198, - 241, - 52, - 239, - 29, - 218, - 231, - 102, 87, - 242, - 203, + 70, + 168, + 107, + 167, + 47, + 57, + 95, + 186, 254, - 193, - 235, - 252, - 141, - 9, - 115, - 116, - 8, - 13, + 46, + 195, + 132, + 125, + 30, + 129, + 64, + 230, + 36, + 167, + 81, + 253, 246, - 252, - 240, - 220, - 184, - 188, - 75, - 13, - 142, + 181, + 242, + 5, + 11, + 199, + 32, + 92, + 249, + 211, + 0, + 4, + 201, + 11, + 12, + 116, 10, - 245, - 216, - 14, - 187, 255, - 43, - 76, - 89, - 159, - 84, - 244, + 211, + 38, + 206, + 103, + 60, + 194, + 178, + 58, 45, - 99, - 18, + 36, + 213, + 62, + 42, + 254, + 178, + 134, 223, - 195, - 20, - 39, + 198, + 104, + 253, + 64, 96, - 120, - 193, - 204, - 52, - 126, - 187, - 190, - 197, - 25, - 139, - 226, - 88, - 81, - 63, - 56, - 107, - 147, - 13, - 2, - 194, - 116, - 154, - 128, - 62, - 35, - 48, - 149, - 94, - 189, - 26, - 16, - 32, - 203, - 102, - 81, - 231, - 227, - 62, - 133, - 128, - 82, - 172, - 128, - 160, - 66, - 220, - 100, - 44, - 76, - 81, - 90, + 8, 157, - 141, - 9, + 109, + 43, + 23, + 183, + 153, + 221, + 54, + 249, + 13, 51, - 103, - 152, - 49, - 100, - 219, - 11, - 122, + 46, + 84, + 167, + 163, + 56, + 212, + 32, + 109, + 235, + 35, + 7, + 201, + 239, + 185, + 254, + 209, 111, + 122, + 55, + 135, + 92, + 135, + 145, + 234, + 34, + 205, 172, + 200, + 167, + 206, + 76, + 83, + 189, + 105, + 186, + 194, + 69, + 97, + 182, 32, - 207, - 136, - 11, - 207, 233, - 27, - 111, 229, - 25, - 40, - 88, - 39, + 74, + 177, + 163, + 194, + 251, + 42, + 2, + 77, + 108, + 140, + 235, + 238, + 171, + 17, + 178, + 173, + 55, 71, - 22, - 200, - 16, - 132, - 203, - 110, - 41, - 43, + 146, + 50, + 124, 82, - 213, - 213, - 214, - 217, - 106, - 48, - 242, - 227, - 234, - 136, + 10, + 10, + 129, + 151, + 215, + 205, + 212, + 237, 48, - 132, - 51, - 104, - 180, - 35, - 134, - 184, - 250, - 233, - 184, - 252, - 132, + 133, + 10, + 155, 203, - 143, - 130, - 190, - 89, - 79, - 35, - 164, - 172, - 124, - 161, - 131, - 231, - 233, 47, - 142, + 247, + 198, + 115, + 43, + 222, + 83, + 188, + 159, 173, + 91, + 96, + 225, + 142, + 9, + 106, + 136, + 182, + 107, + 125, + 168, + 83, + 123, + 49, 185, - 209, - 100, - 170, - 167, - 145, - 170, - 117, - 169, - 65, - 129, - 197, - 80, - 165, - 227, - 124, - 52, - 71, + 228, + 0, 172, + 250, + 235, + 90, + 33, + 169, + 255, + 193, + 15, + 174, + 111, + 249, + 22, + 108, + 133, + 142, + 171, 11, 118, 97, @@ -7185,7 +5439,7 @@ 111, 114, 45, - 48, + 49, 0, 0, 0, @@ -7210,9 +5464,9 @@ 112, 47, 53, + 53, 50, - 48, - 56, + 55, 55, 47, 104, @@ -7240,9 +5494,9 @@ 112, 47, 53, + 53, 50, - 48, - 56, + 55, 57, 24, 47, @@ -7265,35 +5519,10 @@ 112, 47, 53, - 50, - 48, - 57, 53, - 24, - 47, - 105, - 112, - 52, - 47, - 49, 50, - 55, - 46, - 48, - 46, - 48, - 46, - 49, - 47, - 117, - 100, - 112, - 47, + 56, 53, - 50, - 48, - 57, - 55, 0, 0, 0, @@ -7301,40 +5530,38 @@ 0, 0, 0, - 0, - 111, - 108, - 251, - 55, - 106, - 70, - 0, - 83, - 166, - 65, - 77, - 255, - 24, - 35, - 226, + 203, + 238, + 102, + 51, + 150, + 252, + 160, + 66, + 122, + 198, + 160, 124, + 201, + 197, + 225, + 25, + 157, + 66, 182, - 112, + 210, + 4, 225, - 195, - 108, - 2, - 145, - 10, - 215, - 79, - 160, - 179, - 110, - 91, - 27, - 7, + 203, + 214, 0, + 223, + 240, + 182, + 73, + 222, + 163, + 201, 0, 0, 0, @@ -7342,46 +5569,47 @@ 0, 0, 0, - 208, - 7, 0, + 196, + 9, 0, 0, 0, 0, 0, - 182, - 37, - 132, - 69, - 191, - 87, - 35, - 192, - 23, - 153, - 64, - 68, - 151, - 249, - 39, - 198, - 66, - 80, - 154, - 234, + 0, + 97, + 221, + 158, + 52, + 171, + 9, + 5, + 134, + 63, + 50, 83, - 180, - 249, - 23, - 44, - 27, - 124, - 233, 248, - 200, - 162, - 175, + 184, + 8, + 206, + 72, + 100, + 138, + 246, + 112, + 12, + 199, + 158, + 228, + 46, + 40, + 45, + 224, + 144, + 243, + 160, + 141, 232, 3, 0, @@ -7390,38 +5618,38 @@ 0, 0, 0, - 251, - 91, - 71, - 93, - 58, - 113, + 210, 7, - 34, - 32, - 73, - 58, - 239, - 215, + 175, + 121, + 62, + 202, + 57, + 178, + 71, + 217, + 66, 234, - 130, - 32, - 211, - 15, - 101, - 233, - 95, - 183, - 248, - 96, - 141, - 116, - 3, - 192, - 80, - 95, - 180, - 167, + 143, + 76, + 127, + 97, + 57, + 85, + 68, + 60, + 84, + 148, + 47, + 76, + 83, + 76, + 253, + 91, + 64, + 161, + 158, + 165, 1, 0, 0, @@ -7456,38 +5684,38 @@ 92, 5, 0, - 164, - 195, - 143, - 144, - 61, - 151, - 68, - 202, + 57, + 225, + 12, + 2, + 6, + 198, + 95, + 52, 34, - 67, - 11, - 174, - 222, - 209, + 245, + 5, + 228, + 179, 188, - 55, - 192, - 237, - 61, - 117, - 206, - 85, + 247, + 80, + 211, + 148, + 9, + 64, + 94, 104, - 62, - 105, - 189, - 61, - 31, - 196, - 11, - 103, - 48, + 94, + 69, + 127, + 79, + 147, + 26, + 248, + 160, + 241, + 187, 4, 0, 0, @@ -7520,38 +5748,38 @@ 0, 0, 0, - 86, - 11, - 133, - 42, - 34, - 128, - 46, - 144, - 245, - 237, - 103, - 194, - 141, - 145, - 70, - 227, - 187, - 103, - 72, - 225, - 126, - 12, - 195, - 94, - 216, - 109, - 11, - 185, - 136, - 231, - 209, + 186, + 222, + 220, 101, + 226, + 201, + 82, + 157, + 46, + 57, + 10, + 148, + 31, + 76, + 176, + 102, + 174, + 80, + 162, + 243, + 250, + 248, + 0, + 8, + 138, + 168, + 116, + 228, + 254, + 14, + 76, + 200, 0, 0, 0, @@ -7592,38 +5820,38 @@ 0, 0, 0, - 48, - 196, - 28, - 202, - 166, - 13, - 73, - 199, - 135, - 166, - 25, - 93, - 219, - 125, - 63, + 169, 116, - 202, - 177, - 217, - 91, - 147, - 64, - 31, - 161, - 218, - 162, - 170, - 69, - 161, - 76, - 100, - 232, + 83, + 179, + 30, + 83, + 164, + 114, + 56, + 178, + 138, + 6, + 113, + 37, + 192, + 68, + 224, + 109, + 126, + 222, + 16, + 239, + 255, + 106, + 180, + 38, + 47, + 81, + 34, + 62, + 5, + 39, 0, 0, 0, @@ -7632,250 +5860,250 @@ 0, 0, 0, - 72, - 217, - 15, - 101, - 11, - 244, - 216, - 122, - 209, - 41, - 236, - 71, - 57, - 46, - 195, - 138, - 140, - 108, - 11, - 181, - 234, - 75, - 109, - 171, - 97, - 14, - 58, - 132, - 20, - 49, - 171, + 8, + 194, + 126, + 8, + 150, + 33, + 18, + 221, + 219, + 196, + 212, + 251, + 93, + 192, + 21, + 159, + 211, + 117, + 148, + 9, + 74, + 141, + 153, + 130, + 94, + 96, + 133, + 179, + 54, + 73, + 15, + 74, + 96, 153, + 242, + 94, + 246, + 31, + 128, + 50, + 185, + 20, + 99, + 100, 96, - 173, - 222, - 239, - 148, - 216, 152, - 200, - 142, - 64, - 219, - 222, - 255, - 145, - 197, - 241, - 5, - 249, - 207, 44, - 116, - 127, - 182, - 242, - 188, - 55, - 236, - 3, - 214, - 201, - 30, - 219, - 46, - 26, + 92, + 198, + 241, + 52, + 239, + 29, + 218, + 231, + 102, 87, - 140, - 245, - 68, - 190, - 139, + 242, + 203, + 254, + 193, + 235, + 252, + 141, 9, - 49, - 226, - 95, - 36, - 61, - 89, - 176, - 195, + 115, + 116, + 8, 13, - 152, - 161, - 108, - 227, - 186, - 29, - 108, - 241, - 215, - 245, - 4, - 38, - 153, - 46, - 176, - 173, - 179, - 19, + 246, + 252, + 240, + 220, + 184, + 188, 75, - 5, - 91, - 232, - 20, - 13, - 45, - 181, - 242, - 95, - 176, 13, - 131, - 248, - 228, - 34, - 43, - 240, - 31, - 214, - 172, - 147, - 161, + 142, + 10, + 245, + 216, + 14, + 187, 255, - 77, - 121, - 218, + 43, + 76, + 89, + 159, + 84, + 244, + 45, + 99, + 18, + 223, + 195, + 20, + 39, + 96, + 120, + 193, + 204, + 52, + 126, + 187, + 190, + 197, + 25, + 139, + 226, 88, - 242, - 32, - 157, - 111, - 65, - 91, - 154, + 81, + 63, + 56, + 107, + 147, + 13, + 2, + 194, 116, + 154, + 128, + 62, + 35, + 48, + 149, + 94, + 189, 26, + 16, 32, - 81, - 165, - 157, - 125, - 130, - 182, - 69, - 127, - 200, - 123, - 212, - 219, - 165, - 4, - 238, - 15, - 68, - 169, - 73, - 115, - 59, - 197, - 138, + 83, + 177, + 140, 254, - 32, + 247, + 77, + 131, + 149, + 28, + 160, + 125, + 7, 72, - 185, - 38, + 46, 230, - 150, - 233, + 145, + 93, + 157, + 220, + 116, + 168, + 106, + 190, + 63, + 4, + 6, + 57, + 205, + 36, + 172, + 145, + 144, + 32, + 26, + 30, + 17, + 236, + 148, + 90, + 203, + 178, + 12, + 50, + 117, + 142, + 162, 38, - 148, - 165, - 17, - 3, - 58, - 186, - 78, + 177, + 144, + 254, + 153, + 185, + 52, + 160, + 238, + 93, + 9, + 64, + 89, + 162, + 62, + 206, + 202, + 232, 49, - 172, - 39, - 198, - 43, - 231, - 128, - 216, - 233, - 5, - 174, - 222, - 133, - 66, - 72, - 216, - 253, - 39, 48, - 179, - 18, - 62, - 181, - 29, + 174, + 9, + 63, + 228, + 159, + 110, 193, - 154, - 105, - 231, - 94, - 0, - 253, - 147, - 164, - 152, - 191, - 209, - 90, - 200, + 170, + 116, + 63, 210, - 59, - 88, - 101, - 171, - 112, - 145, - 55, + 118, + 97, + 229, + 201, + 73, + 155, + 242, + 213, + 180, + 22, + 131, + 235, + 219, + 135, + 158, + 228, + 18, + 28, + 253, 221, + 123, + 126, + 245, + 62, + 146, + 114, 230, - 140, - 56, - 240, - 86, + 99, 84, - 193, - 49, - 6, - 45, - 237, - 198, - 215, - 147, - 111, - 94, - 143, - 129, - 109, - 183, + 13, + 146, + 170, + 151, + 221, + 189, + 51, + 252, 11, 118, 97, @@ -7887,7 +6115,7 @@ 111, 114, 45, - 50, + 48, 0, 0, 0, @@ -7912,10 +6140,10 @@ 112, 47, 53, - 50, - 49, - 49, 53, + 50, + 54, + 55, 47, 104, 116, @@ -7942,35 +6170,10 @@ 112, 47, 53, - 50, - 49, - 49, - 55, - 24, - 47, - 105, - 112, - 52, - 47, - 49, - 50, - 55, - 46, - 48, - 46, - 48, - 46, - 49, - 47, - 117, - 100, - 112, - 47, 53, 50, - 49, - 50, - 51, + 54, + 57, 24, 47, 105, @@ -7992,9 +6195,9 @@ 112, 47, 53, + 53, 50, - 49, - 50, + 55, 53, 0, 0, @@ -8003,39 +6206,38 @@ 0, 0, 0, - 0, - 245, - 129, - 174, - 94, - 253, - 236, - 254, - 169, - 210, - 13, - 151, - 145, - 128, - 169, - 56, - 66, - 49, - 90, - 127, + 97, + 202, 254, - 26, - 181, - 229, - 54, - 109, + 158, + 226, + 147, + 233, + 52, + 217, + 232, + 234, + 168, + 221, + 170, 20, - 56, - 103, - 14, - 16, - 207, - 50, + 225, + 139, + 81, + 115, + 8, + 242, + 35, + 145, + 171, + 245, + 145, + 96, + 32, + 85, + 175, + 251, + 63, 0, 0, 0, @@ -8044,46 +6246,46 @@ 0, 0, 0, - 208, - 7, + 196, + 9, 0, 0, 0, 0, 0, 0, - 53, - 11, - 141, - 159, - 199, - 174, - 192, - 150, - 68, - 81, - 180, - 184, - 90, - 118, - 142, - 78, - 57, - 233, - 107, - 245, - 123, + 111, + 39, + 18, + 222, + 47, + 141, + 116, + 93, + 65, + 120, + 49, + 246, + 53, + 240, + 104, + 24, + 8, + 131, + 2, + 130, + 36, + 94, + 229, + 173, + 144, + 149, + 191, + 25, 23, - 55, 108, - 96, - 29, - 244, - 253, - 107, - 49, - 76, - 18, + 111, + 204, 232, 3, 0, @@ -8092,38 +6294,38 @@ 0, 0, 0, - 87, - 237, - 32, - 86, - 222, - 32, - 49, - 210, - 53, - 230, + 203, + 80, + 5, + 66, + 182, + 197, + 54, + 201, + 219, + 93, + 163, + 15, + 25, + 198, + 242, + 133, 10, - 194, - 125, - 91, - 46, - 170, + 23, + 218, + 216, + 177, + 129, + 50, + 43, + 101, + 250, 128, - 158, - 85, - 158, - 11, - 173, - 248, - 152, - 226, - 64, - 231, - 208, - 252, - 170, - 26, - 8, + 147, + 57, + 45, + 43, + 41, 1, 0, 0, @@ -8158,38 +6360,38 @@ 92, 5, 0, - 63, - 107, - 147, - 31, - 121, - 253, - 11, - 42, - 20, - 237, + 94, 118, - 165, + 191, + 232, + 91, + 184, + 114, + 7, + 182, + 23, + 238, + 109, + 155, + 142, + 93, + 221, 178, - 55, - 20, - 52, - 76, - 66, - 31, + 171, + 78, + 227, 153, - 162, - 204, - 209, - 151, - 142, - 242, - 39, - 14, - 22, - 118, - 20, - 204, + 98, + 159, + 24, + 165, + 201, + 13, + 36, + 100, + 37, + 105, + 46, 4, 0, 0, @@ -8222,38 +6424,38 @@ 0, 0, 0, - 13, - 83, - 208, - 2, - 216, - 71, - 135, - 76, - 196, - 240, + 195, + 26, + 157, + 156, + 152, + 230, + 112, 55, - 169, - 172, - 163, - 129, - 77, - 167, - 141, - 222, - 234, - 139, - 250, - 125, - 75, - 145, + 198, + 28, + 12, + 166, + 13, + 115, + 175, + 228, + 246, + 114, + 142, + 96, + 159, + 229, + 38, 233, - 139, - 57, - 119, - 196, - 24, - 85, + 9, + 23, + 150, + 105, + 71, + 114, + 223, + 227, 0, 0, 0, @@ -8286,7 +6488,47 @@ 0, 0, 0, - 200, + 200, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 247, + 53, + 237, + 130, + 93, + 12, + 217, + 118, + 223, + 124, + 29, + 29, + 216, + 27, + 171, + 113, + 211, + 82, + 134, + 121, + 213, + 9, + 54, + 221, + 188, + 217, + 96, + 247, + 18, + 146, + 243, + 57, + 0, 0, 0, 0, @@ -8294,290 +6536,250 @@ 0, 0, 0, - 219, - 119, - 163, - 77, - 109, - 87, - 164, - 155, - 190, - 236, - 145, - 24, - 50, - 181, - 141, - 163, - 62, - 29, - 37, - 149, - 161, - 187, - 246, - 10, - 50, - 162, - 143, - 252, - 237, + 89, + 64, + 182, + 78, + 178, + 151, + 32, + 234, + 12, + 53, + 212, + 158, + 227, + 213, + 153, 179, + 71, + 120, + 121, + 214, + 139, + 126, + 101, + 41, + 4, + 178, + 54, + 237, + 214, + 234, + 216, + 138, + 96, + 173, + 222, + 239, + 148, + 216, + 152, + 200, 142, - 209, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 50, - 130, - 23, - 143, + 64, + 219, + 222, + 255, + 145, + 197, 241, - 103, - 208, - 42, + 5, + 249, + 207, + 44, + 116, + 127, + 182, + 242, + 188, + 55, + 236, 3, - 62, - 137, - 209, - 40, - 10, + 214, + 201, 30, - 194, + 219, + 46, + 26, + 87, + 140, + 245, + 68, + 190, + 139, + 9, + 49, + 226, 95, - 157, - 208, - 105, - 160, - 241, - 64, - 12, 36, - 65, - 146, - 241, - 247, - 92, + 61, + 89, + 176, + 195, + 13, + 152, + 161, + 108, + 227, 186, - 188, - 96, - 179, - 253, - 94, - 251, - 92, - 135, - 36, - 3, - 164, - 173, - 19, + 29, + 108, 241, - 25, - 149, + 215, + 245, + 4, + 38, + 153, + 46, + 176, + 173, + 179, 19, - 96, - 109, - 35, - 53, - 74, - 132, - 82, - 73, - 174, - 161, - 87, - 86, - 76, - 35, - 255, - 60, - 21, - 198, - 201, - 230, - 82, - 183, - 45, - 116, - 14, - 140, - 172, - 185, - 60, - 188, - 192, - 104, - 107, - 14, - 192, - 204, - 12, - 28, - 118, - 11, - 251, - 66, - 180, - 54, - 81, - 159, - 197, - 168, - 5, 75, - 118, - 83, - 58, - 151, - 169, - 242, - 57, - 135, - 208, - 151, - 239, - 150, - 177, + 5, + 91, + 232, + 20, + 13, + 45, + 181, 242, - 82, - 107, - 178, - 7, - 63, + 95, + 176, + 13, + 131, + 248, + 228, + 34, + 43, + 240, + 31, + 214, + 172, + 147, 161, - 10, - 119, - 25, - 148, - 23, - 114, - 52, - 126, + 255, + 77, + 121, + 218, + 88, 242, - 116, - 244, 32, - 186, - 104, - 213, + 101, + 41, 91, - 218, - 163, - 181, - 223, - 208, + 166, + 21, + 8, + 15, + 183, + 171, + 43, + 105, + 62, + 143, + 42, + 220, + 160, + 18, + 204, + 18, 177, - 219, - 199, - 179, - 145, - 245, - 154, - 172, - 70, - 98, - 48, - 93, - 0, + 143, + 95, + 250, + 143, + 90, + 251, + 80, + 79, + 19, + 151, + 254, 253, - 230, - 76, - 154, - 76, - 110, - 236, - 134, - 14, - 117, 32, - 7, - 134, - 124, - 99, - 82, 250, - 224, - 138, - 194, - 105, - 98, - 161, - 155, - 103, - 211, - 145, - 87, - 27, - 138, - 230, - 219, - 213, - 59, - 58, - 230, - 35, - 134, - 160, - 69, - 70, - 5, - 103, - 48, - 144, - 238, - 206, - 27, - 158, - 108, - 237, - 242, - 132, - 172, - 88, + 209, + 183, + 196, + 197, + 121, 33, - 180, - 55, - 105, - 22, - 117, - 124, - 154, - 184, + 21, + 211, + 65, + 227, + 216, + 234, + 249, + 192, + 236, + 194, + 255, + 190, + 81, + 208, + 224, + 251, + 165, + 53, + 30, 220, - 33, - 23, - 196, + 75, + 192, + 117, + 68, + 159, + 48, + 131, + 47, + 168, + 134, + 246, + 248, + 62, + 162, + 31, + 28, + 191, + 186, + 169, + 214, 29, - 87, - 181, - 60, - 222, - 146, - 252, - 251, - 23, - 170, - 22, - 100, + 44, + 57, + 33, + 25, + 25, + 44, + 176, + 119, + 148, 150, - 209, - 54, + 83, + 118, 177, - 108, - 181, - 12, - 50, - 42, - 25, - 133, - 43, + 138, + 121, + 73, + 214, + 93, + 173, + 153, + 142, + 0, + 13, + 99, + 3, + 2, + 6, + 80, + 65, + 227, + 213, + 201, + 148, 11, 118, 97, @@ -8589,7 +6791,7 @@ 111, 114, 45, - 51, + 50, 0, 0, 0, @@ -8610,44 +6812,19 @@ 49, 47, 116, - 99, - 112, - 47, - 53, - 50, - 49, - 50, - 57, - 47, - 104, - 116, - 116, - 112, - 24, - 47, - 105, - 112, - 52, - 47, - 49, - 50, - 55, - 46, - 48, - 46, - 48, - 46, - 49, - 47, - 117, - 100, + 99, 112, 47, 53, + 53, 50, - 49, - 51, - 49, + 56, + 55, + 47, + 104, + 116, + 116, + 112, 24, 47, 105, @@ -8669,10 +6846,10 @@ 112, 47, 53, + 53, 50, - 49, - 51, - 55, + 56, + 57, 24, 47, 105, @@ -8694,10 +6871,10 @@ 112, 47, 53, + 53, 50, - 49, - 51, 57, + 53, 0, 0, 0, @@ -8705,39 +6882,38 @@ 0, 0, 0, - 0, - 167, - 69, - 231, - 171, - 22, - 87, - 230, - 137, - 122, - 155, - 115, - 67, - 34, - 144, - 147, - 123, - 26, - 4, - 108, - 11, - 211, - 40, - 136, - 229, - 98, - 147, + 93, + 94, + 172, + 116, 57, - 133, - 122, + 179, + 239, + 207, + 144, + 27, + 132, + 104, + 105, + 24, + 250, + 86, + 59, + 116, + 175, + 56, + 192, + 191, + 240, + 188, + 164, + 84, + 48, + 8, + 231, + 242, + 206, 176, - 98, - 125, 0, 0, 0, @@ -8746,46 +6922,46 @@ 0, 0, 0, - 208, - 7, + 196, + 9, 0, 0, 0, 0, 0, 0, - 98, - 84, - 73, - 35, + 24, + 193, + 114, + 17, + 242, + 33, 238, - 36, - 120, - 182, - 53, - 204, - 253, - 142, - 197, - 168, - 56, - 27, - 133, - 121, - 187, - 11, - 224, - 185, + 190, + 226, + 0, + 112, + 189, + 167, 166, - 209, - 34, - 6, - 52, - 1, - 193, - 148, - 253, - 48, + 20, + 99, + 106, + 37, + 13, + 77, + 9, + 46, + 181, + 132, + 22, + 22, + 78, + 155, + 179, + 78, + 18, + 24, 232, 3, 0, @@ -8794,38 +6970,38 @@ 0, 0, 0, - 12, - 179, - 128, - 203, - 50, - 90, - 131, - 15, - 3, - 238, - 75, - 218, - 121, - 11, - 5, - 225, - 117, - 83, - 128, - 22, - 245, - 212, - 124, - 179, - 82, - 201, - 60, - 198, - 218, + 61, + 204, + 132, 220, - 19, - 4, + 80, + 55, + 5, + 242, + 131, + 99, + 205, + 122, + 85, + 32, + 214, + 232, + 30, + 96, + 9, + 153, + 102, + 138, + 88, + 227, + 89, + 211, + 37, + 226, + 170, + 230, + 165, + 66, 1, 0, 0, @@ -8860,38 +7036,38 @@ 92, 5, 0, - 123, - 148, - 172, - 91, - 189, - 1, - 12, - 106, - 119, + 164, + 81, + 79, + 99, + 179, + 98, + 209, + 48, + 248, + 216, 84, - 85, - 227, - 223, - 27, - 108, - 154, - 141, - 36, - 169, - 246, - 194, - 169, - 194, - 2, - 85, - 184, - 114, - 184, - 18, - 253, - 191, + 158, + 220, + 28, + 231, + 147, + 44, + 7, + 34, + 225, + 38, + 13, + 252, + 13, + 81, + 21, + 225, + 182, + 32, + 21, 135, + 1, 4, 0, 0, @@ -8924,38 +7100,38 @@ 0, 0, 0, - 120, - 242, - 231, - 14, - 134, - 130, - 104, - 11, - 103, - 210, - 189, - 19, - 28, - 11, - 147, + 61, + 144, + 54, + 63, + 188, + 84, + 183, + 232, + 59, + 187, + 215, + 110, + 137, + 253, + 163, + 135, + 141, + 124, + 244, + 59, + 190, + 246, + 48, + 35, 107, - 81, - 11, - 11, - 65, - 86, - 11, - 202, - 206, - 15, - 46, - 158, - 1, - 100, - 197, - 160, - 6, + 75, + 144, + 145, + 128, + 78, + 72, + 92, 0, 0, 0, @@ -8996,291 +7172,291 @@ 0, 0, 0, - 211, - 120, - 82, - 183, - 112, - 80, - 203, - 13, - 147, - 76, - 148, - 115, - 172, - 242, - 93, - 194, + 56, + 61, 226, - 79, - 116, - 169, - 48, - 72, - 230, - 175, - 70, - 79, - 244, - 144, - 173, - 213, - 121, - 156, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 245, + 138, + 104, + 93, + 45, + 197, + 22, + 164, + 57, + 149, + 214, + 114, + 56, 102, - 129, - 54, - 96, - 157, - 170, - 89, - 196, - 43, - 209, - 118, - 250, - 95, - 88, - 86, - 6, - 162, - 244, 209, - 239, - 219, - 71, - 136, - 52, - 112, - 134, - 45, - 59, - 63, - 115, - 136, - 96, 165, - 62, - 107, - 156, - 158, - 216, 84, - 96, + 204, + 248, 151, - 72, - 60, - 127, - 24, - 178, - 120, - 132, - 46, - 8, - 105, - 210, - 52, - 100, - 137, - 117, - 48, + 75, + 253, 242, - 39, - 113, - 30, - 93, - 92, - 15, - 231, - 70, - 106, - 24, - 198, - 223, - 117, - 158, - 231, + 209, + 2, + 115, + 134, + 154, 217, - 91, - 65, - 211, - 51, - 35, - 89, - 11, - 248, - 58, - 244, - 233, - 118, - 164, - 6, + 70, 0, - 18, - 138, - 151, - 88, - 229, - 243, - 38, - 108, - 193, - 254, - 149, - 81, - 156, - 182, - 49, - 181, - 74, - 110, - 91, - 243, - 52, - 60, - 170, - 98, - 18, - 181, - 176, - 127, - 133, - 164, - 206, - 104, - 108, - 53, - 77, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15, + 243, + 126, + 19, + 80, 94, - 205, - 220, - 210, - 32, + 217, + 7, + 217, + 8, 207, - 129, - 54, - 12, - 182, - 29, + 55, + 145, + 154, + 41, + 17, + 122, + 10, + 183, 102, - 61, - 164, - 70, - 65, + 147, + 17, + 242, + 110, + 21, + 77, + 255, + 190, + 73, + 46, + 138, + 93, + 96, + 179, + 253, + 94, + 251, 92, - 223, - 12, - 100, - 100, - 218, - 182, - 114, - 64, - 69, - 6, - 60, - 197, + 135, + 36, + 3, + 164, + 173, + 19, + 241, + 25, + 149, + 19, + 96, + 109, + 35, + 53, + 74, + 132, + 82, + 73, + 174, + 161, + 87, 86, - 217, - 55, - 130, - 105, - 246, + 76, 35, + 255, + 60, + 21, 198, - 32, - 20, - 87, - 228, - 166, - 96, - 203, - 177, + 201, + 230, + 82, + 183, 45, - 143, - 32, - 164, - 6, + 116, + 14, + 140, + 172, + 185, + 60, 188, - 131, - 10, - 49, - 73, - 253, - 43, - 70, - 97, - 189, - 91, - 77, - 165, - 139, - 113, - 6, - 239, - 124, - 39, - 16, - 48, + 192, + 104, + 107, + 14, + 192, + 204, + 12, + 28, + 118, + 11, + 251, + 66, 180, - 146, - 1, - 38, - 21, - 25, + 54, + 81, + 159, + 197, + 168, + 5, + 75, + 118, + 83, 58, - 185, - 14, - 59, - 219, + 151, + 169, + 242, + 57, + 135, + 208, + 151, + 239, + 150, + 177, + 242, + 82, + 107, + 178, + 7, + 63, + 161, + 10, + 119, + 25, + 148, + 23, + 114, 52, + 126, + 242, + 116, + 244, + 32, + 54, + 9, + 111, + 246, + 41, + 152, + 154, + 252, + 170, + 180, + 28, + 224, + 99, + 153, + 48, + 72, + 228, + 145, + 126, + 47, + 135, + 247, + 206, + 187, 229, + 63, + 51, + 41, + 58, + 126, + 34, + 100, + 32, + 22, + 80, 98, - 216, + 211, + 32, + 28, + 217, + 185, + 224, 64, - 147, - 144, - 33, - 202, - 4, - 30, - 242, - 244, - 109, - 108, - 93, - 207, - 167, - 234, - 6, - 118, - 129, + 36, + 2, + 136, + 84, + 153, + 1, + 84, + 230, + 250, 131, - 163, - 47, - 169, - 56, + 229, + 53, + 253, + 219, + 124, + 122, + 31, + 32, + 168, + 31, + 46, + 231, + 48, 167, - 155, - 58, - 146, + 36, 95, - 139, - 70, - 22, - 220, - 120, - 10, + 91, + 231, + 215, + 230, + 126, + 189, + 151, + 25, + 9, + 73, + 51, + 246, + 206, + 167, + 172, + 17, + 4, + 217, + 222, + 123, + 225, + 162, + 176, + 231, + 17, + 237, + 115, + 158, + 51, + 23, + 222, + 35, + 116, + 242, + 80, + 161, + 91, + 134, + 241, + 55, + 42, + 7, + 228, + 206, + 245, + 11, 118, 97, 108, @@ -9290,71 +7466,16 @@ 116, 111, 114, - 48, - 11, - 100, - 101, - 115, - 99, - 114, - 105, - 112, - 116, - 105, - 111, - 110, - 25, - 104, - 116, - 116, - 112, - 115, - 58, - 47, + 45, + 51, + 0, + 0, + 0, + 29, 47, 105, - 111, - 116, - 97, - 46, - 111, - 114, - 103, - 47, - 108, - 111, - 103, - 111, - 46, - 112, - 110, - 103, - 20, - 104, - 116, - 116, 112, - 115, - 58, - 47, - 47, - 119, - 119, - 119, - 46, - 105, - 111, - 116, - 97, - 46, - 111, - 114, - 103, - 28, - 47, - 100, - 110, - 115, + 52, 47, 49, 50, @@ -9370,44 +7491,21 @@ 99, 112, 47, - 56, - 48, - 56, - 48, + 53, + 53, + 50, + 57, + 55, 47, 104, 116, 116, 112, - 23, - 47, - 100, - 110, - 115, - 47, - 49, - 50, - 55, - 46, - 48, - 46, - 48, - 46, - 49, + 24, 47, - 117, - 100, + 105, 112, - 47, - 56, - 48, - 56, 52, - 23, - 47, - 100, - 110, - 115, 47, 49, 50, @@ -9423,74 +7521,36 @@ 100, 112, 47, - 56, - 48, - 56, - 49, - 23, - 47, - 100, - 110, - 115, - 47, - 49, + 53, + 53, 50, - 55, - 46, - 48, - 46, - 48, - 46, - 49, - 47, - 117, - 100, - 112, + 57, + 57, + 24, 47, - 56, - 48, - 56, - 50, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 76, - 179, - 167, - 126, - 18, - 238, - 65, - 140, - 237, - 181, - 246, - 156, - 79, - 25, - 121, - 145, - 179, - 60, - 69, - 239, - 45, - 52, - 76, - 157, - 69, - 145, - 127, - 61, - 97, - 107, - 36, + 105, 112, + 52, + 47, + 49, + 50, + 55, + 46, + 48, + 46, + 48, + 46, + 49, + 47, + 117, + 100, + 112, + 47, + 53, + 53, + 51, + 48, + 53, 0, 0, 0, @@ -9498,88 +7558,87 @@ 0, 0, 0, + 235, + 179, + 105, + 207, + 36, + 221, + 187, + 70, + 238, + 33, + 154, + 254, + 246, + 183, + 177, + 9, + 104, + 44, + 193, + 238, + 122, + 236, + 62, + 199, + 243, + 148, + 112, + 79, + 189, + 153, + 68, + 49, 0, - 208, - 7, 0, 0, 0, 0, 0, 0, - 74, - 147, - 61, - 94, - 223, - 159, - 108, - 51, - 148, - 133, - 235, - 178, - 86, - 145, - 162, - 162, - 82, - 76, - 36, - 48, - 67, - 60, - 227, - 173, - 4, - 51, - 128, - 14, - 236, - 227, - 221, - 255, - 232, - 3, 0, + 196, + 9, 0, 0, 0, 0, 0, - 148, - 42, - 142, - 98, - 212, - 124, - 1, - 32, - 200, - 159, - 249, - 18, - 173, - 14, - 35, - 233, - 104, - 182, - 193, - 93, - 160, - 226, - 192, - 97, - 115, - 27, + 0, + 179, + 221, + 122, + 59, 55, - 81, - 112, - 175, - 105, - 37, - 1, + 201, + 79, + 239, + 24, + 218, + 236, + 58, + 226, + 113, + 77, + 240, + 253, + 30, + 164, + 96, + 249, + 64, + 120, + 145, + 186, + 57, + 164, + 79, + 39, + 28, + 176, + 72, + 232, 3, 0, 0, @@ -9587,15 +7646,42 @@ 0, 0, 0, + 29, + 249, + 67, + 164, + 123, + 138, + 6, + 11, + 45, + 207, + 2, + 237, + 185, + 30, + 13, + 130, + 229, + 33, + 64, + 4, + 156, + 170, + 247, + 208, + 168, + 153, + 67, + 98, + 48, + 135, + 208, + 185, + 1, 0, 0, 0, - 128, - 106, - 172, - 175, - 60, - 9, 0, 0, 0, @@ -9603,50 +7689,62 @@ 0, 0, 0, + 244, + 17, + 203, + 109, + 95, + 7, 0, 0, + 10, + 120, + 28, + 185, 0, - 128, - 106, - 172, - 175, - 60, - 9, + 2, 0, - 111, - 45, - 3, - 168, - 97, - 198, - 163, - 136, - 199, - 90, - 160, - 78, - 249, + 73, + 5, 86, - 82, - 95, - 111, - 162, - 240, - 91, - 6, - 123, - 233, - 249, - 228, - 54, - 233, - 133, - 1, - 198, - 111, - 139, - 1, + 4, + 171, + 92, + 5, + 0, + 190, + 204, + 104, + 114, + 211, + 172, + 212, 0, + 156, + 48, + 171, + 213, + 25, + 195, + 190, + 126, + 215, + 235, + 80, + 248, + 222, + 203, + 117, + 16, + 134, + 58, + 64, + 238, + 252, + 65, + 146, + 43, + 4, 0, 0, 0, @@ -9677,38 +7775,39 @@ 0, 0, 0, - 151, - 165, - 252, - 16, - 16, - 249, - 41, - 39, - 113, - 8, - 91, + 0, + 213, + 21, + 71, + 19, + 243, + 146, + 139, + 123, + 244, 60, + 220, + 212, + 11, + 201, + 18, + 95, + 226, 88, - 225, - 48, - 64, - 35, - 186, - 161, - 250, - 1, - 81, - 51, - 48, - 225, - 254, - 105, - 14, - 166, - 38, - 16, - 144, + 107, + 56, + 193, + 98, + 233, + 241, + 203, + 165, + 192, + 253, + 213, + 8, + 238, + 31, 0, 0, 0, @@ -9726,12 +7825,12 @@ 0, 0, 0, - 128, - 106, - 172, - 175, - 60, - 9, + 244, + 17, + 203, + 109, + 95, + 7, 0, 232, 3, @@ -9749,39 +7848,38 @@ 0, 0, 0, - 85, - 6, - 129, - 107, - 168, - 182, + 188, + 16, + 251, 56, - 113, - 98, - 53, - 93, - 4, - 125, - 158, - 41, - 70, - 117, - 96, - 211, - 191, - 19, - 133, - 196, - 76, - 28, - 116, - 110, - 128, - 178, - 221, + 48, + 249, + 56, + 85, + 197, + 190, + 210, + 84, + 232, + 49, + 249, + 44, + 59, + 38, 195, - 186, - 0, + 10, + 157, + 140, + 152, + 218, + 163, + 86, + 229, + 89, + 68, + 253, + 36, + 155, 0, 0, 0, @@ -9789,38 +7887,39 @@ 0, 0, 0, - 89, 0, - 134, - 29, - 192, - 94, - 22, - 228, + 210, + 97, + 218, 35, - 15, - 103, - 223, - 102, - 125, - 164, - 0, - 182, - 241, - 173, - 148, - 115, - 76, - 12, - 134, - 255, - 200, - 115, - 21, - 201, - 216, + 110, + 84, + 230, + 212, + 68, + 151, + 3, + 139, + 166, + 197, + 152, + 87, + 236, + 158, + 62, + 1, + 25, + 194, 29, - 213, + 254, + 92, + 59, + 243, + 114, + 155, + 55, + 37, + 193, 0, 0, 0, @@ -9830,39 +7929,39 @@ 0, 0, 0, - 116, - 140, - 27, - 170, - 209, - 171, - 17, - 61, - 7, - 56, - 218, - 138, - 21, - 4, - 220, - 241, - 80, - 162, - 255, - 203, - 11, + 49, 22, - 170, - 48, + 112, + 182, + 45, + 165, + 30, + 181, + 253, + 7, + 140, + 143, + 160, + 44, + 4, + 207, + 155, 59, - 7, - 101, - 161, - 69, - 24, - 201, - 112, - 5, + 143, + 30, + 11, + 129, + 150, + 184, + 120, + 218, + 44, + 130, + 213, + 80, + 62, + 240, + 4, 0, 0, 0, @@ -9870,38 +7969,38 @@ 0, 0, 0, - 247, - 48, - 198, - 197, - 187, - 95, + 136, + 109, + 166, + 116, + 47, + 73, + 243, + 234, + 205, + 28, + 33, 147, - 209, - 15, + 249, + 90, + 136, + 131, + 97, + 13, + 48, + 193, + 142, + 96, + 9, + 177, + 3, + 249, + 121, + 92, 245, - 38, + 84, 60, - 142, - 201, - 225, - 91, - 113, - 53, - 180, - 225, - 99, - 175, - 83, - 223, - 59, - 116, - 194, - 11, - 151, - 235, - 146, - 196, + 237, 0, 0, 0, @@ -9910,38 +8009,38 @@ 0, 0, 0, - 80, - 80, - 142, - 127, 158, - 232, - 36, + 215, + 123, + 250, + 241, + 176, + 30, + 81, + 128, + 135, + 200, + 4, + 143, 13, - 132, - 21, - 170, - 224, - 230, - 25, - 125, - 12, - 24, - 68, - 177, - 231, - 44, - 91, - 31, - 217, - 105, + 77, + 253, 9, - 198, - 144, - 96, - 16, - 146, - 139, + 45, + 39, + 186, + 95, + 41, + 158, + 40, + 129, + 114, + 220, + 159, + 226, + 255, + 15, + 212, 0, 0, 0, @@ -9951,38 +8050,38 @@ 0, 0, 0, - 117, - 254, - 42, - 52, - 238, - 250, - 101, - 84, - 49, - 145, + 178, + 53, + 96, 237, - 191, - 142, - 110, - 6, - 188, - 55, - 241, - 1, + 161, + 189, + 128, + 101, + 109, + 250, + 77, + 232, + 78, + 130, + 196, + 17, + 8, + 175, + 162, + 140, + 219, + 136, + 123, + 157, + 157, + 93, + 148, + 176, + 98, + 136, + 157, 107, - 182, - 234, - 227, - 213, - 34, - 177, - 229, - 70, - 184, - 220, - 217, - 51, 0, 0, 0, @@ -9991,10 +8090,10 @@ 0, 0, 0, - 240, - 223, - 190, - 2, + 0, + 0, + 0, + 0, 0, 0, 0, @@ -10063,38 +8162,38 @@ 0, 0, 0, - 153, - 48, - 123, - 170, - 237, - 150, - 85, - 58, - 253, - 170, - 119, - 84, - 156, - 116, - 215, - 211, - 179, - 29, - 196, - 212, - 126, - 30, - 21, - 144, - 136, - 246, 168, + 39, + 55, + 226, + 93, + 238, + 212, + 208, + 113, + 17, + 187, + 15, + 37, + 138, + 190, + 0, + 62, + 233, + 236, + 152, + 253, + 39, 36, - 73, - 149, - 230, - 173, + 227, + 180, + 208, + 51, + 59, + 231, + 117, + 225, + 84, 0, 0, 0, @@ -10145,239 +8244,61 @@ 0, 0, 0, - 99, - 14, - 249, - 175, + 147, + 97, + 103, + 211, 146, 1, 0, 0, - 141, - 159, - 48, - 47, - 164, - 128, - 59, - 91, - 130, - 122, - 142, - 115, - 144, - 23, - 163, - 64, - 108, - 107, - 72, - 181, - 174, - 239, - 219, - 205, - 93, - 109, - 38, - 203, - 113, - 12, - 216, - 183, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ] - } - }, - "owner": { - "ObjectOwner": "0x0000000000000000000000000000000000000000000000000000000000000005" - }, - "previous_transaction": "93PPEMeHQJUoVDVpEyTAEsyByUjrQTs4SPhSgM2wyfy6", - "storage_rebate": 0 - }, - { - "data": { - "Move": { - "type_": { - "Other": { - "address": "0000000000000000000000000000000000000000000000000000000000000002", - "module": "dynamic_field", - "name": "Field", - "type_args": [ - "u64", - { - "struct": { - "address": "0000000000000000000000000000000000000000000000000000000000000003", - "module": "staking_pool", - "name": "PoolTokenExchangeRate", - "type_args": [] - } - } - ] - } - }, - "has_public_transfer": false, - "version": 7, - "contents": [ - 28, - 127, - 0, - 115, - 35, - 208, - 231, + 81, + 202, 247, - 153, - 198, - 26, - 248, - 97, - 36, - 240, - 70, - 61, - 208, - 54, - 119, - 112, - 83, - 141, - 107, - 39, - 32, - 84, - 194, - 253, - 94, - 205, - 133, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 244, - 17, - 203, - 109, - 95, - 7, + 222, + 99, + 100, + 118, + 216, + 129, + 151, + 106, + 147, + 217, + 85, + 216, + 192, + 15, + 140, + 225, + 29, + 103, + 63, 0, - 73, - 5, - 86, - 4, - 171, + 129, + 21, 92, - 5, - 0 - ] - } - }, - "owner": { - "ObjectOwner": "0x7b94ac5bbd010c6a775455e3df1b6c9a8d24a9f6c2a9c20255b872b812fdbf87" - }, - "previous_transaction": "93PPEMeHQJUoVDVpEyTAEsyByUjrQTs4SPhSgM2wyfy6", - "storage_rebate": 0 - }, - { - "data": { - "Move": { - "type_": { - "Other": { - "address": "0000000000000000000000000000000000000000000000000000000000000002", - "module": "dynamic_field", - "name": "Field", - "type_args": [ - "u64", - { - "struct": { - "address": "0000000000000000000000000000000000000000000000000000000000000003", - "module": "staking_pool", - "name": "PoolTokenExchangeRate", - "type_args": [] - } - } - ] - } - }, - "has_public_transfer": false, - "version": 7, - "contents": [ - 51, - 249, - 148, - 47, - 28, - 199, - 116, - 74, - 182, - 226, - 145, - 104, - 94, - 87, - 12, - 226, - 249, - 54, - 102, - 152, - 66, - 17, - 131, - 108, - 179, - 193, - 255, - 171, - 105, - 242, - 154, + 202, + 106, + 150, + 85, + 113, 22, - 3, - 0, - 0, - 0, - 0, 0, 0, - 0, - 0, - 244, - 17, - 203, - 109, - 95, - 7, - 0, - 73, - 5, - 86, - 4, - 171, - 92, - 5, + 0, + 0, + 0, + 0, + 0, 0 ] } }, "owner": { - "ObjectOwner": "0x3f6b931f79fd0b2a14ed76a5b23714344c421f99a2ccd1978ef2270e167614cc" + "ObjectOwner": "0x0000000000000000000000000000000000000000000000000000000000000005" }, - "previous_transaction": "93PPEMeHQJUoVDVpEyTAEsyByUjrQTs4SPhSgM2wyfy6", + "previous_transaction": "DpSZVwqohRzF7ASz7PMM8xL1ZkMnNvWMLJfjadt9ybE9", "storage_rebate": 0 }, { @@ -10385,72 +8306,72 @@ "Move": { "type_": "StakedIota", "has_public_transfer": true, - "version": 7, + "version": 4, "contents": [ - 68, + 66, + 146, + 63, + 215, + 119, + 43, + 21, + 78, + 209, + 118, + 10, + 212, + 122, + 229, + 212, + 21, + 249, + 59, 82, - 90, - 200, - 142, - 233, - 23, - 115, - 238, - 145, - 174, - 250, - 165, - 20, - 7, - 174, - 98, - 178, - 185, - 127, + 156, + 144, + 83, + 247, + 144, 187, - 46, - 193, + 61, 152, - 136, - 31, - 109, - 18, - 91, - 86, - 68, - 103, - 251, - 91, - 71, - 93, - 58, - 113, - 7, - 34, - 32, - 73, - 58, - 239, - 215, - 234, - 130, + 132, + 228, + 107, + 16, + 148, + 61, + 204, + 132, + 220, + 80, + 55, + 5, + 242, + 131, + 99, + 205, + 122, + 85, 32, - 211, - 15, - 101, - 233, - 95, - 183, - 248, + 214, + 232, + 30, 96, - 141, - 116, - 3, - 192, - 80, - 95, - 180, - 167, + 9, + 153, + 102, + 138, + 88, + 227, + 89, + 211, + 37, + 226, + 170, + 230, + 165, + 66, 3, 0, 0, @@ -10471,9 +8392,9 @@ } }, "owner": { - "AddressOwner": "0x98346c29a0a99b9d0a80c9ede37a77c7fd93ead295fdb01b895ef1392c5087b5" + "AddressOwner": "0x5940b64eb29720ea0c35d49ee3d599b3477879d68b7e652904b236edd6ead88a" }, - "previous_transaction": "93PPEMeHQJUoVDVpEyTAEsyByUjrQTs4SPhSgM2wyfy6", + "previous_transaction": "DpSZVwqohRzF7ASz7PMM8xL1ZkMnNvWMLJfjadt9ybE9", "storage_rebate": 0 }, { @@ -10481,72 +8402,72 @@ "Move": { "type_": "StakedIota", "has_public_transfer": true, - "version": 7, + "version": 4, "contents": [ - 105, - 41, - 107, - 200, - 128, - 9, - 10, - 8, - 202, - 250, - 106, - 245, - 169, - 123, - 157, - 240, - 237, - 31, - 2, - 203, - 18, - 168, - 17, - 251, - 81, - 0, - 142, - 191, - 164, + 115, + 154, + 192, + 155, + 212, 244, - 75, - 33, - 87, - 237, - 32, - 86, - 222, - 32, - 49, + 37, + 248, + 181, + 36, + 51, + 82, + 18, + 78, + 51, + 165, + 95, + 129, + 37, + 165, + 234, + 28, + 25, + 15, 210, - 53, - 230, + 157, + 93, + 100, + 115, + 251, + 219, + 216, + 203, + 80, + 5, + 66, + 182, + 197, + 54, + 201, + 219, + 93, + 163, + 15, + 25, + 198, + 242, + 133, 10, - 194, - 125, - 91, - 46, - 170, + 23, + 218, + 216, + 177, + 129, + 50, + 43, + 101, + 250, 128, - 158, - 85, - 158, - 11, - 173, - 248, - 152, - 226, - 64, - 231, - 208, - 252, - 170, - 26, - 8, + 147, + 57, + 45, + 43, + 41, 3, 0, 0, @@ -10567,9 +8488,9 @@ } }, "owner": { - "AddressOwner": "0x48d90f650bf4d87ad129ec47392ec38a8c6c0bb5ea4b6dab610e3a841431ab99" + "AddressOwner": "0x08c27e08962112dddbc4d4fb5dc0159fd37594094a8d99825e6085b336490f4a" }, - "previous_transaction": "93PPEMeHQJUoVDVpEyTAEsyByUjrQTs4SPhSgM2wyfy6", + "previous_transaction": "DpSZVwqohRzF7ASz7PMM8xL1ZkMnNvWMLJfjadt9ybE9", "storage_rebate": 0 }, { @@ -10594,40 +8515,40 @@ } }, "has_public_transfer": false, - "version": 7, + "version": 4, "contents": [ - 139, + 136, + 179, + 83, + 143, + 69, + 54, + 164, + 137, + 225, + 174, + 113, + 187, + 74, + 42, + 160, + 105, + 251, + 128, + 176, + 134, + 47, + 129, + 197, 195, - 226, - 132, - 157, - 70, - 216, - 94, - 250, - 84, - 152, - 243, - 130, - 19, - 188, - 157, - 233, - 10, - 33, - 228, - 142, - 194, - 255, - 237, - 62, - 17, - 73, - 218, - 169, - 207, + 252, + 34, 174, - 230, + 10, + 125, + 126, + 203, + 179, 3, 0, 0, @@ -10656,9 +8577,9 @@ } }, "owner": { - "ObjectOwner": "0xa4c38f903d9744ca22430baeded1bc37c0ed3d75ce55683e69bd3d1fc40b6730" + "ObjectOwner": "0xbecc6872d3acd4009c30abd519c3be7ed7eb50f8decb7510863a40eefc41922b" }, - "previous_transaction": "93PPEMeHQJUoVDVpEyTAEsyByUjrQTs4SPhSgM2wyfy6", + "previous_transaction": "DpSZVwqohRzF7ASz7PMM8xL1ZkMnNvWMLJfjadt9ybE9", "storage_rebate": 0 }, { @@ -10666,72 +8587,72 @@ "Move": { "type_": "StakedIota", "has_public_transfer": true, - "version": 7, + "version": 4, "contents": [ - 173, - 31, - 168, - 134, - 66, - 136, - 234, - 211, - 49, - 19, - 122, - 45, - 116, - 160, - 205, - 55, - 69, + 148, + 34, + 217, + 18, + 109, 75, - 40, - 239, - 143, - 119, - 36, - 239, - 147, - 59, - 246, - 218, - 54, - 167, - 79, 173, - 232, - 14, - 72, - 38, - 40, - 13, 121, - 140, - 248, - 193, - 87, - 156, - 150, - 228, - 154, - 136, - 166, - 92, - 15, - 240, + 91, + 73, + 77, + 56, + 13, 225, - 156, + 32, + 138, + 85, 124, - 227, - 251, - 244, - 22, - 171, - 191, - 166, - 19, - 174, + 130, + 232, + 49, + 167, + 25, + 8, + 108, + 135, + 197, + 243, + 177, + 55, + 15, + 37, + 210, + 7, + 175, + 121, + 62, + 202, + 57, + 178, + 71, + 217, + 66, + 234, + 143, + 76, + 127, + 97, + 57, + 85, + 68, + 60, + 84, + 148, + 47, + 76, + 83, + 76, + 253, + 91, + 64, + 161, + 158, + 165, 3, 0, 0, @@ -10752,82 +8673,171 @@ } }, "owner": { - "AddressOwner": "0xc7035483b90ae369f3ce48c3971bf58c19417997746c67320c35d154a6425ab7" + "AddressOwner": "0xaed89eac64cc1efe9fc3e93d9058add5f49cc64b0ce8dab136b679c7b9f3b689" }, - "previous_transaction": "93PPEMeHQJUoVDVpEyTAEsyByUjrQTs4SPhSgM2wyfy6", + "previous_transaction": "DpSZVwqohRzF7ASz7PMM8xL1ZkMnNvWMLJfjadt9ybE9", "storage_rebate": 0 }, { "data": { "Move": { - "type_": "StakedIota", - "has_public_transfer": true, - "version": 7, + "type_": { + "Other": { + "address": "0000000000000000000000000000000000000000000000000000000000000002", + "module": "dynamic_field", + "name": "Field", + "type_args": [ + "u64", + { + "struct": { + "address": "0000000000000000000000000000000000000000000000000000000000000003", + "module": "staking_pool", + "name": "PoolTokenExchangeRate", + "type_args": [] + } + } + ] + } + }, + "has_public_transfer": false, + "version": 4, "contents": [ - 186, - 248, - 198, - 44, - 206, - 171, - 42, - 149, - 55, - 20, - 81, - 104, - 235, - 78, - 69, - 196, - 202, - 5, - 73, - 29, - 148, - 151, - 116, - 206, - 117, - 9, - 24, - 106, + 154, 127, - 213, - 95, - 100, + 32, + 31, + 132, 12, - 179, - 128, + 90, + 156, + 60, + 32, + 25, + 130, + 51, + 102, + 178, + 189, + 32, + 255, + 207, + 144, + 118, + 123, + 124, + 58, + 92, + 20, + 35, + 205, + 174, + 237, + 28, + 114, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 244, + 17, 203, - 50, - 90, - 131, - 15, - 3, - 238, - 75, - 218, - 121, - 11, + 109, + 95, + 7, + 0, + 73, + 5, + 86, + 4, + 171, + 92, 5, + 0 + ] + } + }, + "owner": { + "ObjectOwner": "0xa4514f63b362d130f8d8549edc1ce7932c0722e1260dfc0d5115e1b620158701" + }, + "previous_transaction": "DpSZVwqohRzF7ASz7PMM8xL1ZkMnNvWMLJfjadt9ybE9", + "storage_rebate": 0 + }, + { + "data": { + "Move": { + "type_": "StakedIota", + "has_public_transfer": true, + "version": 4, + "contents": [ + 187, + 62, + 79, 225, - 117, - 83, - 128, - 22, - 245, - 212, - 124, - 179, - 82, - 201, - 60, - 198, - 218, - 220, + 161, + 167, + 73, + 120, + 143, + 170, + 226, + 21, + 112, + 118, + 80, + 122, + 215, + 1, + 115, + 73, + 172, + 16, + 200, 19, + 204, + 60, + 23, + 13, + 65, + 111, + 98, + 84, + 29, + 249, + 67, + 164, + 123, + 138, + 6, + 11, + 45, + 207, + 2, + 237, + 185, + 30, + 13, + 130, + 229, + 33, + 64, 4, + 156, + 170, + 247, + 208, + 168, + 153, + 67, + 98, + 48, + 135, + 208, + 185, 3, 0, 0, @@ -10848,9 +8858,9 @@ } }, "owner": { - "AddressOwner": "0x3282178ff167d02a033e89d1280a1ec25f9dd069a0f1400c244192f1f75cbabc" + "AddressOwner": "0x0ff37e13505ed907d908cf37919a29117a0ab7669311f26e154dffbe492e8a5d" }, - "previous_transaction": "93PPEMeHQJUoVDVpEyTAEsyByUjrQTs4SPhSgM2wyfy6", + "previous_transaction": "DpSZVwqohRzF7ASz7PMM8xL1ZkMnNvWMLJfjadt9ybE9", "storage_rebate": 0 }, { @@ -10875,40 +8885,40 @@ } }, "has_public_transfer": false, - "version": 7, + "version": 4, "contents": [ - 219, - 199, - 132, - 31, + 228, + 21, + 43, + 113, + 197, + 97, + 41, + 98, + 3, + 221, + 86, + 50, + 255, + 192, + 245, + 242, + 103, + 167, 72, - 214, - 130, 118, - 176, - 153, - 102, - 105, - 144, - 125, - 120, - 6, - 139, - 16, - 247, - 26, - 6, - 116, - 172, - 238, 188, - 69, - 78, - 67, - 223, - 217, - 151, - 49, + 149, + 18, + 57, + 87, + 118, + 137, + 226, + 194, + 58, + 70, + 31, 3, 0, 0, @@ -10937,9 +8947,9 @@ } }, "owner": { - "ObjectOwner": "0xc2c9ddd800c90e8a9f7f02f35379fdebe07532f71e953937fcd04fa84c7a24c0" + "ObjectOwner": "0x5e76bfe85bb87207b617ee6d9b8e5dddb2ab4ee399629f18a5c90d246425692e" }, - "previous_transaction": "93PPEMeHQJUoVDVpEyTAEsyByUjrQTs4SPhSgM2wyfy6", + "previous_transaction": "DpSZVwqohRzF7ASz7PMM8xL1ZkMnNvWMLJfjadt9ybE9", "storage_rebate": 0 }, { @@ -10964,40 +8974,40 @@ } }, "has_public_transfer": false, - "version": 7, + "version": 4, "contents": [ - 223, - 192, - 146, - 43, - 109, - 96, - 57, - 126, - 204, - 84, - 56, - 17, - 196, - 58, - 108, - 209, - 173, + 228, 69, - 53, - 250, - 44, - 132, - 106, - 166, - 89, - 148, + 120, + 82, + 40, + 165, + 118, + 185, + 33, 71, - 230, - 204, + 122, + 118, + 19, + 145, + 156, + 15, + 245, + 129, + 174, + 194, + 255, + 132, + 209, 71, - 149, - 192, + 255, + 82, + 208, + 152, + 75, + 19, + 94, + 198, 3, 0, 0, @@ -11007,28 +9017,28 @@ 0, 0, 0, + 244, + 17, + 203, + 109, + 95, + 7, 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, + 73, + 5, + 86, + 4, + 171, + 92, + 5, 0 ] } }, "owner": { - "ObjectOwner": "0x6f2d03a861c6a388c75aa04ef956525f6fa2f05b067be9f9e436e98501c66f8b" + "ObjectOwner": "0x39e10c0206c65f3422f505e4b3bcf750d39409405e685e457f4f931af8a0f1bb" }, - "previous_transaction": "93PPEMeHQJUoVDVpEyTAEsyByUjrQTs4SPhSgM2wyfy6", + "previous_transaction": "DpSZVwqohRzF7ASz7PMM8xL1ZkMnNvWMLJfjadt9ybE9", "storage_rebate": 0 } ] diff --git a/crates/iota-light-client/example_config/checkpoints.yaml b/crates/iota-light-client/example_config/checkpoints.yaml index 1afb0b7b2cd..c5707e43173 100644 --- a/crates/iota-light-client/example_config/checkpoints.yaml +++ b/crates/iota-light-client/example_config/checkpoints.yaml @@ -1,4 +1,4 @@ --- checkpoints: - - 528 - - 794 + - 534 + - 800 diff --git a/crates/iota-light-client/src/bin/generate_chk_snapshots.rs b/crates/iota-light-client/src/bin/generate_chk_snapshots.rs new file mode 100644 index 00000000000..e67d759f1d9 --- /dev/null +++ b/crates/iota-light-client/src/bin/generate_chk_snapshots.rs @@ -0,0 +1,56 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +use std::fs; + +use iota_light_client::utils::{ + CheckpointsList, Config, read_checkpoint_list, sync_checkpoint_list_to_latest, +}; +use iota_rest_api::Client; + +#[tokio::main] +pub async fn main() { + let config: Config = serde_yaml::from_reader( + &fs::File::open(format!( + "{}/example_config/light_client.yaml", + env!("CARGO_MANIFEST_DIR") + )) + .unwrap(), + ) + .unwrap(); + sync_checkpoint_list_to_latest(&config).await.unwrap(); + let checkpoints_list: CheckpointsList = read_checkpoint_list(&config).unwrap(); + + let client = Client::new(format!("{}/rest", config.full_node_url())); + for ckp in checkpoints_list.checkpoints { + let summary = client.get_checkpoint_summary(ckp).await.unwrap(); + serde_json::to_writer_pretty( + &mut fs::File::create(format!( + "{}/example_config/{ckp}.json", + env!("CARGO_MANIFEST_DIR") + )) + .unwrap(), + &summary, + ) + .unwrap(); + let full = client.get_full_checkpoint(ckp).await.unwrap(); + serde_json::to_writer_pretty( + &mut fs::File::create(format!( + "{}/example_config/{ckp}_full.json", + env!("CARGO_MANIFEST_DIR") + )) + .unwrap(), + &full, + ) + .unwrap(); + bcs::serialize_into( + &mut fs::File::create(format!( + "{}/example_config/{ckp}.chk", + env!("CARGO_MANIFEST_DIR") + )) + .unwrap(), + &full, + ) + .unwrap(); + } +} diff --git a/crates/iota-light-client/src/bin/light_client.rs b/crates/iota-light-client/src/bin/light_client.rs new file mode 100644 index 00000000000..670a5acaa98 --- /dev/null +++ b/crates/iota-light-client/src/bin/light_client.rs @@ -0,0 +1,275 @@ +// Copyright (c) Mysten Labs, Inc. +// Modifications Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +use std::{fs, path::PathBuf, str::FromStr}; + +use clap::Parser; +use iota_json::IotaJsonValue; +use iota_light_client::utils::{ + Config, RemotePackageStore, SCommands, check_and_sync_checkpoints, + get_verified_effects_and_events, get_verified_object, +}; +use iota_package_resolver::Resolver; +use iota_types::{base_types::ObjectID, digests::TransactionDigest, object::Data}; + +/// A light client for the Iota blockchain +#[derive(Parser, Debug)] +#[command(author, version, about, long_about = None)] +struct Args { + /// Sets a custom config file + #[arg(short, long, value_name = "FILE")] + config: Option, + + #[command(subcommand)] + command: Option, +} + +#[tokio::main] +pub async fn main() { + // Command line arguments and config loading + let args = Args::parse(); + let path = args + .config + .unwrap_or_else(|| panic!("Need a config file path")); + + let reader = fs::File::open(path.clone()) + .unwrap_or_else(|_| panic!("Unable to load config from {}", path.display())); + let config: Config = serde_yaml::from_reader(reader).unwrap(); + + // Print config parameters + println!( + "Checkpoint Dir: {}", + config.checkpoint_summary_dir().display() + ); + + let remote_package_store = RemotePackageStore::new(config.clone()); + let resolver = Resolver::new(remote_package_store); + + match args.command { + Some(SCommands::Transaction { tid }) => { + let (effects, events) = get_verified_effects_and_events( + &config, + TransactionDigest::from_str(&tid).unwrap(), + ) + .await + .unwrap(); + + let exec_digests = effects.execution_digests(); + println!( + "Executed TID: {} Effects: {}", + exec_digests.transaction, exec_digests.effects + ); + + for event in events.as_ref().unwrap().data.iter() { + let type_layout = resolver + .type_layout(event.type_.clone().into()) + .await + .unwrap(); + + let json_val = + IotaJsonValue::from_bcs_bytes(Some(&type_layout), &event.contents).unwrap(); + + println!( + "Event:\n - Package: {}\n - Module: {}\n - Sender: {}\n - Type: {}\n{}", + event.package_id, + event.transaction_module, + event.sender, + event.type_, + serde_json::to_string_pretty(&json_val.to_json_value()).unwrap() + ); + } + } + Some(SCommands::Object { oid }) => { + let oid = ObjectID::from_str(&oid).unwrap(); + let object = get_verified_object(&config, oid).await.unwrap(); + + if let Data::Move(move_object) = &object.data { + let object_type = move_object.type_().clone(); + + let type_layout = resolver + .type_layout(object_type.clone().into()) + .await + .unwrap(); + + let json_val = + IotaJsonValue::from_bcs_bytes(Some(&type_layout), move_object.contents()) + .unwrap(); + + let (oid, version, hash) = object.compute_object_reference(); + println!( + "OID: {}\n - Version: {}\n - Hash: {}\n - Owner: {}\n - Type: {}\n{}", + oid, + version, + hash, + object.owner, + object_type, + serde_json::to_string_pretty(&json_val.to_json_value()).unwrap() + ); + } + } + + Some(SCommands::Sync {}) => { + check_and_sync_checkpoints(&config) + .await + .expect("Failed to sync checkpoints"); + } + _ => {} + }; +} + +// Make a test namespace +#[cfg(test)] +mod tests { + use std::path::{Path, PathBuf}; + + use anyhow::anyhow; + use iota_light_client::utils::extract_verified_effects_and_events; + use iota_rest_api::CheckpointData; + use iota_types::{ + committee::Committee, + crypto::AuthorityQuorumSignInfo, + message_envelope::Envelope, + messages_checkpoint::{CheckpointSummary, FullCheckpointContents}, + }; + + use super::*; + + async fn read_full_checkpoint(checkpoint_path: &PathBuf) -> anyhow::Result { + Ok(bcs::from_reader(fs::File::open(checkpoint_path)?)?) + } + + // clippy ignore dead-code + #[allow(dead_code)] + async fn write_full_checkpoint( + checkpoint_path: &Path, + checkpoint: &CheckpointData, + ) -> anyhow::Result<()> { + bcs::serialize_into(&mut fs::File::create(checkpoint_path)?, &checkpoint)?; + Ok(()) + } + + async fn read_data() -> (Committee, CheckpointData) { + let mut d = PathBuf::from(env!("CARGO_MANIFEST_DIR")); + d.push("example_config/534.json"); + + let checkpoint: Envelope> = + serde_json::from_reader(&fs::File::open(&d).unwrap()) + .map_err(|_| anyhow!("Unable to parse checkpoint summary file")) + .unwrap(); + + let prev_committee = checkpoint + .end_of_epoch_data + .as_ref() + .ok_or(anyhow!( + "Expected all checkpoints to be end-of-epoch checkpoints" + )) + .unwrap() + .next_epoch_committee + .iter() + .cloned() + .collect(); + + // Make a committee object using this + let committee = Committee::new(checkpoint.epoch().checked_add(1).unwrap(), prev_committee); + + let mut d = PathBuf::from(env!("CARGO_MANIFEST_DIR")); + d.push("example_config/800.chk"); + + let full_checkpoint = read_full_checkpoint(&d).await.unwrap(); + + (committee, full_checkpoint) + } + + #[tokio::test] + async fn test_checkpoint_all_good() { + let (committee, full_checkpoint) = read_data().await; + + extract_verified_effects_and_events( + &full_checkpoint, + &committee, + TransactionDigest::from_str("DpSZVwqohRzF7ASz7PMM8xL1ZkMnNvWMLJfjadt9ybE9").unwrap(), + ) + .unwrap(); + } + + #[tokio::test] + async fn test_checkpoint_bad_committee() { + let (mut committee, full_checkpoint) = read_data().await; + + // Change committee + committee.epoch += 10; + + assert!( + extract_verified_effects_and_events( + &full_checkpoint, + &committee, + TransactionDigest::from_str("DpSZVwqohRzF7ASz7PMM8xL1ZkMnNvWMLJfjadt9ybE9") + .unwrap(), + ) + .is_err() + ); + } + + #[tokio::test] + async fn test_checkpoint_no_transaction() { + let (committee, full_checkpoint) = read_data().await; + + assert!( + extract_verified_effects_and_events( + &full_checkpoint, + &committee, + TransactionDigest::from_str("6ciKBJF3gZ2zNNKLqwRMBL4ftZRGL2kHPgKepWP2thbs") + .unwrap(), + ) + .is_err() + ); + } + + #[tokio::test] + async fn test_checkpoint_bad_contents() { + let (committee, mut full_checkpoint) = read_data().await; + + // Change contents + let random_contents = FullCheckpointContents::random_for_testing(); + full_checkpoint.checkpoint_contents = random_contents.checkpoint_contents(); + + assert!( + extract_verified_effects_and_events( + &full_checkpoint, + &committee, + TransactionDigest::from_str("9AoR24Tcmss7K3DgBZYiUZNxHFuk8kdAbZEMcFe9mcAi") + .unwrap(), + ) + .is_err() + ); + } + + #[tokio::test] + async fn test_checkpoint_bad_events() { + let (committee, mut full_checkpoint) = read_data().await; + + let event = full_checkpoint.transactions[1] + .events + .as_ref() + .unwrap() + .data[0] + .clone(); + + for t in &mut full_checkpoint.transactions { + if let Some(events) = &mut t.events { + events.data.push(event.clone()); + } + } + + assert!( + extract_verified_effects_and_events( + &full_checkpoint, + &committee, + TransactionDigest::from_str("Hj7mZdET3fKqxbSnbdcVbx9N2pqvHtkoKbPy6MEeFsfB") + .unwrap(), + ) + .is_err() + ); + } +} diff --git a/crates/iota-light-client/src/lib.rs b/crates/iota-light-client/src/lib.rs index 001821ea031..9cbb0a13111 100644 --- a/crates/iota-light-client/src/lib.rs +++ b/crates/iota-light-client/src/lib.rs @@ -4,6 +4,7 @@ pub mod construct; pub mod proof; +pub mod utils; #[doc(inline)] pub use construct::*; diff --git a/crates/iota-light-client/src/main.rs b/crates/iota-light-client/src/utils.rs similarity index 60% rename from crates/iota-light-client/src/main.rs rename to crates/iota-light-client/src/utils.rs index 61578963f8d..6677df26bbe 100644 --- a/crates/iota-light-client/src/main.rs +++ b/crates/iota-light-client/src/utils.rs @@ -6,17 +6,15 @@ use std::{ fs, io::{Read, Write}, path::PathBuf, - str::FromStr, sync::Arc, }; use anyhow::anyhow; use async_trait::async_trait; -use clap::{Parser, Subcommand}; +use clap::Subcommand; use iota_config::genesis::Genesis; -use iota_json::IotaJsonValue; use iota_json_rpc_types::IotaTransactionBlockResponseOptions; -use iota_package_resolver::{Package, PackageStore, Resolver, Result as ResolverResult}; +use iota_package_resolver::{Package, PackageStore, Result as ResolverResult}; use iota_rest_api::{CheckpointData, Client}; use iota_sdk::IotaClientBuilder; use iota_types::{ @@ -27,131 +25,76 @@ use iota_types::{ effects::{TransactionEffects, TransactionEffectsAPI, TransactionEvents}, message_envelope::Envelope, messages_checkpoint::{CertifiedCheckpointSummary, CheckpointSummary, EndOfEpochData}, - object::{Data, Object}, + object::Object, }; use move_core_types::account_address::AccountAddress; -/// A light client for the Iota blockchain -#[derive(Parser, Debug)] -#[command(author, version, about, long_about = None)] -struct Args { - /// Sets a custom config file - #[arg(short, long, value_name = "FILE")] - config: Option, - - #[command(subcommand)] - command: Option, -} - -struct RemotePackageStore { - config: Config, -} - -impl RemotePackageStore { - pub fn new(config: Config) -> Self { - Self { config } - } -} - -#[async_trait] -impl PackageStore for RemotePackageStore { - /// Read package contents. Fails if `id` is not an object, not a package, or - /// is malformed in some way. - async fn fetch(&self, id: AccountAddress) -> ResolverResult> { - let object = get_verified_object(&self.config, id.into()).await.unwrap(); - let package = Package::read_from_object(&object).unwrap(); - Ok(Arc::new(package)) - } -} - -#[derive(Subcommand, Debug)] -enum SCommands { - /// Sync all end-of-epoch checkpoints - Sync {}, +pub async fn check_and_sync_checkpoints(config: &Config) -> anyhow::Result<()> { + sync_checkpoint_list_to_latest(config).await?; - /// Checks a specific transaction using the light client - Transaction { - /// Transaction hash - #[arg(short, long, value_name = "TID")] - tid: String, - }, + // Get the local checkpoint list + let checkpoints_list: CheckpointsList = read_checkpoint_list(config)?; - /// Checks a specific object using the light client - Object { - /// Transaction hash - #[arg(short, long, value_name = "OID")] - oid: String, - }, -} + // Load the genesis committee + let mut genesis_path = config.checkpoint_summary_dir.clone(); + genesis_path.push(&config.genesis_filename); + let genesis_committee = Genesis::load(&genesis_path)?.committee()?; -// The config file for the light client including the root of trust genesis -// digest -#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)] -struct Config { - /// Full node url - full_node_url: String, + // Check the signatures of all checkpoints + // And download any missing ones - /// Checkpoint summary directory - checkpoint_summary_dir: PathBuf, + let mut prev_committee = genesis_committee; + for ckp_id in &checkpoints_list.checkpoints { + // check if there is a file with this name ckp_id.yaml in the + // checkpoint_summary_dir + let mut checkpoint_path = config.checkpoint_summary_dir.clone(); + checkpoint_path.push(format!("{}.json", ckp_id)); + // If file exists read the file otherwise download it from the server + let summary = if checkpoint_path.exists() { + read_checkpoint(config, *ckp_id)? + } else { + // Download the checkpoint from the server + let summary = download_checkpoint_summary(config, *ckp_id).await?; + summary.clone().try_into_verified(&prev_committee)?; + // Write the checkpoint summary to a file + write_checkpoint(config, &summary)?; + summary + }; - // Genesis file name - genesis_filename: PathBuf, -} + // Print the id of the checkpoint and the epoch number + println!( + "Epoch: {} Checkpoint ID: {}", + summary.epoch(), + summary.digest() + ); -impl Config { - pub fn rest_url(&self) -> &str { - &self.full_node_url + // Extract the new committee information + if let Some(EndOfEpochData { + next_epoch_committee, + .. + }) = &summary.end_of_epoch_data + { + let next_committee = next_epoch_committee.iter().cloned().collect(); + prev_committee = + Committee::new(summary.epoch().checked_add(1).unwrap(), next_committee); + } else { + return Err(anyhow!( + "Expected all checkpoints to be end-of-epoch checkpoints" + )); + } } -} - -// The list of checkpoints at the end of each epoch -#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)] -struct CheckpointsList { - // List of end of epoch checkpoints - checkpoints: Vec, -} - -fn read_checkpoint_list(config: &Config) -> anyhow::Result { - let mut checkpoints_path = config.checkpoint_summary_dir.clone(); - checkpoints_path.push("checkpoints.yaml"); - // Read the resulting file and parse the yaml checkpoint list - let reader = fs::File::open(&checkpoints_path)?; - Ok(serde_yaml::from_reader(reader)?) -} - -fn read_checkpoint( - config: &Config, - seq: u64, -) -> anyhow::Result>> { - read_checkpoint_general(config, seq, None) -} -fn read_checkpoint_general( - config: &Config, - seq: u64, - path: Option<&str>, -) -> anyhow::Result>> { - // Read the resulting file and parse the yaml checkpoint list - let mut checkpoint_path = config.checkpoint_summary_dir.clone(); - if let Some(path) = path { - checkpoint_path.push(path); - } - checkpoint_path.push(format!("{}.chk", seq)); - let mut reader = fs::File::open(checkpoint_path.clone())?; - let metadata = fs::metadata(&checkpoint_path)?; - let mut buffer = vec![0; metadata.len() as usize]; - reader.read_exact(&mut buffer)?; - bcs::from_bytes(&buffer).map_err(|_| anyhow!("Unable to parse checkpoint file")) + Ok(()) } -fn write_checkpoint( +pub fn write_checkpoint( config: &Config, summary: &Envelope>, ) -> anyhow::Result<()> { write_checkpoint_general(config, summary, None) } -fn write_checkpoint_general( +pub fn write_checkpoint_general( config: &Config, summary: &Envelope>, path: Option<&str>, @@ -168,7 +111,7 @@ fn write_checkpoint_general( Ok(()) } -fn write_checkpoint_list( +pub fn write_checkpoint_list( config: &Config, checkpoints_list: &CheckpointsList, ) -> anyhow::Result<()> { @@ -183,7 +126,7 @@ fn write_checkpoint_list( .map_err(|_| anyhow!("Unable to serialize checkpoint list")) } -async fn download_checkpoint_summary( +pub async fn download_checkpoint_summary( config: &Config, seq: u64, ) -> anyhow::Result { @@ -194,7 +137,7 @@ async fn download_checkpoint_summary( /// Run binary search to for each end of epoch checkpoint that is missing /// between the latest on the list and the latest checkpoint. -async fn sync_checkpoint_list_to_latest(config: &Config) -> anyhow::Result<()> { +pub async fn sync_checkpoint_list_to_latest(config: &Config) -> anyhow::Result<()> { // Get the local checkpoint list let mut checkpoints_list: CheckpointsList = read_checkpoint_list(config)?; let mut last_epoch = 0; @@ -262,66 +205,7 @@ async fn sync_checkpoint_list_to_latest(config: &Config) -> anyhow::Result<()> { Ok(()) } -async fn check_and_sync_checkpoints(config: &Config) -> anyhow::Result<()> { - sync_checkpoint_list_to_latest(config).await?; - - // Get the local checkpoint list - let checkpoints_list: CheckpointsList = read_checkpoint_list(config)?; - - // Load the genesis committee - let mut genesis_path = config.checkpoint_summary_dir.clone(); - genesis_path.push(&config.genesis_filename); - let genesis_committee = Genesis::load(&genesis_path)?.committee()?; - - // Check the signatures of all checkpoints - // And download any missing ones - - let mut prev_committee = genesis_committee; - for ckp_id in &checkpoints_list.checkpoints { - // check if there is a file with this name ckp_id.yaml in the - // checkpoint_summary_dir - let mut checkpoint_path = config.checkpoint_summary_dir.clone(); - checkpoint_path.push(format!("{}.json", ckp_id)); - - // If file exists read the file otherwise download it from the server - let summary = if checkpoint_path.exists() { - read_checkpoint(config, *ckp_id)? - } else { - // Download the checkpoint from the server - let summary = download_checkpoint_summary(config, *ckp_id).await?; - summary.clone().try_into_verified(&prev_committee)?; - // Write the checkpoint summary to a file - write_checkpoint(config, &summary)?; - summary - }; - - // Print the id of the checkpoint and the epoch number - println!( - "Epoch: {} Checkpoint ID: {}", - summary.epoch(), - summary.digest() - ); - - // Extract the new committee information - if let Some(EndOfEpochData { - next_epoch_committee, - .. - }) = &summary.end_of_epoch_data - { - let next_committee = next_epoch_committee.iter().cloned().collect(); - prev_committee = - Committee::new(summary.epoch().checked_add(1).unwrap(), next_committee); - } else { - return Err(anyhow!( - "Expected all checkpoints to be end-of-epoch checkpoints" - )); - } - } - - Ok(()) -} - -async fn get_full_checkpoint(config: &Config, seq: u64) -> anyhow::Result { +pub async fn get_full_checkpoint(config: &Config, seq: u64) -> anyhow::Result { // Downloading the checkpoint from the server let client: Client = Client::new(config.rest_url()); let full_checkpoint = client.get_full_checkpoint(seq).await?; @@ -329,7 +213,7 @@ async fn get_full_checkpoint(config: &Config, seq: u64) -> anyhow::Result anyhow::Result<(TransactionEffects, Option)> { @@ -430,7 +314,7 @@ async fn get_verified_effects_and_events( extract_verified_effects_and_events(&full_check_point, &committee, tid) } -async fn get_verified_object(config: &Config, id: ObjectID) -> anyhow::Result { +pub async fn get_verified_object(config: &Config, id: ObjectID) -> anyhow::Result { let client: Client = Client::new(config.rest_url()); let object = client.get_object(id).await?; @@ -447,243 +331,111 @@ async fn get_verified_object(config: &Config, id: ObjectID) -> anyhow::Result { - let (effects, events) = get_verified_effects_and_events( - &config, - TransactionDigest::from_str(&tid).unwrap(), - ) - .await - .unwrap(); - - let exec_digests = effects.execution_digests(); - println!( - "Executed TID: {} Effects: {}", - exec_digests.transaction, exec_digests.effects - ); - - for event in events.as_ref().unwrap().data.iter() { - let type_layout = resolver - .type_layout(event.type_.clone().into()) - .await - .unwrap(); - - let json_val = - IotaJsonValue::from_bcs_bytes(Some(&type_layout), &event.contents).unwrap(); - - println!( - "Event:\n - Package: {}\n - Module: {}\n - Sender: {}\n - Type: {}\n{}", - event.package_id, - event.transaction_module, - event.sender, - event.type_, - serde_json::to_string_pretty(&json_val.to_json_value()).unwrap() - ); - } - } - Some(SCommands::Object { oid }) => { - let oid = ObjectID::from_str(&oid).unwrap(); - let object = get_verified_object(&config, oid).await.unwrap(); - - if let Data::Move(move_object) = &object.data { - let object_type = move_object.type_().clone(); - - let type_layout = resolver - .type_layout(object_type.clone().into()) - .await - .unwrap(); - - let json_val = - IotaJsonValue::from_bcs_bytes(Some(&type_layout), move_object.contents()) - .unwrap(); - - let (oid, version, hash) = object.compute_object_reference(); - println!( - "OID: {}\n - Version: {}\n - Hash: {}\n - Owner: {}\n - Type: {}\n{}", - oid, - version, - hash, - object.owner, - object_type, - serde_json::to_string_pretty(&json_val.to_json_value()).unwrap() - ); - } - } - - Some(SCommands::Sync {}) => { - check_and_sync_checkpoints(&config) - .await - .expect("Failed to sync checkpoints"); - } - _ => {} - } +pub struct RemotePackageStore { + config: Config, } -// Make a test namespace -#[cfg(test)] -mod tests { - use std::path::{Path, PathBuf}; - - use iota_types::messages_checkpoint::FullCheckpointContents; - - use super::*; - - async fn read_full_checkpoint(checkpoint_path: &PathBuf) -> anyhow::Result { - Ok(bcs::from_reader(fs::File::open(checkpoint_path)?)?) +impl RemotePackageStore { + pub fn new(config: Config) -> Self { + Self { config } } +} - // clippy ignore dead-code - #[allow(dead_code)] - async fn write_full_checkpoint( - checkpoint_path: &Path, - checkpoint: &CheckpointData, - ) -> anyhow::Result<()> { - bcs::serialize_into(&mut fs::File::create(checkpoint_path)?, &checkpoint)?; - Ok(()) +#[async_trait] +impl PackageStore for RemotePackageStore { + /// Read package contents. Fails if `id` is not an object, not a package, or + /// is malformed in some way. + async fn fetch(&self, id: AccountAddress) -> ResolverResult> { + let object = get_verified_object(&self.config, id.into()).await.unwrap(); + let package = Package::read_from_object(&object).unwrap(); + Ok(Arc::new(package)) } +} - async fn read_data() -> (Committee, CheckpointData) { - let mut d = PathBuf::from(env!("CARGO_MANIFEST_DIR")); - d.push("example_config/528.json"); - - let checkpoint: Envelope> = - serde_json::from_reader(&fs::File::open(&d).unwrap()) - .map_err(|_| anyhow!("Unable to parse checkpoint summary file")) - .unwrap(); - - let prev_committee = checkpoint - .end_of_epoch_data - .as_ref() - .ok_or(anyhow!( - "Expected all checkpoints to be end-of-epoch checkpoints" - )) - .unwrap() - .next_epoch_committee - .iter() - .cloned() - .collect(); - - // Make a committee object using this - let committee = Committee::new(checkpoint.epoch().checked_add(1).unwrap(), prev_committee); +#[derive(Subcommand, Debug)] +pub enum SCommands { + /// Sync all end-of-epoch checkpoints + Sync {}, - let mut d = PathBuf::from(env!("CARGO_MANIFEST_DIR")); - d.push("example_config/794.chk"); + /// Checks a specific transaction using the light client + Transaction { + /// Transaction hash + #[arg(short, long, value_name = "TID")] + tid: String, + }, - let full_checkpoint = read_full_checkpoint(&d).await.unwrap(); + /// Checks a specific object using the light client + Object { + /// Transaction hash + #[arg(short, long, value_name = "OID")] + oid: String, + }, +} - (committee, full_checkpoint) - } +// The config file for the light client including the root of trust genesis +// digest +#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)] +pub struct Config { + /// Full node url + full_node_url: String, - #[tokio::test] - async fn test_checkpoint_all_good() { - let (committee, full_checkpoint) = read_data().await; + /// Checkpoint summary directory + checkpoint_summary_dir: PathBuf, - extract_verified_effects_and_events( - &full_checkpoint, - &committee, - TransactionDigest::from_str("9AoR24Tcmss7K3DgBZYiUZNxHFuk8kdAbZEMcFe9mcAi").unwrap(), - ) - .unwrap(); - } + // Genesis file name + genesis_filename: PathBuf, +} - #[tokio::test] - async fn test_checkpoint_bad_committee() { - let (mut committee, full_checkpoint) = read_data().await; - - // Change committee - committee.epoch += 10; - - assert!( - extract_verified_effects_and_events( - &full_checkpoint, - &committee, - TransactionDigest::from_str("9AoR24Tcmss7K3DgBZYiUZNxHFuk8kdAbZEMcFe9mcAi") - .unwrap(), - ) - .is_err() - ); +impl Config { + pub fn rest_url(&self) -> &str { + &self.full_node_url } - #[tokio::test] - async fn test_checkpoint_no_transaction() { - let (committee, full_checkpoint) = read_data().await; - - assert!( - extract_verified_effects_and_events( - &full_checkpoint, - &committee, - TransactionDigest::from_str("6ciKBJF3gZ2zNNKLqwRMBL4ftZRGL2kHPgKepWP2thbs") - .unwrap(), - ) - .is_err() - ); + pub fn full_node_url(&self) -> &str { + &self.full_node_url } - #[tokio::test] - async fn test_checkpoint_bad_contents() { - let (committee, mut full_checkpoint) = read_data().await; - - // Change contents - let random_contents = FullCheckpointContents::random_for_testing(); - full_checkpoint.checkpoint_contents = random_contents.checkpoint_contents(); - - assert!( - extract_verified_effects_and_events( - &full_checkpoint, - &committee, - TransactionDigest::from_str("9AoR24Tcmss7K3DgBZYiUZNxHFuk8kdAbZEMcFe9mcAi") - .unwrap(), - ) - .is_err() - ); + pub fn checkpoint_summary_dir(&self) -> &PathBuf { + &self.checkpoint_summary_dir } +} - #[tokio::test] - async fn test_checkpoint_bad_events() { - let (committee, mut full_checkpoint) = read_data().await; +// The list of checkpoints at the end of each epoch +#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)] +pub struct CheckpointsList { + // List of end of epoch checkpoints + pub checkpoints: Vec, +} - let event = full_checkpoint.transactions[1] - .events - .as_ref() - .unwrap() - .data[0] - .clone(); +pub fn read_checkpoint_list(config: &Config) -> anyhow::Result { + let mut checkpoints_path = config.checkpoint_summary_dir.clone(); + checkpoints_path.push("checkpoints.yaml"); + // Read the resulting file and parse the yaml checkpoint list + let reader = fs::File::open(&checkpoints_path)?; + Ok(serde_yaml::from_reader(reader)?) +} - for t in &mut full_checkpoint.transactions { - if let Some(events) = &mut t.events { - events.data.push(event.clone()); - } - } +pub fn read_checkpoint( + config: &Config, + seq: u64, +) -> anyhow::Result>> { + read_checkpoint_general(config, seq, None) +} - assert!( - extract_verified_effects_and_events( - &full_checkpoint, - &committee, - TransactionDigest::from_str("Hj7mZdET3fKqxbSnbdcVbx9N2pqvHtkoKbPy6MEeFsfB") - .unwrap(), - ) - .is_err() - ); +pub fn read_checkpoint_general( + config: &Config, + seq: u64, + path: Option<&str>, +) -> anyhow::Result>> { + // Read the resulting file and parse the yaml checkpoint list + let mut checkpoint_path = config.checkpoint_summary_dir.clone(); + if let Some(path) = path { + checkpoint_path.push(path); } + checkpoint_path.push(format!("{}.chk", seq)); + let mut reader = fs::File::open(checkpoint_path.clone())?; + let metadata = fs::metadata(&checkpoint_path)?; + let mut buffer = vec![0; metadata.len() as usize]; + reader.read_exact(&mut buffer)?; + bcs::from_bytes(&buffer).map_err(|_| anyhow!("Unable to parse checkpoint file")) } diff --git a/crates/iota-light-client/tests/README.md b/crates/iota-light-client/tests/README.md new file mode 100644 index 00000000000..86de7791206 --- /dev/null +++ b/crates/iota-light-client/tests/README.md @@ -0,0 +1,7 @@ +To generate checkpoint snapshots, follow these steps: + +1. `cargo run --release --bin iota start --force-regenesis --with-faucet` +2. Clear checkpoints.yaml file - make `checkpoints: []` +3. Move genesis.blob to example_config +4. Run `cargo run --bin generate_chk_snapshots` +5. Replace data in tests according to generated checkpoints. diff --git a/crates/iota-light-client/tests/check_proof.rs b/crates/iota-light-client/tests/check_proof.rs index 50bf4473249..365ca40be1f 100644 --- a/crates/iota-light-client/tests/check_proof.rs +++ b/crates/iota-light-client/tests/check_proof.rs @@ -64,7 +64,7 @@ async fn read_data(committee_seq: u64, seq: u64) -> (Committee, CheckpointData) #[tokio::test] async fn check_can_read_test_data() { - let (_committee, full_checkpoint) = read_data(528, 794).await; + let (_committee, full_checkpoint) = read_data(534, 800).await; assert!( full_checkpoint .checkpoint_summary @@ -75,7 +75,7 @@ async fn check_can_read_test_data() { #[tokio::test] async fn test_new_committee() { - let (committee, full_checkpoint) = read_data(528, 794).await; + let (committee, full_checkpoint) = read_data(534, 800).await; let new_committee_data = full_checkpoint .checkpoint_summary @@ -110,7 +110,7 @@ async fn test_new_committee() { // Fail if the new committee does not match the target of the proof #[tokio::test] async fn test_incorrect_new_committee() { - let (committee, full_checkpoint) = read_data(528, 794).await; + let (committee, full_checkpoint) = read_data(534, 800).await; let committee_proof = Proof { checkpoint_summary: full_checkpoint.checkpoint_summary.clone(), @@ -124,7 +124,7 @@ async fn test_incorrect_new_committee() { // Fail if the certificate is incorrect even if no proof targets are given #[tokio::test] async fn test_fail_incorrect_cert() { - let (_committee, full_checkpoint) = read_data(528, 794).await; + let (_committee, full_checkpoint) = read_data(534, 800).await; let new_committee_data = full_checkpoint .checkpoint_summary @@ -164,7 +164,7 @@ async fn test_fail_incorrect_cert() { #[tokio::test] async fn test_object_target_fail_no_data() { - let (committee, full_checkpoint) = read_data(528, 794).await; + let (committee, full_checkpoint) = read_data(534, 800).await; let sample_object: Object = full_checkpoint.transactions[0].output_objects[0].clone(); let sample_ref = sample_object.compute_object_reference(); @@ -180,7 +180,7 @@ async fn test_object_target_fail_no_data() { #[tokio::test] async fn test_object_target_success() { - let (committee, full_checkpoint) = read_data(528, 794).await; + let (committee, full_checkpoint) = read_data(534, 800).await; let sample_object: Object = full_checkpoint.transactions[0].output_objects[0].clone(); let sample_ref = sample_object.compute_object_reference(); @@ -193,7 +193,7 @@ async fn test_object_target_success() { #[tokio::test] async fn test_object_target_fail_wrong_object() { - let (committee, full_checkpoint) = read_data(528, 794).await; + let (committee, full_checkpoint) = read_data(534, 800).await; let sample_object: Object = full_checkpoint.transactions[0].output_objects[0].clone(); let wrong_object: Object = full_checkpoint.transactions[1].output_objects[1].clone(); @@ -214,7 +214,7 @@ async fn test_object_target_fail_wrong_object() { #[tokio::test] async fn test_event_target_fail_no_data() { - let (committee, full_checkpoint) = read_data(528, 794).await; + let (committee, full_checkpoint) = read_data(534, 800).await; let sample_event: Event = full_checkpoint.transactions[1] .events @@ -238,7 +238,7 @@ async fn test_event_target_fail_no_data() { #[tokio::test] async fn test_event_target_success() { - let (committee, full_checkpoint) = read_data(528, 794).await; + let (committee, full_checkpoint) = read_data(534, 800).await; let sample_event: Event = full_checkpoint.transactions[1] .events @@ -259,7 +259,7 @@ async fn test_event_target_success() { #[tokio::test] async fn test_event_target_fail_bad_event() { - let (committee, full_checkpoint) = read_data(528, 794).await; + let (committee, full_checkpoint) = read_data(534, 800).await; let sample_event: Event = full_checkpoint.transactions[1] .events From 3dd0a1a4b9cd84e64ff706121808375877b9428b Mon Sep 17 00:00:00 2001 From: Thoralf-M <46689931+Thoralf-M@users.noreply.github.com> Date: Tue, 29 Oct 2024 13:26:11 +0100 Subject: [PATCH 08/55] fix(iota): ignore test until the repo is public (#3743) --- crates/iota/tests/cli_tests.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/iota/tests/cli_tests.rs b/crates/iota/tests/cli_tests.rs index cc2ce6ec14f..4d7521ceb7b 100644 --- a/crates/iota/tests/cli_tests.rs +++ b/crates/iota/tests/cli_tests.rs @@ -4170,6 +4170,7 @@ async fn test_faucet() -> Result<(), anyhow::Error> { Ok(()) } +#[ignore = "until the repo is public https://github.com/iotaledger/iota/issues/3741"] #[tokio::test] async fn test_move_new() -> Result<(), anyhow::Error> { let current_dir = std::env::current_dir()?; From 674849688fc3a7a680ad704f552801984f143514 Mon Sep 17 00:00:00 2001 From: Pavlo Botnar Date: Tue, 29 Oct 2024 14:26:47 +0200 Subject: [PATCH 09/55] fix(iota-light-client): regenerate checkpoints after v1 types changes (#3751) * Remove ExecutionResultsV1 * Rename ExecutionResults::V2 to be V1 * Rename V2 to V1 * Rebase * Fix clippy * refactor(iota-types): remove TransactionEffectsV2 * refactor(iota-types): update specs * fix(iota-light-client): regenerate checkpoints for proof tests, added ability to generate checkpoints in explicit way * use fixes * fmt fix * Clippy fix * Instruction of checkpoints generating has been added. * dprint * Regenerating of checkpoint snapshot --------- Co-authored-by: Bing-Yang Lin Co-authored-by: miker83z --- .../iota-light-client/example_config/532.chk | Bin 0 -> 14576 bytes .../example_config/{800.json => 532.json} | 20 +- .../{800_full.json => 532_full.json} | 9222 ++++++++-------- .../iota-light-client/example_config/534.chk | Bin 15460 -> 0 bytes .../iota-light-client/example_config/800.chk | Bin 14584 -> 0 bytes .../iota-light-client/example_config/801.chk | Bin 0 -> 15452 bytes .../example_config/{534.json => 801.json} | 22 +- .../{534_full.json => 801_full.json} | 9510 ++++++++--------- .../example_config/checkpoints.yaml | 4 +- .../iota-light-client/src/bin/light_client.rs | 6 +- crates/iota-light-client/src/utils.rs | 1 - crates/iota-light-client/tests/README.md | 5 +- crates/iota-light-client/tests/check_proof.rs | 20 +- 13 files changed, 9404 insertions(+), 9406 deletions(-) create mode 100644 crates/iota-light-client/example_config/532.chk rename crates/iota-light-client/example_config/{800.json => 532.json} (77%) rename crates/iota-light-client/example_config/{800_full.json => 532_full.json} (83%) delete mode 100644 crates/iota-light-client/example_config/534.chk delete mode 100644 crates/iota-light-client/example_config/800.chk create mode 100644 crates/iota-light-client/example_config/801.chk rename crates/iota-light-client/example_config/{534.json => 801.json} (78%) rename crates/iota-light-client/example_config/{534_full.json => 801_full.json} (83%) diff --git a/crates/iota-light-client/example_config/532.chk b/crates/iota-light-client/example_config/532.chk new file mode 100644 index 0000000000000000000000000000000000000000..be1c182f1629d5f68a98d50f5878f2c0b33cecec GIT binary patch literal 14576 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

LL+uRk-CbGRe) zz!23D&fZZ;H;y|OInrt-tE*0QxY$h)(uF{@ziPQkf7$W zvRg*EFYYJb?YgCXWKNWWJ~qOkVK!KNK#>ojiAFatyRgy`e;h>!lMir;Il4)UNl40x ziWB}M#BerlVzM&Q(z0R>IGh{XH?5wwUs`vNXpoU!b{mW2-H~FLbSb?e zFe;(8>L4Tt;|H`TULd0cfGbZ9zqt$m@y=~trlxQJik*OA2Wt3jxx0Y>R{h*|y;6&? z$2^x+A6C;!APP6lajhG;pqTzhD;4Zd+#0Ov0a^gorzxerxPx*k%sSp%^TH#PzjLOa z=IWsj`p4pf-k-$ZqXx%;`fdKp4`Pshc> zvOC@aNsg+ex=L47uYT7H9UAsw#m<>5j7qI4S@ci>5YywdC|;z=b>H6(TlvUSyoyDM z=P=sU%IbOeqY#wyX0ASpQXe11pbNW()gLyL#os^3wb1?*MhS-(q%bP=rx=wYg;8k` zqbKodNQ;sOX$3yq{1)=payGgy6)l}=I{+visBpQu^8n}p5Ti_R&X)rf+5Ig+&t?zl znyS(@Mi!$3`MD+F$$FnfWl}tnW%hpcfq3uDQ|n5%m{~4Y1yS{ z?V->)2c7xF8-s5^%RnrGu>x8E)-QD0u_tA2uX$qG!pbDr2k%SKkE?dom3rH0Dl&ss z2m!}|+CW+T)n|A}>!|u&5%u=P^A>x3b|h3gvYT%5+PRC%C^K|YbxD#Y6xklMF+eTD zFGjsmAkMQrUu9gK_p;HIda7%#-8UEAHT%TFs2x*X#qO5~FGd&Gu)|$0D{dQM-gn|9 zJ$=HB6QYtcErzvE6~t!3q*Ki;kIN&{zrv^_X^hJJDMn>TVN@2xsPA-9*DjHL!-6q- z8t5k;Qsv>ji2U(swPnAscY4lQTR;zh7|oHgS~R*id@N8srl(`5H6#A1xhTGN`z4vK zwlKBo*gnw1P}CP1qfpsMD2(a{25Q(V-J&NSu+1t=teLi0N4(UHkUfgQap20U?~ zWgr$wVN_z~Iq$=J&umH?_vg0dc-Rzp4TT(7X%^^>*WG27^WFy>2WppV^;aMNB86*X zZChSF+3_-SQOHFkxZ{#}wJ=kx+{MIvK7Dr=Z46S?aJF_UTV<|EvD*4=V_b4R4jzhm z>cL4o{7>U6CLY`ozk%7GS4WeUjNgnBr9Q1>^dQxA9f!%|_?CF~0PbB35f;N)dQA_N z6%ba_Y`90Qz<>Z}Xhl%=ETb)+@0p4RaPqa`qLI#r(e(`iiwOZ7*Kge5 zoC5m+)5^aL3^m`4P-r@lcSTXDU{gWzT|SvZ61VEFd$OE=eG)w4wzZ1JmWFk(8eh*4 zP8bb!MT}#6T|N48E~TUzyS;RT-Z&}XH{4mxA$T5Z)&43%h9t#JxU@X-1iwV z@y1|3V7bTaUQf=Lh-aXlAIzJzLP79}pU!f|!K@}*zUOQLXNVoY`NwMHO9iM{GO;~I zYl(xvCu#&{6^#f9ljHR{$709-JMhFHn=q#{= zWQ6!BwX~h~Lcl87|H%kR?zaC0jBqtM3mnX?dTa~>z$7gcBLv|{A|ikvW`wJHfNK`G z!}-Ywe=<4kH9Fq5kI>;hNbN84LuR9@Je&sH`$bfdKH55!Ar}^i@)D!~2z% zP?sg4&S$>U66y$U?OKA`k}ChV%$1&Siu~!$n57#ACG z4{Jd;?tr@JNt}Syg#jcXkheSk+a?0)b|=Y+fLfy0J`rEx7U~)(R6d-jEf`%;M;>d} zk`!LS`o9OaP*+%q6Ywo=p_s|qC*mu2LEUwQN(~dW1>FUe{a?G5pj$|le~-JM?&%UI O;9GY=B|FwU5&r`hS&vl! literal 0 HcmV?d00001 diff --git a/crates/iota-light-client/example_config/800.json b/crates/iota-light-client/example_config/532.json similarity index 77% rename from crates/iota-light-client/example_config/800.json rename to crates/iota-light-client/example_config/532.json index 47578663998..ce2a2fb8831 100644 --- a/crates/iota-light-client/example_config/800.json +++ b/crates/iota-light-client/example_config/532.json @@ -1,17 +1,17 @@ { "data": { - "epoch": 2, - "sequence_number": 800, - "network_total_transactions": 3488, - "content_digest": "6YzE4CzmvehXNT7qNGz2R6fvHhdtr2AbgidRZS1v7fiR", - "previous_digest": "EvpfuTBAFT2MWPUvfZ4oHRQXUL7j2JBQu34s43oG8Enk", + "epoch": 1, + "sequence_number": 532, + "network_total_transactions": 2332, + "content_digest": "2tKPsa73Wd5LTzLKUE13GCsM9dekswsGtq4hFdsG1WGb", + "previous_digest": "6yZrXpcw5B5zwEoZK5TRHoJBDJu6GjYKzqpbaVdpc8j5", "epoch_rolling_gas_cost_summary": { "computationCost": "0", "storageCost": "0", "storageRebate": "0", "nonRefundableStorageFee": "0" }, - "timestamp_ms": 1730123620755, + "timestamp_ms": 1730201217234, "checkpoint_commitments": [], "end_of_epoch_data": { "nextEpochCommittee": [ @@ -36,7 +36,7 @@ "epochCommitments": [ { "ECMHLiveObjectSetDigest": { - "digest": "6xDYr2xzphsbhxyweBzL26xQZTXfX8KE5etAsSTbd3nz" + "digest": "Cx7QDKwottqp4bs2eP5pL4XApGvopmXB1KmpYAZY1Gf5" } } ], @@ -48,8 +48,8 @@ ] }, "auth_signature": { - "epoch": 2, - "signature": "i3ZecWhnKjbi6SEkmP6L3Anp/urXITf2kzVV796IeE8/6+CuvKv0FMSXbBUc8oX2", + "epoch": 1, + "signature": "tx6eEhYvWH0wOk2yiuZmpzelWbIRLpVz4D8IN5iz1HVeQXClzEqVSlgQpnAkDMil", "signers_map": [ 58, 48, @@ -67,7 +67,7 @@ 0, 0, 0, - 0, + 1, 0, 2, 0, diff --git a/crates/iota-light-client/example_config/800_full.json b/crates/iota-light-client/example_config/532_full.json similarity index 83% rename from crates/iota-light-client/example_config/800_full.json rename to crates/iota-light-client/example_config/532_full.json index e3854f125d6..e5cc2b4a22a 100644 --- a/crates/iota-light-client/example_config/800_full.json +++ b/crates/iota-light-client/example_config/532_full.json @@ -1,18 +1,18 @@ { "checkpoint_summary": { "data": { - "epoch": 2, - "sequence_number": 800, - "network_total_transactions": 3488, - "content_digest": "6YzE4CzmvehXNT7qNGz2R6fvHhdtr2AbgidRZS1v7fiR", - "previous_digest": "EvpfuTBAFT2MWPUvfZ4oHRQXUL7j2JBQu34s43oG8Enk", + "epoch": 1, + "sequence_number": 532, + "network_total_transactions": 2332, + "content_digest": "2tKPsa73Wd5LTzLKUE13GCsM9dekswsGtq4hFdsG1WGb", + "previous_digest": "6yZrXpcw5B5zwEoZK5TRHoJBDJu6GjYKzqpbaVdpc8j5", "epoch_rolling_gas_cost_summary": { "computationCost": "0", "storageCost": "0", "storageRebate": "0", "nonRefundableStorageFee": "0" }, - "timestamp_ms": 1730123620755, + "timestamp_ms": 1730201217234, "checkpoint_commitments": [], "end_of_epoch_data": { "nextEpochCommittee": [ @@ -37,7 +37,7 @@ "epochCommitments": [ { "ECMHLiveObjectSetDigest": { - "digest": "6xDYr2xzphsbhxyweBzL26xQZTXfX8KE5etAsSTbd3nz" + "digest": "Cx7QDKwottqp4bs2eP5pL4XApGvopmXB1KmpYAZY1Gf5" } } ], @@ -49,8 +49,8 @@ ] }, "auth_signature": { - "epoch": 2, - "signature": "i3ZecWhnKjbi6SEkmP6L3Anp/urXITf2kzVV796IeE8/6+CuvKv0FMSXbBUc8oX2", + "epoch": 1, + "signature": "tx6eEhYvWH0wOk2yiuZmpzelWbIRLpVz4D8IN5iz1HVeQXClzEqVSlgQpnAkDMil", "signers_map": [ 58, 48, @@ -68,7 +68,7 @@ 0, 0, 0, - 0, + 1, 0, 2, 0, @@ -81,12 +81,12 @@ "V1": { "transactions": [ { - "transaction": "3QnU5myG1an94ErHksixC5wJx7gKpdWVwPMdqJ4mdrJZ", - "effects": "f4Sab8eYuy33CwH56Z7RcNTQb6MERtQfyFzkpRxKYD5" + "transaction": "23TybmpYcTxZ76cHK3WnyVZhcmjjH7PnpZfMLvEeaG2U", + "effects": "77cTGQ5A97R1kNCqxBXJEyviz6eJJV6GKMtXRh6ZEXfu" }, { - "transaction": "DpSZVwqohRzF7ASz7PMM8xL1ZkMnNvWMLJfjadt9ybE9", - "effects": "3u5HT9dV3rqoXmhpWgpKj1HPTzbQUaqHAVVYEo4EdaUv" + "transaction": "326n9ZcQDrJVxyFL8aWkknSmFahVxwpqZQ5q5ySmWrUy", + "effects": "3heGnAzfkz3DcoBMVUh5T6RhNtoUJ6MM5nCuk45u6vfw" } ], "user_signatures": [ @@ -112,11 +112,11 @@ "V1": { "kind": { "ConsensusCommitPrologueV1": { - "epoch": 2, - "round": 1050, + "epoch": 1, + "round": 1058, "sub_dag_index": null, - "commit_timestamp_ms": 1730123620755, - "consensus_commit_digest": "t7np2LsgnDbZbdCYkQ4S4s6DpEExXP1EFP4kEL18iQT", + "commit_timestamp_ms": 1730201217234, + "consensus_commit_digest": "4gKnNQLRsxwGyXvXtT4UvufbV6TRhfqWm5HpLn4ayQ3V", "consensus_determined_version_assignments": { "CancelledTransactions": [] } @@ -149,20 +149,20 @@ "effects": { "V1": { "status": "Success", - "executed_epoch": 2, + "executed_epoch": 1, "gas_used": { "computationCost": "0", "storageCost": "0", "storageRebate": "0", "nonRefundableStorageFee": "0" }, - "transaction_digest": "3QnU5myG1an94ErHksixC5wJx7gKpdWVwPMdqJ4mdrJZ", + "transaction_digest": "23TybmpYcTxZ76cHK3WnyVZhcmjjH7PnpZfMLvEeaG2U", "gas_object_index": null, "events_digest": null, "dependencies": [ - "6DpBiWHS8WSswgFiGpU3xfKeG2xCd99kWDSpXovoH5bs" + "HViuzxiXGNhxBy9yrWoTSS1d7YNJcZBkGi7UhBoYN8CK" ], - "lamport_version": 3155, + "lamport_version": 2112, "changed_objects": [ [ "0x0000000000000000000000000000000000000000000000000000000000000006", @@ -170,8 +170,8 @@ "input_state": { "Exist": [ [ - 3154, - "7a3RKbvgXmvrXoYcvctK1aMmhyfyGLLJ4rsyTEHyD26K" + 2111, + "3bfq3QcfkrPWos8abZYhtp4unj2e5H8RWiSFae6RWb7S" ], { "Shared": { @@ -182,7 +182,7 @@ }, "output_state": { "ObjectWrite": [ - "D9kGegTRRhMW6vcP2g6kMrn1wrSJuBj2tFTumqVWvYXc", + "BdMXkcFA1K7j3aGkNq5sop1sGfHhLjjsBYXEAhsU9AHi", { "Shared": { "initial_shared_version": 1 @@ -212,7 +212,7 @@ } }, "has_public_transfer": false, - "version": 3154, + "version": 2111, "contents": [ 0, 0, @@ -246,10 +246,10 @@ 0, 0, 6, - 88, - 97, - 103, - 211, + 152, + 104, + 7, + 216, 146, 1, 0, @@ -262,7 +262,7 @@ "initial_shared_version": 1 } }, - "previous_transaction": "6DpBiWHS8WSswgFiGpU3xfKeG2xCd99kWDSpXovoH5bs", + "previous_transaction": "HViuzxiXGNhxBy9yrWoTSS1d7YNJcZBkGi7UhBoYN8CK", "storage_rebate": 0 } ], @@ -279,7 +279,7 @@ } }, "has_public_transfer": false, - "version": 3155, + "version": 2112, "contents": [ 0, 0, @@ -313,10 +313,10 @@ 0, 0, 6, - 147, - 97, - 103, - 211, + 210, + 104, + 7, + 216, 146, 1, 0, @@ -329,7 +329,7 @@ "initial_shared_version": 1 } }, - "previous_transaction": "3QnU5myG1an94ErHksixC5wJx7gKpdWVwPMdqJ4mdrJZ", + "previous_transaction": "23TybmpYcTxZ76cHK3WnyVZhcmjjH7PnpZfMLvEeaG2U", "storage_rebate": 0 } ] @@ -350,13 +350,13 @@ "EndOfEpochTransaction": [ { "ChangeEpoch": { - "epoch": 3, + "epoch": 2, "protocol_version": 1, "storage_charge": 0, "computation_charge": 0, "storage_rebate": 0, "non_refundable_storage_fee": 0, - "epoch_start_timestamp_ms": 1730123620755, + "epoch_start_timestamp_ms": 1730201217234, "system_packages": [] } } @@ -389,20 +389,20 @@ "effects": { "V1": { "status": "Success", - "executed_epoch": 2, + "executed_epoch": 1, "gas_used": { "computationCost": "0", "storageCost": "0", "storageRebate": "0", "nonRefundableStorageFee": "0" }, - "transaction_digest": "DpSZVwqohRzF7ASz7PMM8xL1ZkMnNvWMLJfjadt9ybE9", + "transaction_digest": "326n9ZcQDrJVxyFL8aWkknSmFahVxwpqZQ5q5ySmWrUy", "gas_object_index": null, - "events_digest": "834DanfXhDFWEq2TtLmKaQ8tNAYhFU6W9nMbuL61fSHf", + "events_digest": "62T8x8JxJ1wmGNoNKnmboPNFPN19vfqZeupbQ5NQpCDH", "dependencies": [ - "7gtSzcRCnPVpmESfZRpQaHVh65UfDPZZqwfcDjwKqj7U" + "8eZxmVup35tyyVdZ31sKB9av3iNMKuJrxZ8ouJ4SRWtu" ], - "lamport_version": 4, + "lamport_version": 3, "changed_objects": [ [ "0x0000000000000000000000000000000000000000000000000000000000000005", @@ -410,8 +410,8 @@ "input_state": { "Exist": [ [ - 3, - "5u1FEdHb4shFkhfNdKvHnF83sD5ZJLwQA3Doh7AnQuJR" + 2, + "EYoEn9QcWfA3rxFQdSGSaouNXj2D21tGvWM7ctmBhqyo" ], { "Shared": { @@ -422,7 +422,7 @@ }, "output_state": { "ObjectWrite": [ - "eeD8knuTf1PUTbdD9ftmyHfEfmNCNnTrSNRjZWySRs5", + "5KJjRy2WknTpWbU9Nr5Z9AVRyFErsJMi228npzNXksGN", { "Shared": { "initial_shared_version": 1 @@ -434,14 +434,14 @@ } ], [ - "0x42923fd7772b154ed1760ad47ae5d415f93b529c9053f790bb3d9884e46b1094", + "0x0ff024c8e20d71bc9762bd852772536512584460b920ec9235a6651a4305faeb", { "input_state": "NotExist", "output_state": { "ObjectWrite": [ - "JBmgsTfZa685xAAMXjAsKDx6uiwZfvY2UaNPm4JFjcDo", + "7Xz4Bp4cqfdYB2zBM7XZyJBHfWMdexT4e4eAacrZYa1D", { - "AddressOwner": "0x5940b64eb29720ea0c35d49ee3d599b3477879d68b7e652904b236edd6ead88a" + "AddressOwner": "0x2db19ce7b296633e49f48e863c2b08d5ea0a885273bfa574e2db0a85ece225e5" } ] }, @@ -449,39 +449,29 @@ } ], [ - "0x5b890eaf2abcfa2ab90b77b8e6f3d5d8609586c3e583baf3dccd5af17edf48d1", + "0x28ca70d96d6d9ccd8719332ebbde3fb0485d1559920d852609cba643bd113c35", { - "input_state": { - "Exist": [ - [ - 3, - "BAhqeCeYr17aQKD1MpaGuHAgXxnLmP5mwZgyPYdrXSt2" - ], - { - "ObjectOwner": "0x0000000000000000000000000000000000000000000000000000000000000005" - } - ] - }, + "input_state": "NotExist", "output_state": { "ObjectWrite": [ - "A7NYYiA5ofemN8tCViXcamfQyH1F5AB3vu9eNyTE35JB", + "5ZzaULPNAAfMrR8rA9Vv34dp2wkQ6VqNBjcCx55hfwSA", { - "ObjectOwner": "0x0000000000000000000000000000000000000000000000000000000000000005" + "AddressOwner": "0x3bfb34ad6f452c61add36979ce9308a507f4ca7749817ba5a19a57d4ff2cd53f" } ] }, - "id_operation": "None" + "id_operation": "Created" } ], [ - "0x739ac09bd4f425f8b5243352124e33a55f8125a5ea1c190fd29d5d6473fbdbd8", + "0x37b6a35be5fd952c828961ceb90d1c8c5aa6c78c2803540773ea898af97c0edd", { "input_state": "NotExist", "output_state": { "ObjectWrite": [ - "Byfvv7G2czoGfBgwFLBXzTS5uNdo76JZRisQszw7MKdU", + "5zQUpRzN7FhVaNdBcBziTHh9tdiQQGYiYhpfCDfgLZbS", { - "AddressOwner": "0x08c27e08962112dddbc4d4fb5dc0159fd37594094a8d99825e6085b336490f4a" + "ObjectOwner": "0x3c32b42be3a2db1d7ddd51c85375127ff6aefb276834193e469e01e25d48f555" } ] }, @@ -489,29 +479,39 @@ } ], [ - "0x88b3538f4536a489e1ae71bb4a2aa069fb80b0862f81c5c3fc22ae0a7d7ecbb3", + "0x6af2a2b7ca60bf76174adfd3e9c4957f8e937759603182f9b46c7f6c5f19c6d2", { - "input_state": "NotExist", + "input_state": { + "Exist": [ + [ + 2, + "BiBPtr9KpWGrxjeWSFdLWbMCEHjT5TJxocYs6bzkW8dn" + ], + { + "ObjectOwner": "0x0000000000000000000000000000000000000000000000000000000000000005" + } + ] + }, "output_state": { "ObjectWrite": [ - "4tmxufC4X34zzYdMGxdSA1uEyfRTMxgb7Ucvt1EE3rW8", + "GxfNuA2vW1Zdrj5G289Tdh6HsWdACP89oFniTQuuZfEM", { - "ObjectOwner": "0xbecc6872d3acd4009c30abd519c3be7ed7eb50f8decb7510863a40eefc41922b" + "ObjectOwner": "0x0000000000000000000000000000000000000000000000000000000000000005" } ] }, - "id_operation": "Created" + "id_operation": "None" } ], [ - "0x9422d9126d4bad795b494d380de1208a557c82e831a719086c87c5f3b1370f25", + "0x8ee75273d26a842889b6af6298184c70aa954955e0a8e4d85fe3eb35fef8eea2", { "input_state": "NotExist", "output_state": { "ObjectWrite": [ - "5wqUaXY9Nc6TDKcF3d5QdQXQ49yqbW2qMBjeMxxChjTH", + "BLdGrapxU3yDKCuaNfMnhfUFvE5q9JLFYUrRsvzqeaJT", { - "AddressOwner": "0xaed89eac64cc1efe9fc3e93d9058add5f49cc64b0ce8dab136b679c7b9f3b689" + "ObjectOwner": "0x131c437cac81c9875e4840c5265f232c2b4be1b28becda2d90e308fb722d2889" } ] }, @@ -519,14 +519,14 @@ } ], [ - "0x9a7f201f840c5a9c3c2019823366b2bd20ffcf90767b7c3a5c1423cdaeed1c72", + "0xba3c6b79e9185ef9be04d56695397a9020301c2978ad56afc9baab620fda1989", { "input_state": "NotExist", "output_state": { "ObjectWrite": [ - "Hgbcdi7cKGVaXHnzTBYfxMFnTGLdbuJ6PUkz3ts98uNF", + "CczgkG3YpZXaX94wSTqovyhiKxqP1paMrHsezHYBRyv3", { - "ObjectOwner": "0xa4514f63b362d130f8d8549edc1ce7932c0722e1260dfc0d5115e1b620158701" + "AddressOwner": "0x32482a229f83bace2da4c90b4dd99c8a73063a6a8ddc5bd6cc99ded87064912a" } ] }, @@ -534,14 +534,14 @@ } ], [ - "0xbb3e4fe1a1a749788faae2157076507ad7017349ac10c813cc3c170d416f6254", + "0xbfe048dd2f0450df5e8647ec18e648a3aea1246992701bc9a851037dc7279298", { "input_state": "NotExist", "output_state": { "ObjectWrite": [ - "E6Uwiw7pPNtbbBmUfqXAB3G6nDhbhcCwzmTmaihudGuC", + "CqjWmJFDEBgijLvHHc6ozHnUJR6c63SDDc3u2D73pjk6", { - "AddressOwner": "0x0ff37e13505ed907d908cf37919a29117a0ab7669311f26e154dffbe492e8a5d" + "ObjectOwner": "0x791f65cc868cc6ef0bc0ff4028939f10b96270274481cdebf421d647bef00b6e" } ] }, @@ -549,14 +549,14 @@ } ], [ - "0xe4152b71c561296203dd5632ffc0f5f267a74876bc951239577689e2c23a461f", + "0xc13d95c6c09f720c4c667184663093b88898e331e4911dc8077197936f470359", { "input_state": "NotExist", "output_state": { "ObjectWrite": [ - "8hJy2ZRuBFsRXDQdAiisVMi6sgEgosCrXKJDTiH4wBRV", + "H4XcYS3o3LpVog76LBcyuqzf6L4vHYXFRG8eUHeydS2g", { - "ObjectOwner": "0x5e76bfe85bb87207b617ee6d9b8e5dddb2ab4ee399629f18a5c90d246425692e" + "AddressOwner": "0x45e45dbd905642cc2ca9c3cfd1a0a1f9517758e5d98deb676040c49340c8b267" } ] }, @@ -564,14 +564,14 @@ } ], [ - "0xe445785228a576b921477a7613919c0ff581aec2ff84d147ff52d0984b135ec6", + "0xfc4360fe27e0682f68fa6cb7286e5d136b36ac6337d12fa2337f912db919e42a", { "input_state": "NotExist", "output_state": { "ObjectWrite": [ - "H8BA44jwqy6wiSy9b3Pvs13s3nmG9JVgoevmXzjzyhsh", + "J2PeXcQtyqshCogHU5p6impsjTTuiUpcKUTh6KkWUgTR", { - "ObjectOwner": "0x39e10c0206c65f3422f505e4b3bcf750d39409405e685e457f4f931af8a0f1bb" + "ObjectOwner": "0x6450460d7e7be475407908e48144f095500bc73cf7254f91c182a45570d0cac6" } ] }, @@ -596,103 +596,103 @@ "type_args": [] }, "contents": [ - 210, + 15, + 179, 7, - 175, - 121, - 62, - 202, - 57, - 178, - 71, - 217, - 66, - 234, - 143, - 76, - 127, - 97, - 57, - 85, - 68, - 60, - 84, - 148, - 47, - 76, - 83, - 76, - 253, + 220, + 99, + 116, + 11, + 43, + 34, + 99, + 124, + 173, + 183, 91, - 64, - 161, - 158, - 165, - 174, + 122, + 153, + 83, + 227, 216, - 158, - 172, - 100, - 204, - 30, - 254, - 159, - 195, - 233, - 61, - 144, - 88, - 173, - 213, - 244, - 156, - 198, - 75, - 12, - 232, - 218, - 177, - 54, - 182, - 121, - 199, - 185, - 243, - 182, - 137, 174, - 216, - 158, - 172, - 100, - 204, - 30, - 254, - 159, - 195, - 233, - 61, - 144, - 88, + 143, + 123, + 179, + 93, + 16, + 223, + 139, + 50, + 20, + 184, + 146, + 41, + 59, + 251, + 52, 173, - 213, + 111, + 69, + 44, + 97, + 173, + 211, + 105, + 121, + 206, + 147, + 8, + 165, + 7, 244, - 156, - 198, - 75, - 12, - 232, - 218, - 177, - 54, - 182, + 202, + 119, + 73, + 129, + 123, + 165, + 161, + 154, + 87, + 212, + 255, + 44, + 213, + 63, + 59, + 251, + 52, + 173, + 111, + 69, + 44, + 97, + 173, + 211, + 105, 121, - 199, - 185, - 243, - 182, - 137, - 2, + 206, + 147, + 8, + 165, + 7, + 244, + 202, + 119, + 73, + 129, + 123, + 165, + 161, + 154, + 87, + 212, + 255, + 44, + 213, + 63, + 1, 0, 0, 0, @@ -721,103 +721,103 @@ "type_args": [] }, "contents": [ - 203, - 80, - 5, - 66, - 182, - 197, - 54, - 201, - 219, - 93, - 163, - 15, - 25, - 198, - 242, - 133, - 10, - 23, - 218, - 216, - 177, - 129, + 209, + 123, + 224, + 206, + 121, + 241, + 77, + 244, + 72, + 86, + 107, + 103, + 131, + 192, + 239, + 101, + 12, 50, + 118, + 14, + 142, + 183, + 157, + 157, + 157, + 178, + 187, + 220, + 115, + 108, + 181, 43, - 101, - 250, - 128, - 147, - 57, 45, + 177, + 156, + 231, + 178, + 150, + 99, + 62, + 73, + 244, + 142, + 134, + 60, 43, - 41, 8, - 194, - 126, - 8, - 150, - 33, - 18, - 221, + 213, + 234, + 10, + 136, + 82, + 115, + 191, + 165, + 116, + 226, 219, - 196, - 212, - 251, - 93, - 192, - 21, - 159, - 211, - 117, - 148, - 9, - 74, - 141, - 153, - 130, - 94, - 96, + 10, 133, - 179, - 54, + 236, + 226, + 37, + 229, + 45, + 177, + 156, + 231, + 178, + 150, + 99, + 62, 73, - 15, - 74, - 8, - 194, - 126, + 244, + 142, + 134, + 60, + 43, 8, - 150, - 33, - 18, - 221, - 219, - 196, - 212, - 251, - 93, - 192, - 21, - 159, - 211, - 117, - 148, - 9, - 74, - 141, - 153, - 130, - 94, - 96, + 213, + 234, + 10, + 136, + 82, + 115, + 191, + 165, + 116, + 226, + 219, + 10, 133, - 179, - 54, - 73, - 15, - 74, - 2, + 236, + 226, + 37, + 229, + 1, 0, 0, 0, @@ -846,103 +846,103 @@ "type_args": [] }, "contents": [ - 61, - 204, - 132, - 220, - 80, - 55, - 5, 242, - 131, - 99, - 205, - 122, - 85, - 32, - 214, - 232, - 30, - 96, - 9, - 153, - 102, - 138, - 88, - 227, - 89, - 211, - 37, - 226, - 170, - 230, - 165, - 66, + 245, + 215, 89, - 64, - 182, - 78, - 178, - 151, - 32, - 234, - 12, - 53, - 212, + 82, + 128, + 97, 158, - 227, - 213, - 153, - 179, - 71, - 120, - 121, - 214, - 139, - 126, - 101, - 41, + 1, + 156, + 124, + 176, 4, - 178, - 54, - 237, - 214, - 234, - 216, - 138, - 89, - 64, + 137, + 192, 182, - 78, - 178, - 151, - 32, - 234, - 12, - 53, + 113, + 144, + 74, + 11, + 72, + 130, + 17, + 145, + 107, + 150, 212, - 158, - 227, - 213, - 153, - 179, - 71, - 120, - 121, - 214, - 139, - 126, - 101, - 41, - 4, - 178, - 54, - 237, + 219, + 236, + 228, + 205, + 29, + 50, + 72, + 42, + 34, + 159, + 131, + 186, + 206, + 45, + 164, + 201, + 11, + 77, + 217, + 156, + 138, + 115, + 6, + 58, + 106, + 141, + 220, + 91, 214, - 234, + 204, + 153, + 222, 216, + 112, + 100, + 145, + 42, + 50, + 72, + 42, + 34, + 159, + 131, + 186, + 206, + 45, + 164, + 201, + 11, + 77, + 217, + 156, 138, - 2, + 115, + 6, + 58, + 106, + 141, + 220, + 91, + 214, + 204, + 153, + 222, + 216, + 112, + 100, + 145, + 42, + 1, 0, 0, 0, @@ -971,108 +971,108 @@ "type_args": [] }, "contents": [ - 29, - 249, - 67, - 164, - 123, - 138, - 6, - 11, - 45, - 207, - 2, - 237, - 185, - 30, - 13, - 130, - 229, - 33, - 64, - 4, - 156, - 170, - 247, - 208, - 168, - 153, + 26, + 73, + 49, + 169, 67, - 98, - 48, - 135, - 208, - 185, - 15, - 243, - 126, 19, - 80, - 94, - 217, - 7, - 217, - 8, - 207, - 55, - 145, - 154, - 41, - 17, - 122, - 10, - 183, + 121, + 35, + 127, + 251, + 115, 102, - 147, - 17, - 242, - 110, - 21, - 77, - 255, - 190, + 203, + 11, 73, - 46, - 138, + 57, + 227, + 115, + 5, + 39, + 92, + 71, + 87, + 245, + 250, + 108, + 229, + 163, + 116, + 21, + 52, + 122, + 69, + 228, 93, - 15, - 243, - 126, - 19, - 80, - 94, - 217, - 7, - 217, - 8, + 189, + 144, + 86, + 66, + 204, + 44, + 169, + 195, 207, - 55, - 145, - 154, - 41, - 17, - 122, - 10, - 183, - 102, + 209, + 160, + 161, + 249, + 81, + 119, + 88, + 229, + 217, + 141, + 235, + 103, + 96, + 64, + 196, 147, - 17, - 242, - 110, - 21, - 77, - 255, - 190, - 73, - 46, - 138, + 64, + 200, + 178, + 103, + 69, + 228, 93, - 2, - 0, - 0, - 0, - 0, - 0, + 189, + 144, + 86, + 66, + 204, + 44, + 169, + 195, + 207, + 209, + 160, + 161, + 249, + 81, + 119, + 88, + 229, + 217, + 141, + 235, + 103, + 96, + 64, + 196, + 147, + 64, + 200, + 178, + 103, + 1, + 0, + 0, + 0, + 0, + 0, 0, 0, 0, @@ -1092,11 +1092,11 @@ "type_": { "address": "0000000000000000000000000000000000000000000000000000000000000003", "module": "validator_set", - "name": "ValidatorEpochInfoEventV2", + "name": "ValidatorEpochInfoEventV1", "type_args": [] }, "contents": [ - 3, + 2, 0, 0, 0, @@ -1104,38 +1104,38 @@ 0, 0, 0, - 174, - 216, - 158, - 172, - 100, - 204, - 30, - 254, - 159, - 195, - 233, - 61, - 144, - 88, + 59, + 251, + 52, 173, - 213, - 244, - 156, - 198, - 75, - 12, - 232, - 218, - 177, - 54, - 182, + 111, + 69, + 44, + 97, + 173, + 211, + 105, 121, - 199, - 185, - 243, - 182, - 137, + 206, + 147, + 8, + 165, + 7, + 244, + 202, + 119, + 73, + 129, + 123, + 165, + 161, + 154, + 87, + 212, + 255, + 44, + 213, + 63, 232, 3, 0, @@ -1145,12 +1145,12 @@ 0, 0, 0, - 244, - 17, - 203, - 109, - 95, - 7, + 56, + 111, + 132, + 8, + 177, + 6, 0, 196, 9, @@ -1177,19 +1177,19 @@ 0, 0, 0, - 244, - 17, - 203, - 109, - 95, - 7, + 56, + 111, + 132, + 8, + 177, + 6, 0, - 73, - 5, - 86, - 4, - 171, - 92, + 161, + 32, + 121, + 162, + 33, + 90, 5, 0, 0, @@ -1210,11 +1210,11 @@ "type_": { "address": "0000000000000000000000000000000000000000000000000000000000000003", "module": "validator_set", - "name": "ValidatorEpochInfoEventV2", + "name": "ValidatorEpochInfoEventV1", "type_args": [] }, "contents": [ - 3, + 2, 0, 0, 0, @@ -1222,38 +1222,38 @@ 0, 0, 0, - 8, - 194, - 126, - 8, + 45, + 177, + 156, + 231, + 178, 150, - 33, - 18, - 221, + 99, + 62, + 73, + 244, + 142, + 134, + 60, + 43, + 8, + 213, + 234, + 10, + 136, + 82, + 115, + 191, + 165, + 116, + 226, 219, - 196, - 212, - 251, - 93, - 192, - 21, - 159, - 211, - 117, - 148, - 9, - 74, - 141, - 153, - 130, - 94, - 96, + 10, 133, - 179, - 54, - 73, - 15, - 74, + 236, + 226, + 37, + 229, 232, 3, 0, @@ -1263,12 +1263,12 @@ 0, 0, 0, - 244, - 17, - 203, - 109, - 95, - 7, + 56, + 111, + 132, + 8, + 177, + 6, 0, 196, 9, @@ -1295,19 +1295,19 @@ 0, 0, 0, - 244, - 17, - 203, - 109, - 95, - 7, + 56, + 111, + 132, + 8, + 177, + 6, 0, - 73, - 5, - 86, - 4, - 171, - 92, + 161, + 32, + 121, + 162, + 33, + 90, 5, 0, 0, @@ -1328,11 +1328,11 @@ "type_": { "address": "0000000000000000000000000000000000000000000000000000000000000003", "module": "validator_set", - "name": "ValidatorEpochInfoEventV2", + "name": "ValidatorEpochInfoEventV1", "type_args": [] }, "contents": [ - 3, + 2, 0, 0, 0, @@ -1340,38 +1340,38 @@ 0, 0, 0, - 89, - 64, - 182, - 78, - 178, - 151, - 32, - 234, - 12, - 53, - 212, - 158, - 227, - 213, - 153, - 179, - 71, - 120, - 121, - 214, - 139, - 126, - 101, - 41, - 4, - 178, - 54, - 237, + 50, + 72, + 42, + 34, + 159, + 131, + 186, + 206, + 45, + 164, + 201, + 11, + 77, + 217, + 156, + 138, + 115, + 6, + 58, + 106, + 141, + 220, + 91, 214, - 234, + 204, + 153, + 222, 216, - 138, + 112, + 100, + 145, + 42, 232, 3, 0, @@ -1381,12 +1381,12 @@ 0, 0, 0, - 244, - 17, - 203, - 109, - 95, - 7, + 56, + 111, + 132, + 8, + 177, + 6, 0, 196, 9, @@ -1413,19 +1413,19 @@ 0, 0, 0, - 244, - 17, - 203, - 109, - 95, - 7, + 56, + 111, + 132, + 8, + 177, + 6, 0, - 73, - 5, - 86, - 4, - 171, - 92, + 161, + 32, + 121, + 162, + 33, + 90, 5, 0, 0, @@ -1446,11 +1446,11 @@ "type_": { "address": "0000000000000000000000000000000000000000000000000000000000000003", "module": "validator_set", - "name": "ValidatorEpochInfoEventV2", + "name": "ValidatorEpochInfoEventV1", "type_args": [] }, "contents": [ - 3, + 2, 0, 0, 0, @@ -1458,38 +1458,38 @@ 0, 0, 0, - 15, - 243, - 126, - 19, - 80, - 94, - 217, - 7, - 217, - 8, + 69, + 228, + 93, + 189, + 144, + 86, + 66, + 204, + 44, + 169, + 195, 207, - 55, - 145, - 154, - 41, - 17, - 122, - 10, - 183, - 102, + 209, + 160, + 161, + 249, + 81, + 119, + 88, + 229, + 217, + 141, + 235, + 103, + 96, + 64, + 196, 147, - 17, - 242, - 110, - 21, - 77, - 255, - 190, - 73, - 46, - 138, - 93, + 64, + 200, + 178, + 103, 232, 3, 0, @@ -1499,12 +1499,12 @@ 0, 0, 0, - 244, - 17, - 203, - 109, - 95, - 7, + 56, + 111, + 132, + 8, + 177, + 6, 0, 196, 9, @@ -1531,19 +1531,19 @@ 0, 0, 0, - 244, - 17, - 203, - 109, - 95, - 7, + 56, + 111, + 132, + 8, + 177, + 6, 0, - 73, - 5, - 86, - 4, - 171, - 92, + 161, + 32, + 121, + 162, + 33, + 90, 5, 0, 0, @@ -1564,11 +1564,11 @@ "type_": { "address": "0000000000000000000000000000000000000000000000000000000000000003", "module": "iota_system_state_inner", - "name": "SystemEpochInfoEvent", + "name": "SystemEpochInfoEventV1", "type_args": [] }, "contents": [ - 3, + 2, 0, 0, 0, @@ -1593,12 +1593,12 @@ 0, 0, 0, - 208, - 71, - 44, - 183, - 125, - 29, + 224, + 188, + 17, + 34, + 196, + 26, 0, 0, 0, @@ -1673,7 +1673,7 @@ } }, "has_public_transfer": false, - "version": 3, + "version": 2, "contents": [ 0, 0, @@ -1707,7 +1707,7 @@ 0, 0, 5, - 2, + 1, 0, 0, 0, @@ -1723,7 +1723,7 @@ "initial_shared_version": 1 } }, - "previous_transaction": "7gtSzcRCnPVpmESfZRpQaHVh65UfDPZZqwfcDjwKqj7U", + "previous_transaction": "8eZxmVup35tyyVdZ31sKB9av3iNMKuJrxZ8ouJ4SRWtu", "storage_rebate": 0 }, { @@ -1740,7 +1740,7 @@ "struct": { "address": "0000000000000000000000000000000000000000000000000000000000000003", "module": "iota_system_state_inner", - "name": "IotaSystemStateInnerV2", + "name": "IotaSystemStateV1", "type_args": [] } } @@ -1748,41 +1748,41 @@ } }, "has_public_transfer": false, - "version": 3, + "version": 2, "contents": [ - 91, - 137, - 14, - 175, - 42, - 188, - 250, - 42, - 185, - 11, - 119, - 184, - 230, - 243, - 213, - 216, + 106, + 242, + 162, + 183, + 202, 96, - 149, - 134, - 195, - 229, - 131, - 186, - 243, - 220, - 205, - 90, - 241, - 126, + 191, + 118, + 23, + 74, 223, - 72, - 209, - 2, + 211, + 233, + 196, + 149, + 127, + 142, + 147, + 119, + 89, + 96, + 49, + 130, + 249, + 180, + 108, + 127, + 108, + 95, + 25, + 198, + 210, + 1, 0, 0, 0, @@ -1790,7 +1790,7 @@ 0, 0, 0, - 2, + 1, 0, 0, 0, @@ -1806,7 +1806,7 @@ 0, 0, 0, - 2, + 1, 0, 0, 0, @@ -1814,98 +1814,98 @@ 0, 0, 0, - 235, - 80, - 81, - 188, - 82, + 57, + 250, + 115, + 22, + 182, + 11, + 178, + 229, + 253, + 205, + 92, + 179, + 236, + 134, + 160, + 75, 54, - 128, - 152, - 95, - 131, - 193, - 49, - 226, - 212, - 212, - 46, - 6, - 207, - 172, - 155, - 77, - 248, - 124, - 156, - 93, - 124, - 109, - 206, - 232, - 47, - 39, + 44, + 186, + 33, + 145, + 160, 137, + 160, + 136, + 5, + 12, + 185, + 38, + 134, + 120, + 155, 0, - 224, - 244, - 68, - 154, - 59, - 103, + 240, + 105, + 42, + 5, + 130, + 100, 43, 0, - 224, - 188, - 17, - 34, - 196, - 26, + 240, + 49, + 247, + 140, + 10, + 24, 0, 4, - 174, - 216, - 158, - 172, - 100, - 204, - 30, - 254, - 159, - 195, - 233, - 61, - 144, - 88, + 59, + 251, + 52, 173, - 213, - 244, - 156, - 198, - 75, - 12, - 232, - 218, - 177, - 54, - 182, - 121, - 199, - 185, - 243, - 182, - 137, - 96, - 141, - 207, - 246, - 209, - 85, - 4, - 10, - 101, 111, - 72, + 69, + 44, + 97, + 173, + 211, + 105, + 121, + 206, + 147, + 8, + 165, + 7, + 244, + 202, + 119, + 73, + 129, + 123, + 165, + 161, + 154, + 87, + 212, + 255, + 44, + 213, + 63, + 96, + 141, + 207, + 246, + 209, + 85, + 4, + 10, + 101, + 111, + 72, 25, 177, 49, @@ -1993,120 +1993,120 @@ 56, 212, 32, - 109, - 235, - 35, - 7, - 201, - 239, - 185, - 254, - 209, - 111, - 122, - 55, - 135, - 92, - 135, - 145, - 234, - 34, - 205, - 172, - 200, - 167, - 206, - 76, - 83, - 189, - 105, - 186, - 194, - 69, - 97, - 182, 32, - 233, - 229, - 74, - 177, + 38, 163, - 194, - 251, - 42, - 2, - 77, - 108, - 140, - 235, - 238, - 171, + 54, + 223, + 222, + 200, + 16, + 231, + 136, + 101, + 109, + 60, + 170, + 54, + 183, + 183, + 132, + 232, + 253, + 218, 17, - 178, - 173, - 55, - 71, - 146, - 50, - 124, - 82, - 10, - 10, - 129, 151, - 215, - 205, + 230, + 164, + 94, 212, + 132, + 90, + 230, + 7, + 98, + 32, + 217, + 53, + 60, + 49, + 54, + 152, + 131, + 119, + 1, + 32, + 5, + 215, + 206, + 234, + 120, + 214, + 210, + 148, + 142, + 129, + 161, + 106, + 254, + 253, + 73, + 188, + 78, 237, - 48, + 59, + 75, 133, - 10, - 155, - 203, - 47, - 247, - 198, - 115, - 43, - 222, - 83, - 188, - 159, - 173, - 91, + 63, + 48, + 175, + 52, + 76, + 124, + 156, + 164, + 117, + 75, + 204, + 212, + 49, + 8, + 33, 96, - 225, + 102, + 254, + 60, + 113, + 252, + 79, + 3, + 66, + 110, + 30, + 211, + 234, + 248, + 46, + 26, + 12, 142, - 9, - 106, 136, - 182, - 107, - 125, - 168, - 83, - 123, - 49, - 185, + 104, + 199, + 247, + 129, + 48, 228, - 0, - 172, - 250, - 235, - 90, - 33, - 169, - 255, - 193, - 15, - 174, - 111, - 249, - 22, - 108, - 133, - 142, - 171, + 61, + 39, + 13, + 72, + 101, + 101, + 199, + 19, + 109, + 21, 11, 118, 97, @@ -2142,11 +2142,11 @@ 99, 112, 47, + 54, 53, - 53, - 50, - 55, - 55, + 52, + 52, + 54, 47, 104, 116, @@ -2172,11 +2172,11 @@ 100, 112, 47, + 54, 53, - 53, - 50, - 55, - 57, + 52, + 52, + 56, 24, 47, 105, @@ -2197,11 +2197,11 @@ 100, 112, 47, + 54, 53, + 52, 53, - 50, - 56, - 53, + 52, 0, 0, 0, @@ -2209,38 +2209,38 @@ 0, 0, 0, - 203, - 238, - 102, - 51, - 150, - 252, - 160, - 66, - 122, - 198, - 160, - 124, - 201, - 197, - 225, - 25, - 157, - 66, - 182, - 210, - 4, - 225, - 203, + 237, + 202, + 141, + 82, + 243, + 82, + 185, + 130, + 172, + 46, + 92, + 14, + 227, + 72, + 139, + 162, + 213, + 206, + 89, + 121, + 179, 214, - 0, - 223, - 240, - 182, - 73, - 222, - 163, - 201, + 64, + 241, + 40, + 30, + 200, + 224, + 136, + 215, + 39, + 57, 0, 0, 0, @@ -2257,38 +2257,38 @@ 0, 0, 0, - 97, - 221, - 158, - 52, - 171, - 9, - 5, - 134, - 63, - 50, - 83, - 248, - 184, - 8, - 206, - 72, - 100, - 138, - 246, - 112, - 12, - 199, - 158, - 228, - 46, - 40, - 45, + 74, + 247, + 153, 224, - 144, - 243, - 160, + 143, + 124, + 199, + 167, + 208, + 50, + 229, + 166, + 53, 141, + 230, + 155, + 237, + 8, + 69, + 247, + 162, + 221, + 120, + 65, + 215, + 137, + 47, + 111, + 156, + 51, + 80, + 173, 232, 3, 0, @@ -2297,38 +2297,38 @@ 0, 0, 0, - 210, + 15, + 179, 7, - 175, - 121, - 62, - 202, - 57, - 178, - 71, - 217, - 66, - 234, - 143, - 76, - 127, - 97, - 57, - 85, - 68, - 60, - 84, - 148, - 47, - 76, - 83, - 76, - 253, + 220, + 99, + 116, + 11, + 43, + 34, + 99, + 124, + 173, + 183, 91, - 64, - 161, - 158, - 165, + 122, + 153, + 83, + 227, + 216, + 174, + 143, + 123, + 179, + 93, + 16, + 223, + 139, + 50, + 20, + 184, + 146, + 41, 1, 0, 0, @@ -2340,62 +2340,62 @@ 0, 0, 0, - 56, - 111, - 132, - 8, - 177, + 124, + 204, + 61, + 163, + 2, 6, 0, 0, - 92, - 165, - 189, - 208, - 85, - 1, + 174, + 210, + 94, + 232, + 170, 0, - 161, - 32, - 121, - 162, - 33, - 90, - 5, 0, - 57, - 225, - 12, - 2, - 6, - 198, - 95, - 52, - 34, - 245, + 145, + 108, + 209, + 118, + 87, + 87, 5, - 228, - 179, - 188, - 247, + 0, + 100, 80, - 211, - 148, - 9, + 70, + 13, + 126, + 123, + 228, + 117, 64, - 94, - 104, - 94, - 69, - 127, + 121, + 8, + 228, + 129, + 68, + 240, + 149, + 80, + 11, + 199, + 60, + 247, + 37, 79, - 147, - 26, - 248, - 160, - 241, - 187, - 3, + 145, + 193, + 130, + 164, + 85, + 112, + 208, + 202, + 198, + 2, 0, 0, 0, @@ -2427,38 +2427,38 @@ 0, 0, 0, - 186, - 222, - 220, - 101, - 226, - 201, - 82, - 157, - 46, - 57, - 10, - 148, - 31, - 76, - 176, - 102, - 174, + 66, + 171, + 40, + 184, + 198, + 248, + 37, 80, - 162, - 243, - 250, + 178, + 91, + 133, + 208, + 36, + 170, + 67, + 205, + 191, + 10, + 49, + 13, + 172, + 27, 248, - 0, - 8, - 138, - 168, - 116, + 33, + 15, 228, - 254, - 14, - 76, - 200, + 163, + 61, + 156, + 207, + 73, + 153, 0, 0, 0, @@ -2476,11 +2476,11 @@ 0, 0, 0, - 56, - 111, - 132, - 8, - 177, + 124, + 204, + 61, + 163, + 2, 6, 0, 232, @@ -2499,38 +2499,38 @@ 0, 0, 0, - 169, - 116, - 83, - 179, - 30, - 83, - 164, - 114, - 56, - 178, - 138, - 6, - 113, - 37, + 154, + 63, + 153, + 219, + 190, + 60, + 107, + 172, + 161, + 128, + 223, 192, - 68, - 224, - 109, - 126, - 222, - 16, - 239, - 255, - 106, - 180, - 38, - 47, + 219, + 114, + 132, + 40, + 213, + 246, + 227, + 9, + 177, + 93, + 243, 81, - 34, - 62, - 5, - 39, + 126, + 145, + 127, + 241, + 139, + 224, + 194, + 8, 0, 0, 0, @@ -2539,38 +2539,38 @@ 0, 0, 0, - 8, - 194, - 126, - 8, + 45, + 177, + 156, + 231, + 178, 150, - 33, - 18, - 221, + 99, + 62, + 73, + 244, + 142, + 134, + 60, + 43, + 8, + 213, + 234, + 10, + 136, + 82, + 115, + 191, + 165, + 116, + 226, 219, - 196, - 212, - 251, - 93, - 192, - 21, - 159, - 211, - 117, - 148, - 9, - 74, - 141, - 153, - 130, - 94, - 96, + 10, 133, - 179, - 54, - 73, - 15, - 74, + 236, + 226, + 37, + 229, 96, 153, 242, @@ -2669,120 +2669,120 @@ 26, 16, 32, - 83, - 177, - 140, - 254, - 247, - 77, - 131, - 149, - 28, - 160, - 125, - 7, - 72, - 46, - 230, - 145, - 93, + 122, + 3, + 30, 157, - 220, - 116, - 168, + 52, + 195, + 36, + 160, + 76, + 194, + 183, + 16, 106, - 190, - 63, - 4, - 6, - 57, - 205, 36, - 172, - 145, - 144, 32, - 26, - 30, - 17, - 236, - 148, - 90, - 203, - 178, - 12, - 50, - 117, - 142, - 162, - 38, + 2, + 216, + 206, + 21, + 7, + 4, + 151, + 70, + 39, + 234, + 215, + 20, + 41, + 150, + 113, + 224, + 91, + 32, + 3, + 60, + 195, + 7, 177, - 144, - 254, - 153, - 185, - 52, - 160, - 238, + 11, + 189, + 198, + 69, + 193, + 118, + 101, + 132, + 133, + 243, + 255, + 102, + 108, + 2, + 133, + 7, + 68, + 189, + 150, + 46, 93, - 9, - 64, - 89, - 162, - 62, - 206, - 202, - 232, - 49, + 146, + 0, + 141, + 222, + 107, + 252, 48, - 174, - 9, + 173, + 72, + 33, + 196, + 123, + 102, + 115, + 188, + 207, + 117, + 48, + 189, + 20, 63, - 228, - 159, + 36, + 94, + 101, 110, - 193, - 170, - 116, - 63, - 210, - 118, - 97, - 229, - 201, - 73, - 155, - 242, - 213, - 180, - 22, - 131, - 235, - 219, + 96, + 96, + 218, 135, - 158, - 228, - 18, + 207, + 130, + 60, + 108, 28, - 253, - 221, - 123, - 126, - 245, + 33, + 226, + 4, + 178, + 120, + 120, + 61, + 127, + 163, 62, - 146, - 114, - 230, - 99, - 84, - 13, - 146, - 170, - 151, - 221, - 189, - 51, - 252, + 231, + 69, + 205, + 199, + 183, + 145, + 196, + 92, + 33, + 251, + 211, 11, 118, 97, @@ -2818,11 +2818,11 @@ 99, 112, 47, + 54, 53, - 53, - 50, + 52, + 51, 54, - 55, 47, 104, 116, @@ -2848,11 +2848,11 @@ 100, 112, 47, - 53, - 53, - 50, 54, - 57, + 53, + 52, + 51, + 56, 24, 47, 105, @@ -2873,11 +2873,11 @@ 100, 112, 47, + 54, 53, - 53, - 50, - 55, - 53, + 52, + 52, + 52, 0, 0, 0, @@ -2885,38 +2885,38 @@ 0, 0, 0, - 97, - 202, - 254, - 158, - 226, - 147, - 233, - 52, - 217, - 232, - 234, - 168, - 221, - 170, - 20, - 225, 139, - 81, - 115, - 8, - 242, - 35, - 145, - 171, - 245, - 145, - 96, + 224, + 68, 32, - 85, - 175, - 251, - 63, + 91, + 176, + 203, + 154, + 171, + 120, + 35, + 40, + 91, + 57, + 179, + 164, + 23, + 110, + 253, + 173, + 253, + 143, + 209, + 90, + 0, + 61, + 90, + 186, + 109, + 177, + 59, + 90, 0, 0, 0, @@ -2933,38 +2933,38 @@ 0, 0, 0, - 111, - 39, 18, - 222, - 47, - 141, - 116, - 93, - 65, - 120, - 49, - 246, - 53, - 240, - 104, - 24, - 8, - 131, - 2, - 130, - 36, - 94, - 229, - 173, - 144, - 149, - 191, - 25, - 23, - 108, - 111, + 5, + 29, + 220, + 228, + 186, + 162, + 227, 204, + 127, + 217, + 247, + 93, + 81, + 88, + 63, + 196, + 75, + 65, + 142, + 11, + 57, + 159, + 31, + 113, + 251, + 185, + 116, + 209, + 4, + 123, + 14, 232, 3, 0, @@ -2973,38 +2973,38 @@ 0, 0, 0, - 203, - 80, - 5, - 66, - 182, - 197, - 54, - 201, - 219, - 93, - 163, - 15, - 25, - 198, - 242, - 133, - 10, - 23, - 218, - 216, - 177, - 129, - 50, - 43, + 209, + 123, + 224, + 206, + 121, + 241, + 77, + 244, + 72, + 86, + 107, + 103, + 131, + 192, + 239, 101, - 250, - 128, - 147, - 57, - 45, + 12, + 50, + 118, + 14, + 142, + 183, + 157, + 157, + 157, + 178, + 187, + 220, + 115, + 108, + 181, 43, - 41, 1, 0, 0, @@ -3016,78 +3016,62 @@ 0, 0, 0, - 56, - 111, - 132, - 8, - 177, + 124, + 204, + 61, + 163, + 2, 6, 0, 0, - 92, - 165, - 189, - 208, - 85, - 1, - 0, - 161, - 32, - 121, - 162, - 33, - 90, - 5, - 0, + 174, + 210, 94, - 118, - 191, 232, - 91, - 184, - 114, - 7, - 182, - 23, - 238, - 109, - 155, - 142, - 93, - 221, - 178, - 171, - 78, - 227, - 153, - 98, - 159, - 24, - 165, - 201, - 13, - 36, - 100, - 37, - 105, - 46, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, + 170, 0, 0, + 145, + 108, + 209, + 118, + 87, + 87, + 5, 0, + 121, + 31, + 101, + 204, + 134, + 140, + 198, + 239, + 11, + 192, + 255, + 64, + 40, + 147, + 159, + 16, + 185, + 98, + 112, + 39, + 68, + 129, + 205, + 235, + 244, + 33, + 214, + 71, + 190, + 240, + 11, + 110, + 2, 0, 0, 0, @@ -3103,38 +3087,6 @@ 0, 0, 0, - 195, - 26, - 157, - 156, - 152, - 230, - 112, - 55, - 198, - 28, - 12, - 166, - 13, - 115, - 175, - 228, - 246, - 114, - 142, - 96, - 159, - 229, - 38, - 233, - 9, - 23, - 150, - 105, - 71, - 114, - 223, - 227, 0, 0, 0, @@ -3143,7 +3095,6 @@ 0, 0, 0, - 200, 0, 0, 0, @@ -3152,11 +3103,60 @@ 0, 0, 0, - 56, - 111, + 162, + 2, + 46, + 57, + 140, + 215, + 171, + 207, + 199, + 51, + 119, + 103, + 99, + 159, + 136, + 104, + 178, + 52, + 54, + 253, + 140, + 74, + 230, 132, - 8, - 177, + 248, + 104, + 75, + 249, + 252, + 181, + 229, + 232, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 200, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 124, + 204, + 61, + 163, + 2, 6, 0, 232, @@ -3175,38 +3175,38 @@ 0, 0, 0, - 247, - 53, - 237, - 130, - 93, - 12, - 217, - 118, - 223, - 124, - 29, - 29, - 216, - 27, - 171, - 113, - 211, - 82, - 134, - 121, + 251, 213, - 9, - 54, - 221, - 188, - 217, - 96, - 247, + 102, + 25, + 149, + 159, + 37, + 192, + 210, + 95, + 204, + 21, 18, - 146, - 243, - 57, + 42, + 226, + 5, + 226, + 152, + 81, + 144, + 191, + 110, + 76, + 51, + 233, + 213, + 87, + 45, + 246, + 101, + 58, + 130, 0, 0, 0, @@ -3215,38 +3215,38 @@ 0, 0, 0, - 89, - 64, - 182, - 78, - 178, - 151, - 32, - 234, - 12, - 53, - 212, - 158, - 227, - 213, - 153, - 179, - 71, - 120, - 121, - 214, - 139, - 126, - 101, - 41, - 4, - 178, - 54, - 237, + 50, + 72, + 42, + 34, + 159, + 131, + 186, + 206, + 45, + 164, + 201, + 11, + 77, + 217, + 156, + 138, + 115, + 6, + 58, + 106, + 141, + 220, + 91, 214, - 234, + 204, + 153, + 222, 216, - 138, + 112, + 100, + 145, + 42, 96, 173, 222, @@ -3345,120 +3345,120 @@ 88, 242, 32, - 101, - 41, + 97, + 138, + 198, + 62, + 136, + 198, + 103, + 175, + 249, 91, - 166, - 21, - 8, - 15, - 183, - 171, - 43, + 77, + 120, + 56, + 146, + 191, 105, + 25, + 87, + 27, + 118, + 59, 62, - 143, - 42, - 220, - 160, - 18, - 204, - 18, - 177, - 143, - 95, - 250, - 143, - 90, - 251, - 80, - 79, - 19, - 151, - 254, + 33, + 84, + 159, + 132, + 242, + 67, 253, + 50, + 9, + 132, 32, - 250, - 209, - 183, - 196, - 197, - 121, - 33, - 21, 211, + 127, + 23, + 124, + 68, + 158, + 122, + 141, + 69, + 188, + 41, + 144, + 117, + 211, + 169, 65, - 227, - 216, - 234, - 249, - 192, - 236, - 194, - 255, - 190, - 81, - 208, - 224, - 251, - 165, - 53, - 30, - 220, - 75, - 192, - 117, - 68, - 159, + 239, + 69, + 38, + 170, + 84, + 174, + 198, + 7, + 179, + 110, + 215, + 182, + 252, + 113, + 72, + 226, 48, - 131, + 133, + 8, + 105, + 153, + 110, 47, - 168, - 134, - 246, - 248, - 62, - 162, - 31, - 28, - 191, - 186, - 169, - 214, - 29, + 196, + 176, 44, - 57, - 33, - 25, + 252, + 140, + 171, + 99, 25, - 44, - 176, - 119, - 148, - 150, + 5, + 109, + 170, + 61, + 34, + 234, + 19, + 78, + 134, + 220, + 12, + 12, + 146, + 181, + 134, + 46, + 50, + 246, + 204, 83, - 118, - 177, - 138, - 121, - 73, - 214, - 93, - 173, + 195, + 216, + 58, + 47, + 246, + 133, + 52, 153, - 142, - 0, + 89, + 95, + 128, + 57, 13, - 99, - 3, - 2, - 6, - 80, - 65, - 227, - 213, - 201, - 148, + 156, 11, 118, 97, @@ -3494,11 +3494,11 @@ 99, 112, 47, + 54, 53, + 52, 53, - 50, - 56, - 55, + 54, 47, 104, 116, @@ -3524,11 +3524,11 @@ 100, 112, 47, + 54, 53, + 52, 53, - 50, 56, - 57, 24, 47, 105, @@ -3549,11 +3549,11 @@ 100, 112, 47, + 54, 53, - 53, - 50, - 57, - 53, + 52, + 54, + 52, 0, 0, 0, @@ -3561,38 +3561,38 @@ 0, 0, 0, - 93, - 94, - 172, - 116, - 57, - 179, - 239, - 207, - 144, - 27, - 132, - 104, - 105, - 24, - 250, - 86, - 59, - 116, - 175, - 56, - 192, - 191, - 240, - 188, - 164, - 84, - 48, - 8, + 121, + 245, + 173, + 214, + 62, + 45, + 78, 231, - 242, - 206, - 176, + 42, + 141, + 80, + 70, + 101, + 210, + 114, + 51, + 185, + 135, + 223, + 13, + 169, + 239, + 245, + 68, + 254, + 122, + 133, + 237, + 80, + 108, + 161, + 30, 0, 0, 0, @@ -3609,78 +3609,78 @@ 0, 0, 0, - 24, - 193, - 114, - 17, - 242, - 33, - 238, - 190, - 226, - 0, - 112, - 189, - 167, + 164, + 51, + 96, + 252, + 84, 166, - 20, - 99, - 106, - 37, - 13, - 77, - 9, + 231, + 126, + 125, + 69, + 141, + 222, + 212, + 230, + 206, + 158, + 145, + 216, + 89, 46, - 181, - 132, - 22, - 22, - 78, - 155, - 179, - 78, - 18, - 24, - 232, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 61, - 204, - 132, - 220, - 80, - 55, - 5, - 242, - 131, - 99, - 205, - 122, - 85, - 32, + 224, + 195, + 37, + 168, + 53, 214, + 209, + 133, + 68, + 191, + 142, + 226, 232, - 30, - 96, - 9, - 153, - 102, - 138, - 88, - 227, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 242, + 245, + 215, 89, - 211, - 37, - 226, - 170, - 230, - 165, - 66, + 82, + 128, + 97, + 158, + 1, + 156, + 124, + 176, + 4, + 137, + 192, + 182, + 113, + 144, + 74, + 11, + 72, + 130, + 17, + 145, + 107, + 150, + 212, + 219, + 236, + 228, + 205, + 29, 1, 0, 0, @@ -3692,62 +3692,62 @@ 0, 0, 0, - 56, - 111, - 132, - 8, - 177, + 124, + 204, + 61, + 163, + 2, 6, 0, 0, - 92, - 165, - 189, - 208, - 85, - 1, + 174, + 210, + 94, + 232, + 170, 0, - 161, - 32, - 121, - 162, - 33, - 90, + 0, + 145, + 108, + 209, + 118, + 87, + 87, 5, 0, - 164, + 60, + 50, + 180, + 43, + 227, + 162, + 219, + 29, + 125, + 221, 81, - 79, - 99, - 179, - 98, - 209, - 48, - 248, - 216, - 84, + 200, + 83, + 117, + 18, + 127, + 246, + 174, + 251, + 39, + 104, + 52, + 25, + 62, + 70, 158, - 220, - 28, - 231, - 147, - 44, - 7, - 34, - 225, - 38, - 13, - 252, - 13, - 81, - 21, - 225, - 182, - 32, - 21, - 135, 1, - 3, + 226, + 93, + 72, + 245, + 85, + 2, 0, 0, 0, @@ -3779,38 +3779,38 @@ 0, 0, 0, - 61, - 144, - 54, + 81, + 125, + 125, + 70, + 103, 63, - 188, - 84, - 183, - 232, - 59, - 187, + 184, + 12, + 3, + 228, + 100, + 158, + 86, + 236, 215, - 110, - 137, - 253, - 163, - 135, - 141, - 124, - 244, - 59, - 190, - 246, - 48, - 35, - 107, - 75, + 25, + 233, + 65, + 9, + 225, + 127, + 207, + 98, + 242, + 200, + 41, + 56, + 223, + 20, + 82, + 36, 144, - 145, - 128, - 78, - 72, - 92, 0, 0, 0, @@ -3828,11 +3828,11 @@ 0, 0, 0, - 56, - 111, - 132, - 8, - 177, + 124, + 204, + 61, + 163, + 2, 6, 0, 232, @@ -3851,38 +3851,38 @@ 0, 0, 0, - 56, - 61, - 226, - 138, - 104, - 93, - 45, - 197, - 22, - 164, - 57, - 149, - 214, - 114, - 56, - 102, - 209, + 49, + 246, + 218, + 38, + 205, + 194, + 217, + 99, + 178, + 200, + 79, 165, - 84, - 204, - 248, - 151, - 75, - 253, - 242, 209, - 2, - 115, - 134, - 154, - 217, - 70, + 164, + 114, + 99, + 171, + 118, + 230, + 130, + 90, + 255, + 202, + 41, + 223, + 145, + 76, + 62, + 88, + 164, + 241, + 120, 0, 0, 0, @@ -3891,38 +3891,38 @@ 0, 0, 0, - 15, - 243, - 126, - 19, - 80, - 94, - 217, - 7, - 217, - 8, + 69, + 228, + 93, + 189, + 144, + 86, + 66, + 204, + 44, + 169, + 195, 207, - 55, - 145, - 154, - 41, - 17, - 122, - 10, - 183, - 102, + 209, + 160, + 161, + 249, + 81, + 119, + 88, + 229, + 217, + 141, + 235, + 103, + 96, + 64, + 196, 147, - 17, - 242, - 110, - 21, - 77, - 255, - 190, - 73, - 46, - 138, - 93, + 64, + 200, + 178, + 103, 96, 179, 253, @@ -4021,120 +4021,120 @@ 116, 244, 32, - 54, - 9, - 111, - 246, - 41, - 152, - 154, + 44, + 195, + 142, + 100, + 204, + 221, + 210, + 56, + 220, + 159, 252, - 170, - 180, - 28, - 224, - 99, - 153, - 48, - 72, - 228, - 145, - 126, - 47, - 135, + 43, + 109, + 45, + 129, + 212, + 168, + 89, + 191, + 44, + 18, + 142, + 55, + 166, + 147, + 169, + 39, + 81, + 113, + 109, + 74, + 111, + 32, + 67, + 83, 247, - 206, - 187, - 229, - 63, - 51, - 41, - 58, - 126, + 195, + 31, + 24, + 188, + 165, + 86, + 175, + 68, + 17, 34, - 100, - 32, - 22, - 80, - 98, - 211, - 32, - 28, - 217, - 185, - 224, - 64, + 236, + 33, + 55, + 120, + 104, + 114, + 61, + 167, + 69, + 129, + 149, 36, - 2, - 136, + 40, + 216, + 145, + 186, + 240, + 203, + 190, + 48, + 181, + 111, + 79, + 167, + 197, + 9, + 154, + 150, + 224, + 28, + 60, + 46, + 8, + 148, + 63, 84, + 203, 153, - 1, - 84, - 230, - 250, - 131, - 229, - 53, - 253, - 219, + 87, + 15, + 26, + 86, + 208, + 145, + 204, + 145, + 25, 124, - 122, - 31, - 32, - 168, - 31, - 46, + 35, + 62, + 14, + 136, + 91, 231, - 48, - 167, - 36, - 95, - 91, - 231, - 215, - 230, - 126, - 189, - 151, - 25, - 9, - 73, - 51, - 246, - 206, - 167, - 172, - 17, - 4, - 217, - 222, - 123, - 225, - 162, - 176, - 231, - 17, - 237, - 115, - 158, - 51, - 23, - 222, - 35, - 116, - 242, - 80, 161, - 91, - 134, - 241, - 55, - 42, - 7, - 228, - 206, + 80, + 201, + 205, + 64, + 58, + 13, + 96, 245, + 185, + 36, + 46, + 134, + 189, 11, 118, 97, @@ -4170,11 +4170,11 @@ 99, 112, 47, + 54, 53, - 53, - 50, - 57, - 55, + 52, + 54, + 54, 47, 104, 116, @@ -4200,11 +4200,11 @@ 100, 112, 47, + 54, 53, - 53, - 50, - 57, - 57, + 52, + 54, + 56, 24, 47, 105, @@ -4225,11 +4225,11 @@ 100, 112, 47, + 54, 53, - 53, - 51, - 48, - 53, + 52, + 55, + 52, 0, 0, 0, @@ -4237,38 +4237,38 @@ 0, 0, 0, - 235, - 179, - 105, - 207, - 36, - 221, - 187, - 70, - 238, - 33, + 209, + 199, 154, - 254, - 246, - 183, - 177, + 78, + 21, + 110, + 135, + 195, + 67, + 136, + 35, + 94, + 39, + 97, + 239, + 158, + 2, + 153, + 53, + 161, + 61, 9, - 104, - 44, - 193, - 238, - 122, - 236, - 62, - 199, - 243, + 6, + 74, + 159, 148, - 112, - 79, - 189, - 153, - 68, - 49, + 70, + 72, + 180, + 122, + 44, + 178, 0, 0, 0, @@ -4285,38 +4285,38 @@ 0, 0, 0, - 179, - 221, - 122, - 59, - 55, - 201, - 79, + 38, + 175, + 8, + 245, + 39, + 20, + 18, 239, - 24, - 218, - 236, - 58, - 226, - 113, - 77, - 240, - 253, - 30, - 164, - 96, - 249, - 64, - 120, + 5, + 160, + 19, + 43, + 237, + 138, + 215, + 107, + 149, + 49, + 242, + 105, + 61, + 6, + 20, + 174, + 86, + 220, + 229, 145, - 186, - 57, - 164, - 79, - 39, - 28, - 176, - 72, + 50, + 170, + 76, + 138, 232, 3, 0, @@ -4325,38 +4325,38 @@ 0, 0, 0, - 29, - 249, + 26, + 73, + 49, + 169, 67, - 164, - 123, - 138, - 6, + 19, + 121, + 35, + 127, + 251, + 115, + 102, + 203, 11, - 45, - 207, - 2, - 237, - 185, - 30, - 13, - 130, + 73, + 57, + 227, + 115, + 5, + 39, + 92, + 71, + 87, + 245, + 250, + 108, 229, - 33, - 64, - 4, - 156, - 170, - 247, - 208, - 168, - 153, - 67, - 98, - 48, - 135, - 208, - 185, + 163, + 116, + 21, + 52, + 122, 1, 0, 0, @@ -4368,62 +4368,62 @@ 0, 0, 0, - 56, - 111, - 132, - 8, - 177, + 124, + 204, + 61, + 163, + 2, 6, 0, 0, - 92, - 165, - 189, - 208, - 85, - 1, + 174, + 210, + 94, + 232, + 170, 0, - 161, - 32, - 121, - 162, - 33, - 90, + 0, + 145, + 108, + 209, + 118, + 87, + 87, 5, 0, - 190, - 204, - 104, - 114, - 211, + 19, + 28, + 67, + 124, 172, - 212, - 0, - 156, - 48, - 171, - 213, - 25, - 195, - 190, - 126, - 215, - 235, - 80, - 248, - 222, - 203, - 117, - 16, - 134, - 58, + 129, + 201, + 135, + 94, + 72, 64, - 238, - 252, - 65, - 146, + 197, + 38, + 95, + 35, + 44, 43, - 3, + 75, + 225, + 178, + 139, + 236, + 218, + 45, + 144, + 227, + 8, + 251, + 114, + 45, + 40, + 137, + 2, 0, 0, 0, @@ -4455,38 +4455,38 @@ 0, 0, 0, - 213, - 21, - 71, - 19, - 243, - 146, - 139, - 123, - 244, - 60, - 220, - 212, - 11, - 201, - 18, - 95, - 226, + 225, + 151, + 122, + 183, + 140, + 80, 88, - 107, - 56, - 193, - 98, - 233, - 241, - 203, - 165, - 192, - 253, + 134, + 103, + 4, + 35, + 29, + 155, + 30, + 74, 213, - 8, - 238, - 31, + 228, + 35, + 178, + 125, + 105, + 167, + 234, + 254, + 209, + 95, + 150, + 138, + 239, + 111, + 38, + 232, 0, 0, 0, @@ -4504,11 +4504,11 @@ 0, 0, 0, - 56, - 111, - 132, - 8, - 177, + 124, + 204, + 61, + 163, + 2, 6, 0, 232, @@ -4527,38 +4527,38 @@ 0, 0, 0, - 188, - 16, - 251, - 56, - 48, - 249, - 56, - 85, - 197, - 190, - 210, - 84, - 232, - 49, - 249, - 44, - 59, - 38, - 195, - 10, - 157, - 140, - 152, - 218, - 163, - 86, - 229, - 89, - 68, - 253, - 36, - 155, + 119, + 115, + 238, + 13, + 243, + 22, + 28, + 78, + 108, + 60, + 101, + 25, + 123, + 138, + 116, + 103, + 87, + 57, + 235, + 83, + 123, + 185, + 5, + 43, + 108, + 250, + 199, + 194, + 8, + 58, + 14, + 13, 0, 0, 0, @@ -4567,38 +4567,38 @@ 0, 0, 0, - 210, - 97, - 218, - 35, - 110, - 84, - 230, - 212, - 68, - 151, - 3, + 255, + 42, + 54, + 155, + 16, + 100, + 224, + 39, + 217, + 65, + 114, + 0, 139, - 166, - 197, - 152, - 87, - 236, - 158, - 62, - 1, - 25, - 194, - 29, - 254, - 92, - 59, + 225, + 83, + 252, + 84, + 75, 243, - 114, - 155, - 55, - 37, - 193, + 235, + 17, + 199, + 41, + 252, + 146, + 124, + 26, + 180, + 181, + 181, + 29, + 244, 0, 0, 0, @@ -4608,38 +4608,38 @@ 0, 0, 0, - 49, - 22, - 112, - 182, - 45, - 165, - 30, - 181, - 253, - 7, - 140, - 143, - 160, - 44, - 4, - 207, - 155, - 59, - 143, - 30, - 11, - 129, + 245, + 64, + 131, + 228, + 230, + 202, + 193, + 136, + 58, + 201, + 134, + 167, + 174, + 61, + 63, + 171, + 27, + 171, 150, + 193, + 39, + 53, + 93, + 49, 184, - 120, - 218, - 44, - 130, - 213, - 80, - 62, - 240, + 198, + 180, + 117, + 20, + 160, + 225, + 139, 4, 0, 0, @@ -4648,38 +4648,38 @@ 0, 0, 0, - 136, - 109, - 166, - 116, - 47, - 73, - 243, - 234, - 205, - 28, - 33, - 147, - 249, - 90, - 136, - 131, - 97, - 13, - 48, - 193, - 142, + 100, 96, - 9, - 177, - 3, + 140, + 115, + 178, + 133, + 212, + 21, + 85, + 180, + 158, + 44, + 146, + 235, + 132, + 110, + 13, + 239, + 115, + 223, + 110, + 114, + 226, + 165, + 144, + 102, + 85, + 239, + 12, 249, - 121, - 92, - 245, - 84, - 60, - 237, + 109, + 45, 0, 0, 0, @@ -4688,38 +4688,38 @@ 0, 0, 0, - 158, - 215, - 123, - 250, - 241, - 176, - 30, - 81, - 128, - 135, - 200, - 4, - 143, - 13, - 77, - 253, - 9, - 45, + 171, 39, - 186, - 95, - 41, - 158, - 40, - 129, - 114, - 220, - 159, + 109, + 25, + 86, + 101, + 155, + 65, + 21, + 200, + 37, 226, - 255, - 15, - 212, + 115, + 169, + 182, + 74, + 60, + 111, + 254, + 140, + 247, + 230, + 222, + 63, + 45, + 45, + 35, + 196, + 16, + 111, + 145, + 85, 0, 0, 0, @@ -4729,38 +4729,38 @@ 0, 0, 0, - 178, - 53, - 96, - 237, + 254, + 222, + 88, + 194, + 222, + 164, + 236, + 45, + 117, + 125, + 80, + 122, + 1, + 119, + 21, + 186, + 58, + 42, + 210, + 122, + 75, + 254, + 158, + 92, 161, - 189, - 128, - 101, - 109, - 250, - 77, - 232, - 78, - 130, - 196, - 17, - 8, - 175, - 162, - 140, - 219, - 136, - 123, - 157, - 157, - 93, - 148, - 176, - 98, - 136, - 157, - 107, + 201, + 100, + 39, + 218, + 24, + 41, + 151, 0, 0, 0, @@ -4841,38 +4841,38 @@ 0, 0, 0, - 168, - 39, - 55, - 226, - 93, - 238, - 212, - 208, - 113, - 17, + 166, + 4, + 47, + 112, + 189, + 16, + 209, + 252, + 102, + 57, + 148, + 80, + 98, + 167, + 43, + 219, + 234, + 27, + 136, + 160, + 254, 187, - 15, - 37, - 138, - 190, - 0, - 62, - 233, - 236, - 152, - 253, - 39, - 36, - 227, - 180, - 208, - 51, - 59, - 231, - 117, - 225, - 84, + 150, + 197, + 7, + 70, + 7, + 202, + 220, + 47, + 159, + 89, 0, 0, 0, @@ -4923,46 +4923,46 @@ 0, 0, 0, - 25, - 118, - 102, - 211, + 83, + 125, + 6, + 216, 146, 1, 0, 0, - 81, - 202, - 247, - 222, - 99, - 100, - 118, - 216, - 129, - 151, - 106, - 147, - 217, - 85, - 216, + 36, + 82, + 30, + 65, + 183, 192, - 15, - 140, - 225, - 29, - 103, - 63, - 0, - 129, - 21, - 92, - 202, - 106, + 23, + 72, + 123, + 231, + 100, + 128, + 86, + 159, + 136, + 163, + 24, + 82, + 67, + 139, + 141, + 248, + 200, + 171, + 163, + 5, + 98, + 244, + 137, + 223, 150, - 85, - 113, - 22, + 206, 0, 0, 0, @@ -4977,7 +4977,7 @@ "owner": { "ObjectOwner": "0x0000000000000000000000000000000000000000000000000000000000000005" }, - "previous_transaction": "7gtSzcRCnPVpmESfZRpQaHVh65UfDPZZqwfcDjwKqj7U", + "previous_transaction": "8eZxmVup35tyyVdZ31sKB9av3iNMKuJrxZ8ouJ4SRWtu", "storage_rebate": 0 } ], @@ -4994,7 +4994,7 @@ } }, "has_public_transfer": false, - "version": 4, + "version": 3, "contents": [ 0, 0, @@ -5028,7 +5028,7 @@ 0, 0, 5, - 2, + 1, 0, 0, 0, @@ -5044,7 +5044,7 @@ "initial_shared_version": 1 } }, - "previous_transaction": "DpSZVwqohRzF7ASz7PMM8xL1ZkMnNvWMLJfjadt9ybE9", + "previous_transaction": "326n9ZcQDrJVxyFL8aWkknSmFahVxwpqZQ5q5ySmWrUy", "storage_rebate": 0 }, { @@ -5061,7 +5061,7 @@ "struct": { "address": "0000000000000000000000000000000000000000000000000000000000000003", "module": "iota_system_state_inner", - "name": "IotaSystemStateInnerV2", + "name": "IotaSystemStateV1", "type_args": [] } } @@ -5069,41 +5069,41 @@ } }, "has_public_transfer": false, - "version": 4, + "version": 3, "contents": [ - 91, - 137, - 14, - 175, - 42, - 188, - 250, - 42, - 185, - 11, - 119, - 184, - 230, - 243, - 213, - 216, + 106, + 242, + 162, + 183, + 202, 96, - 149, - 134, - 195, - 229, - 131, - 186, - 243, - 220, - 205, - 90, - 241, - 126, + 191, + 118, + 23, + 74, 223, - 72, - 209, - 2, + 211, + 233, + 196, + 149, + 127, + 142, + 147, + 119, + 89, + 96, + 49, + 130, + 249, + 180, + 108, + 127, + 108, + 95, + 25, + 198, + 210, + 1, 0, 0, 0, @@ -5111,7 +5111,7 @@ 0, 0, 0, - 3, + 2, 0, 0, 0, @@ -5127,7 +5127,7 @@ 0, 0, 0, - 2, + 1, 0, 0, 0, @@ -5135,87 +5135,87 @@ 0, 0, 0, - 235, - 80, - 81, - 188, - 82, + 57, + 250, + 115, + 22, + 182, + 11, + 178, + 229, + 253, + 205, + 92, + 179, + 236, + 134, + 160, + 75, 54, - 128, - 152, - 95, - 131, - 193, - 49, - 226, - 212, - 212, - 46, - 6, - 207, - 172, - 155, - 77, - 248, - 124, - 156, - 93, - 124, - 109, - 206, - 232, - 47, - 39, + 44, + 186, + 33, + 145, + 160, 137, + 160, + 136, + 5, + 12, + 185, + 38, + 134, + 120, + 155, 0, - 208, - 127, - 95, - 47, - 245, - 105, + 224, + 244, + 68, + 154, + 59, + 103, 43, 0, - 208, - 71, - 44, - 183, - 125, - 29, + 224, + 188, + 17, + 34, + 196, + 26, 0, 4, - 174, - 216, - 158, - 172, - 100, - 204, - 30, - 254, - 159, - 195, - 233, - 61, - 144, - 88, + 59, + 251, + 52, 173, - 213, - 244, - 156, - 198, - 75, - 12, - 232, - 218, - 177, - 54, - 182, + 111, + 69, + 44, + 97, + 173, + 211, + 105, 121, - 199, - 185, - 243, - 182, - 137, + 206, + 147, + 8, + 165, + 7, + 244, + 202, + 119, + 73, + 129, + 123, + 165, + 161, + 154, + 87, + 212, + 255, + 44, + 213, + 63, 96, 141, 207, @@ -5314,120 +5314,120 @@ 56, 212, 32, - 109, - 235, - 35, - 7, - 201, - 239, - 185, - 254, - 209, - 111, - 122, - 55, - 135, - 92, - 135, - 145, - 234, - 34, - 205, - 172, - 200, - 167, - 206, - 76, - 83, - 189, - 105, - 186, - 194, - 69, - 97, - 182, 32, - 233, - 229, - 74, - 177, + 38, 163, - 194, - 251, - 42, - 2, - 77, - 108, - 140, - 235, - 238, - 171, + 54, + 223, + 222, + 200, + 16, + 231, + 136, + 101, + 109, + 60, + 170, + 54, + 183, + 183, + 132, + 232, + 253, + 218, 17, - 178, - 173, - 55, - 71, - 146, - 50, - 124, - 82, - 10, - 10, - 129, 151, - 215, - 205, + 230, + 164, + 94, 212, - 237, - 48, - 133, - 10, - 155, - 203, - 47, - 247, - 198, - 115, - 43, - 222, - 83, + 132, + 90, + 230, + 7, + 98, + 32, + 217, + 53, + 60, + 49, + 54, + 152, + 131, + 119, + 1, + 32, + 5, + 215, + 206, + 234, + 120, + 214, + 210, + 148, + 142, + 129, + 161, + 106, + 254, + 253, + 73, 188, - 159, - 173, - 91, + 78, + 237, + 59, + 75, + 133, + 63, + 48, + 175, + 52, + 76, + 124, + 156, + 164, + 117, + 75, + 204, + 212, + 49, + 8, + 33, 96, - 225, + 102, + 254, + 60, + 113, + 252, + 79, + 3, + 66, + 110, + 30, + 211, + 234, + 248, + 46, + 26, + 12, 142, - 9, - 106, 136, - 182, - 107, - 125, - 168, - 83, - 123, - 49, - 185, + 104, + 199, + 247, + 129, + 48, 228, - 0, - 172, - 250, - 235, - 90, - 33, - 169, - 255, - 193, - 15, - 174, - 111, - 249, - 22, - 108, - 133, - 142, - 171, + 61, + 39, + 13, + 72, + 101, + 101, + 199, + 19, + 109, + 21, 11, 118, 97, @@ -5463,11 +5463,11 @@ 99, 112, 47, + 54, 53, - 53, - 50, - 55, - 55, + 52, + 52, + 54, 47, 104, 116, @@ -5493,11 +5493,11 @@ 100, 112, 47, + 54, 53, - 53, - 50, - 55, - 57, + 52, + 52, + 56, 24, 47, 105, @@ -5518,11 +5518,11 @@ 100, 112, 47, + 54, 53, + 52, 53, - 50, - 56, - 53, + 52, 0, 0, 0, @@ -5530,38 +5530,38 @@ 0, 0, 0, - 203, - 238, - 102, - 51, - 150, - 252, - 160, - 66, - 122, - 198, - 160, - 124, - 201, - 197, - 225, - 25, - 157, - 66, - 182, - 210, - 4, - 225, - 203, + 237, + 202, + 141, + 82, + 243, + 82, + 185, + 130, + 172, + 46, + 92, + 14, + 227, + 72, + 139, + 162, + 213, + 206, + 89, + 121, + 179, 214, - 0, - 223, - 240, - 182, - 73, - 222, - 163, - 201, + 64, + 241, + 40, + 30, + 200, + 224, + 136, + 215, + 39, + 57, 0, 0, 0, @@ -5578,145 +5578,145 @@ 0, 0, 0, - 97, - 221, - 158, - 52, - 171, - 9, - 5, - 134, - 63, - 50, - 83, - 248, - 184, - 8, - 206, - 72, - 100, - 138, - 246, - 112, - 12, - 199, - 158, - 228, - 46, - 40, - 45, + 74, + 247, + 153, 224, - 144, - 243, - 160, - 141, - 232, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 210, - 7, - 175, - 121, - 62, - 202, - 57, - 178, - 71, - 217, - 66, - 234, 143, - 76, - 127, - 97, - 57, - 85, - 68, - 60, - 84, - 148, - 47, - 76, - 83, - 76, - 253, - 91, - 64, - 161, - 158, - 165, - 1, + 124, + 199, + 167, + 208, + 50, + 229, + 166, + 53, + 141, + 230, + 155, + 237, + 8, + 69, + 247, + 162, + 221, + 120, + 65, + 215, + 137, + 47, + 111, + 156, + 51, + 80, + 173, + 232, + 3, 0, 0, 0, 0, 0, 0, + 15, + 179, + 7, + 220, + 99, + 116, + 11, + 43, + 34, + 99, + 124, + 173, + 183, + 91, + 122, + 153, + 83, + 227, + 216, + 174, + 143, + 123, + 179, + 93, + 16, + 223, + 139, + 50, + 20, + 184, + 146, + 41, + 1, 0, 0, 0, 0, - 244, - 17, - 203, - 109, - 95, - 7, 0, 0, - 10, - 120, - 28, - 185, 0, - 2, 0, - 73, - 5, - 86, - 4, - 171, - 92, - 5, 0, - 57, - 225, - 12, - 2, + 0, + 56, + 111, + 132, + 8, + 177, 6, - 198, - 95, - 52, - 34, - 245, + 0, + 0, + 92, + 165, + 189, + 208, + 85, + 1, + 0, + 161, + 32, + 121, + 162, + 33, + 90, 5, - 228, - 179, - 188, - 247, + 0, + 100, 80, - 211, - 148, - 9, + 70, + 13, + 126, + 123, + 228, + 117, 64, - 94, - 104, - 94, - 69, - 127, + 121, + 8, + 228, + 129, + 68, + 240, + 149, + 80, + 11, + 199, + 60, + 247, + 37, 79, - 147, - 26, - 248, - 160, - 241, - 187, - 4, + 145, + 193, + 130, + 164, + 85, + 112, + 208, + 202, + 198, + 3, 0, 0, 0, @@ -5748,38 +5748,38 @@ 0, 0, 0, - 186, - 222, - 220, - 101, - 226, - 201, - 82, - 157, - 46, - 57, - 10, - 148, - 31, - 76, - 176, - 102, - 174, + 66, + 171, + 40, + 184, + 198, + 248, + 37, 80, - 162, - 243, - 250, + 178, + 91, + 133, + 208, + 36, + 170, + 67, + 205, + 191, + 10, + 49, + 13, + 172, + 27, 248, - 0, - 8, - 138, - 168, - 116, + 33, + 15, 228, - 254, - 14, - 76, - 200, + 163, + 61, + 156, + 207, + 73, + 153, 0, 0, 0, @@ -5797,101 +5797,101 @@ 0, 0, 0, - 244, - 17, - 203, - 109, - 95, - 7, - 0, - 232, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 200, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 169, - 116, - 83, - 179, - 30, - 83, - 164, - 114, 56, - 178, - 138, + 111, + 132, + 8, + 177, 6, - 113, - 37, - 192, - 68, - 224, - 109, - 126, - 222, - 16, - 239, - 255, - 106, - 180, - 38, - 47, - 81, - 34, - 62, - 5, - 39, + 0, + 232, + 3, 0, 0, 0, 0, 0, 0, + 200, 0, 0, - 8, - 194, + 0, + 0, + 0, + 0, + 0, + 154, + 63, + 153, + 219, + 190, + 60, + 107, + 172, + 161, + 128, + 223, + 192, + 219, + 114, + 132, + 40, + 213, + 246, + 227, + 9, + 177, + 93, + 243, + 81, 126, + 145, + 127, + 241, + 139, + 224, + 194, 8, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 45, + 177, + 156, + 231, + 178, 150, - 33, - 18, - 221, + 99, + 62, + 73, + 244, + 142, + 134, + 60, + 43, + 8, + 213, + 234, + 10, + 136, + 82, + 115, + 191, + 165, + 116, + 226, 219, - 196, - 212, - 251, - 93, - 192, - 21, - 159, - 211, - 117, - 148, - 9, - 74, - 141, - 153, - 130, - 94, - 96, + 10, 133, - 179, - 54, - 73, - 15, - 74, + 236, + 226, + 37, + 229, 96, 153, 242, @@ -5990,120 +5990,120 @@ 26, 16, 32, - 83, - 177, - 140, - 254, - 247, - 77, - 131, - 149, - 28, - 160, - 125, - 7, - 72, - 46, - 230, - 145, - 93, + 122, + 3, + 30, 157, - 220, - 116, - 168, + 52, + 195, + 36, + 160, + 76, + 194, + 183, + 16, 106, - 190, - 63, - 4, - 6, - 57, - 205, 36, - 172, - 145, - 144, 32, - 26, - 30, - 17, - 236, - 148, - 90, - 203, - 178, - 12, - 50, - 117, - 142, - 162, - 38, - 177, - 144, - 254, - 153, - 185, - 52, - 160, - 238, - 93, - 9, - 64, - 89, - 162, - 62, + 2, + 216, 206, - 202, - 232, - 49, - 48, - 174, - 9, - 63, - 228, - 159, - 110, + 21, + 7, + 4, + 151, + 70, + 39, + 234, + 215, + 20, + 41, + 150, + 113, + 224, + 91, + 32, + 3, + 60, + 195, + 7, + 177, + 11, + 189, + 198, + 69, 193, - 170, - 116, - 63, - 210, 118, - 97, - 229, - 201, - 73, - 155, - 242, - 213, - 180, - 22, - 131, - 235, - 219, + 101, + 132, + 133, + 243, + 255, + 102, + 108, + 2, + 133, + 7, + 68, + 189, + 150, + 46, + 93, + 146, + 0, + 141, + 222, + 107, + 252, + 48, + 173, + 72, + 33, + 196, + 123, + 102, + 115, + 188, + 207, + 117, + 48, + 189, + 20, + 63, + 36, + 94, + 101, + 110, + 96, + 96, + 218, 135, - 158, - 228, - 18, + 207, + 130, + 60, + 108, 28, - 253, - 221, - 123, - 126, - 245, + 33, + 226, + 4, + 178, + 120, + 120, + 61, + 127, + 163, 62, - 146, - 114, - 230, - 99, - 84, - 13, - 146, - 170, - 151, - 221, - 189, - 51, - 252, + 231, + 69, + 205, + 199, + 183, + 145, + 196, + 92, + 33, + 251, + 211, 11, 118, 97, @@ -6139,11 +6139,11 @@ 99, 112, 47, + 54, 53, - 53, - 50, + 52, + 51, 54, - 55, 47, 104, 116, @@ -6169,11 +6169,11 @@ 100, 112, 47, - 53, - 53, - 50, 54, - 57, + 53, + 52, + 51, + 56, 24, 47, 105, @@ -6194,11 +6194,11 @@ 100, 112, 47, + 54, 53, - 53, - 50, - 55, - 53, + 52, + 52, + 52, 0, 0, 0, @@ -6206,210 +6206,127 @@ 0, 0, 0, - 97, - 202, - 254, - 158, - 226, - 147, - 233, - 52, - 217, - 232, - 234, - 168, - 221, - 170, - 20, - 225, 139, - 81, - 115, - 8, - 242, - 35, - 145, - 171, - 245, - 145, - 96, + 224, + 68, 32, - 85, - 175, - 251, - 63, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 196, - 9, - 0, - 0, - 0, - 0, - 0, - 0, - 111, - 39, - 18, - 222, - 47, - 141, - 116, - 93, - 65, - 120, - 49, - 246, - 53, - 240, - 104, - 24, - 8, - 131, - 2, - 130, - 36, - 94, - 229, - 173, - 144, - 149, - 191, - 25, - 23, - 108, - 111, - 204, - 232, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 203, - 80, - 5, - 66, - 182, - 197, - 54, - 201, - 219, - 93, - 163, - 15, - 25, - 198, - 242, - 133, - 10, - 23, - 218, - 216, - 177, - 129, - 50, - 43, - 101, - 250, - 128, - 147, - 57, - 45, - 43, - 41, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 244, - 17, + 91, + 176, 203, - 109, - 95, - 7, - 0, - 0, - 10, - 120, - 28, - 185, - 0, - 2, - 0, - 73, - 5, - 86, - 4, + 154, 171, - 92, - 5, - 0, - 94, - 118, - 191, - 232, + 120, + 35, + 40, 91, - 184, - 114, - 7, - 182, + 57, + 179, + 164, 23, - 238, + 110, + 253, + 173, + 253, + 143, + 209, + 90, + 0, + 61, + 90, + 186, 109, - 155, - 142, - 93, - 221, - 178, - 171, - 78, - 227, - 153, - 98, - 159, - 24, - 165, - 201, - 13, - 36, - 100, - 37, - 105, - 46, - 4, + 177, + 59, + 90, + 0, + 0, + 0, 0, 0, 0, 0, 0, + 196, + 9, 0, 0, 0, 0, 0, 0, + 18, + 5, + 29, + 220, + 228, + 186, + 162, + 227, + 204, + 127, + 217, + 247, + 93, + 81, + 88, + 63, + 196, + 75, + 65, + 142, + 11, + 57, + 159, + 31, + 113, + 251, + 185, + 116, + 209, + 4, + 123, + 14, + 232, + 3, 0, 0, 0, 0, 0, 0, + 209, + 123, + 224, + 206, + 121, + 241, + 77, + 244, + 72, + 86, + 107, + 103, + 131, + 192, + 239, + 101, + 12, + 50, + 118, + 14, + 142, + 183, + 157, + 157, + 157, + 178, + 187, + 220, + 115, + 108, + 181, + 43, + 1, 0, 0, 0, @@ -6420,42 +6337,62 @@ 0, 0, 0, + 56, + 111, + 132, + 8, + 177, + 6, 0, 0, + 92, + 165, + 189, + 208, + 85, + 1, 0, + 161, + 32, + 121, + 162, + 33, + 90, + 5, 0, - 195, - 26, - 157, - 156, - 152, - 230, - 112, - 55, + 121, + 31, + 101, + 204, + 134, + 140, 198, - 28, - 12, - 166, - 13, - 115, - 175, - 228, - 246, - 114, - 142, - 96, + 239, + 11, + 192, + 255, + 64, + 40, + 147, 159, - 229, - 38, - 233, - 9, - 23, - 150, - 105, + 16, + 185, + 98, + 112, + 39, + 68, + 129, + 205, + 235, + 244, + 33, + 214, 71, - 114, - 223, - 227, + 190, + 240, + 11, + 110, + 3, 0, 0, 0, @@ -6464,7 +6401,6 @@ 0, 0, 0, - 200, 0, 0, 0, @@ -6473,22 +6409,13 @@ 0, 0, 0, - 244, - 17, - 203, - 109, - 95, - 7, 0, - 232, - 3, 0, 0, 0, 0, 0, 0, - 200, 0, 0, 0, @@ -6496,38 +6423,49 @@ 0, 0, 0, - 247, - 53, - 237, - 130, - 93, - 12, - 217, - 118, - 223, - 124, - 29, - 29, - 216, - 27, + 0, + 162, + 2, + 46, + 57, + 140, + 215, 171, - 113, - 211, - 82, - 134, - 121, - 213, - 9, + 207, + 199, + 51, + 119, + 103, + 99, + 159, + 136, + 104, + 178, + 52, 54, - 221, - 188, - 217, - 96, - 247, - 18, - 146, - 243, - 57, + 253, + 140, + 74, + 230, + 132, + 248, + 104, + 75, + 249, + 252, + 181, + 229, + 232, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 200, + 0, 0, 0, 0, @@ -6535,39 +6473,101 @@ 0, 0, 0, + 56, + 111, + 132, + 8, + 177, + 6, 0, - 89, - 64, - 182, - 78, - 178, - 151, - 32, - 234, - 12, - 53, - 212, - 158, - 227, + 232, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 200, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 251, 213, - 153, - 179, - 71, - 120, - 121, - 214, - 139, - 126, + 102, + 25, + 149, + 159, + 37, + 192, + 210, + 95, + 204, + 21, + 18, + 42, + 226, + 5, + 226, + 152, + 81, + 144, + 191, + 110, + 76, + 51, + 233, + 213, + 87, + 45, + 246, 101, - 41, - 4, - 178, - 54, - 237, + 58, + 130, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 50, + 72, + 42, + 34, + 159, + 131, + 186, + 206, + 45, + 164, + 201, + 11, + 77, + 217, + 156, + 138, + 115, + 6, + 58, + 106, + 141, + 220, + 91, 214, - 234, + 204, + 153, + 222, 216, - 138, + 112, + 100, + 145, + 42, 96, 173, 222, @@ -6666,120 +6666,120 @@ 88, 242, 32, - 101, - 41, + 97, + 138, + 198, + 62, + 136, + 198, + 103, + 175, + 249, 91, - 166, - 21, - 8, - 15, - 183, - 171, - 43, + 77, + 120, + 56, + 146, + 191, 105, + 25, + 87, + 27, + 118, + 59, 62, - 143, - 42, - 220, - 160, - 18, - 204, - 18, - 177, - 143, - 95, - 250, - 143, - 90, - 251, - 80, - 79, - 19, - 151, - 254, + 33, + 84, + 159, + 132, + 242, + 67, 253, + 50, + 9, + 132, 32, - 250, - 209, - 183, - 196, - 197, - 121, - 33, - 21, 211, - 65, - 227, - 216, - 234, - 249, - 192, - 236, - 194, - 255, - 190, - 81, - 208, - 224, - 251, - 165, - 53, - 30, - 220, - 75, - 192, - 117, + 127, + 23, + 124, 68, - 159, + 158, + 122, + 141, + 69, + 188, + 41, + 144, + 117, + 211, + 169, + 65, + 239, + 69, + 38, + 170, + 84, + 174, + 198, + 7, + 179, + 110, + 215, + 182, + 252, + 113, + 72, + 226, 48, - 131, + 133, + 8, + 105, + 153, + 110, 47, - 168, + 196, + 176, + 44, + 252, + 140, + 171, + 99, + 25, + 5, + 109, + 170, + 61, + 34, + 234, + 19, + 78, + 134, + 220, + 12, + 12, + 146, + 181, 134, + 46, + 50, 246, - 248, - 62, - 162, - 31, - 28, - 191, - 186, - 169, - 214, - 29, - 44, - 57, - 33, - 25, - 25, - 44, - 176, - 119, - 148, - 150, + 204, 83, - 118, - 177, - 138, - 121, - 73, - 214, - 93, - 173, + 195, + 216, + 58, + 47, + 246, + 133, + 52, 153, - 142, - 0, + 89, + 95, + 128, + 57, 13, - 99, - 3, - 2, - 6, - 80, - 65, - 227, - 213, - 201, - 148, + 156, 11, 118, 97, @@ -6815,11 +6815,11 @@ 99, 112, 47, + 54, 53, + 52, 53, - 50, - 56, - 55, + 54, 47, 104, 116, @@ -6845,11 +6845,11 @@ 100, 112, 47, + 54, 53, + 52, 53, - 50, 56, - 57, 24, 47, 105, @@ -6870,11 +6870,11 @@ 100, 112, 47, + 54, 53, - 53, - 50, - 57, - 53, + 52, + 54, + 52, 0, 0, 0, @@ -6882,38 +6882,38 @@ 0, 0, 0, - 93, - 94, - 172, - 116, - 57, - 179, - 239, - 207, - 144, - 27, - 132, - 104, - 105, - 24, - 250, - 86, - 59, - 116, - 175, - 56, - 192, - 191, - 240, - 188, - 164, - 84, - 48, - 8, + 121, + 245, + 173, + 214, + 62, + 45, + 78, 231, - 242, - 206, - 176, + 42, + 141, + 80, + 70, + 101, + 210, + 114, + 51, + 185, + 135, + 223, + 13, + 169, + 239, + 245, + 68, + 254, + 122, + 133, + 237, + 80, + 108, + 161, + 30, 0, 0, 0, @@ -6930,38 +6930,38 @@ 0, 0, 0, - 24, - 193, - 114, - 17, - 242, - 33, - 238, - 190, - 226, - 0, - 112, - 189, - 167, + 164, + 51, + 96, + 252, + 84, 166, - 20, - 99, - 106, - 37, - 13, - 77, - 9, + 231, + 126, + 125, + 69, + 141, + 222, + 212, + 230, + 206, + 158, + 145, + 216, + 89, 46, - 181, - 132, - 22, - 22, - 78, - 155, - 179, - 78, - 18, - 24, + 224, + 195, + 37, + 168, + 53, + 214, + 209, + 133, + 68, + 191, + 142, + 226, 232, 3, 0, @@ -6970,38 +6970,38 @@ 0, 0, 0, - 61, - 204, - 132, - 220, - 80, - 55, - 5, 242, - 131, - 99, - 205, - 122, - 85, - 32, - 214, - 232, - 30, - 96, - 9, - 153, - 102, - 138, - 88, - 227, + 245, + 215, 89, - 211, - 37, - 226, - 170, - 230, - 165, - 66, + 82, + 128, + 97, + 158, + 1, + 156, + 124, + 176, + 4, + 137, + 192, + 182, + 113, + 144, + 74, + 11, + 72, + 130, + 17, + 145, + 107, + 150, + 212, + 219, + 236, + 228, + 205, + 29, 1, 0, 0, @@ -7013,62 +7013,62 @@ 0, 0, 0, - 244, - 17, - 203, - 109, - 95, - 7, - 0, - 0, - 10, - 120, - 28, - 185, + 56, + 111, + 132, + 8, + 177, + 6, 0, - 2, 0, - 73, - 5, - 86, - 4, - 171, 92, + 165, + 189, + 208, + 85, + 1, + 0, + 161, + 32, + 121, + 162, + 33, + 90, 5, 0, - 164, + 60, + 50, + 180, + 43, + 227, + 162, + 219, + 29, + 125, + 221, 81, - 79, - 99, - 179, - 98, - 209, - 48, - 248, - 216, - 84, + 200, + 83, + 117, + 18, + 127, + 246, + 174, + 251, + 39, + 104, + 52, + 25, + 62, + 70, 158, - 220, - 28, - 231, - 147, - 44, - 7, - 34, - 225, - 38, - 13, - 252, - 13, - 81, - 21, - 225, - 182, - 32, - 21, - 135, 1, - 4, + 226, + 93, + 72, + 245, + 85, + 3, 0, 0, 0, @@ -7100,38 +7100,38 @@ 0, 0, 0, - 61, - 144, - 54, + 81, + 125, + 125, + 70, + 103, 63, - 188, - 84, - 183, - 232, - 59, - 187, + 184, + 12, + 3, + 228, + 100, + 158, + 86, + 236, 215, - 110, - 137, - 253, - 163, - 135, - 141, - 124, - 244, - 59, - 190, - 246, - 48, - 35, - 107, - 75, + 25, + 233, + 65, + 9, + 225, + 127, + 207, + 98, + 242, + 200, + 41, + 56, + 223, + 20, + 82, + 36, 144, - 145, - 128, - 78, - 72, - 92, 0, 0, 0, @@ -7149,12 +7149,12 @@ 0, 0, 0, - 244, - 17, - 203, - 109, - 95, - 7, + 56, + 111, + 132, + 8, + 177, + 6, 0, 232, 3, @@ -7172,38 +7172,38 @@ 0, 0, 0, - 56, - 61, - 226, - 138, - 104, - 93, - 45, - 197, - 22, - 164, - 57, - 149, - 214, - 114, - 56, - 102, - 209, + 49, + 246, + 218, + 38, + 205, + 194, + 217, + 99, + 178, + 200, + 79, 165, - 84, - 204, - 248, - 151, - 75, - 253, - 242, 209, - 2, - 115, - 134, - 154, - 217, - 70, + 164, + 114, + 99, + 171, + 118, + 230, + 130, + 90, + 255, + 202, + 41, + 223, + 145, + 76, + 62, + 88, + 164, + 241, + 120, 0, 0, 0, @@ -7212,38 +7212,38 @@ 0, 0, 0, - 15, - 243, - 126, - 19, - 80, - 94, - 217, - 7, + 69, + 228, + 93, + 189, + 144, + 86, + 66, + 204, + 44, + 169, + 195, + 207, + 209, + 160, + 161, + 249, + 81, + 119, + 88, + 229, 217, - 8, - 207, - 55, - 145, - 154, - 41, - 17, - 122, - 10, - 183, - 102, + 141, + 235, + 103, + 96, + 64, + 196, 147, - 17, - 242, - 110, - 21, - 77, - 255, - 190, - 73, - 46, - 138, - 93, + 64, + 200, + 178, + 103, 96, 179, 253, @@ -7342,120 +7342,120 @@ 116, 244, 32, - 54, - 9, - 111, - 246, - 41, - 152, - 154, + 44, + 195, + 142, + 100, + 204, + 221, + 210, + 56, + 220, + 159, 252, - 170, - 180, - 28, - 224, - 99, - 153, - 48, - 72, - 228, - 145, - 126, - 47, - 135, + 43, + 109, + 45, + 129, + 212, + 168, + 89, + 191, + 44, + 18, + 142, + 55, + 166, + 147, + 169, + 39, + 81, + 113, + 109, + 74, + 111, + 32, + 67, + 83, 247, - 206, - 187, - 229, - 63, - 51, - 41, - 58, - 126, + 195, + 31, + 24, + 188, + 165, + 86, + 175, + 68, + 17, 34, - 100, - 32, - 22, - 80, - 98, - 211, - 32, - 28, - 217, - 185, - 224, - 64, + 236, + 33, + 55, + 120, + 104, + 114, + 61, + 167, + 69, + 129, + 149, 36, - 2, - 136, + 40, + 216, + 145, + 186, + 240, + 203, + 190, + 48, + 181, + 111, + 79, + 167, + 197, + 9, + 154, + 150, + 224, + 28, + 60, + 46, + 8, + 148, + 63, 84, + 203, 153, - 1, - 84, - 230, - 250, - 131, - 229, - 53, - 253, - 219, + 87, + 15, + 26, + 86, + 208, + 145, + 204, + 145, + 25, 124, - 122, - 31, - 32, - 168, - 31, - 46, - 231, - 48, - 167, - 36, - 95, + 35, + 62, + 14, + 136, 91, 231, - 215, - 230, - 126, - 189, - 151, - 25, - 9, - 73, - 51, - 246, - 206, - 167, - 172, - 17, - 4, - 217, - 222, - 123, - 225, - 162, - 176, - 231, - 17, - 237, - 115, - 158, - 51, - 23, - 222, - 35, - 116, - 242, - 80, 161, - 91, - 134, - 241, - 55, - 42, - 7, - 228, - 206, + 80, + 201, + 205, + 64, + 58, + 13, + 96, 245, + 185, + 36, + 46, + 134, + 189, 11, 118, 97, @@ -7491,11 +7491,11 @@ 99, 112, 47, + 54, 53, - 53, - 50, - 57, - 55, + 52, + 54, + 54, 47, 104, 116, @@ -7521,11 +7521,11 @@ 100, 112, 47, - 53, - 53, - 50, - 57, - 57, + 54, + 53, + 52, + 54, + 56, 24, 47, 105, @@ -7546,11 +7546,11 @@ 100, 112, 47, + 54, 53, - 53, - 51, - 48, - 53, + 52, + 55, + 52, 0, 0, 0, @@ -7558,38 +7558,38 @@ 0, 0, 0, - 235, - 179, - 105, - 207, - 36, - 221, - 187, - 70, - 238, - 33, + 209, + 199, 154, - 254, - 246, - 183, - 177, + 78, + 21, + 110, + 135, + 195, + 67, + 136, + 35, + 94, + 39, + 97, + 239, + 158, + 2, + 153, + 53, + 161, + 61, 9, - 104, - 44, - 193, - 238, - 122, - 236, - 62, - 199, - 243, + 6, + 74, + 159, 148, - 112, - 79, - 189, - 153, - 68, - 49, + 70, + 72, + 180, + 122, + 44, + 178, 0, 0, 0, @@ -7606,38 +7606,38 @@ 0, 0, 0, - 179, - 221, - 122, - 59, - 55, - 201, - 79, + 38, + 175, + 8, + 245, + 39, + 20, + 18, 239, - 24, - 218, - 236, - 58, - 226, - 113, - 77, - 240, - 253, - 30, - 164, - 96, - 249, - 64, - 120, + 5, + 160, + 19, + 43, + 237, + 138, + 215, + 107, + 149, + 49, + 242, + 105, + 61, + 6, + 20, + 174, + 86, + 220, + 229, 145, - 186, - 57, - 164, - 79, - 39, - 28, - 176, - 72, + 50, + 170, + 76, + 138, 232, 3, 0, @@ -7646,38 +7646,38 @@ 0, 0, 0, - 29, - 249, + 26, + 73, + 49, + 169, 67, - 164, - 123, - 138, - 6, + 19, + 121, + 35, + 127, + 251, + 115, + 102, + 203, 11, - 45, - 207, - 2, - 237, - 185, - 30, - 13, - 130, + 73, + 57, + 227, + 115, + 5, + 39, + 92, + 71, + 87, + 245, + 250, + 108, 229, - 33, - 64, - 4, - 156, - 170, - 247, - 208, - 168, - 153, - 67, - 98, - 48, - 135, - 208, - 185, + 163, + 116, + 21, + 52, + 122, 1, 0, 0, @@ -7689,62 +7689,62 @@ 0, 0, 0, - 244, - 17, - 203, - 109, - 95, - 7, - 0, - 0, - 10, - 120, - 28, - 185, + 56, + 111, + 132, + 8, + 177, + 6, 0, - 2, 0, - 73, - 5, - 86, - 4, - 171, 92, + 165, + 189, + 208, + 85, + 1, + 0, + 161, + 32, + 121, + 162, + 33, + 90, 5, 0, - 190, - 204, - 104, - 114, - 211, + 19, + 28, + 67, + 124, 172, - 212, - 0, - 156, - 48, - 171, - 213, - 25, - 195, - 190, - 126, - 215, - 235, - 80, - 248, - 222, - 203, - 117, - 16, - 134, - 58, + 129, + 201, + 135, + 94, + 72, 64, - 238, - 252, - 65, - 146, + 197, + 38, + 95, + 35, + 44, 43, - 4, + 75, + 225, + 178, + 139, + 236, + 218, + 45, + 144, + 227, + 8, + 251, + 114, + 45, + 40, + 137, + 3, 0, 0, 0, @@ -7776,38 +7776,38 @@ 0, 0, 0, - 213, - 21, - 71, - 19, - 243, - 146, - 139, - 123, - 244, - 60, - 220, - 212, - 11, - 201, - 18, - 95, - 226, + 225, + 151, + 122, + 183, + 140, + 80, 88, - 107, - 56, - 193, - 98, - 233, - 241, - 203, - 165, - 192, - 253, + 134, + 103, + 4, + 35, + 29, + 155, + 30, + 74, 213, - 8, - 238, - 31, + 228, + 35, + 178, + 125, + 105, + 167, + 234, + 254, + 209, + 95, + 150, + 138, + 239, + 111, + 38, + 232, 0, 0, 0, @@ -7825,12 +7825,12 @@ 0, 0, 0, - 244, - 17, - 203, - 109, - 95, - 7, + 56, + 111, + 132, + 8, + 177, + 6, 0, 232, 3, @@ -7848,38 +7848,38 @@ 0, 0, 0, - 188, - 16, - 251, - 56, - 48, - 249, - 56, - 85, - 197, - 190, - 210, - 84, - 232, - 49, - 249, - 44, - 59, - 38, - 195, - 10, - 157, - 140, - 152, - 218, - 163, - 86, - 229, - 89, - 68, - 253, - 36, - 155, + 119, + 115, + 238, + 13, + 243, + 22, + 28, + 78, + 108, + 60, + 101, + 25, + 123, + 138, + 116, + 103, + 87, + 57, + 235, + 83, + 123, + 185, + 5, + 43, + 108, + 250, + 199, + 194, + 8, + 58, + 14, + 13, 0, 0, 0, @@ -7888,38 +7888,38 @@ 0, 0, 0, - 210, - 97, - 218, - 35, - 110, - 84, - 230, - 212, - 68, - 151, - 3, + 255, + 42, + 54, + 155, + 16, + 100, + 224, + 39, + 217, + 65, + 114, + 0, 139, - 166, - 197, - 152, - 87, - 236, - 158, - 62, - 1, - 25, - 194, - 29, - 254, - 92, - 59, + 225, + 83, + 252, + 84, + 75, 243, - 114, - 155, - 55, - 37, - 193, + 235, + 17, + 199, + 41, + 252, + 146, + 124, + 26, + 180, + 181, + 181, + 29, + 244, 0, 0, 0, @@ -7929,38 +7929,38 @@ 0, 0, 0, - 49, - 22, - 112, - 182, - 45, - 165, - 30, - 181, - 253, - 7, - 140, - 143, - 160, - 44, - 4, - 207, - 155, - 59, - 143, - 30, - 11, - 129, + 245, + 64, + 131, + 228, + 230, + 202, + 193, + 136, + 58, + 201, + 134, + 167, + 174, + 61, + 63, + 171, + 27, + 171, 150, + 193, + 39, + 53, + 93, + 49, 184, - 120, - 218, - 44, - 130, - 213, - 80, - 62, - 240, + 198, + 180, + 117, + 20, + 160, + 225, + 139, 4, 0, 0, @@ -7969,38 +7969,38 @@ 0, 0, 0, - 136, - 109, - 166, - 116, - 47, - 73, - 243, - 234, - 205, - 28, - 33, - 147, - 249, - 90, - 136, - 131, - 97, - 13, - 48, - 193, - 142, + 100, 96, - 9, - 177, - 3, + 140, + 115, + 178, + 133, + 212, + 21, + 85, + 180, + 158, + 44, + 146, + 235, + 132, + 110, + 13, + 239, + 115, + 223, + 110, + 114, + 226, + 165, + 144, + 102, + 85, + 239, + 12, 249, - 121, - 92, - 245, - 84, - 60, - 237, + 109, + 45, 0, 0, 0, @@ -8009,38 +8009,38 @@ 0, 0, 0, - 158, - 215, - 123, - 250, - 241, - 176, - 30, - 81, - 128, - 135, - 200, - 4, - 143, - 13, - 77, - 253, - 9, - 45, + 171, 39, - 186, - 95, - 41, - 158, - 40, - 129, - 114, - 220, - 159, + 109, + 25, + 86, + 101, + 155, + 65, + 21, + 200, + 37, 226, - 255, - 15, - 212, + 115, + 169, + 182, + 74, + 60, + 111, + 254, + 140, + 247, + 230, + 222, + 63, + 45, + 45, + 35, + 196, + 16, + 111, + 145, + 85, 0, 0, 0, @@ -8050,38 +8050,38 @@ 0, 0, 0, - 178, - 53, - 96, - 237, + 254, + 222, + 88, + 194, + 222, + 164, + 236, + 45, + 117, + 125, + 80, + 122, + 1, + 119, + 21, + 186, + 58, + 42, + 210, + 122, + 75, + 254, + 158, + 92, 161, - 189, - 128, - 101, - 109, - 250, - 77, - 232, - 78, - 130, - 196, - 17, - 8, - 175, - 162, - 140, - 219, - 136, - 123, - 157, - 157, - 93, - 148, - 176, - 98, - 136, - 157, - 107, + 201, + 100, + 39, + 218, + 24, + 41, + 151, 0, 0, 0, @@ -8162,38 +8162,38 @@ 0, 0, 0, - 168, - 39, - 55, - 226, - 93, - 238, - 212, - 208, - 113, - 17, - 187, - 15, - 37, - 138, - 190, - 0, - 62, - 233, - 236, - 152, - 253, - 39, - 36, - 227, - 180, - 208, - 51, - 59, - 231, - 117, - 225, - 84, + 166, + 4, + 47, + 112, + 189, + 16, + 209, + 252, + 102, + 57, + 148, + 80, + 98, + 167, + 43, + 219, + 234, + 27, + 136, + 160, + 254, + 187, + 150, + 197, + 7, + 70, + 7, + 202, + 220, + 47, + 159, + 89, 0, 0, 0, @@ -8244,46 +8244,46 @@ 0, 0, 0, - 147, - 97, - 103, - 211, + 210, + 104, + 7, + 216, 146, 1, 0, 0, - 81, - 202, - 247, - 222, - 99, - 100, - 118, - 216, - 129, - 151, - 106, - 147, - 217, - 85, - 216, + 36, + 82, + 30, + 65, + 183, 192, - 15, - 140, - 225, - 29, - 103, - 63, - 0, - 129, - 21, - 92, - 202, - 106, + 23, + 72, + 123, + 231, + 100, + 128, + 86, + 159, + 136, + 163, + 24, + 82, + 67, + 139, + 141, + 248, + 200, + 171, + 163, + 5, + 98, + 244, + 137, + 223, 150, - 85, - 113, - 22, + 206, 0, 0, 0, @@ -8298,7 +8298,7 @@ "owner": { "ObjectOwner": "0x0000000000000000000000000000000000000000000000000000000000000005" }, - "previous_transaction": "DpSZVwqohRzF7ASz7PMM8xL1ZkMnNvWMLJfjadt9ybE9", + "previous_transaction": "326n9ZcQDrJVxyFL8aWkknSmFahVxwpqZQ5q5ySmWrUy", "storage_rebate": 0 }, { @@ -8306,73 +8306,169 @@ "Move": { "type_": "StakedIota", "has_public_transfer": true, - "version": 4, + "version": 3, "contents": [ - 66, + 15, + 240, + 36, + 200, + 226, + 13, + 113, + 188, + 151, + 98, + 189, + 133, + 39, + 114, + 83, + 101, + 18, + 88, + 68, + 96, + 185, + 32, + 236, 146, - 63, - 215, - 119, - 43, - 21, - 78, + 53, + 166, + 101, + 26, + 67, + 5, + 250, + 235, 209, + 123, + 224, + 206, + 121, + 241, + 77, + 244, + 72, + 86, + 107, + 103, + 131, + 192, + 239, + 101, + 12, + 50, 118, - 10, - 212, - 122, - 229, - 212, - 21, - 249, - 59, - 82, + 14, + 142, + 183, + 157, + 157, + 157, + 178, + 187, + 220, + 115, + 108, + 181, + 43, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14, + 208, + 231, + 124, + 3, + 0, + 0 + ] + } + }, + "owner": { + "AddressOwner": "0x2db19ce7b296633e49f48e863c2b08d5ea0a885273bfa574e2db0a85ece225e5" + }, + "previous_transaction": "326n9ZcQDrJVxyFL8aWkknSmFahVxwpqZQ5q5ySmWrUy", + "storage_rebate": 0 + }, + { + "data": { + "Move": { + "type_": "StakedIota", + "has_public_transfer": true, + "version": 3, + "contents": [ + 40, + 202, + 112, + 217, + 109, + 109, 156, - 144, - 83, - 247, - 144, + 205, + 135, + 25, + 51, + 46, 187, - 61, - 152, - 132, - 228, - 107, - 16, - 148, - 61, - 204, - 132, + 222, + 63, + 176, + 72, + 93, + 21, + 89, + 146, + 13, + 133, + 38, + 9, + 203, + 166, + 67, + 189, + 17, + 60, + 53, + 15, + 179, + 7, 220, - 80, - 55, - 5, - 242, - 131, 99, - 205, + 116, + 11, + 43, + 34, + 99, + 124, + 173, + 183, + 91, 122, - 85, - 32, - 214, - 232, - 30, - 96, - 9, 153, - 102, - 138, - 88, + 83, 227, - 89, - 211, - 37, - 226, - 170, - 230, - 165, - 66, - 3, + 216, + 174, + 143, + 123, + 179, + 93, + 16, + 223, + 139, + 50, + 20, + 184, + 146, + 41, + 2, 0, 0, 0, @@ -8392,83 +8488,68 @@ } }, "owner": { - "AddressOwner": "0x5940b64eb29720ea0c35d49ee3d599b3477879d68b7e652904b236edd6ead88a" + "AddressOwner": "0x3bfb34ad6f452c61add36979ce9308a507f4ca7749817ba5a19a57d4ff2cd53f" }, - "previous_transaction": "DpSZVwqohRzF7ASz7PMM8xL1ZkMnNvWMLJfjadt9ybE9", + "previous_transaction": "326n9ZcQDrJVxyFL8aWkknSmFahVxwpqZQ5q5ySmWrUy", "storage_rebate": 0 }, { "data": { "Move": { - "type_": "StakedIota", - "has_public_transfer": true, - "version": 4, + "type_": { + "Other": { + "address": "0000000000000000000000000000000000000000000000000000000000000002", + "module": "dynamic_field", + "name": "Field", + "type_args": [ + "u64", + { + "struct": { + "address": "0000000000000000000000000000000000000000000000000000000000000003", + "module": "staking_pool", + "name": "PoolTokenExchangeRate", + "type_args": [] + } + } + ] + } + }, + "has_public_transfer": false, + "version": 3, "contents": [ - 115, - 154, - 192, - 155, - 212, - 244, - 37, - 248, - 181, - 36, - 51, - 82, - 18, - 78, - 51, - 165, - 95, - 129, - 37, - 165, - 234, - 28, - 25, - 15, - 210, - 157, - 93, - 100, - 115, - 251, - 219, - 216, - 203, - 80, - 5, - 66, + 55, 182, - 197, - 54, - 201, - 219, - 93, 163, - 15, - 25, - 198, - 242, - 133, - 10, - 23, - 218, - 216, - 177, - 129, - 50, - 43, - 101, - 250, - 128, - 147, - 57, - 45, - 43, - 41, + 91, + 229, + 253, + 149, + 44, + 130, + 137, + 97, + 206, + 185, + 13, + 28, + 140, + 90, + 166, + 199, + 140, + 40, 3, + 84, + 7, + 115, + 234, + 137, + 138, + 249, + 124, + 14, + 221, + 2, 0, 0, 0, @@ -8477,20 +8558,28 @@ 0, 0, 0, - 14, - 208, - 231, - 124, - 3, + 56, + 111, + 132, + 8, + 177, + 6, 0, + 161, + 32, + 121, + 162, + 33, + 90, + 5, 0 ] } }, "owner": { - "AddressOwner": "0x08c27e08962112dddbc4d4fb5dc0159fd37594094a8d99825e6085b336490f4a" + "ObjectOwner": "0x3c32b42be3a2db1d7ddd51c85375127ff6aefb276834193e469e01e25d48f555" }, - "previous_transaction": "DpSZVwqohRzF7ASz7PMM8xL1ZkMnNvWMLJfjadt9ybE9", + "previous_transaction": "326n9ZcQDrJVxyFL8aWkknSmFahVxwpqZQ5q5ySmWrUy", "storage_rebate": 0 }, { @@ -8515,41 +8604,41 @@ } }, "has_public_transfer": false, - "version": 4, + "version": 3, "contents": [ - 136, - 179, - 83, - 143, - 69, - 54, - 164, + 142, + 231, + 82, + 115, + 210, + 106, + 132, + 40, 137, - 225, - 174, - 113, - 187, - 74, - 42, - 160, - 105, - 251, - 128, - 176, - 134, - 47, - 129, - 197, - 195, - 252, - 34, - 174, - 10, - 125, - 126, - 203, - 179, - 3, + 182, + 175, + 98, + 152, + 24, + 76, + 112, + 170, + 149, + 73, + 85, + 224, + 168, + 228, + 216, + 95, + 227, + 235, + 53, + 254, + 248, + 238, + 162, + 2, 0, 0, 0, @@ -8558,28 +8647,28 @@ 0, 0, 0, - 244, - 17, - 203, - 109, - 95, - 7, + 56, + 111, + 132, + 8, + 177, + 6, 0, - 73, - 5, - 86, - 4, - 171, - 92, + 161, + 32, + 121, + 162, + 33, + 90, 5, 0 ] } }, "owner": { - "ObjectOwner": "0xbecc6872d3acd4009c30abd519c3be7ed7eb50f8decb7510863a40eefc41922b" + "ObjectOwner": "0x131c437cac81c9875e4840c5265f232c2b4be1b28becda2d90e308fb722d2889" }, - "previous_transaction": "DpSZVwqohRzF7ASz7PMM8xL1ZkMnNvWMLJfjadt9ybE9", + "previous_transaction": "326n9ZcQDrJVxyFL8aWkknSmFahVxwpqZQ5q5ySmWrUy", "storage_rebate": 0 }, { @@ -8587,73 +8676,73 @@ "Move": { "type_": "StakedIota", "has_public_transfer": true, - "version": 4, + "version": 3, "contents": [ - 148, - 34, - 217, - 18, - 109, - 75, - 173, + 186, + 60, + 107, 121, - 91, - 73, - 77, - 56, - 13, - 225, + 233, + 24, + 94, + 249, + 190, + 4, + 213, + 102, + 149, + 57, + 122, + 144, 32, - 138, - 85, - 124, - 130, - 232, - 49, - 167, - 25, - 8, - 108, - 135, - 197, - 243, - 177, - 55, - 15, - 37, - 210, - 7, + 48, + 28, + 41, + 120, + 173, + 86, 175, - 121, - 62, - 202, - 57, - 178, - 71, - 217, - 66, - 234, - 143, - 76, - 127, + 201, + 186, + 171, + 98, + 15, + 218, + 25, + 137, + 242, + 245, + 215, + 89, + 82, + 128, 97, - 57, - 85, - 68, - 60, - 84, - 148, - 47, - 76, - 83, - 76, - 253, - 91, - 64, - 161, 158, - 165, - 3, + 1, + 156, + 124, + 176, + 4, + 137, + 192, + 182, + 113, + 144, + 74, + 11, + 72, + 130, + 17, + 145, + 107, + 150, + 212, + 219, + 236, + 228, + 205, + 29, + 2, 0, 0, 0, @@ -8673,9 +8762,9 @@ } }, "owner": { - "AddressOwner": "0xaed89eac64cc1efe9fc3e93d9058add5f49cc64b0ce8dab136b679c7b9f3b689" + "AddressOwner": "0x32482a229f83bace2da4c90b4dd99c8a73063a6a8ddc5bd6cc99ded87064912a" }, - "previous_transaction": "DpSZVwqohRzF7ASz7PMM8xL1ZkMnNvWMLJfjadt9ybE9", + "previous_transaction": "326n9ZcQDrJVxyFL8aWkknSmFahVxwpqZQ5q5ySmWrUy", "storage_rebate": 0 }, { @@ -8700,145 +8789,41 @@ } }, "has_public_transfer": false, - "version": 4, + "version": 3, "contents": [ - 154, - 127, - 32, - 31, - 132, - 12, - 90, - 156, - 60, - 32, - 25, - 130, - 51, - 102, - 178, - 189, - 32, - 255, - 207, - 144, - 118, - 123, - 124, - 58, - 92, - 20, - 35, - 205, - 174, - 237, - 28, - 114, - 3, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 244, - 17, - 203, - 109, - 95, - 7, - 0, - 73, - 5, - 86, + 191, + 224, + 72, + 221, + 47, 4, - 171, - 92, - 5, - 0 - ] - } - }, - "owner": { - "ObjectOwner": "0xa4514f63b362d130f8d8549edc1ce7932c0722e1260dfc0d5115e1b620158701" - }, - "previous_transaction": "DpSZVwqohRzF7ASz7PMM8xL1ZkMnNvWMLJfjadt9ybE9", - "storage_rebate": 0 - }, - { - "data": { - "Move": { - "type_": "StakedIota", - "has_public_transfer": true, - "version": 4, - "contents": [ - 187, - 62, - 79, - 225, - 161, - 167, - 73, - 120, - 143, - 170, - 226, - 21, - 112, - 118, 80, - 122, - 215, - 1, - 115, - 73, - 172, - 16, - 200, - 19, - 204, - 60, - 23, - 13, - 65, - 111, - 98, - 84, - 29, - 249, - 67, - 164, - 123, - 138, - 6, - 11, - 45, - 207, - 2, - 237, - 185, - 30, - 13, - 130, - 229, - 33, - 64, - 4, - 156, - 170, - 247, - 208, + 223, + 94, + 134, + 71, + 236, + 24, + 230, + 72, + 163, + 174, + 161, + 36, + 105, + 146, + 112, + 27, + 201, 168, - 153, - 67, - 98, - 48, - 135, - 208, - 185, + 81, 3, + 125, + 199, + 39, + 146, + 152, + 2, 0, 0, 0, @@ -8847,79 +8832,102 @@ 0, 0, 0, - 14, - 208, - 231, - 124, - 3, + 56, + 111, + 132, + 8, + 177, + 6, 0, + 161, + 32, + 121, + 162, + 33, + 90, + 5, 0 ] } }, "owner": { - "AddressOwner": "0x0ff37e13505ed907d908cf37919a29117a0ab7669311f26e154dffbe492e8a5d" + "ObjectOwner": "0x791f65cc868cc6ef0bc0ff4028939f10b96270274481cdebf421d647bef00b6e" }, - "previous_transaction": "DpSZVwqohRzF7ASz7PMM8xL1ZkMnNvWMLJfjadt9ybE9", + "previous_transaction": "326n9ZcQDrJVxyFL8aWkknSmFahVxwpqZQ5q5ySmWrUy", "storage_rebate": 0 }, { "data": { "Move": { - "type_": { - "Other": { - "address": "0000000000000000000000000000000000000000000000000000000000000002", - "module": "dynamic_field", - "name": "Field", - "type_args": [ - "u64", - { - "struct": { - "address": "0000000000000000000000000000000000000000000000000000000000000003", - "module": "staking_pool", - "name": "PoolTokenExchangeRate", - "type_args": [] - } - } - ] - } - }, - "has_public_transfer": false, - "version": 4, + "type_": "StakedIota", + "has_public_transfer": true, + "version": 3, "contents": [ + 193, + 61, + 149, + 198, + 192, + 159, + 114, + 12, + 76, + 102, + 113, + 132, + 102, + 48, + 147, + 184, + 136, + 152, + 227, + 49, 228, - 21, - 43, + 145, + 29, + 200, + 7, 113, - 197, - 97, - 41, - 98, + 151, + 147, + 111, + 71, 3, - 221, - 86, - 50, - 255, - 192, - 245, - 242, - 103, - 167, - 72, - 118, - 188, - 149, - 18, + 89, + 26, + 73, + 49, + 169, + 67, + 19, + 121, + 35, + 127, + 251, + 115, + 102, + 203, + 11, + 73, 57, + 227, + 115, + 5, + 39, + 92, + 71, 87, - 118, - 137, - 226, - 194, - 58, - 70, - 31, - 3, + 245, + 250, + 108, + 229, + 163, + 116, + 21, + 52, + 122, + 2, 0, 0, 0, @@ -8928,28 +8936,20 @@ 0, 0, 0, - 244, - 17, - 203, - 109, - 95, - 7, + 14, + 208, + 231, + 124, + 3, 0, - 73, - 5, - 86, - 4, - 171, - 92, - 5, 0 ] } }, "owner": { - "ObjectOwner": "0x5e76bfe85bb87207b617ee6d9b8e5dddb2ab4ee399629f18a5c90d246425692e" + "AddressOwner": "0x45e45dbd905642cc2ca9c3cfd1a0a1f9517758e5d98deb676040c49340c8b267" }, - "previous_transaction": "DpSZVwqohRzF7ASz7PMM8xL1ZkMnNvWMLJfjadt9ybE9", + "previous_transaction": "326n9ZcQDrJVxyFL8aWkknSmFahVxwpqZQ5q5ySmWrUy", "storage_rebate": 0 }, { @@ -8974,41 +8974,41 @@ } }, "has_public_transfer": false, - "version": 4, + "version": 3, "contents": [ - 228, - 69, - 120, - 82, + 252, + 67, + 96, + 254, + 39, + 224, + 104, + 47, + 104, + 250, + 108, + 183, 40, - 165, - 118, - 185, - 33, - 71, - 122, - 118, + 110, + 93, 19, - 145, - 156, - 15, - 245, - 129, - 174, - 194, - 255, - 132, + 107, + 54, + 172, + 99, + 55, 209, - 71, - 255, - 82, - 208, - 152, - 75, - 19, - 94, - 198, - 3, + 47, + 162, + 51, + 127, + 145, + 45, + 185, + 25, + 228, + 42, + 2, 0, 0, 0, @@ -9017,28 +9017,28 @@ 0, 0, 0, - 244, - 17, - 203, - 109, - 95, - 7, + 56, + 111, + 132, + 8, + 177, + 6, 0, - 73, - 5, - 86, - 4, - 171, - 92, + 161, + 32, + 121, + 162, + 33, + 90, 5, 0 ] } }, "owner": { - "ObjectOwner": "0x39e10c0206c65f3422f505e4b3bcf750d39409405e685e457f4f931af8a0f1bb" + "ObjectOwner": "0x6450460d7e7be475407908e48144f095500bc73cf7254f91c182a45570d0cac6" }, - "previous_transaction": "DpSZVwqohRzF7ASz7PMM8xL1ZkMnNvWMLJfjadt9ybE9", + "previous_transaction": "326n9ZcQDrJVxyFL8aWkknSmFahVxwpqZQ5q5ySmWrUy", "storage_rebate": 0 } ] diff --git a/crates/iota-light-client/example_config/534.chk b/crates/iota-light-client/example_config/534.chk deleted file mode 100644 index dedcc190a9390a385eb0edce5366f6c744def382..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15460 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 diff --git a/crates/iota-light-client/example_config/800.chk b/crates/iota-light-client/example_config/800.chk deleted file mode 100644 index 2270ea8e814f333072cf14d515e6b7834b587002..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14584 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 diff --git a/crates/iota-light-client/example_config/801.chk b/crates/iota-light-client/example_config/801.chk new file mode 100644 index 0000000000000000000000000000000000000000..d23a3fcbea8289903d50709c352cb93ae3ac21ba GIT binary patch literal 15452 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 (Committee, CheckpointData) { let mut d = PathBuf::from(env!("CARGO_MANIFEST_DIR")); - d.push("example_config/534.json"); + d.push("example_config/532.json"); let checkpoint: Envelope> = serde_json::from_reader(&fs::File::open(&d).unwrap()) @@ -174,7 +174,7 @@ mod tests { let committee = Committee::new(checkpoint.epoch().checked_add(1).unwrap(), prev_committee); let mut d = PathBuf::from(env!("CARGO_MANIFEST_DIR")); - d.push("example_config/800.chk"); + d.push("example_config/801.chk"); let full_checkpoint = read_full_checkpoint(&d).await.unwrap(); @@ -188,7 +188,7 @@ mod tests { extract_verified_effects_and_events( &full_checkpoint, &committee, - TransactionDigest::from_str("DpSZVwqohRzF7ASz7PMM8xL1ZkMnNvWMLJfjadt9ybE9").unwrap(), + TransactionDigest::from_str("Hero19xTN5BAmbkRVMG5HDAhrcp3ZiGiZwV2AFQSY1zX").unwrap(), ) .unwrap(); } diff --git a/crates/iota-light-client/src/utils.rs b/crates/iota-light-client/src/utils.rs index 6677df26bbe..80d1845f959 100644 --- a/crates/iota-light-client/src/utils.rs +++ b/crates/iota-light-client/src/utils.rs @@ -1,7 +1,6 @@ // Copyright (c) Mysten Labs, Inc. // Modifications Copyright (c) 2024 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 - use std::{ fs, io::{Read, Write}, diff --git a/crates/iota-light-client/tests/README.md b/crates/iota-light-client/tests/README.md index 86de7791206..2717ee5571a 100644 --- a/crates/iota-light-client/tests/README.md +++ b/crates/iota-light-client/tests/README.md @@ -2,6 +2,5 @@ To generate checkpoint snapshots, follow these steps: 1. `cargo run --release --bin iota start --force-regenesis --with-faucet` 2. Clear checkpoints.yaml file - make `checkpoints: []` -3. Move genesis.blob to example_config -4. Run `cargo run --bin generate_chk_snapshots` -5. Replace data in tests according to generated checkpoints. +3. Run `cargo run --bin generate_chk_snapshots` +4. Replace data in tests according to generated checkpoints. diff --git a/crates/iota-light-client/tests/check_proof.rs b/crates/iota-light-client/tests/check_proof.rs index 365ca40be1f..7af7206ad3f 100644 --- a/crates/iota-light-client/tests/check_proof.rs +++ b/crates/iota-light-client/tests/check_proof.rs @@ -64,7 +64,7 @@ async fn read_data(committee_seq: u64, seq: u64) -> (Committee, CheckpointData) #[tokio::test] async fn check_can_read_test_data() { - let (_committee, full_checkpoint) = read_data(534, 800).await; + let (_committee, full_checkpoint) = read_data(532, 801).await; assert!( full_checkpoint .checkpoint_summary @@ -75,7 +75,7 @@ async fn check_can_read_test_data() { #[tokio::test] async fn test_new_committee() { - let (committee, full_checkpoint) = read_data(534, 800).await; + let (committee, full_checkpoint) = read_data(532, 801).await; let new_committee_data = full_checkpoint .checkpoint_summary @@ -110,7 +110,7 @@ async fn test_new_committee() { // Fail if the new committee does not match the target of the proof #[tokio::test] async fn test_incorrect_new_committee() { - let (committee, full_checkpoint) = read_data(534, 800).await; + let (committee, full_checkpoint) = read_data(532, 801).await; let committee_proof = Proof { checkpoint_summary: full_checkpoint.checkpoint_summary.clone(), @@ -124,7 +124,7 @@ async fn test_incorrect_new_committee() { // Fail if the certificate is incorrect even if no proof targets are given #[tokio::test] async fn test_fail_incorrect_cert() { - let (_committee, full_checkpoint) = read_data(534, 800).await; + let (_committee, full_checkpoint) = read_data(532, 801).await; let new_committee_data = full_checkpoint .checkpoint_summary @@ -164,7 +164,7 @@ async fn test_fail_incorrect_cert() { #[tokio::test] async fn test_object_target_fail_no_data() { - let (committee, full_checkpoint) = read_data(534, 800).await; + let (committee, full_checkpoint) = read_data(532, 801).await; let sample_object: Object = full_checkpoint.transactions[0].output_objects[0].clone(); let sample_ref = sample_object.compute_object_reference(); @@ -180,7 +180,7 @@ async fn test_object_target_fail_no_data() { #[tokio::test] async fn test_object_target_success() { - let (committee, full_checkpoint) = read_data(534, 800).await; + let (committee, full_checkpoint) = read_data(532, 801).await; let sample_object: Object = full_checkpoint.transactions[0].output_objects[0].clone(); let sample_ref = sample_object.compute_object_reference(); @@ -193,7 +193,7 @@ async fn test_object_target_success() { #[tokio::test] async fn test_object_target_fail_wrong_object() { - let (committee, full_checkpoint) = read_data(534, 800).await; + let (committee, full_checkpoint) = read_data(532, 801).await; let sample_object: Object = full_checkpoint.transactions[0].output_objects[0].clone(); let wrong_object: Object = full_checkpoint.transactions[1].output_objects[1].clone(); @@ -214,7 +214,7 @@ async fn test_object_target_fail_wrong_object() { #[tokio::test] async fn test_event_target_fail_no_data() { - let (committee, full_checkpoint) = read_data(534, 800).await; + let (committee, full_checkpoint) = read_data(532, 801).await; let sample_event: Event = full_checkpoint.transactions[1] .events @@ -238,7 +238,7 @@ async fn test_event_target_fail_no_data() { #[tokio::test] async fn test_event_target_success() { - let (committee, full_checkpoint) = read_data(534, 800).await; + let (committee, full_checkpoint) = read_data(532, 801).await; let sample_event: Event = full_checkpoint.transactions[1] .events @@ -259,7 +259,7 @@ async fn test_event_target_success() { #[tokio::test] async fn test_event_target_fail_bad_event() { - let (committee, full_checkpoint) = read_data(534, 800).await; + let (committee, full_checkpoint) = read_data(532, 801).await; let sample_event: Event = full_checkpoint.transactions[1] .events From b9b92b681a394d20cb016c2f76040662c4240539 Mon Sep 17 00:00:00 2001 From: Hans Moog <3293976+hmoog@users.noreply.github.com> Date: Tue, 29 Oct 2024 13:11:37 +0000 Subject: [PATCH 10/55] cleanup(core-node): Replace handle_certificate_v2 and handle_certificate_v3 with a single method (#3591) * initial commit * removed more handle_certificate_v2 * cleaned up more code * addressed some linter remarks * addressed more linter remarks * more fixes * more fixes * addressed more linter remarks * addressed more linter remarks * more linter fixes * renames * more renames * fixed linter issues * fixed linter issues * autogenerated snapshots * Apply review suggestions + remove unused types. * Replace V3 prefixes with V1 in QuorumDriver types and SoftBundle endpoints. * Bring back V1 suffix * Bring back missed V1 suffix * Bring back missed V1 suffix again * Regenerated GraphQL auto-generated files. * Fixed missed rename * Fix a test * Fix missed rename * Revert "Regenerated GraphQL auto-generated files." This reverts commit 145b6cc015a35e133ec9f7bc7fdb9efc86096786. * Apply suggestions from code review Co-authored-by: muXxer * Rename effects -> signed_effects + fix typos --------- Co-authored-by: Hans Moog Co-authored-by: Piotr Macek <4007944+piotrm50@users.noreply.github.com> Co-authored-by: muXxer --- crates/iota-benchmark/src/lib.rs | 12 +-- crates/iota-core/src/authority_aggregator.rs | 30 +++--- crates/iota-core/src/authority_client.rs | 57 ++++------- crates/iota-core/src/authority_server.rs | 96 ++++++------------- crates/iota-core/src/quorum_driver/mod.rs | 8 +- crates/iota-core/src/safe_client.rs | 72 ++++---------- .../iota-core/src/test_authority_clients.rs | 95 ++++++------------ .../iota-core/src/transaction_orchestrator.rs | 4 +- .../unit_tests/authority_aggregator_tests.rs | 24 +++-- .../src/unit_tests/authority_tests.rs | 2 +- .../src/unit_tests/transaction_tests.rs | 65 ++++++++----- .../iota-core/src/validator_tx_finalizer.rs | 38 ++++---- .../tests/reconfiguration_tests.rs | 6 +- crates/iota-network/build.rs | 25 ++--- crates/iota-types/src/messages_grpc.rs | 64 ++++++++----- crates/iota-types/src/quorum_driver_types.rs | 13 +-- crates/test-cluster/src/lib.rs | 14 ++- 17 files changed, 255 insertions(+), 370 deletions(-) diff --git a/crates/iota-benchmark/src/lib.rs b/crates/iota-benchmark/src/lib.rs index e4845c2715e..065472823e7 100644 --- a/crates/iota-benchmark/src/lib.rs +++ b/crates/iota-benchmark/src/lib.rs @@ -54,7 +54,7 @@ use iota_types::{ gas_coin::GasCoin, iota_system_state::{IotaSystemStateTrait, iota_system_state_summary::IotaSystemStateSummary}, message_envelope::Envelope, - messages_grpc::{HandleCertificateResponseV2, TransactionStatus}, + messages_grpc::{HandleCertificateRequestV1, HandleCertificateResponseV1, TransactionStatus}, object::{Object, Owner}, programmable_transaction_builder::ProgrammableTransactionBuilder, quorum_driver_types::{QuorumDriverError, QuorumDriverResponse}, @@ -524,7 +524,7 @@ impl ValidatorProxy for LocalValidatorAggregatorProxy { let name = *name; futures.push(async move { client - .handle_certificate_v2(certificate, None) + .handle_certificate_v1(HandleCertificateRequestV1::new(certificate), None) .map(move |r| (r, name)) .await }); @@ -539,14 +539,14 @@ impl ValidatorProxy for LocalValidatorAggregatorProxy { auth_agg.metrics.inflight_certificate_requests.dec(); match response { // If all goes well, the validators reply with signed effects. - Ok(HandleCertificateResponseV2 { - signed_effects, + Ok(HandleCertificateResponseV1 { + signed_effects, events, - fastpath_input_objects: _, // unused field + .. // unused field }) => { let author = signed_effects.auth_sig().authority; transaction_effects = Some(signed_effects.data().clone()); - transaction_events = Some(events); + transaction_events = events; total_stake += self.committee.weight(&author); } diff --git a/crates/iota-core/src/authority_aggregator.rs b/crates/iota-core/src/authority_aggregator.rs index 5337bea6ec2..d7a3f8b6251 100644 --- a/crates/iota-core/src/authority_aggregator.rs +++ b/crates/iota-core/src/authority_aggregator.rs @@ -39,7 +39,7 @@ use iota_types::{ }, message_envelope::Message, messages_grpc::{ - HandleCertificateRequestV3, HandleCertificateResponseV3, LayoutGenerationOption, + HandleCertificateRequestV1, HandleCertificateResponseV1, LayoutGenerationOption, ObjectInfoRequest, TransactionInfoRequest, }, messages_safe_client::PlainTransactionInfoResponse, @@ -1545,7 +1545,7 @@ where #[instrument(level = "trace", skip_all)] pub async fn process_certificate( &self, - request: HandleCertificateRequestV3, + request: HandleCertificateRequestV1, client_addr: Option, ) -> Result { let state = ProcessCertificateState { @@ -1608,7 +1608,7 @@ where let req = if validators_to_sample.contains(&name) { request_ref } else { - HandleCertificateRequestV3 { + HandleCertificateRequestV1 { include_events: false, include_input_objects: false, include_output_objects: false, @@ -1618,17 +1618,17 @@ where }; client - .handle_certificate_v3(req, client_addr) - .instrument(trace_span!("handle_certificate_v3", authority =? concise_name)) + .handle_certificate_v1(req, client_addr) + .instrument(trace_span!("handle_certificate_v1", authority =? concise_name)) .await } else { client - .handle_certificate_v2(request_ref.certificate, client_addr) - .instrument(trace_span!("handle_certificate_v2", authority =? concise_name)) + .handle_certificate_v1(HandleCertificateRequestV1::new(request_ref.certificate).with_events(), client_addr) + .instrument(trace_span!("handle_certificate_v1", authority =? concise_name)) .await - .map(|response| HandleCertificateResponseV3 { - effects: response.signed_effects, - events: Some(response.events), + .map(|response| HandleCertificateResponseV1 { + signed_effects: response.signed_effects, + events: response.events, input_objects: None, output_objects: None, auxiliary_data: None, @@ -1755,17 +1755,17 @@ where Ok(result) } - /// Handles the `HandleCertificateResponseV2` variants. + /// Handles the `HandleCertificateResponseV1` variants. fn handle_process_certificate_response( committee: Arc, tx_digest: &TransactionDigest, state: &mut ProcessCertificateState, - response: IotaResult, + response: IotaResult, name: AuthorityName, ) -> IotaResult> { match response { - Ok(HandleCertificateResponseV3 { - effects: signed_effects, + Ok(HandleCertificateResponseV1 { + signed_effects, events, input_objects, output_objects, @@ -1860,7 +1860,7 @@ where let _cert_guard = GaugeGuard::acquire(&self.metrics.inflight_certificates); let response = self .process_certificate( - HandleCertificateRequestV3 { + HandleCertificateRequestV1 { certificate: cert.clone(), include_events: true, include_input_objects: false, diff --git a/crates/iota-core/src/authority_client.rs b/crates/iota-core/src/authority_client.rs index 82ace64486f..c8f212f7d1e 100644 --- a/crates/iota-core/src/authority_client.rs +++ b/crates/iota-core/src/authority_client.rs @@ -20,8 +20,8 @@ use iota_types::{ iota_system_state::IotaSystemState, messages_checkpoint::{CheckpointRequest, CheckpointResponse}, messages_grpc::{ - HandleCertificateRequestV3, HandleCertificateResponseV2, HandleCertificateResponseV3, - HandleSoftBundleCertificatesRequestV3, HandleSoftBundleCertificatesResponseV3, + HandleCertificateRequestV1, HandleCertificateResponseV1, + HandleSoftBundleCertificatesRequestV1, HandleSoftBundleCertificatesResponseV1, HandleTransactionResponse, ObjectInfoRequest, ObjectInfoResponse, SystemStateRequest, TransactionInfoRequest, TransactionInfoResponse, }, @@ -40,26 +40,19 @@ pub trait AuthorityAPI { client_addr: Option, ) -> Result; - /// Handles a `CertifiedTransaction` for this account. - async fn handle_certificate_v2( - &self, - certificate: CertifiedTransaction, - client_addr: Option, - ) -> Result; - /// Execute a certificate. - async fn handle_certificate_v3( + async fn handle_certificate_v1( &self, - request: HandleCertificateRequestV3, + request: HandleCertificateRequestV1, client_addr: Option, - ) -> Result; + ) -> Result; /// Execute a Soft Bundle with multiple certificates. - async fn handle_soft_bundle_certificates_v3( + async fn handle_soft_bundle_certificates_v1( &self, - request: HandleSoftBundleCertificatesRequestV3, + request: HandleSoftBundleCertificatesRequestV1, client_addr: Option, - ) -> Result; + ) -> Result; /// Handle Object information requests for this account. async fn handle_object_info_request( @@ -147,52 +140,34 @@ impl AuthorityAPI for NetworkAuthorityClient { .map_err(Into::into) } - /// Handles a `CertifiedTransaction` for this account. - async fn handle_certificate_v2( - &self, - certificate: CertifiedTransaction, - client_addr: Option, - ) -> Result { - let mut request = certificate.into_request(); - insert_metadata(&mut request, client_addr); - - let response = self - .client()? - .handle_certificate_v2(request) - .await - .map(tonic::Response::into_inner); - - response.map_err(Into::into) - } - - async fn handle_certificate_v3( + async fn handle_certificate_v1( &self, - request: HandleCertificateRequestV3, + request: HandleCertificateRequestV1, client_addr: Option, - ) -> Result { + ) -> Result { let mut request = request.into_request(); insert_metadata(&mut request, client_addr); let response = self .client()? - .handle_certificate_v3(request) + .handle_certificate_v1(request) .await .map(tonic::Response::into_inner); response.map_err(Into::into) } - async fn handle_soft_bundle_certificates_v3( + async fn handle_soft_bundle_certificates_v1( &self, - request: HandleSoftBundleCertificatesRequestV3, + request: HandleSoftBundleCertificatesRequestV1, client_addr: Option, - ) -> Result { + ) -> Result { let mut request = request.into_request(); insert_metadata(&mut request, client_addr); let response = self .client()? - .handle_soft_bundle_certificates_v3(request) + .handle_soft_bundle_certificates_v1(request) .await .map(tonic::Response::into_inner); diff --git a/crates/iota-core/src/authority_server.rs b/crates/iota-core/src/authority_server.rs index 6c6f12c8ae0..75ef3f41997 100644 --- a/crates/iota-core/src/authority_server.rs +++ b/crates/iota-core/src/authority_server.rs @@ -26,8 +26,8 @@ use iota_types::{ messages_checkpoint::{CheckpointRequest, CheckpointResponse}, messages_consensus::ConsensusTransaction, messages_grpc::{ - HandleCertificateRequestV3, HandleCertificateResponseV2, HandleCertificateResponseV3, - HandleSoftBundleCertificatesRequestV3, HandleSoftBundleCertificatesResponseV3, + HandleCertificateRequestV1, HandleCertificateResponseV1, + HandleSoftBundleCertificatesRequestV1, HandleSoftBundleCertificatesResponseV1, HandleTransactionResponse, ObjectInfoRequest, ObjectInfoResponse, SubmitCertificateResponse, SystemStateRequest, TransactionInfoRequest, TransactionInfoResponse, @@ -360,9 +360,9 @@ impl ValidatorService { pub async fn execute_certificate_for_testing( &self, cert: CertifiedTransaction, - ) -> Result, tonic::Status> { - let request = make_tonic_request_for_testing(cert); - self.handle_certificate_v2(request).await + ) -> Result, tonic::Status> { + let request = make_tonic_request_for_testing(HandleCertificateRequestV1::new(cert)); + self.handle_certificate_v1(request).await } /// Handles a `Transaction` request for benchmarking. @@ -465,7 +465,7 @@ impl ValidatorService { _include_auxiliary_data: bool, epoch_store: &Arc, wait_for_effects: bool, - ) -> Result<(Option>, Weight), tonic::Status> { + ) -> Result<(Option>, Weight), tonic::Status> { // Validate if cert can be executed // Fullnode does not serve handle_certificate call. fp_ensure!( @@ -519,8 +519,8 @@ impl ValidatorService { }; return Ok(( - Some(vec![HandleCertificateResponseV3 { - effects: signed_effects.into_inner(), + Some(vec![HandleCertificateResponseV1 { + signed_effects: signed_effects.into_inner(), events, input_objects: None, output_objects: None, @@ -646,8 +646,8 @@ impl ValidatorService { let signed_effects = self.state.sign_effects(effects, epoch_store)?; epoch_store.insert_tx_cert_sig(certificate.digest(), certificate.auth_sig())?; - Ok::<_, IotaError>(HandleCertificateResponseV3 { - effects: signed_effects.into_inner(), + Ok::<_, IotaError>(HandleCertificateResponseV1 { + signed_effects: signed_effects.into_inner(), events, input_objects, output_objects, @@ -701,51 +701,17 @@ impl ValidatorService { }) } - async fn handle_certificate_v2_impl( + async fn handle_certificate_v1_impl( &self, - request: tonic::Request, - ) -> WrappedServiceResponse { - let epoch_store = self.state.load_epoch_store_one_call_per_task(); - let certificate = request.into_inner(); - certificate.validity_check(epoch_store.protocol_config(), epoch_store.epoch())?; - - let span = error_span!("handle_certificate", tx_digest = ?certificate.digest()); - self.handle_certificates( - nonempty![certificate], - true, - false, - false, - false, - &epoch_store, - true, - ) - .instrument(span) - .await - .map(|(resp, spam_weight)| { - ( - tonic::Response::new( - resp.expect( - "handle_certificate should not return none with wait_for_effects=true", - ) - .remove(0) - .into(), - ), - spam_weight, - ) - }) - } - - async fn handle_certificate_v3_impl( - &self, - request: tonic::Request, - ) -> WrappedServiceResponse { + request: tonic::Request, + ) -> WrappedServiceResponse { let epoch_store = self.state.load_epoch_store_one_call_per_task(); let request = request.into_inner(); request .certificate .validity_check(epoch_store.protocol_config(), epoch_store.epoch())?; - let span = error_span!("handle_certificate_v3", tx_digest = ?request.certificate.digest()); + let span = error_span!("handle_certificate_v1", tx_digest = ?request.certificate.digest()); self.handle_certificates( nonempty![request.certificate], request.include_events, @@ -841,10 +807,10 @@ impl ValidatorService { Ok(()) } - async fn handle_soft_bundle_certificates_v3_impl( + async fn handle_soft_bundle_certificates_v1_impl( &self, - request: tonic::Request, - ) -> WrappedServiceResponse { + request: tonic::Request, + ) -> WrappedServiceResponse { let epoch_store = self.state.load_epoch_store_one_call_per_task(); let client_addr = if self.client_id_source.is_none() { self.get_client_ip_addr(&request, &ClientIdSource::SocketAddr) @@ -876,7 +842,7 @@ impl ValidatorService { .collect::>() .join(", ") ); - let span = error_span!("handle_soft_bundle_certificates_v3"); + let span = error_span!("handle_soft_bundle_certificates_v1"); self.handle_certificates( certificates, request.include_events, @@ -890,7 +856,7 @@ impl ValidatorService { .await .map(|(resp, spam_weight)| { ( - tonic::Response::new(HandleSoftBundleCertificatesResponseV3 { + tonic::Response::new(HandleSoftBundleCertificatesResponseV1 { responses: resp.unwrap_or_default(), }), spam_weight, @@ -1156,26 +1122,18 @@ impl Validator for ValidatorService { .unwrap() } - /// Handles a `CertifiedTransaction` request. - async fn handle_certificate_v2( - &self, - request: tonic::Request, - ) -> Result, tonic::Status> { - handle_with_decoration!(self, handle_certificate_v2_impl, request) - } - - async fn handle_certificate_v3( + async fn handle_certificate_v1( &self, - request: tonic::Request, - ) -> Result, tonic::Status> { - handle_with_decoration!(self, handle_certificate_v3_impl, request) + request: tonic::Request, + ) -> Result, tonic::Status> { + handle_with_decoration!(self, handle_certificate_v1_impl, request) } - async fn handle_soft_bundle_certificates_v3( + async fn handle_soft_bundle_certificates_v1( &self, - request: tonic::Request, - ) -> Result, tonic::Status> { - handle_with_decoration!(self, handle_soft_bundle_certificates_v3_impl, request) + request: tonic::Request, + ) -> Result, tonic::Status> { + handle_with_decoration!(self, handle_soft_bundle_certificates_v1_impl, request) } /// Handles an `ObjectInfoRequest` request. diff --git a/crates/iota-core/src/quorum_driver/mod.rs b/crates/iota-core/src/quorum_driver/mod.rs index 80070a9e201..8dc0a6112fb 100644 --- a/crates/iota-core/src/quorum_driver/mod.rs +++ b/crates/iota-core/src/quorum_driver/mod.rs @@ -25,7 +25,7 @@ use iota_types::{ base_types::{AuthorityName, ObjectRef, TransactionDigest}, committee::{Committee, EpochId, StakeUnit}, error::{IotaError, IotaResult}, - messages_grpc::HandleCertificateRequestV3, + messages_grpc::HandleCertificateRequestV1, messages_safe_client::PlainTransactionInfoResponse, quorum_driver_types::{ ExecuteTransactionRequestV1, QuorumDriverEffectsQueueResult, QuorumDriverError, @@ -492,7 +492,7 @@ where #[instrument(level = "trace", skip_all, fields(tx_digest = ?request.certificate.digest()))] pub(crate) async fn process_certificate( &self, - request: HandleCertificateRequestV3, + request: HandleCertificateRequestV1, client_addr: Option, ) -> Result> { let auth_agg = self.validators.load(); @@ -568,7 +568,7 @@ where .validators .load() .process_certificate( - HandleCertificateRequestV3 { + HandleCertificateRequestV1 { certificate: cert, include_events: true, include_input_objects: false, @@ -834,7 +834,7 @@ where let response = match quorum_driver .process_certificate( - HandleCertificateRequestV3 { + HandleCertificateRequestV1 { certificate: tx_cert.clone(), include_events: request.include_events, include_input_objects: request.include_input_objects, diff --git a/crates/iota-core/src/safe_client.rs b/crates/iota-core/src/safe_client.rs index 57b38aafedd..1929097797d 100644 --- a/crates/iota-core/src/safe_client.rs +++ b/crates/iota-core/src/safe_client.rs @@ -15,9 +15,9 @@ use iota_types::{ fp_ensure, iota_system_state::IotaSystemState, messages_grpc::{ - HandleCertificateRequestV3, HandleCertificateResponseV2, HandleCertificateResponseV3, - ObjectInfoRequest, ObjectInfoResponse, SystemStateRequest, TransactionInfoRequest, - TransactionStatus, VerifiedObjectInfoResponse, + HandleCertificateRequestV1, HandleCertificateResponseV1, ObjectInfoRequest, + ObjectInfoResponse, SystemStateRequest, TransactionInfoRequest, TransactionStatus, + VerifiedObjectInfoResponse, }, messages_safe_client::PlainTransactionInfoResponse, transaction::*, @@ -325,57 +325,21 @@ where Ok(response) } - fn verify_certificate_response_v2( + fn verify_certificate_response_v1( &self, digest: &TransactionDigest, - response: HandleCertificateResponseV2, - ) -> IotaResult { - let signed_effects = - self.check_signed_effects_plain(digest, response.signed_effects, None)?; - - Ok(HandleCertificateResponseV2 { + HandleCertificateResponseV1 { signed_effects, - events: response.events, - fastpath_input_objects: vec![], // unused field - }) - } - - /// Execute a certificate. - pub async fn handle_certificate_v2( - &self, - certificate: CertifiedTransaction, - client_addr: Option, - ) -> Result { - let digest = *certificate.digest(); - let _timer = self.metrics.handle_certificate_latency.start_timer(); - let response = self - .authority_client - .handle_certificate_v2(certificate, client_addr) - .await?; - - let verified = check_error!( - self.address, - self.verify_certificate_response_v2(&digest, response), - "Client error in handle_certificate" - )?; - Ok(verified) - } - - fn verify_certificate_response_v3( - &self, - digest: &TransactionDigest, - HandleCertificateResponseV3 { - effects, events, input_objects, output_objects, auxiliary_data, - }: HandleCertificateResponseV3, - ) -> IotaResult { - let effects = self.check_signed_effects_plain(digest, effects, None)?; + }: HandleCertificateResponseV1, + ) -> IotaResult { + let signed_effects = self.check_signed_effects_plain(digest, signed_effects, None)?; // Check Events - match (&events, effects.events_digest()) { + match (&events, signed_effects.events_digest()) { (None, None) | (None, Some(_)) => {} (Some(events), None) => { if !events.data.is_empty() { @@ -400,7 +364,7 @@ where // Check Input Objects if let Some(input_objects) = &input_objects { - let expected: HashMap<_, _> = effects + let expected: HashMap<_, _> = signed_effects .old_object_metadata() .into_iter() .map(|(object_ref, _owner)| (object_ref.0, object_ref)) @@ -423,7 +387,7 @@ where // Check Output Objects if let Some(output_objects) = &output_objects { - let expected: HashMap<_, _> = effects + let expected: HashMap<_, _> = signed_effects .all_changed_objects() .into_iter() .map(|(object_ref, _, _)| (object_ref.0, object_ref)) @@ -444,8 +408,8 @@ where } } - Ok(HandleCertificateResponseV3 { - effects, + Ok(HandleCertificateResponseV1 { + signed_effects, events, input_objects, output_objects, @@ -454,21 +418,21 @@ where } /// Execute a certificate. - pub async fn handle_certificate_v3( + pub async fn handle_certificate_v1( &self, - request: HandleCertificateRequestV3, + request: HandleCertificateRequestV1, client_addr: Option, - ) -> Result { + ) -> Result { let digest = *request.certificate.digest(); let _timer = self.metrics.handle_certificate_latency.start_timer(); let response = self .authority_client - .handle_certificate_v3(request, client_addr) + .handle_certificate_v1(request, client_addr) .await?; let verified = check_error!( self.address, - self.verify_certificate_response_v3(&digest, response), + self.verify_certificate_response_v1(&digest, response), "Client error in handle_certificate" )?; Ok(verified) diff --git a/crates/iota-core/src/test_authority_clients.rs b/crates/iota-core/src/test_authority_clients.rs index fc2d12898d3..bc17d9d2754 100644 --- a/crates/iota-core/src/test_authority_clients.rs +++ b/crates/iota-core/src/test_authority_clients.rs @@ -19,12 +19,12 @@ use iota_types::{ iota_system_state::IotaSystemState, messages_checkpoint::{CheckpointRequest, CheckpointResponse}, messages_grpc::{ - HandleCertificateRequestV3, HandleCertificateResponseV2, HandleCertificateResponseV3, - HandleSoftBundleCertificatesRequestV3, HandleSoftBundleCertificatesResponseV3, + HandleCertificateRequestV1, HandleCertificateResponseV1, + HandleSoftBundleCertificatesRequestV1, HandleSoftBundleCertificatesResponseV1, HandleTransactionResponse, ObjectInfoRequest, ObjectInfoResponse, SystemStateRequest, TransactionInfoRequest, TransactionInfoResponse, }, - transaction::{CertifiedTransaction, Transaction, VerifiedTransaction}, + transaction::{Transaction, VerifiedTransaction}, }; use crate::{ @@ -83,35 +83,11 @@ impl AuthorityAPI for LocalAuthorityClient { result } - async fn handle_certificate_v2( + async fn handle_certificate_v1( &self, - certificate: CertifiedTransaction, + request: HandleCertificateRequestV1, _client_addr: Option, - ) -> Result { - let state = self.state.clone(); - let fault_config = self.fault_config; - let request = HandleCertificateRequestV3 { - certificate, - include_events: true, - include_input_objects: false, - include_output_objects: false, - include_auxiliary_data: false, - }; - spawn_monitored_task!(Self::handle_certificate(state, request, fault_config)) - .await - .unwrap() - .map(|resp| HandleCertificateResponseV2 { - signed_effects: resp.effects, - events: resp.events.unwrap_or_default(), - fastpath_input_objects: vec![], - }) - } - - async fn handle_certificate_v3( - &self, - request: HandleCertificateRequestV3, - _client_addr: Option, - ) -> Result { + ) -> Result { let state = self.state.clone(); let fault_config = self.fault_config; spawn_monitored_task!(Self::handle_certificate(state, request, fault_config)) @@ -119,11 +95,11 @@ impl AuthorityAPI for LocalAuthorityClient { .unwrap() } - async fn handle_soft_bundle_certificates_v3( + async fn handle_soft_bundle_certificates_v1( &self, - _request: HandleSoftBundleCertificatesRequestV3, + _request: HandleSoftBundleCertificatesRequestV1, _client_addr: Option, - ) -> Result { + ) -> Result { unimplemented!() } @@ -186,9 +162,9 @@ impl LocalAuthorityClient { // transactions. async fn handle_certificate( state: Arc, - request: HandleCertificateRequestV3, + request: HandleCertificateRequestV1, fault_config: LocalAuthorityClientFaultConfig, - ) -> Result { + ) -> Result { if fault_config.fail_before_handle_confirmation { return Err(IotaError::GenericAuthority { error: "Mock error before handle_confirmation_transaction".to_owned(), @@ -241,8 +217,8 @@ impl LocalAuthorityClient { .then(|| state.get_transaction_output_objects(&signed_effects)) .and_then(Result::ok); - Ok(HandleCertificateResponseV3 { - effects: signed_effects, + Ok(HandleCertificateResponseV1 { + signed_effects, events, input_objects, output_objects, @@ -283,28 +259,19 @@ impl AuthorityAPI for MockAuthorityApi { unimplemented!(); } - /// Execute a certificate. - async fn handle_certificate_v2( + async fn handle_certificate_v1( &self, - _certificate: CertifiedTransaction, + _request: HandleCertificateRequestV1, _client_addr: Option, - ) -> Result { + ) -> Result { unimplemented!() } - async fn handle_certificate_v3( + async fn handle_soft_bundle_certificates_v1( &self, - _request: HandleCertificateRequestV3, + _request: HandleSoftBundleCertificatesRequestV1, _client_addr: Option, - ) -> Result { - unimplemented!() - } - - async fn handle_soft_bundle_certificates_v3( - &self, - _request: HandleSoftBundleCertificatesRequestV3, - _client_addr: Option, - ) -> Result { + ) -> Result { unimplemented!() } @@ -355,7 +322,7 @@ impl AuthorityAPI for MockAuthorityApi { #[derive(Clone)] pub struct HandleTransactionTestAuthorityClient { pub tx_info_resp_to_return: IotaResult, - pub cert_resp_to_return: IotaResult, + pub cert_resp_to_return: IotaResult, // If set, sleep for this duration before responding to a request. // This is useful in testing a timeout scenario. pub sleep_duration_before_responding: Option, @@ -374,30 +341,22 @@ impl AuthorityAPI for HandleTransactionTestAuthorityClient { self.tx_info_resp_to_return.clone() } - async fn handle_certificate_v2( + async fn handle_certificate_v1( &self, - _certificate: CertifiedTransaction, + _request: HandleCertificateRequestV1, _client_addr: Option, - ) -> Result { + ) -> Result { if let Some(duration) = self.sleep_duration_before_responding { tokio::time::sleep(duration).await; } self.cert_resp_to_return.clone() } - async fn handle_certificate_v3( - &self, - _request: HandleCertificateRequestV3, - _client_addr: Option, - ) -> Result { - unimplemented!() - } - - async fn handle_soft_bundle_certificates_v3( + async fn handle_soft_bundle_certificates_v1( &self, - _request: HandleSoftBundleCertificatesRequestV3, + _request: HandleSoftBundleCertificatesRequestV1, _client_addr: Option, - ) -> Result { + ) -> Result { unimplemented!() } @@ -451,7 +410,7 @@ impl HandleTransactionTestAuthorityClient { self.tx_info_resp_to_return = Err(IotaError::Unknown("".to_string())); } - pub fn set_cert_resp_to_return(&mut self, resp: HandleCertificateResponseV2) { + pub fn set_cert_resp_to_return(&mut self, resp: HandleCertificateResponseV1) { self.cert_resp_to_return = Ok(resp); } diff --git a/crates/iota-core/src/transaction_orchestrator.rs b/crates/iota-core/src/transaction_orchestrator.rs index c944bc6bb65..5dc3ae32188 100644 --- a/crates/iota-core/src/transaction_orchestrator.rs +++ b/crates/iota-core/src/transaction_orchestrator.rs @@ -150,7 +150,7 @@ impl TransactionOrchestrator where A: AuthorityAPI + Send + Sync + 'static + Clone, { - #[instrument(name = "tx_orchestrator_execute_transaction", level = "debug", skip_all, + #[instrument(name = "tx_orchestrator_execute_transaction_block", level = "debug", skip_all, fields( tx_digest = ?request.transaction.digest(), tx_type = ?request_type, @@ -211,7 +211,7 @@ where Ok((response, executed_locally)) } - // Utilize the handle_certificate_v3 validator api to request input/output + // Utilize the handle_certificate_v1 validator api to request input/output // objects #[instrument(name = "tx_orchestrator_execute_transaction_v1", level = "trace", skip_all, fields(tx_digest = ?request.transaction.digest()))] diff --git a/crates/iota-core/src/unit_tests/authority_aggregator_tests.rs b/crates/iota-core/src/unit_tests/authority_aggregator_tests.rs index 82477f93171..bfb2e944747 100644 --- a/crates/iota-core/src/unit_tests/authority_aggregator_tests.rs +++ b/crates/iota-core/src/unit_tests/authority_aggregator_tests.rs @@ -228,7 +228,10 @@ where A: AuthorityAPI + Send + Sync + Clone + 'static, { authority - .handle_certificate_v2(cert.clone(), Some(make_socket_addr())) + .handle_certificate_v1( + HandleCertificateRequestV1::new(cert.clone()), + Some(make_socket_addr()), + ) .await .unwrap() .signed_effects @@ -240,7 +243,10 @@ where A: AuthorityAPI + Send + Sync + Clone + 'static, { let result = authority - .handle_certificate_v2(cert.clone(), Some(make_socket_addr())) + .handle_certificate_v1( + HandleCertificateRequestV1::new(cert.clone()), + Some(make_socket_addr()), + ) .await; if result.is_err() { println!("Error in do cert {:?}", result.err()); @@ -306,7 +312,7 @@ async fn execute_transaction_with_fault_configs( set_local_client_config(&mut authorities, *index, *config); } - let request = HandleCertificateRequestV3 { + let request = HandleCertificateRequestV1 { certificate: cert.into_cert_for_testing(), include_events: true, include_input_objects: false, @@ -379,7 +385,7 @@ async fn test_quorum_map_and_reduce_timeout() { // Send request with a very small timeout to trigger timeout error authorities.timeouts.pre_quorum_timeout = Duration::from_nanos(0); authorities.timeouts.post_quorum_timeout = Duration::from_nanos(0); - let request = HandleCertificateRequestV3 { + let request = HandleCertificateRequestV1 { certificate: certificate.clone(), include_events: true, include_input_objects: false, @@ -851,7 +857,7 @@ async fn test_handle_certificate_response() { .unwrap(); agg.committee = Arc::new(committee_1); - let request = HandleCertificateRequestV3 { + let request = HandleCertificateRequestV1 { certificate: cert_epoch_0.clone(), include_events: true, include_input_objects: false, @@ -2504,10 +2510,12 @@ fn set_cert_response_with_certified_tx( ) { let effects = effects_with_tx(*cert.digest()); for (name, secret) in authority_keys { - let resp = iota_types::messages_grpc::HandleCertificateResponseV2 { + let resp = HandleCertificateResponseV1 { signed_effects: sign_tx_effects(effects.clone(), epoch, *name, secret), - events: TransactionEvents::default(), - fastpath_input_objects: vec![], + events: Some(TransactionEvents::default()), + input_objects: None, + output_objects: None, + auxiliary_data: None, }; clients.get_mut(name).unwrap().set_cert_resp_to_return(resp); } diff --git a/crates/iota-core/src/unit_tests/authority_tests.rs b/crates/iota-core/src/unit_tests/authority_tests.rs index e586e571822..0b92bcae267 100644 --- a/crates/iota-core/src/unit_tests/authority_tests.rs +++ b/crates/iota-core/src/unit_tests/authority_tests.rs @@ -4909,7 +4909,7 @@ async fn test_consensus_message_processed() { authority1.try_execute_for_test(&certificate).await.unwrap(); // now, on authority2, we send 0 or 1 consensus messages, then we either - // sequence and execute via effects or via handle_certificate_v2, then + // sequence and execute via effects or via handle_certificate_v1, then // send 0 or 1 consensus messages. let send_first = rng.gen_bool(0.5); if send_first { diff --git a/crates/iota-core/src/unit_tests/transaction_tests.rs b/crates/iota-core/src/unit_tests/transaction_tests.rs index 34804bc4210..fe4ca0bf23d 100644 --- a/crates/iota-core/src/unit_tests/transaction_tests.rs +++ b/crates/iota-core/src/unit_tests/transaction_tests.rs @@ -22,7 +22,7 @@ use iota_types::{ error::{IotaError, UserInputError}, iota_system_state::IOTA_SYSTEM_MODULE_NAME, messages_consensus::ConsensusDeterminedVersionAssignments, - messages_grpc::HandleSoftBundleCertificatesRequestV3, + messages_grpc::HandleSoftBundleCertificatesRequestV1, multisig::{MultiSig, MultiSigPublicKey}, signature::GenericSignature, transaction::{ @@ -61,6 +61,7 @@ macro_rules! assert_matches { use fastcrypto::traits::AggregateAuthenticator; use iota_types::{ digests::ConsensusCommitDigest, messages_consensus::ConsensusCommitPrologueV1, + messages_grpc::HandleCertificateRequestV1, programmable_transaction_builder::ProgrammableTransactionBuilder, }; @@ -432,13 +433,19 @@ async fn do_transaction_test_impl( let ct = CertifiedTransaction::new_from_data_and_sig(plain_tx.into_data(), cert_sig); let err = client - .handle_certificate_v2(ct.clone(), Some(socket_addr)) + .handle_certificate_v1( + HandleCertificateRequestV1::new(ct.clone()), + Some(socket_addr), + ) .await .unwrap_err(); err_check(&err); epoch_store.clear_signature_cache(); let err = client - .handle_certificate_v2(ct.clone(), Some(socket_addr)) + .handle_certificate_v1( + HandleCertificateRequestV1::new(ct.clone()), + Some(socket_addr), + ) .await .unwrap_err(); err_check(&err); @@ -448,8 +455,8 @@ async fn do_transaction_test_impl( if ct.contains_shared_object() { epoch_store.clear_signature_cache(); let err = client - .handle_soft_bundle_certificates_v3( - HandleSoftBundleCertificatesRequestV3 { + .handle_soft_bundle_certificates_v1( + HandleSoftBundleCertificatesRequestV1 { certificates: vec![ct.clone()], wait_for_effects: true, include_events: false, @@ -1445,7 +1452,9 @@ async fn test_very_large_certificate() { quorum_signature, ); - let res = client.handle_certificate_v2(cert, Some(socket_addr)).await; + let res = client + .handle_certificate_v1(HandleCertificateRequestV1::new(cert), Some(socket_addr)) + .await; assert!(res.is_err()); let err = res.err().unwrap(); // The resulting error should be a RpcError with a message length too large. @@ -1515,7 +1524,10 @@ async fn test_handle_certificate_errors() { let socket_addr = make_socket_addr(); let err = client - .handle_certificate_v2(ct.clone(), Some(socket_addr)) + .handle_certificate_v1( + HandleCertificateRequestV1::new(ct.clone()), + Some(socket_addr), + ) .await .unwrap_err(); assert_matches!(err, IotaError::WrongEpoch { @@ -1548,7 +1560,10 @@ async fn test_handle_certificate_errors() { .unwrap(); let err = client - .handle_certificate_v2(ct.clone(), Some(socket_addr)) + .handle_certificate_v1( + HandleCertificateRequestV1::new(ct.clone()), + Some(socket_addr), + ) .await .unwrap_err(); @@ -1569,7 +1584,10 @@ async fn test_handle_certificate_errors() { ) .unwrap(); let err = client - .handle_certificate_v2(ct.clone(), Some(socket_addr)) + .handle_certificate_v1( + HandleCertificateRequestV1::new(ct.clone()), + Some(socket_addr), + ) .await .unwrap_err(); @@ -1591,7 +1609,10 @@ async fn test_handle_certificate_errors() { .unwrap(); let err = client - .handle_certificate_v2(ct.clone(), Some(socket_addr)) + .handle_certificate_v1( + HandleCertificateRequestV1::new(ct.clone()), + Some(socket_addr), + ) .await .unwrap_err(); @@ -1722,8 +1743,8 @@ async fn test_handle_soft_bundle_certificates() { certificates.push(cert.into()); } let responses = client - .handle_soft_bundle_certificates_v3( - HandleSoftBundleCertificatesRequestV3 { + .handle_soft_bundle_certificates_v1( + HandleSoftBundleCertificatesRequestV1 { certificates, wait_for_effects: true, include_events: false, @@ -1849,8 +1870,8 @@ async fn test_handle_soft_bundle_certificates_errors() { // Case 0: submit an empty soft bundle. { let response = client - .handle_soft_bundle_certificates_v3( - HandleSoftBundleCertificatesRequestV3 { + .handle_soft_bundle_certificates_v1( + HandleSoftBundleCertificatesRequestV1 { certificates: vec![], wait_for_effects: true, include_events: false, @@ -1897,8 +1918,8 @@ async fn test_handle_soft_bundle_certificates_errors() { certificates.push(signed_tx_into_certificate(signed).await.into()); } let response = client - .handle_soft_bundle_certificates_v3( - HandleSoftBundleCertificatesRequestV3 { + .handle_soft_bundle_certificates_v1( + HandleSoftBundleCertificatesRequestV1 { certificates, wait_for_effects: true, include_events: false, @@ -1940,8 +1961,8 @@ async fn test_handle_soft_bundle_certificates_errors() { ); let signed = to_sender_signed_transaction(data, &senders[5].1); let response = client - .handle_soft_bundle_certificates_v3( - HandleSoftBundleCertificatesRequestV3 { + .handle_soft_bundle_certificates_v1( + HandleSoftBundleCertificatesRequestV1 { certificates: vec![signed_tx_into_certificate(signed).await.into()], wait_for_effects: true, include_events: false, @@ -2024,8 +2045,8 @@ async fn test_handle_soft_bundle_certificates_errors() { signed_tx_into_certificate(signed).await }; let response = client - .handle_soft_bundle_certificates_v3( - HandleSoftBundleCertificatesRequestV3 { + .handle_soft_bundle_certificates_v1( + HandleSoftBundleCertificatesRequestV1 { certificates: vec![cert0.into(), cert1.into()], wait_for_effects: true, include_events: false, @@ -2110,8 +2131,8 @@ async fn test_handle_soft_bundle_certificates_errors() { send_batch_consensus_no_execution(&authority, &vec![cert0.clone(), cert1.clone()], true) .await; let response = client - .handle_soft_bundle_certificates_v3( - HandleSoftBundleCertificatesRequestV3 { + .handle_soft_bundle_certificates_v1( + HandleSoftBundleCertificatesRequestV1 { certificates: vec![cert0.into(), cert1.into()], wait_for_effects: true, include_events: false, diff --git a/crates/iota-core/src/validator_tx_finalizer.rs b/crates/iota-core/src/validator_tx_finalizer.rs index 12a2ad27a80..128e85c8df3 100644 --- a/crates/iota-core/src/validator_tx_finalizer.rs +++ b/crates/iota-core/src/validator_tx_finalizer.rs @@ -291,15 +291,15 @@ mod tests { iota_system_state::IotaSystemState, messages_checkpoint::{CheckpointRequest, CheckpointResponse}, messages_grpc::{ - HandleCertificateRequestV3, HandleCertificateResponseV2, HandleCertificateResponseV3, - HandleSoftBundleCertificatesRequestV3, HandleSoftBundleCertificatesResponseV3, + HandleCertificateRequestV1, HandleCertificateResponseV1, + HandleSoftBundleCertificatesRequestV1, HandleSoftBundleCertificatesResponseV1, HandleTransactionResponse, ObjectInfoRequest, ObjectInfoResponse, SystemStateRequest, TransactionInfoRequest, TransactionInfoResponse, }, object::Object, transaction::{ - CertifiedTransaction, SignedTransaction, Transaction, VerifiedCertificate, - VerifiedSignedTransaction, VerifiedTransaction, + SignedTransaction, Transaction, VerifiedCertificate, VerifiedSignedTransaction, + VerifiedTransaction, }, utils::to_sender_signed_transaction, }; @@ -336,17 +336,17 @@ mod tests { .await } - async fn handle_certificate_v2( + async fn handle_certificate_v1( &self, - certificate: CertifiedTransaction, + request: HandleCertificateRequestV1, _client_addr: Option, - ) -> Result { + ) -> Result { let epoch_store = self.authority.epoch_store_for_testing(); let (effects, _) = self .authority .try_execute_immediately( &VerifiedExecutableTransaction::new_from_certificate( - VerifiedCertificate::new_unchecked(certificate), + VerifiedCertificate::new_unchecked(request.certificate), ), None, &epoch_store, @@ -360,26 +360,20 @@ mod tests { .authority .sign_effects(effects, &epoch_store)? .into_inner(); - Ok(HandleCertificateResponseV2 { + Ok(HandleCertificateResponseV1 { signed_effects, - events, - fastpath_input_objects: vec![], + events: Some(events), + input_objects: None, + output_objects: None, + auxiliary_data: None, }) } - async fn handle_certificate_v3( + async fn handle_soft_bundle_certificates_v1( &self, - _request: HandleCertificateRequestV3, + _request: HandleSoftBundleCertificatesRequestV1, _client_addr: Option, - ) -> Result { - unimplemented!() - } - - async fn handle_soft_bundle_certificates_v3( - &self, - _request: HandleSoftBundleCertificatesRequestV3, - _client_addr: Option, - ) -> Result { + ) -> Result { unimplemented!() } diff --git a/crates/iota-e2e-tests/tests/reconfiguration_tests.rs b/crates/iota-e2e-tests/tests/reconfiguration_tests.rs index 00892c12652..9bc0ee84c98 100644 --- a/crates/iota-e2e-tests/tests/reconfiguration_tests.rs +++ b/crates/iota-e2e-tests/tests/reconfiguration_tests.rs @@ -27,6 +27,7 @@ use iota_types::{ iota_system_state_summary::get_validator_by_pool_id, }, message_envelope::Message, + messages_grpc::HandleCertificateRequestV1, transaction::{TransactionDataAPI, TransactionExpiration, VerifiedTransaction}, }; use rand::rngs::OsRng; @@ -182,7 +183,10 @@ async fn reconfig_with_revert_end_to_end_test() { .get_client(&authorities[reverting_authority_idx].with(|node| node.state().name)) .unwrap(); client - .handle_certificate_v2(cert.clone(), None) + .handle_certificate_v1( + HandleCertificateRequestV1::new(cert.clone()).with_events(), + None, + ) .await .unwrap(); diff --git a/crates/iota-network/build.rs b/crates/iota-network/build.rs index 5f0b6b057ac..ee7d0a1a6f5 100644 --- a/crates/iota-network/build.rs +++ b/crates/iota-network/build.rs @@ -35,28 +35,19 @@ fn main() -> Result<()> { ) .method( Method::builder() - .name("handle_certificate_v2") - .route_name("CertifiedTransactionV2") - .input_type("iota_types::transaction::CertifiedTransaction") - .output_type("iota_types::messages_grpc::HandleCertificateResponseV2") - .codec_path(codec_path) - .build(), - ) - .method( - Method::builder() - .name("handle_certificate_v3") - .route_name("CertifiedTransactionV3") - .input_type("iota_types::messages_grpc::HandleCertificateRequestV3") - .output_type("iota_types::messages_grpc::HandleCertificateResponseV3") + .name("handle_certificate_v1") + .route_name("CertifiedTransactionV1") + .input_type("iota_types::messages_grpc::HandleCertificateRequestV1") + .output_type("iota_types::messages_grpc::HandleCertificateResponseV1") .codec_path(codec_path) .build(), ) .method( Method::builder() - .name("handle_soft_bundle_certificates_v3") - .route_name("SoftBundleCertifiedTransactionsV3") - .input_type("iota_types::messages_grpc::HandleSoftBundleCertificatesRequestV3") - .output_type("iota_types::messages_grpc::HandleSoftBundleCertificatesResponseV3") + .name("handle_soft_bundle_certificates_v1") + .route_name("SoftBundleCertifiedTransactionsV1") + .input_type("iota_types::messages_grpc::HandleSoftBundleCertificatesRequestV1") + .output_type("iota_types::messages_grpc::HandleSoftBundleCertificatesResponseV1") .codec_path(codec_path) .build(), ) diff --git a/crates/iota-types/src/messages_grpc.rs b/crates/iota-types/src/messages_grpc.rs index 7dec37bc5b3..a9e7a3ac273 100644 --- a/crates/iota-types/src/messages_grpc.rs +++ b/crates/iota-types/src/messages_grpc.rs @@ -161,19 +161,11 @@ pub struct TransactionInfoResponse { pub status: TransactionStatus, } -#[derive(Clone, Debug, Serialize, Deserialize)] -pub struct HandleCertificateResponseV2 { - pub signed_effects: SignedTransactionEffects, - pub events: TransactionEvents, - /// Not used. Full node local execution fast path was deprecated. - pub fastpath_input_objects: Vec, -} - #[derive(Clone, Debug, Serialize, Deserialize)] pub struct SubmitCertificateResponse { /// If transaction is already executed, return same result as /// handle_certificate - pub executed: Option, + pub executed: Option, } #[derive(Clone, Debug)] @@ -188,27 +180,27 @@ pub struct SystemStateRequest { pub _unused: bool, } -/// Response type for version 3 of the handle certifacte validator API. +/// Response type for version 1 of the handle certificate validator API. /// -/// The coorisponding version 3 request type allows for a client to request +/// The corresponding version 1 request type allows for a client to request /// events as well as input/output objects from a transaction's execution. Given /// Validators operate with very aggressive object pruning, the return of /// input/output objects is only done immediately after the transaction has been /// executed locally on the validator and will not be returned for requests to /// previously executed transactions. #[derive(Clone, Debug, Serialize, Deserialize)] -pub struct HandleCertificateResponseV3 { - pub effects: SignedTransactionEffects, +pub struct HandleCertificateResponseV1 { + pub signed_effects: SignedTransactionEffects, pub events: Option, - /// If requested, will included all initial versions of objects modified in + /// If requested, will include all initial versions of objects modified in /// this transaction. This includes owned objects included as input into /// the transaction as well as the assigned versions of shared objects. // TODO: In the future we may want to include shared objects or child objects which were read - // but not modified during exectuion. + // but not modified during execution. pub input_objects: Option>, - /// If requested, will included all changed objects, including mutated, + /// If requested, will include all changed objects, including mutated, /// created and unwrapped objects. In other words, all objects that /// still exist in the object state after this transaction. pub output_objects: Option>, @@ -216,7 +208,7 @@ pub struct HandleCertificateResponseV3 { } #[derive(Clone, Debug, Serialize, Deserialize)] -pub struct HandleCertificateRequestV3 { +pub struct HandleCertificateRequestV1 { pub certificate: CertifiedTransaction, pub include_events: bool, @@ -225,14 +217,36 @@ pub struct HandleCertificateRequestV3 { pub include_auxiliary_data: bool, } -impl From for HandleCertificateResponseV2 { - fn from(value: HandleCertificateResponseV3) -> Self { +impl HandleCertificateRequestV1 { + pub fn new(certificate: CertifiedTransaction) -> Self { Self { - signed_effects: value.effects, - events: value.events.unwrap_or_default(), - fastpath_input_objects: Vec::new(), + certificate, + include_events: false, + include_input_objects: false, + include_output_objects: false, + include_auxiliary_data: false, } } + + pub fn with_events(mut self) -> Self { + self.include_events = true; + self + } + + pub fn with_input_objects(mut self) -> Self { + self.include_input_objects = true; + self + } + + pub fn with_output_objects(mut self) -> Self { + self.include_output_objects = true; + self + } + + pub fn with_auxiliary_data(mut self) -> Self { + self.include_auxiliary_data = true; + self + } } /// Response type for the handle Soft Bundle certificates validator API. @@ -242,13 +256,13 @@ impl From for HandleCertificateResponseV2 { /// /// Otherwise, `responses` will be empty. #[derive(Clone, Debug, Serialize, Deserialize)] -pub struct HandleSoftBundleCertificatesResponseV3 { - pub responses: Vec, +pub struct HandleSoftBundleCertificatesResponseV1 { + pub responses: Vec, } /// Soft Bundle request. See [SIP-19](https://github.com/sui-foundation/sips/blob/main/sips/sip-19.md). #[derive(Clone, Debug, Serialize, Deserialize)] -pub struct HandleSoftBundleCertificatesRequestV3 { +pub struct HandleSoftBundleCertificatesRequestV1 { pub certificates: Vec, pub wait_for_effects: bool, diff --git a/crates/iota-types/src/quorum_driver_types.rs b/crates/iota-types/src/quorum_driver_types.rs index 2af88f912bf..f69e5bec8b7 100644 --- a/crates/iota-types/src/quorum_driver_types.rs +++ b/crates/iota-types/src/quorum_driver_types.rs @@ -20,7 +20,7 @@ use crate::{ error::IotaError, messages_checkpoint::CheckpointSequenceNumber, object::Object, - transaction::{Transaction, VerifiedTransaction}, + transaction::Transaction, }; pub type QuorumDriverResult = Result; @@ -85,12 +85,6 @@ pub enum ExecuteTransactionRequestType { WaitForLocalExecution, } -#[derive(Debug)] -pub enum TransactionType { - SingleWriter, // Txes that only use owned objects and/or immutable objects - SharedObject, // Txes that use at least one shared object -} - #[derive(Serialize, Deserialize, Clone, Debug)] pub enum EffectsFinalityInfo { Certified(AuthorityStrongQuorumSignInfo), @@ -103,11 +97,6 @@ pub enum EffectsFinalityInfo { /// is confirmed to be executed on this node before the response returns. pub type IsTransactionExecutedLocally = bool; -#[derive(Clone, Debug)] -pub struct QuorumDriverRequest { - pub transaction: VerifiedTransaction, -} - #[derive(Debug, Clone)] pub struct QuorumDriverResponse { pub effects_cert: VerifiedCertifiedTransactionEffects, diff --git a/crates/test-cluster/src/lib.rs b/crates/test-cluster/src/lib.rs index f65967780ae..c0167e5b082 100644 --- a/crates/test-cluster/src/lib.rs +++ b/crates/test-cluster/src/lib.rs @@ -79,6 +79,7 @@ use iota_types::{ epoch_start_iota_system_state::EpochStartSystemStateTrait, }, message_envelope::Message, + messages_grpc::HandleCertificateRequestV1, object::Object, quorum_driver_types::ExecuteTransactionRequestType, supported_protocol_versions::SupportedProtocolVersions, @@ -755,7 +756,14 @@ impl TestCluster { }) .map(|client| { let cert = certificate.clone(); - async move { client.handle_certificate_v2(cert, None).await } + async move { + client + .handle_certificate_v1( + HandleCertificateRequestV1::new(cert).with_events(), + None, + ) + .await + } }) .collect(); @@ -778,9 +786,9 @@ impl TestCluster { let mut all_events = HashMap::new(); for reply in replies { let effects = reply.signed_effects.into_data(); + let events = reply.events.unwrap_or_default(); all_effects.insert(effects.digest(), effects); - all_events.insert(reply.events.digest(), reply.events); - // reply.fastpath_input_objects is unused. + all_events.insert(events.digest(), events); } assert_eq!(all_effects.len(), 1); assert_eq!(all_events.len(), 1); From 0fa5f2a54f7ac208d42bdd974eda335c26d0ba71 Mon Sep 17 00:00:00 2001 From: muXxer Date: Tue, 29 Oct 2024 14:23:34 +0100 Subject: [PATCH 11/55] fix(rest-api): Move `/rest` and `/v2` endpoints to `/api/v1` (#3740) * fix(rest-api): Move `/rest` and `/v2` endpoints to `/api/v1` * chore(node): update snapshot file * fix(node): rustfmt --- Cargo.toml | 2 +- crates/iota-bridge/src/error.rs | 2 +- crates/iota-config/src/node.rs | 4 ++-- crates/iota-data-ingestion-core/src/reader.rs | 2 +- crates/iota-indexer/README.md | 2 +- crates/iota-indexer/src/main.rs | 2 +- crates/iota-node/src/lib.rs | 10 ++++------ crates/iota-rest-api/openapi/elements.html | 2 +- crates/iota-rest-api/openapi/openapi.json | 6 +++--- crates/iota-rest-api/src/client/sdk.rs | 2 +- crates/iota-rest-api/src/lib.rs | 17 ++++------------- crates/iota-rest-api/src/openapi.rs | 2 +- crates/iota-single-node-benchmark/README.md | 2 +- .../src/node_config_builder.rs | 4 ++-- ..._tests__network_config_snapshot_matches.snap | 14 +++++++------- crates/iota-tool/src/db_tool/db_dump.rs | 1 - docker/pg-services-local/docker-compose.yaml | 2 +- 17 files changed, 32 insertions(+), 44 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 08e8fa83e47..17e3a92d699 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -418,7 +418,7 @@ iota-rest-api = { path = "crates/iota-rest-api" } iota-rosetta = { path = "crates/iota-rosetta" } iota-rpc-loadgen = { path = "crates/iota-rpc-loadgen" } iota-sdk = { path = "crates/iota-sdk" } -# core-types with json format for REST api +# core-types with json format for REST API iota-sdk2 = { package = "iota-rust-sdk", git = "ssh://git@github.com/iotaledger/iota-rust-sdk.git", rev = "ed6173d434c77604ddc93aaa1550168fdbe97b09", features = ["hash", "serde", "schemars"] } iota-simulator = { path = "crates/iota-simulator" } iota-snapshot = { path = "crates/iota-snapshot" } diff --git a/crates/iota-bridge/src/error.rs b/crates/iota-bridge/src/error.rs index 928bf74b8b0..de290334a58 100644 --- a/crates/iota-bridge/src/error.rs +++ b/crates/iota-bridge/src/error.rs @@ -66,7 +66,7 @@ pub enum BridgeError { ZeroValueBridgeTransfer(String), // Storage Error Storage(String), - // Rest API Error + // REST API Error RestAPI(String), // Uncategorized error Generic(String), diff --git a/crates/iota-config/src/node.rs b/crates/iota-config/src/node.rs index 3821e0d4261..ddf63329504 100644 --- a/crates/iota-config/src/node.rs +++ b/crates/iota-config/src/node.rs @@ -75,10 +75,10 @@ pub struct NodeConfig { #[serde(default = "default_json_rpc_address")] pub json_rpc_address: SocketAddr, - /// Flag to enable the experimental REST API under `/rest` + /// Flag to enable the REST API under `/api/v1` /// endpoint on the same interface as `json` `rpc` server. #[serde(default)] - pub enable_experimental_rest_api: bool, + pub enable_rest_api: bool, /// The address for Prometheus metrics. #[serde(default = "default_metrics_address")] diff --git a/crates/iota-data-ingestion-core/src/reader.rs b/crates/iota-data-ingestion-core/src/reader.rs index 0a3e388c312..52d48539cb1 100644 --- a/crates/iota-data-ingestion-core/src/reader.rs +++ b/crates/iota-data-ingestion-core/src/reader.rs @@ -185,7 +185,7 @@ impl CheckpointReader { ) .expect("failed to create remote store client"); RemoteStore::Hybrid(object_store, iota_rest_api::Client::new(fn_url)) - } else if url.ends_with("/rest") { + } else if url.ends_with("/api/v1") { RemoteStore::Rest(iota_rest_api::Client::new(url)) } else { let object_store = create_remote_store_client( diff --git a/crates/iota-indexer/README.md b/crates/iota-indexer/README.md index 9be0c5185bc..d59cb3e2183 100644 --- a/crates/iota-indexer/README.md +++ b/crates/iota-indexer/README.md @@ -6,7 +6,7 @@ IOTA Indexer is an off-fullnode service to serve data from the IOTA protocol, in > [!NOTE] > -> - Indexer sync workers require the `NodeConfig::enable_experimental_rest_api` flag set to `true` in the node +> - Indexer sync workers require the `NodeConfig::enable_rest_api` flag set to `true` in the node > - Fullnodes expose read and transaction execution JSON-RPC APIs. Hence, transactions can be executed through fullnodes. > - Validators expose only read-only JSON-RPC APIs. > - Indexer instances expose read, write and extended JSON-RPC APIs. diff --git a/crates/iota-indexer/src/main.rs b/crates/iota-indexer/src/main.rs index 6336bc67602..791b16a5469 100644 --- a/crates/iota-indexer/src/main.rs +++ b/crates/iota-indexer/src/main.rs @@ -19,7 +19,7 @@ async fn main() -> Result<(), IndexerError> { let mut indexer_config = IndexerConfig::parse(); // TODO: Explore other options as in upstream. // For the moment we only use the fullnode for fetching checkpoints - indexer_config.remote_store_url = Some(format!("{}/rest", indexer_config.rpc_client_url)); + indexer_config.remote_store_url = Some(format!("{}/api/v1", indexer_config.rpc_client_url)); info!("Parsed indexer config: {:#?}", indexer_config); let (_registry_service, registry) = start_prometheus_server( // NOTE: this parses the input host addr and port number for socket addr, diff --git a/crates/iota-node/src/lib.rs b/crates/iota-node/src/lib.rs index 005e687902c..4f576913840 100644 --- a/crates/iota-node/src/lib.rs +++ b/crates/iota-node/src/lib.rs @@ -579,9 +579,7 @@ impl IotaNode { None }; - let rest_index = if is_full_node - && config.enable_experimental_rest_api - && config.enable_index_processing + let rest_index = if is_full_node && config.enable_rest_api && config.enable_index_processing { Some(Arc::new(RestIndexStore::new( config.db_path().join("rest_index"), @@ -1967,7 +1965,7 @@ fn build_kv_store( ))) } -/// Builds and starts the HTTP server for the Iota node, exposing JSON-RPC and +/// Builds and starts the HTTP server for the IOTA node, exposing JSON-RPC and /// REST APIs based on the node's configuration. /// /// This function performs the following tasks: @@ -1980,7 +1978,7 @@ fn build_kv_store( /// TransactionBuilderApi, GovernanceApi, TransactionExecutionApi, and /// IndexerApi. /// 4. Optionally, if the REST API is enabled, nests the REST API router under -/// the `/rest` path. +/// the `/api/v1` path. /// 5. Binds the server to the specified JSON-RPC address and starts listening /// for incoming connections. pub async fn build_http_server( @@ -2053,7 +2051,7 @@ pub async fn build_http_server( router = router.merge(json_rpc_router); - if config.enable_experimental_rest_api { + if config.enable_rest_api { let mut rest_service = iota_rest_api::RestService::new( Arc::new(RestReadStore::new(state, store)), software_version, diff --git a/crates/iota-rest-api/openapi/elements.html b/crates/iota-rest-api/openapi/elements.html index 7beb2f44231..437d3c8be38 100644 --- a/crates/iota-rest-api/openapi/elements.html +++ b/crates/iota-rest-api/openapi/elements.html @@ -3,7 +3,7 @@ - Iota Node Api + IOTA Node API diff --git a/crates/iota-rest-api/openapi/openapi.json b/crates/iota-rest-api/openapi/openapi.json index 96c8711cd78..96c9665ab63 100644 --- a/crates/iota-rest-api/openapi/openapi.json +++ b/crates/iota-rest-api/openapi/openapi.json @@ -1,8 +1,8 @@ { "openapi": "3.1.0", "info": { - "title": "Iota Node Api", - "description": "REST Api for interacting with the Iota Blockchain", + "title": "IOTA Node API", + "description": "REST API for interacting with the IOTA Blockchain", "contact": { "name": "IOTA Foundation", "url": "https://github.com/iotaledger/iota" @@ -15,7 +15,7 @@ }, "servers": [ { - "url": "/v2" + "url": "/api/v1" } ], "paths": { diff --git a/crates/iota-rest-api/src/client/sdk.rs b/crates/iota-rest-api/src/client/sdk.rs index 939eeb968e5..89ae4df822a 100644 --- a/crates/iota-rest-api/src/client/sdk.rs +++ b/crates/iota-rest-api/src/client/sdk.rs @@ -50,7 +50,7 @@ impl Client { ))); } - url.set_path("/v2/"); + url.set_path("/api/v1/"); let inner = reqwest::ClientBuilder::new() .user_agent(USER_AGENT) diff --git a/crates/iota-rest-api/src/lib.rs b/crates/iota-rest-api/src/lib.rs index 016e843b980..aecf9ccccbb 100644 --- a/crates/iota-rest-api/src/lib.rs +++ b/crates/iota-rest-api/src/lib.rs @@ -149,13 +149,8 @@ impl RestService { api.register_endpoints(ENDPOINTS.to_owned()); Router::new() - .nest("/v2/", api.to_router().with_state(self.clone())) - .route("/v2", get(|| async { Redirect::permanent("/v2/") })) - // Previously the service used to be hosted at `/rest`. In an effort to migrate folks - // to the new versioned route, we'll issue redirects from `/rest` -> `/v2`. - .route("/rest/*path", axum::routing::method_routing::any(redirect)) - .route("/rest", get(|| async { Redirect::permanent("/v2/") })) - .route("/rest/", get(|| async { Redirect::permanent("/v2/") })) + .nest("/api/v1/", api.to_router().with_state(self.clone())) + .route("/api/v1", get(|| async { Redirect::permanent("/api/v1/") })) .layer(axum::middleware::map_response_with_state( self, response::append_info_headers, @@ -181,8 +176,8 @@ fn info() -> openapiv3::v3_1::Info { use openapiv3::v3_1::{Contact, License}; openapiv3::v3_1::Info { - title: "Iota Node Api".to_owned(), - description: Some("REST Api for interacting with the Iota Blockchain".to_owned()), + title: "IOTA Node API".to_owned(), + description: Some("REST API for interacting with the IOTA Blockchain".to_owned()), contact: Some(Contact { name: Some("IOTA Foundation".to_owned()), url: Some("https://github.com/iotaledger/iota".to_owned()), @@ -198,10 +193,6 @@ fn info() -> openapiv3::v3_1::Info { } } -async fn redirect(axum::extract::Path(path): axum::extract::Path) -> Redirect { - Redirect::permanent(&format!("/v2/{path}")) -} - mod _schemars { use schemars::{ JsonSchema, diff --git a/crates/iota-rest-api/src/openapi.rs b/crates/iota-rest-api/src/openapi.rs index af95b803feb..f8840098856 100644 --- a/crates/iota-rest-api/src/openapi.rs +++ b/crates/iota-rest-api/src/openapi.rs @@ -166,7 +166,7 @@ impl<'a, S> Api<'a, S> { openapi.tags.sort_by(|a, b| a.name.cmp(&b.name)); openapi.servers = vec![openapiv3::v3_1::Server { - url: "/v2".into(), + url: "/api/v1".into(), ..Default::default() }]; diff --git a/crates/iota-single-node-benchmark/README.md b/crates/iota-single-node-benchmark/README.md index 78725d03b19..94500b283a2 100644 --- a/crates/iota-single-node-benchmark/README.md +++ b/crates/iota-single-node-benchmark/README.md @@ -1,6 +1,6 @@ # Iota Single Node Benchmark -This crate contains a binary for performance benchmarking a single Iota node. +This crate contains a binary for performance benchmarking a single IOTA node. Upon running the binary, the node will instantiate a standalone `AuthorityState`, and submit executable transactions to it in parallel. We then measure the time it takes for it to finish executing all the transactions. diff --git a/crates/iota-swarm-config/src/node_config_builder.rs b/crates/iota-swarm-config/src/node_config_builder.rs index c95486df704..1e2c422b1eb 100644 --- a/crates/iota-swarm-config/src/node_config_builder.rs +++ b/crates/iota-swarm-config/src/node_config_builder.rs @@ -207,7 +207,7 @@ impl ValidatorConfigBuilder { indexer_max_subscriptions: Default::default(), transaction_kv_store_read_config: Default::default(), transaction_kv_store_write_config: None, - enable_experimental_rest_api: true, + enable_rest_api: true, jwk_fetch_interval_seconds: self .jwk_fetch_interval .map(|i| i.as_secs()) @@ -497,7 +497,7 @@ impl FullnodeConfigBuilder { indexer_max_subscriptions: Default::default(), transaction_kv_store_read_config: Default::default(), transaction_kv_store_write_config: Default::default(), - enable_experimental_rest_api: true, + enable_rest_api: true, // note: not used by fullnodes. jwk_fetch_interval_seconds: 3600, zklogin_oauth_providers: default_zklogin_oauth_providers(), diff --git a/crates/iota-swarm-config/tests/snapshots/snapshot_tests__network_config_snapshot_matches.snap b/crates/iota-swarm-config/tests/snapshots/snapshot_tests__network_config_snapshot_matches.snap index bbf1ad8c93f..4725bfb9ffa 100644 --- a/crates/iota-swarm-config/tests/snapshots/snapshot_tests__network_config_snapshot_matches.snap +++ b/crates/iota-swarm-config/tests/snapshots/snapshot_tests__network_config_snapshot_matches.snap @@ -14,7 +14,7 @@ validator_configs: db-path: /tmp/foo/ network-address: "" json-rpc-address: "0.0.0.0:1" - enable-experimental-rest-api: true + enable-rest-api: true metrics-address: "0.0.0.0:1" admin-interface-port: 8888 consensus-config: @@ -134,7 +134,7 @@ validator_configs: db-path: /tmp/foo/ network-address: "" json-rpc-address: "0.0.0.0:1" - enable-experimental-rest-api: true + enable-rest-api: true metrics-address: "0.0.0.0:1" admin-interface-port: 8888 consensus-config: @@ -254,7 +254,7 @@ validator_configs: db-path: /tmp/foo/ network-address: "" json-rpc-address: "0.0.0.0:1" - enable-experimental-rest-api: true + enable-rest-api: true metrics-address: "0.0.0.0:1" admin-interface-port: 8888 consensus-config: @@ -374,7 +374,7 @@ validator_configs: db-path: /tmp/foo/ network-address: "" json-rpc-address: "0.0.0.0:1" - enable-experimental-rest-api: true + enable-rest-api: true metrics-address: "0.0.0.0:1" admin-interface-port: 8888 consensus-config: @@ -494,7 +494,7 @@ validator_configs: db-path: /tmp/foo/ network-address: "" json-rpc-address: "0.0.0.0:1" - enable-experimental-rest-api: true + enable-rest-api: true metrics-address: "0.0.0.0:1" admin-interface-port: 8888 consensus-config: @@ -614,7 +614,7 @@ validator_configs: db-path: /tmp/foo/ network-address: "" json-rpc-address: "0.0.0.0:1" - enable-experimental-rest-api: true + enable-rest-api: true metrics-address: "0.0.0.0:1" admin-interface-port: 8888 consensus-config: @@ -734,7 +734,7 @@ validator_configs: db-path: /tmp/foo/ network-address: "" json-rpc-address: "0.0.0.0:1" - enable-experimental-rest-api: true + enable-rest-api: true metrics-address: "0.0.0.0:1" admin-interface-port: 8888 consensus-config: diff --git a/crates/iota-tool/src/db_tool/db_dump.rs b/crates/iota-tool/src/db_tool/db_dump.rs index 5fc0af5bf66..c1ddfd489c8 100644 --- a/crates/iota-tool/src/db_tool/db_dump.rs +++ b/crates/iota-tool/src/db_tool/db_dump.rs @@ -43,7 +43,6 @@ pub enum StoreName { Validator, Index, Epoch, - // TODO: Add the new checkpoint v2 tables. } impl std::fmt::Display for StoreName { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { diff --git a/docker/pg-services-local/docker-compose.yaml b/docker/pg-services-local/docker-compose.yaml index 413de506ecd..fe8e31ab08a 100644 --- a/docker/pg-services-local/docker-compose.yaml +++ b/docker/pg-services-local/docker-compose.yaml @@ -29,7 +29,7 @@ services: - "127.0.0.1:9000:9000" - "127.0.0.1:9123:9123" healthcheck: - test: "curl -f http://local-network:9000/rest/" + test: "curl -f http://local-network:9000/api/v1/" interval: 1s start_period: 5s timeout: 2s From 6ea01f733001c001304f34d62c5022f35a7f2180 Mon Sep 17 00:00:00 2001 From: "Ching-Hua (Vivian) Lin" Date: Tue, 29 Oct 2024 21:49:16 +0800 Subject: [PATCH 12/55] fix(iota-json-rpc-tests): Fix move utils e2e tests (#3757) * fix(iota-json-rpc-tests): Remove CurrencyCreated in get_normalized_move_module CurrencyCreated is a deprecated struct and has been removed. * fix(iota-json-rpc-tests): Remove supply in get_normalized_move_module The exposed function `supply` does not exist in coin.move. * fix(iota-json-rpc-tests): Remove math module in get_normalized_move_modules_by_package The module `math` does not exist in the package. * chores: Remove unecessary blank line --- crates/iota-json-rpc-tests/tests/move_utils.rs | 3 --- 1 file changed, 3 deletions(-) diff --git a/crates/iota-json-rpc-tests/tests/move_utils.rs b/crates/iota-json-rpc-tests/tests/move_utils.rs index 76717adcd88..aa5a3f947a3 100644 --- a/crates/iota-json-rpc-tests/tests/move_utils.rs +++ b/crates/iota-json-rpc-tests/tests/move_utils.rs @@ -54,7 +54,6 @@ async fn get_normalized_move_modules_by_package() -> Result<(), anyhow::Error> { "kiosk_extension", "labeler", "linked_table", - "math", "object", "object_bag", "object_table", @@ -132,7 +131,6 @@ async fn get_normalized_move_module() -> Result<(), anyhow::Error> { [ "Coin", "CoinMetadata", - "CurrencyCreated", "DenyCapV1", "RegulatedCoinMetadata", "TreasuryCap", @@ -176,7 +174,6 @@ async fn get_normalized_move_module() -> Result<(), anyhow::Error> { "mint_balance", "put", "split", - "supply", "supply_immut", "supply_mut", "take", From 1e17f6c5bdc993f8a242beb4bd578e41d6218e58 Mon Sep 17 00:00:00 2001 From: cpl121 <100352899+cpl121@users.noreply.github.com> Date: Tue, 29 Oct 2024 14:57:56 +0100 Subject: [PATCH 13/55] fix(wallet-dashboard): wrong available for timelocked staking (#3734) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(wallet-dashboard): wrong available for timelocked staking * fix: prettier * fix(wallet-dashboard): update the amount of the mocked timelock objects --------- Co-authored-by: Begoña Alvarez --- .../lib/constants/vesting.constants.ts | 66 +++++++++---------- .../lib/utils/vesting/vesting.ts | 3 +- 2 files changed, 35 insertions(+), 34 deletions(-) diff --git a/apps/wallet-dashboard/lib/constants/vesting.constants.ts b/apps/wallet-dashboard/lib/constants/vesting.constants.ts index 2dda152bd31..28bf1a4e026 100644 --- a/apps/wallet-dashboard/lib/constants/vesting.constants.ts +++ b/apps/wallet-dashboard/lib/constants/vesting.constants.ts @@ -28,7 +28,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0xfe755ca67e3a0714f97ec3c49cfc6f3ecdab2673d96b5840294d3a5db376c99', }, locked: { - value: 1000, + value: 2_000_000_000, }, expirationTimestampMs: 1697320800000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -38,7 +38,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0x682d14613231dd1dde39397977cdfafb6b6263b5683b6782348c597c104b834', }, locked: { - value: 1000, + value: 2_000_000_000, }, expirationTimestampMs: 1698530400000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -48,7 +48,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0x93f2bf2d044e45e1a85c010c22357892d1625436b8c95b26dcdb6f309319064', }, locked: { - value: 1000, + value: 2_000_000_000, }, expirationTimestampMs: 1699740000000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -58,7 +58,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0x44fa510ba216cd555ecd6b99d1ebd612f82e2bf421091c973bca49b064dc72b', }, locked: { - value: 1000, + value: 2_000_000_000, }, expirationTimestampMs: 1700949600000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -68,7 +68,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0xacd861b6dc5d108af03655a2175545ac6d432c526bcbe294b90e722fa36b459', }, locked: { - value: 1000, + value: 2_000_000_000, }, expirationTimestampMs: 1702159200000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -78,7 +78,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0x8f9eeb5953c77d53dcff3057619af7a29be1d9ce67bf66c86ad5309379d17e5', }, locked: { - value: 1000, + value: 2_000_000_000, }, expirationTimestampMs: 1703368800000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -88,7 +88,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0x70b1063c1104760afc06df5217bebdf02f937e1aff51211fc0472e677ba8c74', }, locked: { - value: 1000, + value: 2_000_000_000, }, expirationTimestampMs: 1704578400000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -98,7 +98,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0xb0aa6f655d08f630c15a2cfb4e3e13e307ce9d96c52c1e91c65a71a204819bd', }, locked: { - value: 1000, + value: 2_000_000_000, }, expirationTimestampMs: 1705788000000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -108,7 +108,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0x65224b9a3b9eadc55be4cb6efa363f283b924607496d60c02deef2aa6bf9e22', }, locked: { - value: 1000, + value: 2_000_000_000, }, expirationTimestampMs: 1706997600000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -118,7 +118,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0x68f9a2af0ebd0bcd9e3cc836ac7103670a9602e8dca8fd28e7b2b5a693898f2', }, locked: { - value: 1000, + value: 2_000_000_000, }, expirationTimestampMs: 1708207200000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -128,7 +128,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0x637e6b758efdb8d49ee96397ca909d579bb77b79f8b64e7e7f1af13ad4f7ce4', }, locked: { - value: 1000, + value: 2_000_000_000, }, expirationTimestampMs: 1709416800000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -138,7 +138,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0xbd0f349c21b67faec992b6c9a1b9b6343b4ff1f2ad5f33b0b4cd0fc31be2b31', }, locked: { - value: 1000, + value: 2_000_000_000, }, expirationTimestampMs: 1710626400000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -148,7 +148,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0xfb8c3539b22e4086bd03417027e70515e6fb6d18f366876ad5ad0d8da3bde0f', }, locked: { - value: 1000, + value: 2_000_000_000, }, expirationTimestampMs: 1711836000000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -158,7 +158,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0xbfb7c1a941885cc55a191e579c7c6d5dc345d6b5b9cfa439f724a343d354032', }, locked: { - value: 1000, + value: 2_000_000_000, }, expirationTimestampMs: 1713045600000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -168,7 +168,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0x8935a904f90e23f6f453cb0c85a03859e07f1c9e5a5d1644b2fbe7005d8e158', }, locked: { - value: 1000, + value: 2_000_000_000, }, expirationTimestampMs: 1714255200000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -178,7 +178,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0x73be6f8df4b73b83f8ccf909d61aabb56c56c56aa597d2806eccf3ab4fac66b', }, locked: { - value: 1000, + value: 2_000_000_000, }, expirationTimestampMs: 1715464800000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -188,7 +188,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0x20075cc2ebd5fa6e069829e58e55e6e010ad115e8cbc48d7a3d98d079ce649a', }, locked: { - value: 1000, + value: 2_000_000_000, }, expirationTimestampMs: 1716674400000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -198,7 +198,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0xce03433d496cb231ead90a661fe08b924eb9b0cfb43dd560ea02a8060f6afd0', }, locked: { - value: 1000, + value: 2_000_000_000, }, expirationTimestampMs: 1717884000000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -208,7 +208,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0xf111b8705ba276f8c6b76bdf72a4a46889cb8207cc5a80d3df0f40d9576116a', }, locked: { - value: 1000, + value: 2_000_000_000, }, expirationTimestampMs: 1719093600000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -218,7 +218,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0xbc27940fb9c6f96ae9e2c11ad151446e30de5281172e48aac7f600d1da92c10', }, locked: { - value: 1000, + value: 2_000_000_000, }, expirationTimestampMs: 1720303200000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -228,7 +228,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0x016fae8797d3d12a26e215ec1815ee8adce70bb93149b4d55eb06a81c476ff9', }, locked: { - value: 1000, + value: 2_000_000_000, }, expirationTimestampMs: 1721512800000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -238,7 +238,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0x06f1e354ff551d76da8dc890eab728a65319defb3608991b4c70a1a2b30e8f1', }, locked: { - value: 1000, + value: 2_000_000_000, }, expirationTimestampMs: 1722722400000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -248,7 +248,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0xc4cf3ea32480aab7d78784c6f00b9210ce0ffaabbcbb8cddd846073e7455386', }, locked: { - value: 1000, + value: 2_000_000_000, }, expirationTimestampMs: 1723932000000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -258,7 +258,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0x6dc10a8008855549b8d92e7704c799253a953d9835af001970426414fdd3ba7', }, locked: { - value: 1000, + value: 2_000_000_000, }, expirationTimestampMs: 1725141600000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -268,7 +268,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0xa5f7a66c575db3f74c5fe7043c28f7231a2127aec4dc2de88f5b9d3cf020511', }, locked: { - value: 1000, + value: 2_000_000_000, }, expirationTimestampMs: 1726351200000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -278,7 +278,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0xde0a4c2e0f16541983302c596339815ffa4d4743509e8115bc06fcf7f71ea8f', }, locked: { - value: 1000, + value: 2_000_000_000, }, expirationTimestampMs: 1727560800000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -288,7 +288,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0xccc5d23ab69789b934b9bf7f5006e43eef45c2d7a251e3eec8b7dd24bc20a07', }, locked: { - value: 1000, + value: 2_000_000_000, }, expirationTimestampMs: 1728770400000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -298,7 +298,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0x503dc8844b0cd6e74e735433751328e8283569e81b4602aaa6941ce3fe826bb', }, locked: { - value: 1000, + value: 2_000_000_000, }, expirationTimestampMs: 1729980000000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -308,7 +308,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0x0fac98b5ac955644dffa0700933aababe438fae6fc58b8a4bd1f740c8aba941', }, locked: { - value: 1000, + value: 2_000_000_000, }, expirationTimestampMs: 1731189600000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -318,7 +318,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0x756483e3c7dd3491ea405f682df6c5dc1e4a59d8b5c9725b0d194815a25ea95', }, locked: { - value: 1000, + value: 2_000_000_000, }, expirationTimestampMs: 1732399200000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -328,7 +328,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0x72c4318876f51bed94c2228b395d18f5dce5f243039c7e3d8fad690dfe918fc', }, locked: { - value: 1000, + value: 2_000_000_000, }, expirationTimestampMs: 1733608800000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -338,7 +338,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0x37f68fd72af05b4c923268b64a0baa7511f27bc4cbd90641e444e7116f02604', }, locked: { - value: 1000, + value: 2_000_000_000, }, expirationTimestampMs: 1734818400000, label: SUPPLY_INCREASE_VESTING_LABEL, @@ -348,7 +348,7 @@ export const MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS: TimelockedObject id: '0x97bedf66e48392a0b9baf8a8280e72fcce9b32ff980832edfe1a90a14ce9047', }, locked: { - value: 1000, + value: 2_000_000_000, }, expirationTimestampMs: 1736028000000, label: SUPPLY_INCREASE_VESTING_LABEL, diff --git a/apps/wallet-dashboard/lib/utils/vesting/vesting.ts b/apps/wallet-dashboard/lib/utils/vesting/vesting.ts index 157914ecca9..da2a5bbe80e 100644 --- a/apps/wallet-dashboard/lib/utils/vesting/vesting.ts +++ b/apps/wallet-dashboard/lib/utils/vesting/vesting.ts @@ -175,7 +175,8 @@ export function getVestingOverview( ); const totalAvailableStakingAmount = timelockedObjects.reduce( (acc, current) => - current.expirationTimestampMs > currentEpochTimestamp + current.expirationTimestampMs > currentEpochTimestamp && + current.locked.value > MIN_STAKING_THRESHOLD ? acc + current.locked.value : acc, 0, From 4e3b07f5a0a6c50ff50637aafbe029834fbf0c8e Mon Sep 17 00:00:00 2001 From: muXxer Date: Tue, 29 Oct 2024 15:31:49 +0100 Subject: [PATCH 14/55] fix(node): update specs and test baselines (#3762) --- .../tests/available_range/available_range.exp | 16 +- .../tests/call/simple.exp | 2 +- .../tests/epoch/chain_identifier.exp | 2 +- .../tests/limits/directives.exp | 4 +- .../tests/objects/display.exp | 8 +- crates/iota-rest-api/openapi/openapi.json | 166 +----------------- 6 files changed, 18 insertions(+), 180 deletions(-) diff --git a/crates/iota-graphql-e2e-tests/tests/available_range/available_range.exp b/crates/iota-graphql-e2e-tests/tests/available_range/available_range.exp index 40c2a903d2e..1d142414cc8 100644 --- a/crates/iota-graphql-e2e-tests/tests/available_range/available_range.exp +++ b/crates/iota-graphql-e2e-tests/tests/available_range/available_range.exp @@ -6,20 +6,20 @@ Response: { "data": { "availableRange": { "first": { - "digest": "AjVRPrUd6kKCamy6Fjgzj2Xo2yEGM6jVLDT6KLGqgb1H", + "digest": "6NFvR4v3VR7s1RqdMCrATc4Wz6rknytEigYQwKQqsDL2", "sequenceNumber": 0 }, "last": { - "digest": "AjVRPrUd6kKCamy6Fjgzj2Xo2yEGM6jVLDT6KLGqgb1H", + "digest": "6NFvR4v3VR7s1RqdMCrATc4Wz6rknytEigYQwKQqsDL2", "sequenceNumber": 0 } }, "first": { - "digest": "AjVRPrUd6kKCamy6Fjgzj2Xo2yEGM6jVLDT6KLGqgb1H", + "digest": "6NFvR4v3VR7s1RqdMCrATc4Wz6rknytEigYQwKQqsDL2", "sequenceNumber": 0 }, "last": { - "digest": "AjVRPrUd6kKCamy6Fjgzj2Xo2yEGM6jVLDT6KLGqgb1H", + "digest": "6NFvR4v3VR7s1RqdMCrATc4Wz6rknytEigYQwKQqsDL2", "sequenceNumber": 0 } } @@ -39,20 +39,20 @@ Response: { "data": { "availableRange": { "first": { - "digest": "AjVRPrUd6kKCamy6Fjgzj2Xo2yEGM6jVLDT6KLGqgb1H", + "digest": "6NFvR4v3VR7s1RqdMCrATc4Wz6rknytEigYQwKQqsDL2", "sequenceNumber": 0 }, "last": { - "digest": "FubeYRn3Re3g8nR9jbf955Jd6GjqpzxubbfGaSV3XC8C", + "digest": "5Dgrq9zWc8hutasvYoZbAcexWzCMaawAkDEL8pbD5Jjf", "sequenceNumber": 2 } }, "first": { - "digest": "AjVRPrUd6kKCamy6Fjgzj2Xo2yEGM6jVLDT6KLGqgb1H", + "digest": "6NFvR4v3VR7s1RqdMCrATc4Wz6rknytEigYQwKQqsDL2", "sequenceNumber": 0 }, "last": { - "digest": "FubeYRn3Re3g8nR9jbf955Jd6GjqpzxubbfGaSV3XC8C", + "digest": "5Dgrq9zWc8hutasvYoZbAcexWzCMaawAkDEL8pbD5Jjf", "sequenceNumber": 2 } } diff --git a/crates/iota-graphql-e2e-tests/tests/call/simple.exp b/crates/iota-graphql-e2e-tests/tests/call/simple.exp index 678ef0975b9..cae4875d542 100644 --- a/crates/iota-graphql-e2e-tests/tests/call/simple.exp +++ b/crates/iota-graphql-e2e-tests/tests/call/simple.exp @@ -77,7 +77,7 @@ Epoch advanced: 5 task 10, line 44: //# view-checkpoint -CheckpointSummary { epoch: 5, seq: 10, content_digest: Eju9TRhUamcNqTaaEhENsRpfV6qpU6bttXAi5sfGKvh2, +CheckpointSummary { epoch: 5, seq: 10, content_digest: DLVxgygkX7Vs9bHQPoKm6AM9aHFEQPubZMHrFedvWEZM, epoch_rolling_gas_cost_summary: GasCostSummary { computation_cost: 0, storage_cost: 0, storage_rebate: 0, non_refundable_storage_fee: 0 }} task 11, lines 46-51: diff --git a/crates/iota-graphql-e2e-tests/tests/epoch/chain_identifier.exp b/crates/iota-graphql-e2e-tests/tests/epoch/chain_identifier.exp index b39d16de5ae..5f739a19f9c 100644 --- a/crates/iota-graphql-e2e-tests/tests/epoch/chain_identifier.exp +++ b/crates/iota-graphql-e2e-tests/tests/epoch/chain_identifier.exp @@ -11,6 +11,6 @@ task 2, lines 10-13: //# run-graphql Response: { "data": { - "chainIdentifier": "498fc7b7" + "chainIdentifier": "325a2bc6" } } diff --git a/crates/iota-graphql-e2e-tests/tests/limits/directives.exp b/crates/iota-graphql-e2e-tests/tests/limits/directives.exp index 17d543837fd..ae5f65e3f5d 100644 --- a/crates/iota-graphql-e2e-tests/tests/limits/directives.exp +++ b/crates/iota-graphql-e2e-tests/tests/limits/directives.exp @@ -73,7 +73,7 @@ task 5, lines 59-63: //# run-graphql Response: { "data": { - "chainIdentifier": "498fc7b7" + "chainIdentifier": "325a2bc6" } } @@ -81,7 +81,7 @@ task 6, lines 65-69: //# run-graphql Response: { "data": { - "chainIdentifier": "498fc7b7" + "chainIdentifier": "325a2bc6" } } diff --git a/crates/iota-graphql-e2e-tests/tests/objects/display.exp b/crates/iota-graphql-e2e-tests/tests/objects/display.exp index 04143a4282a..8a643e5e628 100644 --- a/crates/iota-graphql-e2e-tests/tests/objects/display.exp +++ b/crates/iota-graphql-e2e-tests/tests/objects/display.exp @@ -16,7 +16,7 @@ Checkpoint created: 1 task 3, line 135: //# view-checkpoint -CheckpointSummary { epoch: 0, seq: 1, content_digest: 5nziQdp2tLxVAj5j7iXTyrYz7Hstn5Zh5iqLAd7TaxLt, +CheckpointSummary { epoch: 0, seq: 1, content_digest: FhAfAxUsueMJ5c9W7TuVepGTE9SnFCrRcGAWfehU4hWU, epoch_rolling_gas_cost_summary: GasCostSummary { computation_cost: 1000000, storage_cost: 21470000, storage_rebate: 0, non_refundable_storage_fee: 0 }} task 4, line 137: @@ -37,7 +37,7 @@ Checkpoint created: 2 task 7, line 143: //# view-checkpoint -CheckpointSummary { epoch: 0, seq: 2, content_digest: DVQKDwtJsrqwugyr2EP4UCAKw1RRVVapnPADhXTs5vaX, +CheckpointSummary { epoch: 0, seq: 2, content_digest: C5KjqUQRvmi5veZahh1neoafEn1z2fhgxaFy3BbzVJUK, epoch_rolling_gas_cost_summary: GasCostSummary { computation_cost: 3000000, storage_cost: 27968000, storage_rebate: 3640400, non_refundable_storage_fee: 0 }} task 8, lines 145-158: @@ -84,7 +84,7 @@ Checkpoint created: 3 task 11, line 164: //# view-checkpoint -CheckpointSummary { epoch: 0, seq: 3, content_digest: C7sxx5GSvnuc5RNaYkToaPRVoBxctRgY3ZNGkyZWGYSe, +CheckpointSummary { epoch: 0, seq: 3, content_digest: 9Xz4yzhPS4BPCmWwP5TqdY8dCPQvJML3e6LXZMZvuzo2, epoch_rolling_gas_cost_summary: GasCostSummary { computation_cost: 4000000, storage_cost: 31000400, storage_rebate: 6581600, non_refundable_storage_fee: 0 }} task 12, lines 166-179: @@ -136,7 +136,7 @@ Checkpoint created: 4 task 15, line 185: //# view-checkpoint -CheckpointSummary { epoch: 0, seq: 4, content_digest: 9CyEjTU1BKFkS61qtauKTbtPRYTZ2AtWaBNYq2unhxhU, +CheckpointSummary { epoch: 0, seq: 4, content_digest: FGyM6sYiLCoNXUHPwQKCnS7FnbvsWBY9uvH3K21UNnhL, epoch_rolling_gas_cost_summary: GasCostSummary { computation_cost: 5000000, storage_cost: 36236800, storage_rebate: 9614000, non_refundable_storage_fee: 0 }} task 16, lines 187-200: diff --git a/crates/iota-rest-api/openapi/openapi.json b/crates/iota-rest-api/openapi/openapi.json index 96c9665ab63..b787b05bdb7 100644 --- a/crates/iota-rest-api/openapi/openapi.json +++ b/crates/iota-rest-api/openapi/openapi.json @@ -3013,23 +3013,6 @@ } } }, - "ModifiedAtVersion": { - "type": "object", - "required": [ - "object_id", - "version" - ], - "properties": { - "object_id": { - "$ref": "#/components/schemas/ObjectId" - }, - "version": { - "description": "Radix-10 encoded 64-bit unsigned integer", - "type": "string", - "format": "u64" - } - } - }, "MoveLocation": { "type": "object", "required": [ @@ -3519,21 +3502,6 @@ } } }, - "ObjectReferenceWithOwner": { - "type": "object", - "required": [ - "owner", - "reference" - ], - "properties": { - "owner": { - "$ref": "#/components/schemas/Owner" - }, - "reference": { - "$ref": "#/components/schemas/ObjectReference" - } - } - }, "Owner": { "oneOf": [ { @@ -4227,136 +4195,6 @@ "TransactionEffects": { "description": "The response from processing a transaction or a certified transaction", "oneOf": [ - { - "description": "The response from processing a transaction or a certified transaction", - "type": "object", - "required": [ - "created", - "deleted", - "dependencies", - "epoch", - "gas_object", - "gas_used", - "modified_at_versions", - "mutated", - "shared_objects", - "success", - "transaction_digest", - "unwrapped", - "unwrapped_then_deleted", - "version", - "wrapped" - ], - "properties": { - "created": { - "description": "ObjectReference and owner of new objects created.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ObjectReferenceWithOwner" - } - }, - "deleted": { - "description": "Object Refs of objects now deleted (the new refs).", - "type": "array", - "items": { - "$ref": "#/components/schemas/ObjectReference" - } - }, - "dependencies": { - "description": "The set of transaction digests this transaction depends on.", - "type": "array", - "items": { - "$ref": "#/components/schemas/TransactionDigest" - } - }, - "epoch": { - "description": "The epoch when this transaction was executed.", - "type": "string", - "format": "u64" - }, - "events_digest": { - "description": "The digest of the events emitted during execution, can be None if the transaction does not emit any event.", - "allOf": [ - { - "$ref": "#/components/schemas/TransactionEventsDigest" - } - ] - }, - "gas_object": { - "description": "The updated gas object reference. Have a dedicated field for convenient access. It's also included in mutated.", - "allOf": [ - { - "$ref": "#/components/schemas/ObjectReferenceWithOwner" - } - ] - }, - "gas_used": { - "$ref": "#/components/schemas/GasCostSummary" - }, - "modified_at_versions": { - "description": "The version that every modified (mutated or deleted) object had before it was modified by this transaction.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ModifiedAtVersion" - } - }, - "mutated": { - "description": "ObjectReference and owner of mutated objects, including gas object.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ObjectReferenceWithOwner" - } - }, - "shared_objects": { - "description": "The object references of the shared objects used in this transaction. Empty if no shared objects were used.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ObjectReference" - } - }, - "status": { - "$ref": "#/components/schemas/FailureStatus" - }, - "success": { - "type": "boolean" - }, - "transaction_digest": { - "description": "The transaction digest", - "allOf": [ - { - "$ref": "#/components/schemas/TransactionDigest" - } - ] - }, - "unwrapped": { - "description": "ObjectReference and owner of objects that are unwrapped in this transaction. Unwrapped objects are objects that were wrapped into other objects in the past, and just got extracted out.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ObjectReferenceWithOwner" - } - }, - "unwrapped_then_deleted": { - "description": "Object refs of objects previously wrapped in other objects but now deleted.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ObjectReference" - } - }, - "version": { - "type": "string", - "enum": [ - "1" - ] - }, - "wrapped": { - "description": "Object refs of objects now wrapped in other objects.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ObjectReference" - } - } - } - }, { "description": "The response from processing a transaction or a certified transaction", "type": "object", @@ -4445,7 +4283,7 @@ "version": { "type": "string", "enum": [ - "2" + "1" ] } } @@ -4652,7 +4490,7 @@ "kind": { "type": "string", "enum": [ - "authenticator_state_update" + "authenticator_state_update_v1" ] }, "new_active_jwks": { From daa06dbc07a8f80e68716caadd97c105dc984f49 Mon Sep 17 00:00:00 2001 From: evavirseda Date: Tue, 29 Oct 2024 15:42:20 +0100 Subject: [PATCH 15/55] feat(wallet-dashboard): style balance box (#3717) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(wallet-dashboard): add protected layout * feat: add missing TopNav * fix: tests * fix: imports * feat: add grid * feat: refine balance box * feat: fix format * fix: add missing themes * feat: add autoconnect feature * feat: rename folder * feat: add missing styles * feat: add toast after copye address --------- Co-authored-by: JCNoguera <88061365+VmMad@users.noreply.github.com> Co-authored-by: Begoña Álvarez de la Cruz --- .../app/(protected)/home/page.tsx | 34 ++++-- apps/wallet-dashboard/app/globals.css | 36 +++++++ apps/wallet-dashboard/app/layout.tsx | 3 + .../AccountBalance/AccountBalance.tsx | 24 ----- .../account-balance/AccountBalance.tsx | 101 ++++++++++++++++++ apps/wallet-dashboard/components/index.ts | 2 +- apps/wallet-dashboard/package.json | 1 + pnpm-lock.yaml | 3 + 8 files changed, 171 insertions(+), 33 deletions(-) delete mode 100644 apps/wallet-dashboard/components/AccountBalance/AccountBalance.tsx create mode 100644 apps/wallet-dashboard/components/account-balance/AccountBalance.tsx diff --git a/apps/wallet-dashboard/app/(protected)/home/page.tsx b/apps/wallet-dashboard/app/(protected)/home/page.tsx index 53c3d8433b3..4dd445eedcc 100644 --- a/apps/wallet-dashboard/app/(protected)/home/page.tsx +++ b/apps/wallet-dashboard/app/(protected)/home/page.tsx @@ -16,16 +16,34 @@ function HomeDashboardPage(): JSX.Element { }; return ( -
-

Connection status: {connectionStatus}

+
{connectionStatus === 'connected' && account && ( -
-

Welcome

-
Address: {account.address}
- - + <> +
+
+ +
+
+ Staking +
+
+ Migration +
+
+ +
+
+ Vesting +
+
+ Activity +
+
-
+ )}
); diff --git a/apps/wallet-dashboard/app/globals.css b/apps/wallet-dashboard/app/globals.css index f20990e2944..a5cf2ad80f6 100644 --- a/apps/wallet-dashboard/app/globals.css +++ b/apps/wallet-dashboard/app/globals.css @@ -1,3 +1,5 @@ +@import '@iota/apps-ui-kit/styles'; + @tailwind base; @tailwind components; @tailwind utilities; @@ -14,3 +16,37 @@ body { text-wrap: balance; } } + +@layer components { + .home-page-grid-container { + @apply grid grid-cols-1 gap-lg; + grid-template-areas: + 'balance' + 'staking' + 'migration' + 'coins' + 'vesting' + 'activity'; + } + + @screen sm { + .home-page-grid-container { + @apply grid-cols-2; + grid-template-areas: + 'balance coins' + 'staking migration' + 'vesting vesting' + 'activity activity'; + } + } + + @screen md { + .home-page-grid-container { + @apply grid-cols-3; + grid-template-areas: + 'balance staking migration' + 'coins vesting vesting' + 'coins activity activity'; + } + } +} diff --git a/apps/wallet-dashboard/app/layout.tsx b/apps/wallet-dashboard/app/layout.tsx index dadbd552dbf..328f5fa085e 100644 --- a/apps/wallet-dashboard/app/layout.tsx +++ b/apps/wallet-dashboard/app/layout.tsx @@ -13,6 +13,7 @@ import React from 'react'; import '@iota/dapp-kit/dist/index.css'; import { Popup, PopupProvider } from '@/components/Popup'; +import { Toaster } from 'react-hot-toast'; const inter = Inter({ subsets: ['latin'] }); @@ -33,6 +34,7 @@ export default function RootLayout({ {children} + diff --git a/apps/wallet-dashboard/components/AccountBalance/AccountBalance.tsx b/apps/wallet-dashboard/components/AccountBalance/AccountBalance.tsx deleted file mode 100644 index accc76d43e3..00000000000 --- a/apps/wallet-dashboard/components/AccountBalance/AccountBalance.tsx +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (c) 2024 IOTA Stiftung -// SPDX-License-Identifier: Apache-2.0 - -import { useCurrentAccount } from '@iota/dapp-kit'; -import { IOTA_TYPE_ARG } from '@iota/iota-sdk/utils'; - -import { useBalance, useFormatCoin } from '@iota/core'; - -export const AccountBalance = () => { - const account = useCurrentAccount(); - const address = account?.address; - const { data: coinBalance, isPending } = useBalance(address!); - const [formatted, symbol] = useFormatCoin(coinBalance?.totalBalance, IOTA_TYPE_ARG); - return ( -
- {isPending &&

Loading...

} - {!isPending && ( -

- Balance: {formatted} {symbol} -

- )} -
- ); -}; diff --git a/apps/wallet-dashboard/components/account-balance/AccountBalance.tsx b/apps/wallet-dashboard/components/account-balance/AccountBalance.tsx new file mode 100644 index 00000000000..23707407541 --- /dev/null +++ b/apps/wallet-dashboard/components/account-balance/AccountBalance.tsx @@ -0,0 +1,101 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +import { useCurrentAccount, useIotaClientContext, useIotaClientQuery } from '@iota/dapp-kit'; +import { formatAddress, IOTA_TYPE_ARG } from '@iota/iota-sdk/utils'; +import { + COINS_QUERY_REFETCH_INTERVAL, + COINS_QUERY_STALE_TIME, + filterAndSortTokenBalances, + useBalance, + useFormatCoin, +} from '@iota/core'; +import { Address, Button, ButtonSize, ButtonType, Panel } from '@iota/apps-ui-kit'; +import { CoinBalance, getNetwork } from '@iota/iota-sdk/client'; +import { SendCoinPopup } from '../Popup'; +import { usePopups } from '@/hooks'; +import toast from 'react-hot-toast'; + +export function AccountBalance() { + const account = useCurrentAccount(); + const address = account?.address; + const { openPopup, closePopup } = usePopups(); + const { network } = useIotaClientContext(); + const { explorer } = getNetwork(network); + const { data: coinBalance, isPending } = useBalance(address!); + const formattedAddress = formatAddress(address!); + const [formatted, symbol] = useFormatCoin(coinBalance?.totalBalance, IOTA_TYPE_ARG); + const { data: coinBalances } = useIotaClientQuery( + 'getAllBalances', + { owner: address! }, + { + enabled: !!address, + staleTime: COINS_QUERY_STALE_TIME, + refetchInterval: COINS_QUERY_REFETCH_INTERVAL, + select: filterAndSortTokenBalances, + }, + ); + const explorerLink = `${explorer}/address/${address}`; + + function openSendTokenPopup(coin: CoinBalance, address: string): void { + if (coinBalances) { + openPopup( + , + ); + } + } + + function handleOnCopySuccess() { + toast.success('Address copied'); + } + + return ( + + {isPending &&

Loading...

} + {!isPending && ( +
+
+ {address && ( +
+ )} + + {formatted} {symbol} + +
+
+
+
+ )} +
+ ); +} diff --git a/apps/wallet-dashboard/components/index.ts b/apps/wallet-dashboard/components/index.ts index 92c10096966..e7f010c273f 100644 --- a/apps/wallet-dashboard/components/index.ts +++ b/apps/wallet-dashboard/components/index.ts @@ -12,7 +12,7 @@ export { default as ExternalImage } from './ExternalImage'; export { default as TransactionIcon } from './TransactionIcon'; export { default as Dropdown } from './Dropdown'; -export * from './AccountBalance/AccountBalance'; +export * from './account-balance/AccountBalance'; export * from './Coins'; export * from './Popup'; export * from './AppList'; diff --git a/apps/wallet-dashboard/package.json b/apps/wallet-dashboard/package.json index 6807f6fda94..e8a4a107e2f 100644 --- a/apps/wallet-dashboard/package.json +++ b/apps/wallet-dashboard/package.json @@ -25,6 +25,7 @@ "clsx": "^2.1.1", "next": "14.2.10", "react": "^18.3.1", + "react-hot-toast": "^2.4.1", "zustand": "^4.4.1" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9883c275a4a..92e2c8a9a2f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1021,6 +1021,9 @@ importers: react: specifier: ^18.3.1 version: 18.3.1 + react-hot-toast: + specifier: ^2.4.1 + version: 2.4.1(csstype@3.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) zustand: specifier: ^4.4.1 version: 4.5.5(@types/react@18.3.9)(immer@9.0.21)(react@18.3.1) From f65de682b85bfd53a102f8e1b501a588c3c38dfd Mon Sep 17 00:00:00 2001 From: Marc Espin Date: Tue, 29 Oct 2024 16:34:31 +0100 Subject: [PATCH 16/55] fix(tooling-ci): Update vercel deploy production name job (#3767) --- .github/workflows/_vercel_deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/_vercel_deploy.yml b/.github/workflows/_vercel_deploy.yml index 47f9d854598..4aa236a5472 100644 --- a/.github/workflows/_vercel_deploy.yml +++ b/.github/workflows/_vercel_deploy.yml @@ -58,7 +58,7 @@ jobs: isProd: false ui-kit-prod: - name: Vercel UI Kit Preview + name: Vercel UI Kit Production if: inputs.isDevelop uses: ./.github/workflows/apps-ui-kit.deploy.yml secrets: inherit From 1a4f3f869412b2ddbb6bb4c5db3cfaa01497b1e1 Mon Sep 17 00:00:00 2001 From: Piotr Macek <4007944+piotrm50@users.noreply.github.com> Date: Tue, 29 Oct 2024 16:36:43 +0100 Subject: [PATCH 17/55] Fix CLI Faucet test (#3765) --- crates/iota/tests/cli_tests.rs | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/crates/iota/tests/cli_tests.rs b/crates/iota/tests/cli_tests.rs index 4d7521ceb7b..a82107f46c5 100644 --- a/crates/iota/tests/cli_tests.rs +++ b/crates/iota/tests/cli_tests.rs @@ -26,7 +26,7 @@ use iota::{ key_identity::{KeyIdentity, get_identity_address}, }; use iota_config::{ - Config, IOTA_CLIENT_CONFIG, IOTA_FULLNODE_CONFIG, IOTA_GENESIS_FILENAME, + IOTA_CLIENT_CONFIG, IOTA_FULLNODE_CONFIG, IOTA_GENESIS_FILENAME, IOTA_KEYSTORE_ALIASES_FILENAME, IOTA_KEYSTORE_FILENAME, IOTA_NETWORK_CONFIG, PersistedConfig, }; use iota_json::IotaJsonValue; @@ -4144,15 +4144,7 @@ async fn test_faucet() -> Result<(), anyhow::Error> { // Wait for the faucet to be up sleep(Duration::from_secs(1)).await; - - let wallet_config = tmp.path().join("walletconfig"); - let mut keystore = iota_keys::keystore::FileBasedKeystore::new(&tmp.path().join("keystore"))?; - keystore - .generate_and_add_new_key(SignatureScheme::ED25519, None, None, None) - .unwrap(); - let mut client_config = IotaClientConfig::new(keystore.into()); - client_config.add_env(iota_sdk::iota_client_config::IotaEnv::localnet()); - client_config.save(&wallet_config)?; + let wallet_config = test_cluster.swarm.dir().join(IOTA_CLIENT_CONFIG); let mut context = WalletContext::new(&wallet_config, None, None)?; let faucet_result = IotaClientCommands::Faucet { From cdec695c95c84e5cdecd32423cca01928e25438f Mon Sep 17 00:00:00 2001 From: Thibault Martinez Date: Tue, 29 Oct 2024 17:47:08 +0100 Subject: [PATCH 18/55] chore(ci): harmonize workflow file names with `_` (#3756) --- .github/workflows/_vercel_deploy.yml | 16 ++++++++-------- ...ackend.deploy.yml => apps_backend_deploy.yml} | 0 ...lorer.deploy.yml => apps_explorer_deploy.yml} | 0 ...-ui-kit.deploy.yml => apps_ui_kit_deploy.yml} | 0 ...ploy.yml => apps_wallet_dashboard_deploy.yml} | 0 ...y.build.yml => apps_wallet_nightly_build.yml} | 0 ...let-rc.build.yml => apps_wallet_rc_build.yml} | 0 .../{build-nightly.yml => build_nightly.yml} | 0 .../{cargo-llvm-cov.yml => cargo_llvm_cov.yml} | 0 .../{changesets-ci.yml => changesets_ci.yml} | 0 ...-ci-comment.yml => changesets_ci_comment.yml} | 0 ...gesets-publish.yml => changesets_publish.yml} | 0 .../workflows/{crate-docs.yml => crate_docs.yml} | 0 ...ck-report.yml => develop_ci_slack_report.yml} | 0 .../{preview-wiki.yml => preview_wiki.yml} | 0 .../{release-docker.yml => release_docker.yml} | 0 ...tes-monitor.yml => release_notes_monitor.yml} | 0 .../{release-wiki.yml => release_wiki.yml} | 0 ...mulator-nightly.yml => simulator_nightly.yml} | 0 .../{split-cluster.yml => split_cluster.yml} | 0 .../{trigger-builds.yml => trigger_builds.yml} | 0 21 files changed, 8 insertions(+), 8 deletions(-) rename .github/workflows/{apps-backend.deploy.yml => apps_backend_deploy.yml} (100%) rename .github/workflows/{apps-explorer.deploy.yml => apps_explorer_deploy.yml} (100%) rename .github/workflows/{apps-ui-kit.deploy.yml => apps_ui_kit_deploy.yml} (100%) rename .github/workflows/{apps-wallet-dashboard.deploy.yml => apps_wallet_dashboard_deploy.yml} (100%) rename .github/workflows/{apps-wallet-nightly.build.yml => apps_wallet_nightly_build.yml} (100%) rename .github/workflows/{apps-wallet-rc.build.yml => apps_wallet_rc_build.yml} (100%) rename .github/workflows/{build-nightly.yml => build_nightly.yml} (100%) rename .github/workflows/{cargo-llvm-cov.yml => cargo_llvm_cov.yml} (100%) rename .github/workflows/{changesets-ci.yml => changesets_ci.yml} (100%) rename .github/workflows/{changesets-ci-comment.yml => changesets_ci_comment.yml} (100%) rename .github/workflows/{changesets-publish.yml => changesets_publish.yml} (100%) rename .github/workflows/{crate-docs.yml => crate_docs.yml} (100%) rename .github/workflows/{develop-ci-slack-report.yml => develop_ci_slack_report.yml} (100%) rename .github/workflows/{preview-wiki.yml => preview_wiki.yml} (100%) rename .github/workflows/{release-docker.yml => release_docker.yml} (100%) rename .github/workflows/{release-notes-monitor.yml => release_notes_monitor.yml} (100%) rename .github/workflows/{release-wiki.yml => release_wiki.yml} (100%) rename .github/workflows/{simulator-nightly.yml => simulator_nightly.yml} (100%) rename .github/workflows/{split-cluster.yml => split_cluster.yml} (100%) rename .github/workflows/{trigger-builds.yml => trigger_builds.yml} (100%) diff --git a/.github/workflows/_vercel_deploy.yml b/.github/workflows/_vercel_deploy.yml index 4aa236a5472..b1efe39a2ea 100644 --- a/.github/workflows/_vercel_deploy.yml +++ b/.github/workflows/_vercel_deploy.yml @@ -36,7 +36,7 @@ jobs: explorer-preview: name: Vercel Explorer Preview if: inputs.shouldDeployPreview && inputs.isExplorer - uses: ./.github/workflows/apps-explorer.deploy.yml + uses: ./.github/workflows/apps_explorer_deploy.yml secrets: inherit with: isProd: false @@ -44,7 +44,7 @@ jobs: explorer-prod: name: Vercel Explorer Production if: inputs.isDevelop - uses: ./.github/workflows/apps-explorer.deploy.yml + uses: ./.github/workflows/apps_explorer_deploy.yml secrets: inherit with: isProd: true @@ -52,7 +52,7 @@ jobs: ui-kit-preview: name: Vercel UI Kit Preview if: inputs.shouldDeployPreview && inputs.isAppsUiKit - uses: ./.github/workflows/apps-ui-kit.deploy.yml + uses: ./.github/workflows/apps_ui_kit_deploy.yml secrets: inherit with: isProd: false @@ -60,7 +60,7 @@ jobs: ui-kit-prod: name: Vercel UI Kit Production if: inputs.isDevelop - uses: ./.github/workflows/apps-ui-kit.deploy.yml + uses: ./.github/workflows/apps_ui_kit_deploy.yml secrets: inherit with: isProd: true @@ -68,7 +68,7 @@ jobs: wallet-dashboard-preview: name: Vercel Wallet Dashboard Preview if: inputs.shouldDeployPreview && inputs.isWalletDashboard - uses: ./.github/workflows/apps-wallet-dashboard.deploy.yml + uses: ./.github/workflows/apps_wallet_dashboard_deploy.yml secrets: inherit with: isProd: false @@ -76,7 +76,7 @@ jobs: wallet-dashboard-prod: name: Vercel Wallet Dashboard Production if: inputs.isDevelop - uses: ./.github/workflows/apps-wallet-dashboard.deploy.yml + uses: ./.github/workflows/apps_wallet_dashboard_deploy.yml secrets: inherit with: isProd: true @@ -84,7 +84,7 @@ jobs: apps-backend-preview: name: Vercel apps-backend Preview if: inputs.shouldDeployPreview && inputs.isAppsBackend - uses: ./.github/workflows/apps-backend.deploy.yml + uses: ./.github/workflows/apps_backend_deploy.yml secrets: inherit with: isProd: false @@ -92,7 +92,7 @@ jobs: apps-backend-prod: name: Vercel apps-backend Production if: inputs.isDevelop - uses: ./.github/workflows/apps-backend.deploy.yml + uses: ./.github/workflows/apps_backend_deploy.yml secrets: inherit with: isProd: true diff --git a/.github/workflows/apps-backend.deploy.yml b/.github/workflows/apps_backend_deploy.yml similarity index 100% rename from .github/workflows/apps-backend.deploy.yml rename to .github/workflows/apps_backend_deploy.yml diff --git a/.github/workflows/apps-explorer.deploy.yml b/.github/workflows/apps_explorer_deploy.yml similarity index 100% rename from .github/workflows/apps-explorer.deploy.yml rename to .github/workflows/apps_explorer_deploy.yml diff --git a/.github/workflows/apps-ui-kit.deploy.yml b/.github/workflows/apps_ui_kit_deploy.yml similarity index 100% rename from .github/workflows/apps-ui-kit.deploy.yml rename to .github/workflows/apps_ui_kit_deploy.yml diff --git a/.github/workflows/apps-wallet-dashboard.deploy.yml b/.github/workflows/apps_wallet_dashboard_deploy.yml similarity index 100% rename from .github/workflows/apps-wallet-dashboard.deploy.yml rename to .github/workflows/apps_wallet_dashboard_deploy.yml diff --git a/.github/workflows/apps-wallet-nightly.build.yml b/.github/workflows/apps_wallet_nightly_build.yml similarity index 100% rename from .github/workflows/apps-wallet-nightly.build.yml rename to .github/workflows/apps_wallet_nightly_build.yml diff --git a/.github/workflows/apps-wallet-rc.build.yml b/.github/workflows/apps_wallet_rc_build.yml similarity index 100% rename from .github/workflows/apps-wallet-rc.build.yml rename to .github/workflows/apps_wallet_rc_build.yml diff --git a/.github/workflows/build-nightly.yml b/.github/workflows/build_nightly.yml similarity index 100% rename from .github/workflows/build-nightly.yml rename to .github/workflows/build_nightly.yml diff --git a/.github/workflows/cargo-llvm-cov.yml b/.github/workflows/cargo_llvm_cov.yml similarity index 100% rename from .github/workflows/cargo-llvm-cov.yml rename to .github/workflows/cargo_llvm_cov.yml diff --git a/.github/workflows/changesets-ci.yml b/.github/workflows/changesets_ci.yml similarity index 100% rename from .github/workflows/changesets-ci.yml rename to .github/workflows/changesets_ci.yml diff --git a/.github/workflows/changesets-ci-comment.yml b/.github/workflows/changesets_ci_comment.yml similarity index 100% rename from .github/workflows/changesets-ci-comment.yml rename to .github/workflows/changesets_ci_comment.yml diff --git a/.github/workflows/changesets-publish.yml b/.github/workflows/changesets_publish.yml similarity index 100% rename from .github/workflows/changesets-publish.yml rename to .github/workflows/changesets_publish.yml diff --git a/.github/workflows/crate-docs.yml b/.github/workflows/crate_docs.yml similarity index 100% rename from .github/workflows/crate-docs.yml rename to .github/workflows/crate_docs.yml diff --git a/.github/workflows/develop-ci-slack-report.yml b/.github/workflows/develop_ci_slack_report.yml similarity index 100% rename from .github/workflows/develop-ci-slack-report.yml rename to .github/workflows/develop_ci_slack_report.yml diff --git a/.github/workflows/preview-wiki.yml b/.github/workflows/preview_wiki.yml similarity index 100% rename from .github/workflows/preview-wiki.yml rename to .github/workflows/preview_wiki.yml diff --git a/.github/workflows/release-docker.yml b/.github/workflows/release_docker.yml similarity index 100% rename from .github/workflows/release-docker.yml rename to .github/workflows/release_docker.yml diff --git a/.github/workflows/release-notes-monitor.yml b/.github/workflows/release_notes_monitor.yml similarity index 100% rename from .github/workflows/release-notes-monitor.yml rename to .github/workflows/release_notes_monitor.yml diff --git a/.github/workflows/release-wiki.yml b/.github/workflows/release_wiki.yml similarity index 100% rename from .github/workflows/release-wiki.yml rename to .github/workflows/release_wiki.yml diff --git a/.github/workflows/simulator-nightly.yml b/.github/workflows/simulator_nightly.yml similarity index 100% rename from .github/workflows/simulator-nightly.yml rename to .github/workflows/simulator_nightly.yml diff --git a/.github/workflows/split-cluster.yml b/.github/workflows/split_cluster.yml similarity index 100% rename from .github/workflows/split-cluster.yml rename to .github/workflows/split_cluster.yml diff --git a/.github/workflows/trigger-builds.yml b/.github/workflows/trigger_builds.yml similarity index 100% rename from .github/workflows/trigger-builds.yml rename to .github/workflows/trigger_builds.yml From 6ea8bcdbd29ce13f6e9e5fcb5fae4133d83071ea Mon Sep 17 00:00:00 2001 From: Thoralf-M <46689931+Thoralf-M@users.noreply.github.com> Date: Wed, 30 Oct 2024 09:06:48 +0100 Subject: [PATCH 19/55] refactor(iota-faucet): use consts in FaucetConfig::default() (#3748) --- crates/iota-faucet/src/faucet/mod.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/iota-faucet/src/faucet/mod.rs b/crates/iota-faucet/src/faucet/mod.rs index 2174d9bf6f1..0461473841b 100644 --- a/crates/iota-faucet/src/faucet/mod.rs +++ b/crates/iota-faucet/src/faucet/mod.rs @@ -137,8 +137,8 @@ impl Default for FaucetConfig { Self { port: 5003, host_ip: Ipv4Addr::new(127, 0, 0, 1), - amount: 1_000_000_000, - num_coins: 1, + amount: DEFAULT_AMOUNT, + num_coins: DEFAULT_NUM_OF_COINS, request_buffer_size: 10, max_request_per_second: 10, wallet_client_timeout_secs: 60, From d91f3d77ebe79be420d85bffd806c6cff4a779cc Mon Sep 17 00:00:00 2001 From: Valerii Reutov Date: Wed, 30 Oct 2024 01:36:56 -0700 Subject: [PATCH 20/55] fix(iota-e2e-tests): fixed framework update tests (#3736) * fix(iota-e2e-tests): fixed framework update tests data * fix(iota-core): assert in case if an advance epoch transaction was executed in the safe mode * fix(iota-core): code cleanup --- crates/iota-core/src/authority.rs | 18 ++- crates/iota-core/src/checkpoints/mod.rs | 11 +- .../base/sources/genesis.move | 24 ++-- .../base/sources/iota_system.move | 44 ++++--- .../base/sources/iota_system_state_inner.move | 92 ++++++++++---- .../base/sources/validator.move | 19 ++- .../base/sources/validator_wrapper.move | 26 ++-- .../deep_upgrade/sources/genesis.move | 26 ++-- .../deep_upgrade/sources/iota_system.move | 45 ++++--- .../sources/iota_system_state_inner.move | 115 ++++++++++++------ .../deep_upgrade/sources/validator.move | 19 ++- .../sources/validator_wrapper.move | 25 ++-- .../safe_mode/sources/genesis.move | 24 ++-- .../safe_mode/sources/iota_system.move | 42 ++++--- .../sources/iota_system_state_inner.move | 83 +++++++++---- .../safe_mode/sources/validator.move | 13 +- .../safe_mode/sources/validator_wrapper.move | 2 +- .../shallow_upgrade/sources/genesis.move | 24 ++-- .../shallow_upgrade/sources/iota_system.move | 45 ++++--- .../sources/iota_system_state_inner.move | 104 +++++++++++----- .../shallow_upgrade/sources/validator.move | 13 +- .../sources/validator_wrapper.move | 26 ++-- .../simtest_iota_system_state_inner.rs | 4 + 23 files changed, 533 insertions(+), 311 deletions(-) diff --git a/crates/iota-core/src/authority.rs b/crates/iota-core/src/authority.rs index b783c447b90..2148444201e 100644 --- a/crates/iota-core/src/authority.rs +++ b/crates/iota-core/src/authority.rs @@ -4514,7 +4514,11 @@ impl AuthorityState { gas_cost_summary: &GasCostSummary, checkpoint: CheckpointSequenceNumber, epoch_start_timestamp_ms: CheckpointTimestamp, - ) -> anyhow::Result<(IotaSystemState, SystemEpochInfoEventV1, TransactionEffects)> { + ) -> anyhow::Result<( + IotaSystemState, + Option, + TransactionEffects, + )> { let mut txns = Vec::new(); if let Some(tx) = self.create_authenticator_state_tx(epoch_store) { @@ -4644,11 +4648,13 @@ impl AuthorityState { .data .iter() .find(|event| event.is_system_epoch_info_event()) - .expect("end of epoch tx must emit system epoch info event"); - let system_epoch_info_event = bcs::from_bytes::( - &system_epoch_info_event.contents, - ) - .expect("deserialization should succeed since we asserted that the event is of this type"); + .map(|event| { + bcs::from_bytes::(&event.contents) + .expect("event deserialization should succeed as type was pre-validated") + }); + // The system epoch info event can be `None` in case if the `advance_epoch` + // Move function call failed and was executed in the safe mode. + assert!(system_epoch_info_event.is_some() || system_obj.safe_mode()); // We must write tx and effects to the state sync tables so that state sync is // able to deliver to the transaction to CheckpointExecutor after it is diff --git a/crates/iota-core/src/checkpoints/mod.rs b/crates/iota-core/src/checkpoints/mod.rs index f23767c8f84..5fcec61ad33 100644 --- a/crates/iota-core/src/checkpoints/mod.rs +++ b/crates/iota-core/src/checkpoints/mod.rs @@ -1445,11 +1445,16 @@ impl CheckpointBuilder { ) .await?; + // The system epoch info event can be `None` in case if the `advance_epoch` + // Move function call failed and was executed in the safe mode. + // In this case, the tokens supply should be unchanged. + // // SAFETY: The number of minted and burnt tokens easily fit into an i64 and due // to those small numbers, no overflows will occur during conversion or // subtraction. - let epoch_supply_change = system_epoch_info_event.minted_tokens_amount as i64 - - system_epoch_info_event.burnt_tokens_amount as i64; + let epoch_supply_change = system_epoch_info_event.map_or(0, |event| { + event.minted_tokens_amount as i64 - event.burnt_tokens_amount as i64 + }); let committee = system_state_obj .get_current_epoch_committee() @@ -1574,7 +1579,7 @@ impl CheckpointBuilder { checkpoint_effects: &mut Vec, signatures: &mut Vec>, checkpoint: CheckpointSequenceNumber, - ) -> anyhow::Result<(IotaSystemState, SystemEpochInfoEventV1)> { + ) -> anyhow::Result<(IotaSystemState, Option)> { let (system_state, system_epoch_info_event, effects) = self .state .create_and_execute_advance_epoch_tx( diff --git a/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/base/sources/genesis.move b/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/base/sources/genesis.move index e6bff0442aa..f4d69976b8b 100644 --- a/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/base/sources/genesis.move +++ b/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/base/sources/genesis.move @@ -3,12 +3,11 @@ // SPDX-License-Identifier: Apache-2.0 module iota_system::genesis { - use std::vector; - use iota::balance::{Self, Balance}; - use iota::object::UID; - use iota::iota::IOTA; - use iota::tx_context::{Self, TxContext}; - use std::option::Option; + use std::string::String; + + use iota::balance; + use iota::iota::IotaTreasuryCap; + use iota::timelock::SystemTimelockCap; use iota_system::iota_system; use iota_system::validator; @@ -55,15 +54,20 @@ module iota_system::genesis { public struct TokenAllocation has drop { recipient_address: address, amount_nanos: u64, + staked_with_validator: Option
, + staked_with_timelock_expiration: Option, } + #[allow(unused_function)] fun create( iota_system_state_id: UID, - mut iota_supply: Balance, + mut iota_treasury_cap: IotaTreasuryCap, genesis_chain_parameters: GenesisChainParameters, genesis_validators: vector, _token_distribution_schedule: TokenDistributionSchedule, + _timelock_genesis_label: Option, + system_timelock_cap: SystemTimelockCap, ctx: &mut TxContext, ) { assert!(tx_context::epoch(ctx) == 0, 0); @@ -97,7 +101,7 @@ module iota_system::genesis { network_address, p2p_address, primary_address, - balance::split(&mut iota_supply, 2500), + iota_treasury_cap.mint_balance(2500, ctx), ctx ); @@ -108,11 +112,13 @@ module iota_system::genesis { iota_system::create( iota_system_state_id, + iota_treasury_cap, validators, - iota_supply, // storage_fund + balance::zero(), genesis_chain_parameters.protocol_version, genesis_chain_parameters.chain_start_timestamp_ms, genesis_chain_parameters.epoch_duration_ms, + system_timelock_cap, ctx, ); } diff --git a/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/base/sources/iota_system.move b/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/base/sources/iota_system.move index 858f6d4d29d..9054f11b4a6 100644 --- a/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/base/sources/iota_system.move +++ b/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/base/sources/iota_system.move @@ -3,18 +3,16 @@ // SPDX-License-Identifier: Apache-2.0 module iota_system::iota_system { - use std::vector; - use iota::balance::Balance; - use iota::object::UID; - use iota::iota::IOTA; - use iota::transfer; - use iota::tx_context::{Self, TxContext}; use iota::dynamic_field; + use iota::iota::IOTA; + use iota::iota::IotaTreasuryCap; + use iota::timelock::SystemTimelockCap; - use iota_system::validator::Validator; - use iota_system::iota_system_state_inner::IotaSystemStateInner; - use iota_system::iota_system_state_inner; + use iota_system::validator::ValidatorV1; + use iota_system::iota_system_state_inner::{Self, IotaSystemStateV1}; + + const SYSTEM_TIMELOCK_CAP_DF_KEY: vector = b"sys_timelock_cap"; public struct IotaSystemState has key { id: UID, @@ -23,14 +21,17 @@ module iota_system::iota_system { public(package) fun create( id: UID, - validators: vector, + iota_treasury_cap: IotaTreasuryCap, + validators: vector, storage_fund: Balance, protocol_version: u64, epoch_start_timestamp_ms: u64, epoch_duration_ms: u64, + system_timelock_cap: SystemTimelockCap, ctx: &mut TxContext, ) { let system_state = iota_system_state_inner::create( + iota_treasury_cap, validators, storage_fund, protocol_version, @@ -44,21 +45,22 @@ module iota_system::iota_system { version, }; dynamic_field::add(&mut self.id, version, system_state); + dynamic_field::add(&mut self.id, SYSTEM_TIMELOCK_CAP_DF_KEY, system_timelock_cap); transfer::share_object(self); } + #[allow(unused_function)] fun advance_epoch( + validator_target_reward: u64, storage_charge: Balance, computation_reward: Balance, wrapper: &mut IotaSystemState, new_epoch: u64, next_protocol_version: u64, storage_rebate: u64, - _non_refundable_storage_fee: u64, - _storage_fund_reinvest_rate: u64, // share of storage fund's rewards that's reinvested - // into storage fund, in basis point. - _reward_slashing_rate: u64, // how much rewards are slashed to punish a validator, in bps. - epoch_start_timestamp_ms: u64, // Timestamp of the epoch start + non_refundable_storage_fee: u64, + reward_slashing_rate: u64, + epoch_start_timestamp_ms: u64, ctx: &mut TxContext, ) : Balance { let self = load_system_state_mut(wrapper); @@ -67,28 +69,32 @@ module iota_system::iota_system { self, new_epoch, next_protocol_version, + validator_target_reward, storage_charge, computation_reward, storage_rebate, + non_refundable_storage_fee, + reward_slashing_rate, epoch_start_timestamp_ms, + ctx ); storage_rebate } - public fun active_validator_addresses(wrapper: &mut IotaSystemState): vector
{ + public fun active_validator_addresses(_wrapper: &mut IotaSystemState): vector
{ vector::empty() } - fun load_system_state_mut(self: &mut IotaSystemState): &mut IotaSystemStateInner { + fun load_system_state_mut(self: &mut IotaSystemState): &mut IotaSystemStateV1 { load_inner_maybe_upgrade(self) } - fun load_inner_maybe_upgrade(self: &mut IotaSystemState): &mut IotaSystemStateInner { + fun load_inner_maybe_upgrade(self: &mut IotaSystemState): &mut IotaSystemStateV1 { let version = self.version; // TODO: This is where we check the version and perform upgrade if necessary. - let inner: &mut IotaSystemStateInner = dynamic_field::borrow_mut(&mut self.id, version); + let inner: &mut IotaSystemStateV1 = dynamic_field::borrow_mut(&mut self.id, version); assert!(iota_system_state_inner::system_state_version(inner) == version, 0); inner } diff --git a/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/base/sources/iota_system_state_inner.move b/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/base/sources/iota_system_state_inner.move index b5ecd4e6e21..e3abf0b3c56 100644 --- a/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/base/sources/iota_system_state_inner.move +++ b/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/base/sources/iota_system_state_inner.move @@ -3,39 +3,53 @@ // SPDX-License-Identifier: Apache-2.0 module iota_system::iota_system_state_inner { + use iota::bag::{Self, Bag}; use iota::balance::{Self, Balance}; + use iota::event; use iota::iota::IOTA; - use iota::tx_context::TxContext; - use iota::bag::{Self, Bag}; + use iota::iota::IotaTreasuryCap; use iota::table::{Self, Table}; - use iota::object::ID; - use iota_system::validator::Validator; - use iota_system::validator_wrapper::ValidatorWrapper; + use iota_system::validator::ValidatorV1; + use iota_system::validator_wrapper::Validator; use iota_system::validator_wrapper; use iota_system::validator; - use iota::object; const SYSTEM_STATE_VERSION_V1: u64 = 18446744073709551605; // u64::MAX - 10 - public struct SystemParameters has store { + public struct SystemEpochInfoEventV1 has copy, drop { + epoch: u64, + protocol_version: u64, + reference_gas_price: u64, + total_stake: u64, + storage_charge: u64, + storage_rebate: u64, + storage_fund_balance: u64, + total_gas_fees: u64, + total_stake_rewards_distributed: u64, + burnt_tokens_amount: u64, + minted_tokens_amount: u64, + } + + public struct SystemParametersV1 has store { epoch_duration_ms: u64, extra_fields: Bag, } - public struct ValidatorSet has store { - active_validators: vector, - inactive_validators: Table, + public struct ValidatorSetV1 has store { + active_validators: vector, + inactive_validators: Table, extra_fields: Bag, } - public struct IotaSystemStateInner has store { + public struct IotaSystemStateV1 has store { epoch: u64, protocol_version: u64, system_state_version: u64, - validators: ValidatorSet, + iota_treasury_cap: IotaTreasuryCap, + validators: ValidatorSetV1, storage_fund: Balance, - parameters: SystemParameters, + parameters: SystemParametersV1, reference_gas_price: u64, safe_mode: bool, epoch_start_timestamp_ms: u64, @@ -43,21 +57,23 @@ module iota_system::iota_system_state_inner { } public(package) fun create( - validators: vector, + iota_treasury_cap: IotaTreasuryCap, + validators: vector, storage_fund: Balance, protocol_version: u64, epoch_start_timestamp_ms: u64, epoch_duration_ms: u64, ctx: &mut TxContext, - ): IotaSystemStateInner { + ): IotaSystemStateV1 { let validators = new_validator_set(validators, ctx); - let mut system_state = IotaSystemStateInner { + let mut system_state = IotaSystemStateV1 { epoch: 0, protocol_version, system_state_version: genesis_system_state_version(), + iota_treasury_cap, validators, storage_fund, - parameters: SystemParameters { + parameters: SystemParametersV1 { epoch_duration_ms, extra_fields: bag::new(ctx), }, @@ -72,13 +88,17 @@ module iota_system::iota_system_state_inner { } public(package) fun advance_epoch( - self: &mut IotaSystemStateInner, + self: &mut IotaSystemStateV1, new_epoch: u64, next_protocol_version: u64, - storage_charge: Balance, - computation_reward: Balance, - storage_rebate_amount: u64, + _validator_target_reward: u64, + mut storage_charge: Balance, + mut computation_reward: Balance, + mut storage_rebate_amount: u64, + mut _non_refundable_storage_fee_amount: u64, + _reward_slashing_rate: u64, epoch_start_timestamp_ms: u64, + _ctx: &mut TxContext, ) : Balance { self.epoch_start_timestamp_ms = epoch_start_timestamp_ms; self.epoch = self.epoch + 1; @@ -86,19 +106,39 @@ module iota_system::iota_system_state_inner { self.safe_mode = false; self.protocol_version = next_protocol_version; + let storage_charge_value = storage_charge.value(); + let total_gas_fees = computation_reward.value(); + balance::join(&mut self.storage_fund, computation_reward); balance::join(&mut self.storage_fund, storage_charge); let storage_rebate = balance::split(&mut self.storage_fund, storage_rebate_amount); + + event::emit( + SystemEpochInfoEventV1 { + epoch: self.epoch, + protocol_version: self.protocol_version, + reference_gas_price: self.reference_gas_price, + total_stake: 0, + storage_charge: storage_charge_value, + storage_rebate: storage_rebate_amount, + storage_fund_balance: self.storage_fund.value(), + total_gas_fees, + total_stake_rewards_distributed: 0, + burnt_tokens_amount: 0, + minted_tokens_amount: 0, + } + ); + storage_rebate } - public(package) fun protocol_version(self: &IotaSystemStateInner): u64 { self.protocol_version } - public(package) fun system_state_version(self: &IotaSystemStateInner): u64 { self.system_state_version } + public(package) fun protocol_version(self: &IotaSystemStateV1): u64 { self.protocol_version } + public(package) fun system_state_version(self: &IotaSystemStateV1): u64 { self.system_state_version } public(package) fun genesis_system_state_version(): u64 { SYSTEM_STATE_VERSION_V1 } - public(package) fun add_dummy_inactive_validator_for_testing(self: &mut IotaSystemStateInner, ctx: &mut TxContext) { + public(package) fun add_dummy_inactive_validator_for_testing(self: &mut IotaSystemStateV1, ctx: &mut TxContext) { // Add a new entry to the inactive validator table for upgrade testing. let dummy_inactive_validator = validator_wrapper::create_v1( validator::new_dummy_inactive_validator(ctx), @@ -107,8 +147,8 @@ module iota_system::iota_system_state_inner { table::add(&mut self.validators.inactive_validators, object::id_from_address(@0x0), dummy_inactive_validator); } - fun new_validator_set(init_active_validators: vector, ctx: &mut TxContext): ValidatorSet { - ValidatorSet { + fun new_validator_set(init_active_validators: vector, ctx: &mut TxContext): ValidatorSetV1 { + ValidatorSetV1 { active_validators: init_active_validators, inactive_validators: table::new(ctx), extra_fields: bag::new(ctx), diff --git a/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/base/sources/validator.move b/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/base/sources/validator.move index c3aa4b4a4b3..8b3f056e0d2 100644 --- a/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/base/sources/validator.move +++ b/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/base/sources/validator.move @@ -5,13 +5,12 @@ module iota_system::validator { use std::ascii; - use iota::tx_context::TxContext; use std::string::{Self, String}; use iota::bag::{Self, Bag}; use iota::balance::{Self, Balance}; use iota::iota::IOTA; - public struct ValidatorMetadata has store { + public struct ValidatorMetadataV1 has store { iota_address: address, authority_pubkey_bytes: vector, network_pubkey_bytes: vector, @@ -22,8 +21,8 @@ module iota_system::validator { extra_fields: Bag, } - public struct Validator has store { - metadata: ValidatorMetadata, + public struct ValidatorV1 has store { + metadata: ValidatorMetadataV1, voting_power: u64, stake: Balance, extra_fields: Bag, @@ -39,8 +38,8 @@ module iota_system::validator { primary_address: vector, init_stake: Balance, ctx: &mut TxContext - ): Validator { - let metadata = ValidatorMetadata { + ): ValidatorV1 { + let metadata = ValidatorMetadataV1 { iota_address, authority_pubkey_bytes, network_pubkey_bytes, @@ -51,7 +50,7 @@ module iota_system::validator { extra_fields: bag::new(ctx), }; - Validator { + ValidatorV1 { metadata, voting_power: balance::value(&init_stake), stake: init_stake, @@ -61,8 +60,8 @@ module iota_system::validator { public(package) fun new_dummy_inactive_validator( ctx: &mut TxContext - ): Validator { - let metadata = ValidatorMetadata { + ): ValidatorV1 { + let metadata = ValidatorMetadataV1 { iota_address: @0x0, authority_pubkey_bytes: vector[], network_pubkey_bytes: vector[], @@ -73,7 +72,7 @@ module iota_system::validator { extra_fields: bag::new(ctx), }; - Validator { + ValidatorV1 { metadata, voting_power: 0, stake: balance::zero(), diff --git a/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/base/sources/validator_wrapper.move b/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/base/sources/validator_wrapper.move index ed74b47dd7b..d83238f0b9d 100644 --- a/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/base/sources/validator_wrapper.move +++ b/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/base/sources/validator_wrapper.move @@ -3,47 +3,45 @@ // SPDX-License-Identifier: Apache-2.0 module iota_system::validator_wrapper { - use iota::versioned::Versioned; - use iota::versioned; - use iota::tx_context::TxContext; - use iota_system::validator::Validator; + use iota::versioned::{Self, Versioned}; + use iota_system::validator::ValidatorV1; const VALIDATOR_VERSION_V1: u64 = 18446744073709551605; // u64::MAX - 10 const EInvalidVersion: u64 = 0; - public struct ValidatorWrapper has store { + public struct Validator has store { inner: Versioned } // Validator corresponds to version 1. - public(package) fun create_v1(validator: Validator, ctx: &mut TxContext): ValidatorWrapper { - ValidatorWrapper { + public(package) fun create_v1(validator: ValidatorV1, ctx: &mut TxContext): Validator { + Validator { inner: versioned::create(VALIDATOR_VERSION_V1, validator, ctx) } } /// This function should always return the latest supported version. /// If the inner version is old, we upgrade it lazily in-place. - public(package) fun load_validator_maybe_upgrade(self: &mut ValidatorWrapper): &mut Validator { + public(package) fun load_validator_maybe_upgrade(self: &mut Validator): &mut ValidatorV1 { upgrade_to_latest(self); - versioned::load_value_mut(&mut self.inner) + versioned::load_value_mut(&mut self.inner) } /// Destroy the wrapper and retrieve the inner validator object. - public(package) fun destroy(mut self: ValidatorWrapper): Validator { - upgrade_to_latest(&mut self); - let ValidatorWrapper { inner } = self; + public(package) fun destroy(self: Validator): ValidatorV1 { + upgrade_to_latest(&self); + let Validator { inner } = self; versioned::destroy(inner) } - fun upgrade_to_latest(self: &mut ValidatorWrapper) { + fun upgrade_to_latest(self: &Validator) { let version = version(self); // TODO: When new versions are added, we need to explicitly upgrade here. assert!(version == VALIDATOR_VERSION_V1, EInvalidVersion); } - fun version(self: &ValidatorWrapper): u64 { + fun version(self: &Validator): u64 { versioned::version(&self.inner) } } diff --git a/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/deep_upgrade/sources/genesis.move b/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/deep_upgrade/sources/genesis.move index 85852671040..f4d69976b8b 100644 --- a/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/deep_upgrade/sources/genesis.move +++ b/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/deep_upgrade/sources/genesis.move @@ -3,12 +3,11 @@ // SPDX-License-Identifier: Apache-2.0 module iota_system::genesis { - use std::vector; - use iota::balance::{Self, Balance}; - use iota::object::UID; - use iota::iota::IOTA; - use iota::tx_context::{Self, TxContext}; - use std::option::Option; + use std::string::String; + + use iota::balance; + use iota::iota::IotaTreasuryCap; + use iota::timelock::SystemTimelockCap; use iota_system::iota_system; use iota_system::validator; @@ -46,7 +45,7 @@ module iota_system::genesis { validator_very_low_stake_threshold: u64, validator_low_stake_grace_period: u64, } - + public struct TokenDistributionSchedule has drop { pre_minted_supply: u64, allocations: vector, @@ -55,15 +54,20 @@ module iota_system::genesis { public struct TokenAllocation has drop { recipient_address: address, amount_nanos: u64, + staked_with_validator: Option
, + staked_with_timelock_expiration: Option, } + #[allow(unused_function)] fun create( iota_system_state_id: UID, - mut iota_supply: Balance, + mut iota_treasury_cap: IotaTreasuryCap, genesis_chain_parameters: GenesisChainParameters, genesis_validators: vector, _token_distribution_schedule: TokenDistributionSchedule, + _timelock_genesis_label: Option, + system_timelock_cap: SystemTimelockCap, ctx: &mut TxContext, ) { assert!(tx_context::epoch(ctx) == 0, 0); @@ -97,7 +101,7 @@ module iota_system::genesis { network_address, p2p_address, primary_address, - balance::split(&mut iota_supply, 2500), + iota_treasury_cap.mint_balance(2500, ctx), ctx ); @@ -108,11 +112,13 @@ module iota_system::genesis { iota_system::create( iota_system_state_id, + iota_treasury_cap, validators, - iota_supply, // storage_fund + balance::zero(), genesis_chain_parameters.protocol_version, genesis_chain_parameters.chain_start_timestamp_ms, genesis_chain_parameters.epoch_duration_ms, + system_timelock_cap, ctx, ); } diff --git a/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/deep_upgrade/sources/iota_system.move b/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/deep_upgrade/sources/iota_system.move index 2232766f243..549ba9c21a3 100644 --- a/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/deep_upgrade/sources/iota_system.move +++ b/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/deep_upgrade/sources/iota_system.move @@ -3,17 +3,16 @@ // SPDX-License-Identifier: Apache-2.0 module iota_system::iota_system { - use std::vector; - use iota::balance::Balance; - use iota::object::UID; - use iota::iota::IOTA; - use iota::transfer; - use iota::tx_context::{Self, TxContext}; use iota::dynamic_field; + use iota::iota::IOTA; + use iota::iota::IotaTreasuryCap; + use iota::timelock::SystemTimelockCap; - use iota_system::validator::Validator; - use iota_system::iota_system_state_inner::{Self, IotaSystemStateInnerV2, IotaSystemStateInner}; + use iota_system::validator::ValidatorV1; + use iota_system::iota_system_state_inner::{Self, IotaSystemStateV1, IotaSystemStateV2}; + + const SYSTEM_TIMELOCK_CAP_DF_KEY: vector = b"sys_timelock_cap"; public struct IotaSystemState has key { id: UID, @@ -22,14 +21,17 @@ module iota_system::iota_system { public(package) fun create( id: UID, - validators: vector, + iota_treasury_cap: IotaTreasuryCap, + validators: vector, storage_fund: Balance, protocol_version: u64, epoch_start_timestamp_ms: u64, epoch_duration_ms: u64, + system_timelock_cap: SystemTimelockCap, ctx: &mut TxContext, ) { let system_state = iota_system_state_inner::create( + iota_treasury_cap, validators, storage_fund, protocol_version, @@ -43,21 +45,22 @@ module iota_system::iota_system { version, }; dynamic_field::add(&mut self.id, version, system_state); + dynamic_field::add(&mut self.id, SYSTEM_TIMELOCK_CAP_DF_KEY, system_timelock_cap); transfer::share_object(self); } + #[allow(unused_function)] fun advance_epoch( + validator_target_reward: u64, storage_charge: Balance, computation_reward: Balance, wrapper: &mut IotaSystemState, new_epoch: u64, next_protocol_version: u64, storage_rebate: u64, - _non_refundable_storage_fee: u64, - _storage_fund_reinvest_rate: u64, // share of storage fund's rewards that's reinvested - // into storage fund, in basis point. - _reward_slashing_rate: u64, // how much rewards are slashed to punish a validator, in bps. - epoch_start_timestamp_ms: u64, // Timestamp of the epoch start + non_refundable_storage_fee: u64, + reward_slashing_rate: u64, + epoch_start_timestamp_ms: u64, ctx: &mut TxContext, ) : Balance { let self = load_system_state_mut(wrapper); @@ -66,34 +69,38 @@ module iota_system::iota_system { self, new_epoch, next_protocol_version, + validator_target_reward, storage_charge, computation_reward, storage_rebate, + non_refundable_storage_fee, + reward_slashing_rate, epoch_start_timestamp_ms, + ctx ); storage_rebate } - public fun active_validator_addresses(wrapper: &mut IotaSystemState): vector
{ + public fun active_validator_addresses(_wrapper: &mut IotaSystemState): vector
{ vector::empty() } - fun load_system_state_mut(self: &mut IotaSystemState): &mut IotaSystemStateInnerV2 { + fun load_system_state_mut(self: &mut IotaSystemState): &mut IotaSystemStateV2 { load_inner_maybe_upgrade(self) } - fun load_inner_maybe_upgrade(self: &mut IotaSystemState): &mut IotaSystemStateInnerV2 { + fun load_inner_maybe_upgrade(self: &mut IotaSystemState): &mut IotaSystemStateV2 { let mut version = self.version; if (version == iota_system_state_inner::genesis_system_state_version()) { - let inner: IotaSystemStateInner = dynamic_field::remove(&mut self.id, version); + let inner: IotaSystemStateV1 = dynamic_field::remove(&mut self.id, version); let new_inner = iota_system_state_inner::v1_to_v2(inner); version = iota_system_state_inner::system_state_version(&new_inner); dynamic_field::add(&mut self.id, version, new_inner); self.version = version; }; - let inner: &mut IotaSystemStateInnerV2 = dynamic_field::borrow_mut(&mut self.id, version); + let inner: &mut IotaSystemStateV2 = dynamic_field::borrow_mut(&mut self.id, version); assert!(iota_system_state_inner::system_state_version(inner) == version, 0); inner } diff --git a/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/deep_upgrade/sources/iota_system_state_inner.move b/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/deep_upgrade/sources/iota_system_state_inner.move index c37f2b07fdc..a1f64c1602d 100644 --- a/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/deep_upgrade/sources/iota_system_state_inner.move +++ b/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/deep_upgrade/sources/iota_system_state_inner.move @@ -3,63 +3,76 @@ // SPDX-License-Identifier: Apache-2.0 module iota_system::iota_system_state_inner { - use std::vector; - + use iota::bag::{Self, Bag}; use iota::balance::{Self, Balance}; + use iota::event; use iota::iota::IOTA; - use iota::tx_context::TxContext; - use iota::bag::{Self, Bag}; + use iota::iota::IotaTreasuryCap; use iota::table::{Self, Table}; - use iota::object::ID; - use iota_system::validator::{Validator, ValidatorV2}; - use iota_system::validator_wrapper::ValidatorWrapper; + use iota_system::validator::{ValidatorV1, ValidatorV2}; + use iota_system::validator_wrapper::Validator; use iota_system::validator_wrapper; - use iota::object; use iota_system::validator; const SYSTEM_STATE_VERSION_V1: u64 = 18446744073709551605; // u64::MAX - 10 - // Not using MAX - 9 since it's already used in the shallow upgrade test. + // Not using MAX - 9 since it's already used in the shallow upgrade test. const SYSTEM_STATE_VERSION_V2: u64 = 18446744073709551607; // u64::MAX - 8 - public struct SystemParameters has store { + public struct SystemEpochInfoEventV1 has copy, drop { + epoch: u64, + protocol_version: u64, + reference_gas_price: u64, + total_stake: u64, + storage_charge: u64, + storage_rebate: u64, + storage_fund_balance: u64, + total_gas_fees: u64, + total_stake_rewards_distributed: u64, + burnt_tokens_amount: u64, + minted_tokens_amount: u64, + } + + public struct SystemParametersV1 has store { epoch_duration_ms: u64, extra_fields: Bag, } - public struct ValidatorSet has store { - active_validators: vector, - inactive_validators: Table, + public struct ValidatorSetV1 has store { + active_validators: vector, + inactive_validators: Table, extra_fields: Bag, } public struct ValidatorSetV2 has store { active_validators: vector, - inactive_validators: Table, + inactive_validators: Table, extra_fields: Bag, } - public struct IotaSystemStateInner has store { + public struct IotaSystemStateV1 has store { epoch: u64, protocol_version: u64, system_state_version: u64, - validators: ValidatorSet, + iota_treasury_cap: IotaTreasuryCap, + validators: ValidatorSetV1, storage_fund: Balance, - parameters: SystemParameters, + parameters: SystemParametersV1, reference_gas_price: u64, safe_mode: bool, epoch_start_timestamp_ms: u64, extra_fields: Bag, } - public struct IotaSystemStateInnerV2 has store { + public struct IotaSystemStateV2 has store { new_dummy_field: u64, epoch: u64, protocol_version: u64, system_state_version: u64, + iota_treasury_cap: IotaTreasuryCap, validators: ValidatorSetV2, storage_fund: Balance, - parameters: SystemParameters, + parameters: SystemParametersV1, reference_gas_price: u64, safe_mode: bool, epoch_start_timestamp_ms: u64, @@ -67,21 +80,23 @@ module iota_system::iota_system_state_inner { } public(package) fun create( - validators: vector, + iota_treasury_cap: IotaTreasuryCap, + validators: vector, storage_fund: Balance, protocol_version: u64, epoch_start_timestamp_ms: u64, epoch_duration_ms: u64, ctx: &mut TxContext, - ): IotaSystemStateInner { + ): IotaSystemStateV1 { let validators = new_validator_set(validators, ctx); - let system_state = IotaSystemStateInner { + let system_state = IotaSystemStateV1 { epoch: 0, protocol_version, system_state_version: genesis_system_state_version(), + iota_treasury_cap, validators, storage_fund, - parameters: SystemParameters { + parameters: SystemParametersV1 { epoch_duration_ms, extra_fields: bag::new(ctx), }, @@ -94,13 +109,17 @@ module iota_system::iota_system_state_inner { } public(package) fun advance_epoch( - self: &mut IotaSystemStateInnerV2, + self: &mut IotaSystemStateV2, new_epoch: u64, next_protocol_version: u64, - storage_charge: Balance, - computation_reward: Balance, - storage_rebate_amount: u64, + _validator_target_reward: u64, + mut storage_charge: Balance, + mut computation_reward: Balance, + mut storage_rebate_amount: u64, + mut _non_refundable_storage_fee_amount: u64, + _reward_slashing_rate: u64, epoch_start_timestamp_ms: u64, + _ctx: &mut TxContext, ) : Balance { touch_dummy_inactive_validator(self); @@ -110,31 +129,52 @@ module iota_system::iota_system_state_inner { self.safe_mode = false; self.protocol_version = next_protocol_version; + let storage_charge_value = storage_charge.value(); + let total_gas_fees = computation_reward.value(); + balance::join(&mut self.storage_fund, computation_reward); balance::join(&mut self.storage_fund, storage_charge); let storage_rebate = balance::split(&mut self.storage_fund, storage_rebate_amount); + + event::emit( + SystemEpochInfoEventV1 { + epoch: self.epoch, + protocol_version: self.protocol_version, + reference_gas_price: self.reference_gas_price, + total_stake: 0, + storage_charge: storage_charge_value, + storage_rebate: storage_rebate_amount, + storage_fund_balance: self.storage_fund.value(), + total_gas_fees, + total_stake_rewards_distributed: 0, + burnt_tokens_amount: 0, + minted_tokens_amount: 0, + } + ); + storage_rebate } - public(package) fun protocol_version(self: &IotaSystemStateInnerV2): u64 { self.protocol_version } - public(package) fun system_state_version(self: &IotaSystemStateInnerV2): u64 { self.system_state_version } + public(package) fun protocol_version(self: &IotaSystemStateV2): u64 { self.protocol_version } + public(package) fun system_state_version(self: &IotaSystemStateV2): u64 { self.system_state_version } public(package) fun genesis_system_state_version(): u64 { SYSTEM_STATE_VERSION_V1 } - fun new_validator_set(init_active_validators: vector, ctx: &mut TxContext): ValidatorSet { - ValidatorSet { + fun new_validator_set(init_active_validators: vector, ctx: &mut TxContext): ValidatorSetV1 { + ValidatorSetV1 { active_validators: init_active_validators, inactive_validators: table::new(ctx), extra_fields: bag::new(ctx), } } - public(package) fun v1_to_v2(v1: IotaSystemStateInner): IotaSystemStateInnerV2 { - let IotaSystemStateInner { + public(package) fun v1_to_v2(v1: IotaSystemStateV1): IotaSystemStateV2 { + let IotaSystemStateV1 { epoch, protocol_version, system_state_version: old_system_state_version, + iota_treasury_cap, validators, storage_fund, parameters, @@ -145,11 +185,12 @@ module iota_system::iota_system_state_inner { } = v1; let new_validator_set = validator_set_v1_to_v2(validators); assert!(old_system_state_version == SYSTEM_STATE_VERSION_V1, 0); - IotaSystemStateInnerV2 { + IotaSystemStateV2 { new_dummy_field: 100, epoch, protocol_version, system_state_version: SYSTEM_STATE_VERSION_V2, + iota_treasury_cap, validators: new_validator_set, storage_fund, parameters, @@ -161,13 +202,13 @@ module iota_system::iota_system_state_inner { } /// Load the dummy inactive validator added in the base version, trigger it to be upgraded. - fun touch_dummy_inactive_validator(self: &mut IotaSystemStateInnerV2) { + fun touch_dummy_inactive_validator(self: &mut IotaSystemStateV2) { let validator_wrapper = table::borrow_mut(&mut self.validators.inactive_validators, object::id_from_address(@0x0)); let _ = validator_wrapper::load_validator_maybe_upgrade(validator_wrapper); } - fun validator_set_v1_to_v2(v1: ValidatorSet): ValidatorSetV2 { - let ValidatorSet { + fun validator_set_v1_to_v2(v1: ValidatorSetV1): ValidatorSetV2 { + let ValidatorSetV1 { mut active_validators, inactive_validators, extra_fields, diff --git a/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/deep_upgrade/sources/validator.move b/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/deep_upgrade/sources/validator.move index ea965ad4d15..a8e7744af84 100644 --- a/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/deep_upgrade/sources/validator.move +++ b/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/deep_upgrade/sources/validator.move @@ -5,13 +5,12 @@ module iota_system::validator { use std::ascii; - use iota::tx_context::TxContext; use std::string::{Self, String}; use iota::bag::{Self, Bag}; use iota::balance::{Self, Balance}; use iota::iota::IOTA; - public struct ValidatorMetadata has store { + public struct ValidatorMetadataV1 has store { iota_address: address, authority_pubkey_bytes: vector, network_pubkey_bytes: vector, @@ -22,8 +21,8 @@ module iota_system::validator { extra_fields: Bag, } - public struct Validator has store { - metadata: ValidatorMetadata, + public struct ValidatorV1 has store { + metadata: ValidatorMetadataV1, voting_power: u64, stake: Balance, extra_fields: Bag, @@ -31,7 +30,7 @@ module iota_system::validator { public struct ValidatorV2 has store { new_dummy_field: u64, - metadata: ValidatorMetadata, + metadata: ValidatorMetadataV1, voting_power: u64, stake: Balance, extra_fields: Bag, @@ -47,8 +46,8 @@ module iota_system::validator { primary_address: vector, init_stake: Balance, ctx: &mut TxContext - ): Validator { - let metadata = ValidatorMetadata { + ): ValidatorV1 { + let metadata = ValidatorMetadataV1 { iota_address, authority_pubkey_bytes, network_pubkey_bytes, @@ -59,7 +58,7 @@ module iota_system::validator { extra_fields: bag::new(ctx), }; - Validator { + ValidatorV1 { metadata, voting_power: balance::value(&init_stake), stake: init_stake, @@ -67,8 +66,8 @@ module iota_system::validator { } } - public(package) fun v1_to_v2(v1: Validator): ValidatorV2 { - let Validator { + public(package) fun v1_to_v2(v1: ValidatorV1): ValidatorV2 { + let ValidatorV1 { metadata, voting_power, stake, diff --git a/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/deep_upgrade/sources/validator_wrapper.move b/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/deep_upgrade/sources/validator_wrapper.move index b6e389ee21a..3fc3b4a050f 100644 --- a/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/deep_upgrade/sources/validator_wrapper.move +++ b/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/deep_upgrade/sources/validator_wrapper.move @@ -3,43 +3,40 @@ // SPDX-License-Identifier: Apache-2.0 module iota_system::validator_wrapper { - use iota::versioned::Versioned; - use iota::versioned; - use iota::tx_context::TxContext; - use iota_system::validator::{Validator, ValidatorV2}; - use iota_system::validator; + use iota::versioned::{Self, Versioned}; + use iota_system::validator::{Self, ValidatorV1, ValidatorV2}; const VALIDATOR_VERSION_V1: u64 = 18446744073709551605; // u64::MAX - 10 const VALIDATOR_VERSION_V3: u64 = 18446744073709551607; // u64::MAX - 8 const EInvalidVersion: u64 = 0; - public struct ValidatorWrapper has store { + public struct Validator has store { inner: Versioned } // Validator corresponds to version 1. - public(package) fun create_v1(validator: Validator, ctx: &mut TxContext): ValidatorWrapper { - ValidatorWrapper { + public(package) fun create_v1(validator: ValidatorV1, ctx: &mut TxContext): Validator { + Validator { inner: versioned::create(VALIDATOR_VERSION_V1, validator, ctx) } } /// This function should always return the latest supported version. /// If the inner version is old, we upgrade it lazily in-place. - public(package) fun load_validator_maybe_upgrade(self: &mut ValidatorWrapper): &mut ValidatorV2 { + public(package) fun load_validator_maybe_upgrade(self: &mut Validator): &mut ValidatorV2 { upgrade_to_latest(self); - versioned::load_value_mut(&mut self.inner) + versioned::load_value_mut(&mut self.inner) } /// Destroy the wrapper and retrieve the inner validator object. - public(package) fun destroy(mut self: ValidatorWrapper): ValidatorV2 { + public(package) fun destroy(mut self: Validator): ValidatorV2 { upgrade_to_latest(&mut self); - let ValidatorWrapper { inner } = self; + let Validator { inner } = self; versioned::destroy(inner) } - fun upgrade_to_latest(self: &mut ValidatorWrapper) { + fun upgrade_to_latest(self: &mut Validator) { let version = version(self); if (version == VALIDATOR_VERSION_V1) { let (v1, cap) = versioned::remove_value_for_upgrade(&mut self.inner); @@ -49,7 +46,7 @@ module iota_system::validator_wrapper { assert!(version(self) == VALIDATOR_VERSION_V3, EInvalidVersion); } - fun version(self: &ValidatorWrapper): u64 { + fun version(self: &Validator): u64 { versioned::version(&self.inner) } } diff --git a/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/safe_mode/sources/genesis.move b/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/safe_mode/sources/genesis.move index e6bff0442aa..f4d69976b8b 100644 --- a/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/safe_mode/sources/genesis.move +++ b/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/safe_mode/sources/genesis.move @@ -3,12 +3,11 @@ // SPDX-License-Identifier: Apache-2.0 module iota_system::genesis { - use std::vector; - use iota::balance::{Self, Balance}; - use iota::object::UID; - use iota::iota::IOTA; - use iota::tx_context::{Self, TxContext}; - use std::option::Option; + use std::string::String; + + use iota::balance; + use iota::iota::IotaTreasuryCap; + use iota::timelock::SystemTimelockCap; use iota_system::iota_system; use iota_system::validator; @@ -55,15 +54,20 @@ module iota_system::genesis { public struct TokenAllocation has drop { recipient_address: address, amount_nanos: u64, + staked_with_validator: Option
, + staked_with_timelock_expiration: Option, } + #[allow(unused_function)] fun create( iota_system_state_id: UID, - mut iota_supply: Balance, + mut iota_treasury_cap: IotaTreasuryCap, genesis_chain_parameters: GenesisChainParameters, genesis_validators: vector, _token_distribution_schedule: TokenDistributionSchedule, + _timelock_genesis_label: Option, + system_timelock_cap: SystemTimelockCap, ctx: &mut TxContext, ) { assert!(tx_context::epoch(ctx) == 0, 0); @@ -97,7 +101,7 @@ module iota_system::genesis { network_address, p2p_address, primary_address, - balance::split(&mut iota_supply, 2500), + iota_treasury_cap.mint_balance(2500, ctx), ctx ); @@ -108,11 +112,13 @@ module iota_system::genesis { iota_system::create( iota_system_state_id, + iota_treasury_cap, validators, - iota_supply, // storage_fund + balance::zero(), genesis_chain_parameters.protocol_version, genesis_chain_parameters.chain_start_timestamp_ms, genesis_chain_parameters.epoch_duration_ms, + system_timelock_cap, ctx, ); } diff --git a/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/safe_mode/sources/iota_system.move b/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/safe_mode/sources/iota_system.move index c633757870f..113afd557ce 100644 --- a/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/safe_mode/sources/iota_system.move +++ b/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/safe_mode/sources/iota_system.move @@ -3,18 +3,16 @@ // SPDX-License-Identifier: Apache-2.0 module iota_system::iota_system { - use std::vector; - use iota::balance::Balance; - use iota::object::UID; - use iota::iota::IOTA; - use iota::transfer; - use iota::tx_context::{Self, TxContext}; use iota::dynamic_field; + use iota::iota::IOTA; + use iota::iota::IotaTreasuryCap; + use iota::timelock::SystemTimelockCap; - use iota_system::validator::Validator; - use iota_system::iota_system_state_inner::IotaSystemStateInner; - use iota_system::iota_system_state_inner; + use iota_system::validator::ValidatorV1; + use iota_system::iota_system_state_inner::{Self, IotaSystemStateV1}; + + const SYSTEM_TIMELOCK_CAP_DF_KEY: vector = b"sys_timelock_cap"; public struct IotaSystemState has key { id: UID, @@ -23,14 +21,17 @@ module iota_system::iota_system { public(package) fun create( id: UID, - validators: vector, + iota_treasury_cap: IotaTreasuryCap, + validators: vector, storage_fund: Balance, protocol_version: u64, epoch_start_timestamp_ms: u64, epoch_duration_ms: u64, + system_timelock_cap: SystemTimelockCap, ctx: &mut TxContext, ) { let system_state = iota_system_state_inner::create( + iota_treasury_cap, validators, storage_fund, protocol_version, @@ -44,37 +45,44 @@ module iota_system::iota_system { version, }; dynamic_field::add(&mut self.id, version, system_state); + dynamic_field::add(&mut self.id, SYSTEM_TIMELOCK_CAP_DF_KEY, system_timelock_cap); transfer::share_object(self); } + #[allow(unused_function)] fun advance_epoch( + validator_target_reward: u64, storage_charge: Balance, computation_reward: Balance, wrapper: &mut IotaSystemState, _new_epoch: u64, _next_protocol_version: u64, storage_rebate: u64, - _non_refundable_storage_fee: u64, - _storage_fund_reinvest_rate: u64, - _reward_slashing_rate: u64, + non_refundable_storage_fee: u64, + reward_slashing_rate: u64, _epoch_start_timestamp_ms: u64, ctx: &mut TxContext, ) : Balance { let self = load_system_state_mut(wrapper); assert!(tx_context::sender(ctx) == @0x1, 0); // aborts here - iota_system_state_inner::advance_epoch( + let storage_rebate = iota_system_state_inner::advance_epoch( self, + validator_target_reward, storage_charge, computation_reward, storage_rebate, - ) + non_refundable_storage_fee, + reward_slashing_rate, + ctx + ); + storage_rebate } - public fun active_validator_addresses(wrapper: &mut IotaSystemState): vector
{ + public fun active_validator_addresses(_wrapper: &mut IotaSystemState): vector
{ vector::empty() } - fun load_system_state_mut(self: &mut IotaSystemState): &mut IotaSystemStateInner { + fun load_system_state_mut(self: &mut IotaSystemState): &mut IotaSystemStateV1 { let version = self.version; dynamic_field::borrow_mut(&mut self.id, version) } diff --git a/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/safe_mode/sources/iota_system_state_inner.move b/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/safe_mode/sources/iota_system_state_inner.move index 6a7d2d9f11b..a2ea7aa1f8d 100644 --- a/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/safe_mode/sources/iota_system_state_inner.move +++ b/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/safe_mode/sources/iota_system_state_inner.move @@ -3,36 +3,51 @@ // SPDX-License-Identifier: Apache-2.0 module iota_system::iota_system_state_inner { + use iota::bag::{Self, Bag}; use iota::balance::{Self, Balance}; + use iota::event; use iota::iota::IOTA; - use iota::tx_context::TxContext; - use iota::bag::{Self, Bag}; + use iota::iota::IotaTreasuryCap; use iota::table::{Self, Table}; - use iota::object::ID; - use iota_system::validator::Validator; - use iota_system::validator_wrapper::ValidatorWrapper; + use iota_system::validator::ValidatorV1; + use iota_system::validator_wrapper::Validator; const SYSTEM_STATE_VERSION_V1: u64 = 18446744073709551605; // u64::MAX - 10 - public struct SystemParameters has store { + public struct SystemEpochInfoEventV1 has copy, drop { + epoch: u64, + protocol_version: u64, + reference_gas_price: u64, + total_stake: u64, + storage_charge: u64, + storage_rebate: u64, + storage_fund_balance: u64, + total_gas_fees: u64, + total_stake_rewards_distributed: u64, + burnt_tokens_amount: u64, + minted_tokens_amount: u64, + } + + public struct SystemParametersV1 has store { epoch_duration_ms: u64, extra_fields: Bag, } - public struct ValidatorSet has store { - active_validators: vector, - inactive_validators: Table, + public struct ValidatorSetV1 has store { + active_validators: vector, + inactive_validators: Table, extra_fields: Bag, } - public struct IotaSystemStateInner has store { + public struct IotaSystemStateV1 has store { epoch: u64, protocol_version: u64, system_state_version: u64, - validators: ValidatorSet, + iota_treasury_cap: IotaTreasuryCap, + validators: ValidatorSetV1, storage_fund: Balance, - parameters: SystemParameters, + parameters: SystemParametersV1, reference_gas_price: u64, safe_mode: bool, epoch_start_timestamp_ms: u64, @@ -40,24 +55,26 @@ module iota_system::iota_system_state_inner { } public(package) fun create( - validators: vector, + iota_treasury_cap: IotaTreasuryCap, + validators: vector, storage_fund: Balance, protocol_version: u64, epoch_start_timestamp_ms: u64, epoch_duration_ms: u64, ctx: &mut TxContext, - ): IotaSystemStateInner { - let system_state = IotaSystemStateInner { + ): IotaSystemStateV1 { + let system_state = IotaSystemStateV1 { epoch: 0, protocol_version, system_state_version: genesis_system_state_version(), - validators: ValidatorSet { + iota_treasury_cap, + validators: ValidatorSetV1 { active_validators: validators, inactive_validators: table::new(ctx), extra_fields: bag::new(ctx), }, storage_fund, - parameters: SystemParameters { + parameters: SystemParametersV1 { epoch_duration_ms, extra_fields: bag::new(ctx), }, @@ -70,14 +87,38 @@ module iota_system::iota_system_state_inner { } public(package) fun advance_epoch( - self: &mut IotaSystemStateInner, - storage_charge: Balance, - computation_reward: Balance, - storage_rebate_amount: u64, + self: &mut IotaSystemStateV1, + _validator_target_reward: u64, + mut storage_charge: Balance, + mut computation_reward: Balance, + mut storage_rebate_amount: u64, + mut _non_refundable_storage_fee_amount: u64, + _reward_slashing_rate: u64, + _ctx: &mut TxContext, ) : Balance { + let storage_charge_value = storage_charge.value(); + let total_gas_fees = computation_reward.value(); + balance::join(&mut self.storage_fund, computation_reward); balance::join(&mut self.storage_fund, storage_charge); let storage_rebate = balance::split(&mut self.storage_fund, storage_rebate_amount); + + event::emit( + SystemEpochInfoEventV1 { + epoch: self.epoch, + protocol_version: self.protocol_version, + reference_gas_price: self.reference_gas_price, + total_stake: 0, + storage_charge: storage_charge_value, + storage_rebate: storage_rebate_amount, + storage_fund_balance: self.storage_fund.value(), + total_gas_fees, + total_stake_rewards_distributed: 0, + burnt_tokens_amount: 0, + minted_tokens_amount: 0, + } + ); + storage_rebate } diff --git a/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/safe_mode/sources/validator.move b/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/safe_mode/sources/validator.move index 923cc9f3b27..01a61565bc7 100644 --- a/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/safe_mode/sources/validator.move +++ b/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/safe_mode/sources/validator.move @@ -5,13 +5,12 @@ module iota_system::validator { use std::ascii; - use iota::tx_context::TxContext; use std::string::{Self, String}; use iota::bag::{Self, Bag}; use iota::balance::{Self, Balance}; use iota::iota::IOTA; - public struct ValidatorMetadata has store { + public struct ValidatorMetadataV1 has store { iota_address: address, authority_pubkey_bytes: vector, network_pubkey_bytes: vector, @@ -22,8 +21,8 @@ module iota_system::validator { extra_fields: Bag, } - public struct Validator has store { - metadata: ValidatorMetadata, + public struct ValidatorV1 has store { + metadata: ValidatorMetadataV1, voting_power: u64, stake: Balance, extra_fields: Bag, @@ -39,8 +38,8 @@ module iota_system::validator { primary_address: vector, init_stake: Balance, ctx: &mut TxContext - ): Validator { - let metadata = ValidatorMetadata { + ): ValidatorV1 { + let metadata = ValidatorMetadataV1 { iota_address, authority_pubkey_bytes, network_pubkey_bytes, @@ -51,7 +50,7 @@ module iota_system::validator { extra_fields: bag::new(ctx), }; - Validator { + ValidatorV1 { metadata, voting_power: balance::value(&init_stake), stake: init_stake, diff --git a/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/safe_mode/sources/validator_wrapper.move b/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/safe_mode/sources/validator_wrapper.move index 7729b3d4e77..1593f71ef46 100644 --- a/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/safe_mode/sources/validator_wrapper.move +++ b/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/safe_mode/sources/validator_wrapper.move @@ -5,7 +5,7 @@ module iota_system::validator_wrapper { use iota::versioned::Versioned; - public struct ValidatorWrapper has store { + public struct Validator has store { inner: Versioned } } diff --git a/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/shallow_upgrade/sources/genesis.move b/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/shallow_upgrade/sources/genesis.move index e6bff0442aa..f4d69976b8b 100644 --- a/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/shallow_upgrade/sources/genesis.move +++ b/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/shallow_upgrade/sources/genesis.move @@ -3,12 +3,11 @@ // SPDX-License-Identifier: Apache-2.0 module iota_system::genesis { - use std::vector; - use iota::balance::{Self, Balance}; - use iota::object::UID; - use iota::iota::IOTA; - use iota::tx_context::{Self, TxContext}; - use std::option::Option; + use std::string::String; + + use iota::balance; + use iota::iota::IotaTreasuryCap; + use iota::timelock::SystemTimelockCap; use iota_system::iota_system; use iota_system::validator; @@ -55,15 +54,20 @@ module iota_system::genesis { public struct TokenAllocation has drop { recipient_address: address, amount_nanos: u64, + staked_with_validator: Option
, + staked_with_timelock_expiration: Option, } + #[allow(unused_function)] fun create( iota_system_state_id: UID, - mut iota_supply: Balance, + mut iota_treasury_cap: IotaTreasuryCap, genesis_chain_parameters: GenesisChainParameters, genesis_validators: vector, _token_distribution_schedule: TokenDistributionSchedule, + _timelock_genesis_label: Option, + system_timelock_cap: SystemTimelockCap, ctx: &mut TxContext, ) { assert!(tx_context::epoch(ctx) == 0, 0); @@ -97,7 +101,7 @@ module iota_system::genesis { network_address, p2p_address, primary_address, - balance::split(&mut iota_supply, 2500), + iota_treasury_cap.mint_balance(2500, ctx), ctx ); @@ -108,11 +112,13 @@ module iota_system::genesis { iota_system::create( iota_system_state_id, + iota_treasury_cap, validators, - iota_supply, // storage_fund + balance::zero(), genesis_chain_parameters.protocol_version, genesis_chain_parameters.chain_start_timestamp_ms, genesis_chain_parameters.epoch_duration_ms, + system_timelock_cap, ctx, ); } diff --git a/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/shallow_upgrade/sources/iota_system.move b/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/shallow_upgrade/sources/iota_system.move index d0339bb3b95..549ba9c21a3 100644 --- a/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/shallow_upgrade/sources/iota_system.move +++ b/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/shallow_upgrade/sources/iota_system.move @@ -3,17 +3,16 @@ // SPDX-License-Identifier: Apache-2.0 module iota_system::iota_system { - use std::vector; - use iota::balance::Balance; - use iota::object::UID; - use iota::iota::IOTA; - use iota::transfer; - use iota::tx_context::{Self, TxContext}; use iota::dynamic_field; + use iota::iota::IOTA; + use iota::iota::IotaTreasuryCap; + use iota::timelock::SystemTimelockCap; - use iota_system::validator::Validator; - use iota_system::iota_system_state_inner::{Self, IotaSystemStateInner, IotaSystemStateInnerV2}; + use iota_system::validator::ValidatorV1; + use iota_system::iota_system_state_inner::{Self, IotaSystemStateV1, IotaSystemStateV2}; + + const SYSTEM_TIMELOCK_CAP_DF_KEY: vector = b"sys_timelock_cap"; public struct IotaSystemState has key { id: UID, @@ -22,14 +21,17 @@ module iota_system::iota_system { public(package) fun create( id: UID, - validators: vector, + iota_treasury_cap: IotaTreasuryCap, + validators: vector, storage_fund: Balance, protocol_version: u64, epoch_start_timestamp_ms: u64, epoch_duration_ms: u64, + system_timelock_cap: SystemTimelockCap, ctx: &mut TxContext, ) { let system_state = iota_system_state_inner::create( + iota_treasury_cap, validators, storage_fund, protocol_version, @@ -43,21 +45,22 @@ module iota_system::iota_system { version, }; dynamic_field::add(&mut self.id, version, system_state); + dynamic_field::add(&mut self.id, SYSTEM_TIMELOCK_CAP_DF_KEY, system_timelock_cap); transfer::share_object(self); } + #[allow(unused_function)] fun advance_epoch( + validator_target_reward: u64, storage_charge: Balance, computation_reward: Balance, wrapper: &mut IotaSystemState, new_epoch: u64, next_protocol_version: u64, storage_rebate: u64, - _non_refundable_storage_fee: u64, - _storage_fund_reinvest_rate: u64, // share of storage fund's rewards that's reinvested - // into storage fund, in basis point. - _reward_slashing_rate: u64, // how much rewards are slashed to punish a validator, in bps. - epoch_start_timestamp_ms: u64, // Timestamp of the epoch start + non_refundable_storage_fee: u64, + reward_slashing_rate: u64, + epoch_start_timestamp_ms: u64, ctx: &mut TxContext, ) : Balance { let self = load_system_state_mut(wrapper); @@ -66,34 +69,38 @@ module iota_system::iota_system { self, new_epoch, next_protocol_version, + validator_target_reward, storage_charge, computation_reward, storage_rebate, + non_refundable_storage_fee, + reward_slashing_rate, epoch_start_timestamp_ms, + ctx ); storage_rebate } - public fun active_validator_addresses(wrapper: &mut IotaSystemState): vector
{ + public fun active_validator_addresses(_wrapper: &mut IotaSystemState): vector
{ vector::empty() } - fun load_system_state_mut(self: &mut IotaSystemState): &mut IotaSystemStateInnerV2 { + fun load_system_state_mut(self: &mut IotaSystemState): &mut IotaSystemStateV2 { load_inner_maybe_upgrade(self) } - fun load_inner_maybe_upgrade(self: &mut IotaSystemState): &mut IotaSystemStateInnerV2 { + fun load_inner_maybe_upgrade(self: &mut IotaSystemState): &mut IotaSystemStateV2 { let mut version = self.version; if (version == iota_system_state_inner::genesis_system_state_version()) { - let inner: IotaSystemStateInner = dynamic_field::remove(&mut self.id, version); + let inner: IotaSystemStateV1 = dynamic_field::remove(&mut self.id, version); let new_inner = iota_system_state_inner::v1_to_v2(inner); version = iota_system_state_inner::system_state_version(&new_inner); dynamic_field::add(&mut self.id, version, new_inner); self.version = version; }; - let inner: &mut IotaSystemStateInnerV2 = dynamic_field::borrow_mut(&mut self.id, version); + let inner: &mut IotaSystemStateV2 = dynamic_field::borrow_mut(&mut self.id, version); assert!(iota_system_state_inner::system_state_version(inner) == version, 0); inner } diff --git a/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/shallow_upgrade/sources/iota_system_state_inner.move b/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/shallow_upgrade/sources/iota_system_state_inner.move index 5b957ebfd10..18c0632784c 100644 --- a/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/shallow_upgrade/sources/iota_system_state_inner.move +++ b/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/shallow_upgrade/sources/iota_system_state_inner.move @@ -3,51 +3,67 @@ // SPDX-License-Identifier: Apache-2.0 module iota_system::iota_system_state_inner { + use iota::bag::{Self, Bag}; use iota::balance::{Self, Balance}; + use iota::event; use iota::iota::IOTA; - use iota::tx_context::TxContext; - use iota::bag::{Self, Bag}; + use iota::iota::IotaTreasuryCap; use iota::table::{Self, Table}; - use iota::object::ID; - use iota_system::validator::Validator; - use iota_system::validator_wrapper::ValidatorWrapper; + use iota_system::validator::ValidatorV1; + use iota_system::validator_wrapper::Validator; const SYSTEM_STATE_VERSION_V1: u64 = 18446744073709551605; // u64::MAX - 10 const SYSTEM_STATE_VERSION_V2: u64 = 18446744073709551606; // u64::MAX - 9 - public struct SystemParameters has store { + public struct SystemEpochInfoEventV1 has copy, drop { + epoch: u64, + protocol_version: u64, + reference_gas_price: u64, + total_stake: u64, + storage_charge: u64, + storage_rebate: u64, + storage_fund_balance: u64, + total_gas_fees: u64, + total_stake_rewards_distributed: u64, + burnt_tokens_amount: u64, + minted_tokens_amount: u64, + } + + public struct SystemParametersV1 has store { epoch_duration_ms: u64, extra_fields: Bag, } - public struct ValidatorSet has store { - active_validators: vector, - inactive_validators: Table, + public struct ValidatorSetV1 has store { + active_validators: vector, + inactive_validators: Table, extra_fields: Bag, } - public struct IotaSystemStateInner has store { + public struct IotaSystemStateV1 has store { epoch: u64, protocol_version: u64, system_state_version: u64, - validators: ValidatorSet, + iota_treasury_cap: IotaTreasuryCap, + validators: ValidatorSetV1, storage_fund: Balance, - parameters: SystemParameters, + parameters: SystemParametersV1, reference_gas_price: u64, safe_mode: bool, epoch_start_timestamp_ms: u64, extra_fields: Bag, } - public struct IotaSystemStateInnerV2 has store { + public struct IotaSystemStateV2 has store { new_dummy_field: u64, epoch: u64, protocol_version: u64, system_state_version: u64, - validators: ValidatorSet, + iota_treasury_cap: IotaTreasuryCap, + validators: ValidatorSetV1, storage_fund: Balance, - parameters: SystemParameters, + parameters: SystemParametersV1, reference_gas_price: u64, safe_mode: bool, epoch_start_timestamp_ms: u64, @@ -55,21 +71,23 @@ module iota_system::iota_system_state_inner { } public(package) fun create( - validators: vector, + iota_treasury_cap: IotaTreasuryCap, + validators: vector, storage_fund: Balance, protocol_version: u64, epoch_start_timestamp_ms: u64, epoch_duration_ms: u64, ctx: &mut TxContext, - ): IotaSystemStateInner { + ): IotaSystemStateV1 { let validators = new_validator_set(validators, ctx); - let system_state = IotaSystemStateInner { + let system_state = IotaSystemStateV1 { epoch: 0, protocol_version, system_state_version: genesis_system_state_version(), + iota_treasury_cap, validators, storage_fund, - parameters: SystemParameters { + parameters: SystemParametersV1 { epoch_duration_ms, extra_fields: bag::new(ctx), }, @@ -82,13 +100,17 @@ module iota_system::iota_system_state_inner { } public(package) fun advance_epoch( - self: &mut IotaSystemStateInnerV2, + self: &mut IotaSystemStateV2, new_epoch: u64, next_protocol_version: u64, - storage_charge: Balance, - computation_reward: Balance, - storage_rebate_amount: u64, + _validator_target_reward: u64, + mut storage_charge: Balance, + mut computation_reward: Balance, + mut storage_rebate_amount: u64, + mut _non_refundable_storage_fee_amount: u64, + _reward_slashing_rate: u64, epoch_start_timestamp_ms: u64, + _ctx: &mut TxContext, ) : Balance { self.epoch_start_timestamp_ms = epoch_start_timestamp_ms; self.epoch = self.epoch + 1; @@ -96,31 +118,52 @@ module iota_system::iota_system_state_inner { self.safe_mode = false; self.protocol_version = next_protocol_version; + let storage_charge_value = storage_charge.value(); + let total_gas_fees = computation_reward.value(); + balance::join(&mut self.storage_fund, computation_reward); balance::join(&mut self.storage_fund, storage_charge); let storage_rebate = balance::split(&mut self.storage_fund, storage_rebate_amount); + + event::emit( + SystemEpochInfoEventV1 { + epoch: self.epoch, + protocol_version: self.protocol_version, + reference_gas_price: self.reference_gas_price, + total_stake: 0, + storage_charge: storage_charge_value, + storage_rebate: storage_rebate_amount, + storage_fund_balance: self.storage_fund.value(), + total_gas_fees, + total_stake_rewards_distributed: 0, + burnt_tokens_amount: 0, + minted_tokens_amount: 0, + } + ); + storage_rebate } - public(package) fun protocol_version(self: &IotaSystemStateInnerV2): u64 { self.protocol_version } - public(package) fun system_state_version(self: &IotaSystemStateInnerV2): u64 { self.system_state_version } + public(package) fun protocol_version(self: &IotaSystemStateV2): u64 { self.protocol_version } + public(package) fun system_state_version(self: &IotaSystemStateV2): u64 { self.system_state_version } public(package) fun genesis_system_state_version(): u64 { SYSTEM_STATE_VERSION_V1 } - fun new_validator_set(init_active_validators: vector, ctx: &mut TxContext): ValidatorSet { - ValidatorSet { + fun new_validator_set(init_active_validators: vector, ctx: &mut TxContext): ValidatorSetV1 { + ValidatorSetV1 { active_validators: init_active_validators, inactive_validators: table::new(ctx), extra_fields: bag::new(ctx), } } - public(package) fun v1_to_v2(v1: IotaSystemStateInner): IotaSystemStateInnerV2 { - let IotaSystemStateInner { + public(package) fun v1_to_v2(v1: IotaSystemStateV1): IotaSystemStateV2 { + let IotaSystemStateV1 { epoch, protocol_version, system_state_version: old_system_state_version, + iota_treasury_cap, validators, storage_fund, parameters, @@ -130,11 +173,12 @@ module iota_system::iota_system_state_inner { extra_fields, } = v1; assert!(old_system_state_version == SYSTEM_STATE_VERSION_V1, 0); - IotaSystemStateInnerV2 { + IotaSystemStateV2 { new_dummy_field: 100, epoch, protocol_version, system_state_version: SYSTEM_STATE_VERSION_V2, + iota_treasury_cap, validators, storage_fund, parameters, diff --git a/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/shallow_upgrade/sources/validator.move b/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/shallow_upgrade/sources/validator.move index 923cc9f3b27..01a61565bc7 100644 --- a/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/shallow_upgrade/sources/validator.move +++ b/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/shallow_upgrade/sources/validator.move @@ -5,13 +5,12 @@ module iota_system::validator { use std::ascii; - use iota::tx_context::TxContext; use std::string::{Self, String}; use iota::bag::{Self, Bag}; use iota::balance::{Self, Balance}; use iota::iota::IOTA; - public struct ValidatorMetadata has store { + public struct ValidatorMetadataV1 has store { iota_address: address, authority_pubkey_bytes: vector, network_pubkey_bytes: vector, @@ -22,8 +21,8 @@ module iota_system::validator { extra_fields: Bag, } - public struct Validator has store { - metadata: ValidatorMetadata, + public struct ValidatorV1 has store { + metadata: ValidatorMetadataV1, voting_power: u64, stake: Balance, extra_fields: Bag, @@ -39,8 +38,8 @@ module iota_system::validator { primary_address: vector, init_stake: Balance, ctx: &mut TxContext - ): Validator { - let metadata = ValidatorMetadata { + ): ValidatorV1 { + let metadata = ValidatorMetadataV1 { iota_address, authority_pubkey_bytes, network_pubkey_bytes, @@ -51,7 +50,7 @@ module iota_system::validator { extra_fields: bag::new(ctx), }; - Validator { + ValidatorV1 { metadata, voting_power: balance::value(&init_stake), stake: init_stake, diff --git a/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/shallow_upgrade/sources/validator_wrapper.move b/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/shallow_upgrade/sources/validator_wrapper.move index 10e2b527c62..5a673effe7d 100644 --- a/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/shallow_upgrade/sources/validator_wrapper.move +++ b/crates/iota-e2e-tests/tests/framework_upgrades/mock_iota_systems/shallow_upgrade/sources/validator_wrapper.move @@ -3,45 +3,43 @@ // SPDX-License-Identifier: Apache-2.0 module iota_system::validator_wrapper { - use iota::versioned::Versioned; - use iota::versioned; - use iota::tx_context::TxContext; - use iota_system::validator::Validator; + use iota::versioned::{Self, Versioned}; + use iota_system::validator::ValidatorV1; const EInvalidVersion: u64 = 0; - public struct ValidatorWrapper has store { + public struct Validator has store { inner: Versioned } // Validator corresponds to version 1. - public(package) fun create_v1(validator: Validator, ctx: &mut TxContext): ValidatorWrapper { - ValidatorWrapper { + public(package) fun create_v1(validator: ValidatorV1, ctx: &mut TxContext): Validator { + Validator { inner: versioned::create(1, validator, ctx) } } /// This function should always return the latest supported version. /// If the inner version is old, we upgrade it lazily in-place. - public(package) fun load_validator_maybe_upgrade(self: &mut ValidatorWrapper): &mut Validator { + public(package) fun load_validator_maybe_upgrade(self: &mut Validator): &mut ValidatorV1 { upgrade_to_latest(self); - versioned::load_value_mut(&mut self.inner) + versioned::load_value_mut(&mut self.inner) } /// Destroy the wrapper and retrieve the inner validator object. - public(package) fun destroy(mut self: ValidatorWrapper): Validator { - upgrade_to_latest(&mut self); - let ValidatorWrapper { inner } = self; + public(package) fun destroy(self: Validator): ValidatorV1 { + upgrade_to_latest(&self); + let Validator { inner } = self; versioned::destroy(inner) } - fun upgrade_to_latest(self: &mut ValidatorWrapper) { + fun upgrade_to_latest(self: &Validator) { let version = version(self); // TODO: When new versions are added, we need to explicitly upgrade here. assert!(version == 1, EInvalidVersion); } - fun version(self: &ValidatorWrapper): u64 { + fun version(self: &Validator): u64 { versioned::version(&self.inner) } } diff --git a/crates/iota-types/src/iota_system_state/simtest_iota_system_state_inner.rs b/crates/iota-types/src/iota_system_state/simtest_iota_system_state_inner.rs index fc1c17c9653..2cbba91fb62 100644 --- a/crates/iota-types/src/iota_system_state/simtest_iota_system_state_inner.rs +++ b/crates/iota-types/src/iota_system_state/simtest_iota_system_state_inner.rs @@ -14,6 +14,7 @@ use crate::{ committee::{CommitteeWithNetworkMetadata, NetworkMetadata}, crypto::{AuthorityPublicKey, AuthorityPublicKeyBytes, NetworkPublicKey}, error::IotaError, + gas_coin::IotaTreasuryCap, iota_system_state::{ AdvanceEpochParams, IotaSystemStateTrait, epoch_start_iota_system_state::{EpochStartSystemState, EpochStartValidatorInfoV1}, @@ -27,6 +28,7 @@ pub struct SimTestIotaSystemStateV1 { pub epoch: u64, pub protocol_version: u64, pub system_state_version: u64, + pub iota_treasury_cap: IotaTreasuryCap, pub validators: SimTestValidatorSetV1, pub storage_fund: Balance, pub parameters: SimTestSystemParametersV1, @@ -225,6 +227,7 @@ pub struct SimTestIotaSystemStateShallowV1 { pub epoch: u64, pub protocol_version: u64, pub system_state_version: u64, + pub iota_treasury_cap: IotaTreasuryCap, pub validators: SimTestValidatorSetV1, pub storage_fund: Balance, pub parameters: SimTestSystemParametersV1, @@ -366,6 +369,7 @@ pub struct SimTestIotaSystemStateDeepV1 { pub epoch: u64, pub protocol_version: u64, pub system_state_version: u64, + pub iota_treasury_cap: IotaTreasuryCap, pub validators: SimTestValidatorSetDeepV2, pub storage_fund: Balance, pub parameters: SimTestSystemParametersV1, From e13b151ef1f4d8306d5d193afe5d274480d438f2 Mon Sep 17 00:00:00 2001 From: muXxer Date: Wed, 30 Oct 2024 10:12:02 +0100 Subject: [PATCH 21/55] feat(node): Remove multiple versions of types (Part 3) (#3759) * fix(node): remove deprecated `VersionedUsedProcessedMessages::V0` * fix(node): remove deprecated `VersionedDkgMessage::V0` and `VersionedDkgConfirmation::V0()` * fix(node): remove deprecated `CommittedSubDagShell` * fix(node): fix versions in `IotaSystemState` enum * fix(node): remove version from `AccumulateEpoch` monitored scope * fix(node): remove unused imports in simtests --- crates/iota-core/src/epoch/randomness.rs | 15 +--- crates/iota-core/src/state_accumulator.rs | 2 +- .../tests/protocol_version_tests.rs | 6 +- .../tests/traffic_control_tests.rs | 2 +- crates/iota-storage/tests/key_value_tests.rs | 2 - .../iota-types/src/iota_system_state/mod.rs | 12 ++-- .../simtest_iota_system_state_inner.rs | 10 +-- crates/iota-types/src/messages_consensus.rs | 12 ---- narwhal/types/src/consensus.rs | 71 ++----------------- 9 files changed, 23 insertions(+), 109 deletions(-) diff --git a/crates/iota-core/src/epoch/randomness.rs b/crates/iota-core/src/epoch/randomness.rs index 677f6552e5a..acbb37baad7 100644 --- a/crates/iota-core/src/epoch/randomness.rs +++ b/crates/iota-core/src/epoch/randomness.rs @@ -57,25 +57,19 @@ pub const SINGLETON_KEY: u64 = 0; #[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] #[allow(clippy::large_enum_variant)] pub enum VersionedProcessedMessage { - V0(), // deprecated V1(dkg_v1::ProcessedMessage), } impl VersionedProcessedMessage { pub fn sender(&self) -> PartyId { match self { - VersionedProcessedMessage::V0() => { - panic!("BUG: invalid VersionedProcessedMessage version V0") - } VersionedProcessedMessage::V1(msg) => msg.message.sender, } } pub fn unwrap_v1(self) -> dkg_v1::ProcessedMessage { - if let VersionedProcessedMessage::V1(msg) = self { - msg - } else { - panic!("BUG: expected message version is 1") + match self { + VersionedProcessedMessage::V1(msg) => msg, } } @@ -110,7 +104,6 @@ impl VersionedProcessedMessage { #[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] pub enum VersionedUsedProcessedMessages { - V0(), // deprecated V1(dkg_v1::UsedProcessedMessages), } @@ -123,9 +116,7 @@ impl VersionedUsedProcessedMessages { // All inputs are verified in add_confirmation, so we can assume they are of the // correct version. let rng = &mut StdRng::from_rng(OsRng).expect("RNG construction should not fail"); - let VersionedUsedProcessedMessages::V1(msg) = self else { - panic!("BUG: invalid VersionedUsedProcessedMessages version") - }; + let VersionedUsedProcessedMessages::V1(msg) = self; party.complete_v1( msg, &confirmations diff --git a/crates/iota-core/src/state_accumulator.rs b/crates/iota-core/src/state_accumulator.rs index 755f624274a..7cfde29131f 100644 --- a/crates/iota-core/src/state_accumulator.rs +++ b/crates/iota-core/src/state_accumulator.rs @@ -396,7 +396,7 @@ impl StateAccumulatorV1 { epoch_store: Arc, last_checkpoint_of_epoch: CheckpointSequenceNumber, ) -> IotaResult { - let _scope = monitored_scope("AccumulateEpochV2"); + let _scope = monitored_scope("AccumulateEpoch"); let running_root = epoch_store .get_running_root_accumulator(&last_checkpoint_of_epoch)? .expect("Expected running root accumulator to exist up to last checkpoint of epoch"); diff --git a/crates/iota-e2e-tests/tests/protocol_version_tests.rs b/crates/iota-e2e-tests/tests/protocol_version_tests.rs index 2deda364079..55705a25d67 100644 --- a/crates/iota-e2e-tests/tests/protocol_version_tests.rs +++ b/crates/iota-e2e-tests/tests/protocol_version_tests.rs @@ -895,7 +895,7 @@ mod sim_only_tests { system_state.system_state_version(), IOTA_SYSTEM_STATE_SIM_TEST_SHALLOW_V1 ); - assert!(matches!(system_state, IotaSystemState::SimTestShallowV2(_))); + assert!(matches!(system_state, IotaSystemState::SimTestShallowV1(_))); } #[sim_test] @@ -948,7 +948,7 @@ mod sim_only_tests { system_state.system_state_version(), IOTA_SYSTEM_STATE_SIM_TEST_DEEP_V1 ); - if let IotaSystemState::SimTestDeepV2(inner) = system_state { + if let IotaSystemState::SimTestDeepV1(inner) = system_state { // Make sure we have 1 inactive validator for latter testing. assert_eq!(inner.validators.inactive_validators.size, 1); get_validator_from_table( @@ -963,7 +963,7 @@ mod sim_only_tests { ) .unwrap(); } else { - panic!("Expecting SimTestDeepV2 type"); + panic!("Expecting SimTestDeepV1 type"); } } diff --git a/crates/iota-e2e-tests/tests/traffic_control_tests.rs b/crates/iota-e2e-tests/tests/traffic_control_tests.rs index 93104798017..285ee7e49e6 100644 --- a/crates/iota-e2e-tests/tests/traffic_control_tests.rs +++ b/crates/iota-e2e-tests/tests/traffic_control_tests.rs @@ -79,7 +79,7 @@ async fn test_validator_traffic_control_ok() -> Result<(), anyhow::Error> { connection_blocklist_ttl_sec: 1, proxy_blocklist_ttl_sec: 5, // In this test, the validator gRPC API is receiving some requests that don't count towards - // the policy and two requests that do (/iota.validator.Validator/CertifiedTransactionV2 for + // the policy and two requests that do (/iota.validator.Validator/CertifiedTransactionV1 for // an already executed transaction). However, the counter is updated only after the response // is generated, but the limit is checked before we handle the request, so at the end we end // up with 2 handled requests even if the limit is set to 1 and only the subsequent request diff --git a/crates/iota-storage/tests/key_value_tests.rs b/crates/iota-storage/tests/key_value_tests.rs index f71ee6e9cbb..8f20904994f 100644 --- a/crates/iota-storage/tests/key_value_tests.rs +++ b/crates/iota-storage/tests/key_value_tests.rs @@ -432,9 +432,7 @@ mod simtests { }; use axum::{ - body::Body, extract::{Request, State}, - response::Response, routing::get, }; use iota_macros::sim_test; diff --git a/crates/iota-types/src/iota_system_state/mod.rs b/crates/iota-types/src/iota_system_state/mod.rs index bdadfcada9a..5e5634a53d5 100644 --- a/crates/iota-types/src/iota_system_state/mod.rs +++ b/crates/iota-types/src/iota_system_state/mod.rs @@ -36,7 +36,7 @@ mod simtest_iota_system_state_inner; #[cfg(msim)] use self::simtest_iota_system_state_inner::{ SimTestIotaSystemStateDeepV1, SimTestIotaSystemStateShallowV1, SimTestIotaSystemStateV1, - SimTestValidatorDeepV2, SimTestValidatorV1, + SimTestValidatorDeepV1, SimTestValidatorV1, }; const IOTA_SYSTEM_STATE_WRAPPER_STRUCT_NAME: &IdentStr = ident_str!("IotaSystemState"); @@ -193,9 +193,9 @@ pub enum IotaSystemState { #[cfg(msim)] SimTestV1(SimTestIotaSystemStateV1), #[cfg(msim)] - SimTestShallowV2(SimTestIotaSystemStateShallowV1), + SimTestShallowV1(SimTestIotaSystemStateShallowV1), #[cfg(msim)] - SimTestDeepV2(SimTestIotaSystemStateDeepV1), + SimTestDeepV1(SimTestIotaSystemStateDeepV1), } /// This is the fixed type used by genesis. @@ -283,7 +283,7 @@ pub fn get_iota_system_state(object_store: &dyn ObjectStore) -> Result { @@ -296,7 +296,7 @@ pub fn get_iota_system_state(object_store: &dyn ObjectStore) -> Result Err(IotaError::IotaSystemStateRead(format!( "Unsupported IotaSystemState version: {}", @@ -352,7 +352,7 @@ where } #[cfg(msim)] IOTA_SYSTEM_STATE_SIM_TEST_DEEP_V1 => { - let validator: SimTestValidatorDeepV2 = + let validator: SimTestValidatorDeepV1 = get_dynamic_field_from_store(object_store, versioned.id.id.bytes, &version) .map_err(|err| { IotaError::IotaSystemStateRead(format!( diff --git a/crates/iota-types/src/iota_system_state/simtest_iota_system_state_inner.rs b/crates/iota-types/src/iota_system_state/simtest_iota_system_state_inner.rs index 2cbba91fb62..e5b5a5376f8 100644 --- a/crates/iota-types/src/iota_system_state/simtest_iota_system_state_inner.rs +++ b/crates/iota-types/src/iota_system_state/simtest_iota_system_state_inner.rs @@ -335,14 +335,14 @@ impl IotaSystemStateTrait for SimTestIotaSystemStateShallowV1 { } #[derive(Debug, Serialize, Deserialize, Clone, Eq, PartialEq)] -pub struct SimTestValidatorSetDeepV2 { - pub active_validators: Vec, +pub struct SimTestValidatorSetDeepV1 { + pub active_validators: Vec, pub inactive_validators: Table, pub extra_fields: Bag, } #[derive(Debug, Serialize, Deserialize, Clone, Eq, PartialEq)] -pub struct SimTestValidatorDeepV2 { +pub struct SimTestValidatorDeepV1 { pub new_dummy_field: u64, metadata: SimTestValidatorMetadataV1, #[serde(skip)] @@ -352,7 +352,7 @@ pub struct SimTestValidatorDeepV2 { pub extra_fields: Bag, } -impl SimTestValidatorDeepV2 { +impl SimTestValidatorDeepV1 { pub fn verified_metadata(&self) -> &VerifiedSimTestValidatorMetadataV1 { self.verified_metadata .get_or_init(|| self.metadata.verify()) @@ -370,7 +370,7 @@ pub struct SimTestIotaSystemStateDeepV1 { pub protocol_version: u64, pub system_state_version: u64, pub iota_treasury_cap: IotaTreasuryCap, - pub validators: SimTestValidatorSetDeepV2, + pub validators: SimTestValidatorSetDeepV1, pub storage_fund: Balance, pub parameters: SimTestSystemParametersV1, pub reference_gas_price: u64, diff --git a/crates/iota-types/src/messages_consensus.rs b/crates/iota-types/src/messages_consensus.rs index 4c0efa531ec..dd8821af98d 100644 --- a/crates/iota-types/src/messages_consensus.rs +++ b/crates/iota-types/src/messages_consensus.rs @@ -220,20 +220,17 @@ impl ConsensusTransactionKind { #[derive(Clone, PartialEq, Eq, Serialize, Deserialize)] #[allow(clippy::large_enum_variant)] pub enum VersionedDkgMessage { - V0(), // deprecated V1(dkg_v1::Message), } #[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] pub enum VersionedDkgConfirmation { - V0(), // deprecated V1(dkg::Confirmation), } impl Debug for VersionedDkgMessage { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { match self { - VersionedDkgMessage::V0() => write!(f, "Deprecated VersionedDkgMessage version 0"), VersionedDkgMessage::V1(msg) => write!( f, "DKG V1 Message with sender={}, vss_pk.degree={}, encrypted_shares.len()={}", @@ -248,7 +245,6 @@ impl Debug for VersionedDkgMessage { impl VersionedDkgMessage { pub fn sender(&self) -> u16 { match self { - VersionedDkgMessage::V0() => panic!("BUG: invalid VersionedDkgMessage version"), VersionedDkgMessage::V1(msg) => msg.sender, } } @@ -265,7 +261,6 @@ impl VersionedDkgMessage { pub fn unwrap_v1(self) -> dkg_v1::Message { match self { VersionedDkgMessage::V1(msg) => msg, - _ => panic!("BUG: expected V1 message"), } } @@ -277,18 +272,12 @@ impl VersionedDkgMessage { impl VersionedDkgConfirmation { pub fn sender(&self) -> u16 { match self { - VersionedDkgConfirmation::V0() => { - panic!("BUG: invalid VersionedDkgConfimation version") - } VersionedDkgConfirmation::V1(msg) => msg.sender, } } pub fn num_of_complaints(&self) -> usize { match self { - VersionedDkgConfirmation::V0() => { - panic!("BUG: invalid VersionedDkgConfimation version") - } VersionedDkgConfirmation::V1(msg) => msg.complaints.len(), } } @@ -296,7 +285,6 @@ impl VersionedDkgConfirmation { pub fn unwrap_v1(&self) -> &dkg::Confirmation { match self { VersionedDkgConfirmation::V1(msg) => msg, - _ => panic!("BUG: expected V1 confirmation"), } } diff --git a/narwhal/types/src/consensus.rs b/narwhal/types/src/consensus.rs index 2633ca815d8..0e9c138addb 100644 --- a/narwhal/types/src/consensus.rs +++ b/narwhal/types/src/consensus.rs @@ -263,52 +263,8 @@ trait ConsensusCommitAPI { fn commit_timestamp(&self) -> TimestampMs; } -// TODO: remove once the upgrade has been rolled out. We want to keep only the -// CommittedSubDag #[derive(Serialize, Deserialize, Clone, Debug)] -pub struct CommittedSubDagShell { - /// The sequence of committed certificates' digests. - pub certificates: Vec, - /// The leader certificate's digest responsible of committing this sub-dag. - pub leader: CertificateDigest, - /// The round of the leader - pub leader_round: Round, - /// Sequence number of the CommittedSubDag - pub sub_dag_index: SequenceNumber, - /// The so far calculated reputation score for nodes - pub reputation_score: ReputationScores, -} - -impl ConsensusCommitAPI for CommittedSubDagShell { - fn certificates(&self) -> Vec { - self.certificates.clone() - } - - fn leader(&self) -> CertificateDigest { - self.leader - } - - fn leader_round(&self) -> Round { - self.leader_round - } - - fn sub_dag_index(&self) -> SequenceNumber { - self.sub_dag_index - } - - fn reputation_score(&self) -> ReputationScores { - self.reputation_score.clone() - } - - fn commit_timestamp(&self) -> TimestampMs { - // We explicitly return 0 as we don't have this information stored already. This - // will be handle accordingly to the CommittedSubdag struct. - 0 - } -} - -#[derive(Serialize, Deserialize, Clone, Debug)] -pub struct ConsensusCommitV2 { +pub struct ConsensusCommitV1 { /// The sequence of committed certificates' digests. pub certificates: Vec, /// The leader certificate's digest responsible of committing this sub-dag. @@ -324,7 +280,7 @@ pub struct ConsensusCommitV2 { pub commit_timestamp: TimestampMs, } -impl ConsensusCommitV2 { +impl ConsensusCommitV1 { pub fn from_sub_dag(sub_dag: &CommittedSubDag) -> Self { Self { certificates: sub_dag.certificates.iter().map(|x| x.digest()).collect(), @@ -337,7 +293,7 @@ impl ConsensusCommitV2 { } } -impl ConsensusCommitAPI for ConsensusCommitV2 { +impl ConsensusCommitAPI for ConsensusCommitV1 { fn certificates(&self) -> Vec { self.certificates.clone() } @@ -366,62 +322,43 @@ impl ConsensusCommitAPI for ConsensusCommitV2 { #[derive(Serialize, Deserialize, Clone, Debug)] #[enum_dispatch(ConsensusCommitAPI)] pub enum ConsensusCommit { - V1(CommittedSubDagShell), - V2(ConsensusCommitV2), + V1(ConsensusCommitV1), } impl ConsensusCommit { pub fn certificates(&self) -> Vec { match self { ConsensusCommit::V1(sub_dag) => sub_dag.certificates(), - ConsensusCommit::V2(sub_dag) => sub_dag.certificates(), } } pub fn leader(&self) -> CertificateDigest { match self { ConsensusCommit::V1(sub_dag) => sub_dag.leader(), - ConsensusCommit::V2(sub_dag) => sub_dag.leader(), } } pub fn leader_round(&self) -> Round { match self { ConsensusCommit::V1(sub_dag) => sub_dag.leader_round(), - ConsensusCommit::V2(sub_dag) => sub_dag.leader_round(), } } pub fn sub_dag_index(&self) -> SequenceNumber { match self { ConsensusCommit::V1(sub_dag) => sub_dag.sub_dag_index(), - ConsensusCommit::V2(sub_dag) => sub_dag.sub_dag_index(), } } pub fn reputation_score(&self) -> ReputationScores { match self { ConsensusCommit::V1(sub_dag) => sub_dag.reputation_score(), - ConsensusCommit::V2(sub_dag) => sub_dag.reputation_score(), } } pub fn commit_timestamp(&self) -> TimestampMs { match self { ConsensusCommit::V1(sub_dag) => sub_dag.commit_timestamp(), - ConsensusCommit::V2(sub_dag) => sub_dag.commit_timestamp(), - } - } -} - -impl CommittedSubDagShell { - pub fn from_sub_dag(sub_dag: &CommittedSubDag) -> Self { - Self { - certificates: sub_dag.certificates.iter().map(|x| x.digest()).collect(), - leader: sub_dag.leader.digest(), - leader_round: sub_dag.leader.round(), - sub_dag_index: sub_dag.sub_dag_index, - reputation_score: sub_dag.reputation_score.clone(), } } } From 35145d8efd211f3e9bf59ad1781a8583035970c2 Mon Sep 17 00:00:00 2001 From: Mirko Zichichi Date: Wed, 30 Oct 2024 11:23:17 +0100 Subject: [PATCH 22/55] chore(iota-types/gas): Remove old gas models (#3766) * chore(iota-types/gas): remove old cost tables * refactor(iota-types/gas): remove dont_charge_budget_on_storage_oog * refactor(iota-types/gas): remove gas_price_too_high * refactor(iota-types/gas): remove charge_input_as_memory * refactor(iota-types/gas): remove use_legacy_abstract_size * refactor(iota-types/gas): remove charge_upgrades * chore(iota-protocol-config): move gas model version from 8 to 1 * fix(iota-types/gas): max_gas_price comparison --------- Co-authored-by: Alexander Sporn --- crates/iota-open-rpc/spec/openrpc.json | 2 +- crates/iota-protocol-config/src/lib.rs | 2 +- ...tocol_config__test__Mainnet_version_1.snap | 2 +- ...tocol_config__test__Testnet_version_1.snap | 2 +- ...iota_protocol_config__test__version_1.snap | 2 +- crates/iota-types/src/gas.rs | 8 +- .../src/gas_model/gas_predicates.rs | 48 +---- crates/iota-types/src/gas_model/tables.rs | 198 +----------------- .../src/account_universe/transfer_gen.rs | 2 +- .../latest/iota-adapter/src/gas_charger.rs | 38 +--- .../v0/iota-adapter/src/gas_charger.rs | 38 +--- 11 files changed, 27 insertions(+), 315 deletions(-) diff --git a/crates/iota-open-rpc/spec/openrpc.json b/crates/iota-open-rpc/spec/openrpc.json index 10d0f8d5f34..cd116254fbe 100644 --- a/crates/iota-open-rpc/spec/openrpc.json +++ b/crates/iota-open-rpc/spec/openrpc.json @@ -1603,7 +1603,7 @@ "u64": "1" }, "gas_model_version": { - "u64": "8" + "u64": "1" }, "gas_rounding_step": { "u64": "1000" diff --git a/crates/iota-protocol-config/src/lib.rs b/crates/iota-protocol-config/src/lib.rs index 8b2f8cd07d7..9a235a3c492 100644 --- a/crates/iota-protocol-config/src/lib.rs +++ b/crates/iota-protocol-config/src/lib.rs @@ -1266,7 +1266,7 @@ impl ProtocolConfig { obj_access_cost_verify_per_byte: Some(200), obj_data_cost_refundable: Some(100), obj_metadata_cost_non_refundable: Some(50), - gas_model_version: Some(8), + gas_model_version: Some(1), storage_rebate_rate: Some(10000), // Change reward slashing rate to 100%. reward_slashing_rate: Some(10000), diff --git a/crates/iota-protocol-config/src/snapshots/iota_protocol_config__test__Mainnet_version_1.snap b/crates/iota-protocol-config/src/snapshots/iota_protocol_config__test__Mainnet_version_1.snap index 40ac4f18320..4895285e864 100644 --- a/crates/iota-protocol-config/src/snapshots/iota_protocol_config__test__Mainnet_version_1.snap +++ b/crates/iota-protocol-config/src/snapshots/iota_protocol_config__test__Mainnet_version_1.snap @@ -84,7 +84,7 @@ obj_access_cost_read_per_byte: 15 obj_access_cost_mutate_per_byte: 40 obj_access_cost_delete_per_byte: 40 obj_access_cost_verify_per_byte: 200 -gas_model_version: 8 +gas_model_version: 1 obj_data_cost_refundable: 100 obj_metadata_cost_non_refundable: 50 storage_rebate_rate: 10000 diff --git a/crates/iota-protocol-config/src/snapshots/iota_protocol_config__test__Testnet_version_1.snap b/crates/iota-protocol-config/src/snapshots/iota_protocol_config__test__Testnet_version_1.snap index 1a37c689667..226eb542a00 100644 --- a/crates/iota-protocol-config/src/snapshots/iota_protocol_config__test__Testnet_version_1.snap +++ b/crates/iota-protocol-config/src/snapshots/iota_protocol_config__test__Testnet_version_1.snap @@ -84,7 +84,7 @@ obj_access_cost_read_per_byte: 15 obj_access_cost_mutate_per_byte: 40 obj_access_cost_delete_per_byte: 40 obj_access_cost_verify_per_byte: 200 -gas_model_version: 8 +gas_model_version: 1 obj_data_cost_refundable: 100 obj_metadata_cost_non_refundable: 50 storage_rebate_rate: 10000 diff --git a/crates/iota-protocol-config/src/snapshots/iota_protocol_config__test__version_1.snap b/crates/iota-protocol-config/src/snapshots/iota_protocol_config__test__version_1.snap index 1863f2f5d1d..c1ca58f0173 100644 --- a/crates/iota-protocol-config/src/snapshots/iota_protocol_config__test__version_1.snap +++ b/crates/iota-protocol-config/src/snapshots/iota_protocol_config__test__version_1.snap @@ -88,7 +88,7 @@ obj_access_cost_read_per_byte: 15 obj_access_cost_mutate_per_byte: 40 obj_access_cost_delete_per_byte: 40 obj_access_cost_verify_per_byte: 200 -gas_model_version: 8 +gas_model_version: 1 obj_data_cost_refundable: 100 obj_metadata_cost_non_refundable: 50 storage_rebate_rate: 10000 diff --git a/crates/iota-types/src/gas.rs b/crates/iota-types/src/gas.rs index 39b7bd9edff..8df712a0797 100644 --- a/crates/iota-types/src/gas.rs +++ b/crates/iota-types/src/gas.rs @@ -19,10 +19,7 @@ pub mod checked { ObjectID, effects::{TransactionEffects, TransactionEffectsAPI}, error::{ExecutionError, IotaResult, UserInputError, UserInputResult}, - gas_model::{ - gas_predicates::gas_price_too_high, gas_v1::IotaGasStatus as IotaGasStatusV1, - tables::GasStatus, - }, + gas_model::{gas_v1::IotaGasStatus as IotaGasStatusV1, tables::GasStatus}, iota_serde::{BigInt, Readable}, object::Object, transaction::ObjectReadResult, @@ -78,8 +75,7 @@ pub mod checked { } .into()); } - if gas_price_too_high(config.gas_model_version()) && gas_price >= config.max_gas_price() - { + if gas_price > config.max_gas_price() { return Err(UserInputError::GasPriceTooHigh { max_gas_price: config.max_gas_price(), } diff --git a/crates/iota-types/src/gas_model/gas_predicates.rs b/crates/iota-types/src/gas_model/gas_predicates.rs index 8117c30cb34..9dbbe50c16a 100644 --- a/crates/iota-types/src/gas_model/gas_predicates.rs +++ b/crates/iota-types/src/gas_model/gas_predicates.rs @@ -6,51 +6,9 @@ // Predicates and utility functions based on gas versions. // -use crate::gas_model::{ - tables::{ - initial_cost_schedule_v1, initial_cost_schedule_v2, initial_cost_schedule_v3, - initial_cost_schedule_v4, initial_cost_schedule_v5, - }, - units_types::CostTable, -}; - -/// If true, do not charge the entire budget on storage OOG -pub fn dont_charge_budget_on_storage_oog(gas_model_version: u64) -> bool { - gas_model_version >= 4 -} - -/// If true, enable the check for gas price too high -pub fn gas_price_too_high(gas_model_version: u64) -> bool { - gas_model_version >= 4 -} - -/// If true, input object bytes are treated as memory allocated in Move and -/// charged according to the bucket they end up in. -pub fn charge_input_as_memory(gas_model_version: u64) -> bool { - gas_model_version == 4 -} - -/// If true, calculate value sizes using the legacy size calculation. -pub fn use_legacy_abstract_size(gas_model_version: u64) -> bool { - gas_model_version <= 7 -} - -// If true, charge differently for package upgrades -pub fn charge_upgrades(gas_model_version: u64) -> bool { - gas_model_version >= 7 -} +use crate::gas_model::{tables::initial_cost_schedule_v1, units_types::CostTable}; // Return the version supported cost table -pub fn cost_table_for_version(gas_model: u64) -> CostTable { - if gas_model <= 3 { - initial_cost_schedule_v1() - } else if gas_model == 4 { - initial_cost_schedule_v2() - } else if gas_model == 5 { - initial_cost_schedule_v3() - } else if gas_model <= 7 { - initial_cost_schedule_v4() - } else { - initial_cost_schedule_v5() - } +pub fn cost_table_for_version(_gas_model: u64) -> CostTable { + initial_cost_schedule_v1() } diff --git a/crates/iota-types/src/gas_model/tables.rs b/crates/iota-types/src/gas_model/tables.rs index c4da744fb7b..749a97c7e64 100644 --- a/crates/iota-types/src/gas_model/tables.rs +++ b/crates/iota-types/src/gas_model/tables.rs @@ -18,7 +18,6 @@ use move_vm_types::{ }; use once_cell::sync::Lazy; -use super::gas_predicates::{charge_input_as_memory, use_legacy_abstract_size}; use crate::gas_model::units_types::{CostTable, Gas, GasCost}; /// VM flat fee @@ -125,7 +124,7 @@ impl GasStatus { /// system code that does not have to charge the user. pub fn new_unmetered() -> Self { Self { - gas_model_version: 4, + gas_model_version: 1, gas_left: InternalGas::new(0), gas_price: 1, initial_budget: InternalGas::new(0), @@ -322,21 +321,12 @@ impl GasStatus { // As more bytes are read throughout the computation the cost per bytes is // increased. pub fn charge_bytes(&mut self, size: usize, cost_per_byte: u64) -> PartialVMResult<()> { - let computation_cost = if charge_input_as_memory(self.gas_model_version) { - self.increase_stack_size(size as u64)?; - self.stack_size_current_tier_mult * size as u64 * cost_per_byte - } else { - size as u64 * cost_per_byte - }; + let computation_cost = size as u64 * cost_per_byte; self.deduct_units(computation_cost) } fn abstract_memory_size(&self, val: impl ValueView) -> AbstractMemorySize { - if use_legacy_abstract_size(self.gas_model_version) { - val.legacy_abstract_memory_size() - } else { - val.abstract_memory_size() - } + val.abstract_memory_size() } pub fn gas_price(&self) -> u64 { @@ -717,186 +707,6 @@ pub fn unit_cost_schedule() -> CostTable { } pub fn initial_cost_schedule_v1() -> CostTable { - let instruction_tiers: BTreeMap = vec![ - (0, 1), - (3000, 2), - (6000, 3), - (8000, 5), - (9000, 9), - (9500, 16), - (10000, 29), - (10500, 50), - ] - .into_iter() - .collect(); - - let stack_height_tiers: BTreeMap = vec![ - (0, 1), - (400, 2), - (800, 3), - (1200, 5), - (1500, 9), - (1800, 16), - (2000, 29), - (2200, 50), - ] - .into_iter() - .collect(); - - let stack_size_tiers: BTreeMap = vec![ - (0, 1), - (2000, 2), - (5000, 3), - (8000, 5), - (10000, 9), - (11000, 16), - (11500, 29), - (11500, 50), - ] - .into_iter() - .collect(); - - CostTable { - instruction_tiers, - stack_size_tiers, - stack_height_tiers, - } -} - -pub fn initial_cost_schedule_v2() -> CostTable { - let instruction_tiers: BTreeMap = vec![ - (0, 1), - (3000, 2), - (6000, 3), - (8000, 5), - (9000, 9), - (9500, 16), - (10000, 29), - (10500, 50), - (12000, 150), - (15000, 250), - ] - .into_iter() - .collect(); - - let stack_height_tiers: BTreeMap = vec![ - (0, 1), - (400, 2), - (800, 3), - (1200, 5), - (1500, 9), - (1800, 16), - (2000, 29), - (2200, 50), - (3000, 150), - (5000, 250), - ] - .into_iter() - .collect(); - - let stack_size_tiers: BTreeMap = vec![ - (0, 1), - (2000, 2), - (5000, 3), - (8000, 5), - (10000, 9), - (11000, 16), - (11500, 29), - (11500, 50), - (15000, 150), - (20000, 250), - ] - .into_iter() - .collect(); - - CostTable { - instruction_tiers, - stack_size_tiers, - stack_height_tiers, - } -} - -pub fn initial_cost_schedule_v3() -> CostTable { - let instruction_tiers: BTreeMap = vec![ - (0, 1), - (3000, 2), - (6000, 3), - (8000, 5), - (9000, 9), - (9500, 16), - (10000, 29), - (10500, 50), - (15000, 100), - ] - .into_iter() - .collect(); - - let stack_height_tiers: BTreeMap = vec![ - (0, 1), - (400, 2), - (800, 3), - (1200, 5), - (1500, 9), - (1800, 16), - (2000, 29), - (2200, 50), - (5000, 100), - ] - .into_iter() - .collect(); - - let stack_size_tiers: BTreeMap = vec![ - (0, 1), - (2000, 2), - (5000, 3), - (8000, 5), - (10000, 9), - (11000, 16), - (11500, 29), - (11500, 50), - (20000, 100), - ] - .into_iter() - .collect(); - - CostTable { - instruction_tiers, - stack_size_tiers, - stack_height_tiers, - } -} - -pub fn initial_cost_schedule_v4() -> CostTable { - let instruction_tiers: BTreeMap = vec![ - (0, 1), - (20_000, 2), - (50_000, 10), - (100_000, 50), - (200_000, 100), - ] - .into_iter() - .collect(); - - let stack_height_tiers: BTreeMap = - vec![(0, 1), (1_000, 2), (10_000, 10)].into_iter().collect(); - - let stack_size_tiers: BTreeMap = vec![ - (0, 1), - (100_000, 2), // ~100K - (500_000, 5), // ~500K - (1_000_000, 100), // ~1M - ] - .into_iter() - .collect(); - - CostTable { - instruction_tiers, - stack_size_tiers, - stack_height_tiers, - } -} - -pub fn initial_cost_schedule_v5() -> CostTable { let instruction_tiers: BTreeMap = vec![ (0, 1), (20_000, 2), @@ -934,7 +744,7 @@ pub fn initial_cost_schedule_v5() -> CostTable { // instead we perform this translation from our gas units and cost schedule to // the one expected by the Move unit tests. pub fn initial_cost_schedule_for_unit_tests() -> move_vm_test_utils::gas_schedule::CostTable { - let table = initial_cost_schedule_v5(); + let table = initial_cost_schedule_v1(); move_vm_test_utils::gas_schedule::CostTable { instruction_tiers: table.instruction_tiers.into_iter().collect(), stack_height_tiers: table.stack_height_tiers.into_iter().collect(), diff --git a/crates/transaction-fuzzer/src/account_universe/transfer_gen.rs b/crates/transaction-fuzzer/src/account_universe/transfer_gen.rs index 255445d50c5..7bdeb9adfdc 100644 --- a/crates/transaction-fuzzer/src/account_universe/transfer_gen.rs +++ b/crates/transaction-fuzzer/src/account_universe/transfer_gen.rs @@ -365,7 +365,7 @@ impl RunInfo { let gas_budget_too_low = p2p.gas < PROTOCOL_CONFIG.base_tx_cost_fixed() * p2p.gas_price; let not_enough_gas = p2p.gas < p2p_success_gas(p2p.gas_price); let gas_price_too_low = p2p.gas_price < rgp; - let gas_price_too_high = p2p.gas_price >= PROTOCOL_CONFIG.max_gas_price(); + let gas_price_too_high = p2p.gas_price > PROTOCOL_CONFIG.max_gas_price(); let gas_price_greater_than_budget = p2p.gas_price > p2p.gas; let gas_units_too_low = p2p.gas_price > 0 && p2p.gas / p2p.gas_price < INSUFFICIENT_GAS_UNITS_THRESHOLD diff --git a/iota-execution/latest/iota-adapter/src/gas_charger.rs b/iota-execution/latest/iota-adapter/src/gas_charger.rs index 1c07ea77de5..d83e38ba39b 100644 --- a/iota-execution/latest/iota-adapter/src/gas_charger.rs +++ b/iota-execution/latest/iota-adapter/src/gas_charger.rs @@ -15,10 +15,7 @@ pub mod checked { digests::TransactionDigest, error::ExecutionError, gas::{GasCostSummary, IotaGasStatus, deduct_gas}, - gas_model::{ - gas_predicates::{charge_upgrades, dont_charge_budget_on_storage_oog}, - tables::GasStatus, - }, + gas_model::tables::GasStatus, is_system_package, object::Data, }; @@ -35,6 +32,7 @@ pub mod checked { /// version. 2- Isolate all gas accounting into a single implementation. /// Gas objects are not passed around, and they are retrieved from /// this instance. + #[allow(dead_code)] #[derive(Debug)] pub struct GasCharger { tx_digest: TransactionDigest, @@ -66,7 +64,7 @@ pub mod checked { pub fn new_unmetered(tx_digest: TransactionDigest) -> Self { Self { tx_digest, - gas_model_version: 6, // pick any of the latest, it should not matter + gas_model_version: 1, // pick any of the latest, it should not matter gas_coins: vec![], smashed_gas_coin: None, gas_status: IotaGasStatus::new_unmetered(), @@ -223,11 +221,7 @@ pub mod checked { } pub fn charge_upgrade_package(&mut self, size: usize) -> Result<(), ExecutionError> { - if charge_upgrades(self.gas_model_version) { - self.gas_status.charge_publish_package(size) - } else { - Ok(()) - } + self.gas_status.charge_publish_package(size) } pub fn charge_input_objects( @@ -325,11 +319,7 @@ pub mod checked { // charge for storage, however they track storage values to check // for conservation rules if let Some(gas_object_id) = self.smashed_gas_coin { - if dont_charge_budget_on_storage_oog(self.gas_model_version) { - self.handle_storage_and_rebate_v2(temporary_store, execution_result) - } else { - self.handle_storage_and_rebate_v1(temporary_store, execution_result) - } + self.handle_storage_and_rebate(temporary_store, execution_result); let cost_summary = self.gas_status.summary(); let gas_used = cost_summary.net_gas_usage(); @@ -346,23 +336,7 @@ pub mod checked { } } - fn handle_storage_and_rebate_v1( - &mut self, - temporary_store: &mut TemporaryStore<'_>, - execution_result: &mut Result, - ) { - if let Err(err) = self.gas_status.charge_storage_and_rebate() { - self.reset(temporary_store); - self.gas_status.adjust_computation_on_out_of_gas(); - temporary_store.ensure_active_inputs_mutated(); - temporary_store.collect_rebate(self); - if execution_result.is_ok() { - *execution_result = Err(err); - } - } - } - - fn handle_storage_and_rebate_v2( + fn handle_storage_and_rebate( &mut self, temporary_store: &mut TemporaryStore<'_>, execution_result: &mut Result, diff --git a/iota-execution/v0/iota-adapter/src/gas_charger.rs b/iota-execution/v0/iota-adapter/src/gas_charger.rs index 1c07ea77de5..d83e38ba39b 100644 --- a/iota-execution/v0/iota-adapter/src/gas_charger.rs +++ b/iota-execution/v0/iota-adapter/src/gas_charger.rs @@ -15,10 +15,7 @@ pub mod checked { digests::TransactionDigest, error::ExecutionError, gas::{GasCostSummary, IotaGasStatus, deduct_gas}, - gas_model::{ - gas_predicates::{charge_upgrades, dont_charge_budget_on_storage_oog}, - tables::GasStatus, - }, + gas_model::tables::GasStatus, is_system_package, object::Data, }; @@ -35,6 +32,7 @@ pub mod checked { /// version. 2- Isolate all gas accounting into a single implementation. /// Gas objects are not passed around, and they are retrieved from /// this instance. + #[allow(dead_code)] #[derive(Debug)] pub struct GasCharger { tx_digest: TransactionDigest, @@ -66,7 +64,7 @@ pub mod checked { pub fn new_unmetered(tx_digest: TransactionDigest) -> Self { Self { tx_digest, - gas_model_version: 6, // pick any of the latest, it should not matter + gas_model_version: 1, // pick any of the latest, it should not matter gas_coins: vec![], smashed_gas_coin: None, gas_status: IotaGasStatus::new_unmetered(), @@ -223,11 +221,7 @@ pub mod checked { } pub fn charge_upgrade_package(&mut self, size: usize) -> Result<(), ExecutionError> { - if charge_upgrades(self.gas_model_version) { - self.gas_status.charge_publish_package(size) - } else { - Ok(()) - } + self.gas_status.charge_publish_package(size) } pub fn charge_input_objects( @@ -325,11 +319,7 @@ pub mod checked { // charge for storage, however they track storage values to check // for conservation rules if let Some(gas_object_id) = self.smashed_gas_coin { - if dont_charge_budget_on_storage_oog(self.gas_model_version) { - self.handle_storage_and_rebate_v2(temporary_store, execution_result) - } else { - self.handle_storage_and_rebate_v1(temporary_store, execution_result) - } + self.handle_storage_and_rebate(temporary_store, execution_result); let cost_summary = self.gas_status.summary(); let gas_used = cost_summary.net_gas_usage(); @@ -346,23 +336,7 @@ pub mod checked { } } - fn handle_storage_and_rebate_v1( - &mut self, - temporary_store: &mut TemporaryStore<'_>, - execution_result: &mut Result, - ) { - if let Err(err) = self.gas_status.charge_storage_and_rebate() { - self.reset(temporary_store); - self.gas_status.adjust_computation_on_out_of_gas(); - temporary_store.ensure_active_inputs_mutated(); - temporary_store.collect_rebate(self); - if execution_result.is_ok() { - *execution_result = Err(err); - } - } - } - - fn handle_storage_and_rebate_v2( + fn handle_storage_and_rebate( &mut self, temporary_store: &mut TemporaryStore<'_>, execution_result: &mut Result, From dcd0d3c2aba2d766c6de7fc29cb43592bb6248f0 Mon Sep 17 00:00:00 2001 From: Levente Pap Date: Wed, 30 Oct 2024 11:26:07 +0100 Subject: [PATCH 23/55] chore(ci): tag docker images with network name derived from semver tag (#3737) * chore(ci): tag docker images with network name derived from semver tag * fix: typo --- .github/workflows/release_docker.yml | 40 +++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release_docker.yml b/.github/workflows/release_docker.yml index 62c6464c51e..5102bcdc25e 100644 --- a/.github/workflows/release_docker.yml +++ b/.github/workflows/release_docker.yml @@ -46,11 +46,19 @@ jobs: uses: docker/metadata-action@8e5442c4ef9f78752691e2d8f8d19755c6f78e81 # pin@v5 with: images: docker-registry.iota.org/iota-node + # mapping semver tags to networks + # v{MAJOR}.{MINOR}.{PATCH}-alpha -> alphanet + # v{MAJOR}.{MINOR}.{PATCH}-beta -> devnet + # v{MAJOR}.{MINOR}.{PATCH}-rc -> testnet + # v{MAJOR}.{MINOR}.{PATCH} -> mainnet tags: | type=raw,value={{sha}},enable=${{ github.event_name == 'workflow_dispatch' }} type=raw,value=latest,enable=${{ github.event_name == 'workflow_dispatch' }} type=raw,value={{tag}},enable=${{ github.event_name == 'release' }} - type=match,pattern=(.*)-v\d+\.\d+\.\d+,group=1,enable=${{ github.event_name == 'release' }} + type=match,pattern=v\d+\.\d+\.\d+-alpha.*\d*,group=0,value=alphanet,enable=${{ github.event_name == 'release' }} + type=match,pattern=v\d+\.\d+\.\d+-beta.*\d*,group=0,value=devnet,enable=${{ github.event_name == 'release' }} + type=match,pattern=v\d+\.\d+\.\d+-rc.*\d*,group=0,value=testnet,enable=${{ github.event_name == 'release' }} + type=match,pattern=v\d+\.\d+\.\d+$,group=0,value=mainnet,enable=${{ github.event_name == 'release' }} - name: Login to Docker Registry uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # pin@v3 @@ -97,11 +105,19 @@ jobs: uses: docker/metadata-action@8e5442c4ef9f78752691e2d8f8d19755c6f78e81 # pin@v5 with: images: docker-registry.iota.org/iota-indexer + # mapping semver tags to networks + # v{MAJOR}.{MINOR}.{PATCH}-alpha -> alphanet + # v{MAJOR}.{MINOR}.{PATCH}-beta -> devnet + # v{MAJOR}.{MINOR}.{PATCH}-rc -> testnet + # v{MAJOR}.{MINOR}.{PATCH} -> mainnet tags: | type=raw,value={{sha}},enable=${{ github.event_name == 'workflow_dispatch' }} type=raw,value=latest,enable=${{ github.event_name == 'workflow_dispatch' }} type=raw,value={{tag}},enable=${{ github.event_name == 'release' }} - type=match,pattern=(.*)-v\d+\.\d+\.\d+,group=1,enable=${{ github.event_name == 'release' }} + type=match,pattern=v\d+\.\d+\.\d+-alpha.*\d*,group=0,value=alphanet,enable=${{ github.event_name == 'release' }} + type=match,pattern=v\d+\.\d+\.\d+-beta.*\d*,group=0,value=devnet,enable=${{ github.event_name == 'release' }} + type=match,pattern=v\d+\.\d+\.\d+-rc.*\d*,group=0,value=testnet,enable=${{ github.event_name == 'release' }} + type=match,pattern=v\d+\.\d+\.\d+$,group=0,value=mainnet,enable=${{ github.event_name == 'release' }} - name: Login to Docker Registry uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # pin@v3 @@ -148,11 +164,19 @@ jobs: uses: docker/metadata-action@8e5442c4ef9f78752691e2d8f8d19755c6f78e81 # pin@v5 with: images: docker-registry.iota.org/iota-tools + # mapping semver tags to networks + # v{MAJOR}.{MINOR}.{PATCH}-alpha -> alphanet + # v{MAJOR}.{MINOR}.{PATCH}-beta -> devnet + # v{MAJOR}.{MINOR}.{PATCH}-rc -> testnet + # v{MAJOR}.{MINOR}.{PATCH} -> mainnet tags: | type=raw,value={{sha}},enable=${{ github.event_name == 'workflow_dispatch' }} type=raw,value=latest,enable=${{ github.event_name == 'workflow_dispatch' }} type=raw,value={{tag}},enable=${{ github.event_name == 'release' }} - type=match,pattern=(.*)-v\d+\.\d+\.\d+,group=1,enable=${{ github.event_name == 'release' }} + type=match,pattern=v\d+\.\d+\.\d+-alpha.*\d*,group=0,value=alphanet,enable=${{ github.event_name == 'release' }} + type=match,pattern=v\d+\.\d+\.\d+-beta.*\d*,group=0,value=devnet,enable=${{ github.event_name == 'release' }} + type=match,pattern=v\d+\.\d+\.\d+-rc.*\d*,group=0,value=testnet,enable=${{ github.event_name == 'release' }} + type=match,pattern=v\d+\.\d+\.\d+$,group=0,value=mainnet,enable=${{ github.event_name == 'release' }} - name: Login to Docker Registry uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # pin@v3 @@ -199,11 +223,19 @@ jobs: uses: docker/metadata-action@8e5442c4ef9f78752691e2d8f8d19755c6f78e81 # pin@v5 with: images: docker-registry.iota.org/iota-graphql-rpc + # mapping semver tags to networks + # v{MAJOR}.{MINOR}.{PATCH}-alpha -> alphanet + # v{MAJOR}.{MINOR}.{PATCH}-beta -> devnet + # v{MAJOR}.{MINOR}.{PATCH}-rc -> testnet + # v{MAJOR}.{MINOR}.{PATCH} -> mainnet tags: | type=raw,value={{sha}},enable=${{ github.event_name == 'workflow_dispatch' }} type=raw,value=latest,enable=${{ github.event_name == 'workflow_dispatch' }} type=raw,value={{tag}},enable=${{ github.event_name == 'release' }} - type=match,pattern=(.*)-v\d+\.\d+\.\d+,group=1,enable=${{ github.event_name == 'release' }} + type=match,pattern=v\d+\.\d+\.\d+-alpha.*\d*,group=0,value=alphanet,enable=${{ github.event_name == 'release' }} + type=match,pattern=v\d+\.\d+\.\d+-beta.*\d*,group=0,value=devnet,enable=${{ github.event_name == 'release' }} + type=match,pattern=v\d+\.\d+\.\d+-rc.*\d*,group=0,value=testnet,enable=${{ github.event_name == 'release' }} + type=match,pattern=v\d+\.\d+\.\d+$,group=0,value=mainnet,enable=${{ github.event_name == 'release' }} - name: Login to Docker Registry uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # pin@v3 From aa9dcbe20c8af383b04f64cd5895c79b4610f038 Mon Sep 17 00:00:00 2001 From: evavirseda Date: Wed, 30 Oct 2024 12:09:02 +0100 Subject: [PATCH 24/55] feat(wallet): polish connected dapp (#3771) * minor fix * feat: align button * feat: refine button --- apps/wallet/src/ui/app/shared/dapp-status/index.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/wallet/src/ui/app/shared/dapp-status/index.tsx b/apps/wallet/src/ui/app/shared/dapp-status/index.tsx index 9be9679f472..dd6901acbb8 100644 --- a/apps/wallet/src/ui/app/shared/dapp-status/index.tsx +++ b/apps/wallet/src/ui/app/shared/dapp-status/index.tsx @@ -109,7 +109,7 @@ function DappStatus() { ref={refs.setFloating} >
-
+
{activeOriginFavIcon ? (
-
+
From 456a4cf8db7d1971308183cd91a40d5912af3523 Mon Sep 17 00:00:00 2001 From: evavirseda Date: Wed, 30 Oct 2024 12:50:34 +0100 Subject: [PATCH 25/55] feat(wallet-dashboard): add feature flags for migration & supply increase vesting (#3670) * feat: add features flags * feat: add growthbook * feat:add redirects if feature flag are disabled * feat: call init outside function * feat: rename anum and variabel * fix * feat: remove comment --- .../src/features/features.controller.ts | 6 +++ apps/core/src/constants/features.enum.ts | 2 + .../components/sidebar/Sidebar.tsx | 13 ++++- .../app/(protected)/migrations/page.tsx | 15 ++++++ .../app/(protected)/vesting/page.tsx | 13 +++++ apps/wallet-dashboard/app/layout.tsx | 50 ++++++++++--------- apps/wallet-dashboard/lib/utils/growthbook.ts | 11 ++++ apps/wallet-dashboard/lib/utils/index.ts | 1 + apps/wallet-dashboard/package.json | 2 + pnpm-lock.yaml | 6 +++ 10 files changed, 94 insertions(+), 25 deletions(-) create mode 100644 apps/wallet-dashboard/lib/utils/growthbook.ts diff --git a/apps/apps-backend/src/features/features.controller.ts b/apps/apps-backend/src/features/features.controller.ts index e1400b1d57a..e71e4b326a4 100644 --- a/apps/apps-backend/src/features/features.controller.ts +++ b/apps/apps-backend/src/features/features.controller.ts @@ -64,6 +64,12 @@ export class FeaturesController { [Feature.AccountFinder]: { defaultValue: false, }, + [Feature.WalletDashboardMigration]: { + defaultValue: false, + }, + [Feature.WalletDashboardSupplyIncreaseVesting]: { + defaultValue: false, + }, }, dateUpdated: new Date().toISOString(), }; diff --git a/apps/core/src/constants/features.enum.ts b/apps/core/src/constants/features.enum.ts index 615c80386e3..3670db4edc1 100644 --- a/apps/core/src/constants/features.enum.ts +++ b/apps/core/src/constants/features.enum.ts @@ -18,4 +18,6 @@ export enum Feature { NetworkOutageOverride = 'network-outage-override', ModuleSourceVerification = 'module-source-verification', WalletEffectsOnlySharedTransaction = 'wallet-effects-only-shared-transaction', + StardustMigration = 'migration', + SupplyIncreaseVesting = 'supply-increase-vesting', } diff --git a/apps/wallet-dashboard/app/(protected)/components/sidebar/Sidebar.tsx b/apps/wallet-dashboard/app/(protected)/components/sidebar/Sidebar.tsx index 0f49225192d..03742f9e8e4 100644 --- a/apps/wallet-dashboard/app/(protected)/components/sidebar/Sidebar.tsx +++ b/apps/wallet-dashboard/app/(protected)/components/sidebar/Sidebar.tsx @@ -4,13 +4,24 @@ import { PROTECTED_ROUTES } from '@/lib/constants/routes.constants'; import { IotaLogoMark } from '@iota/ui-icons'; import { SidebarItem } from './SidebarItem'; +import { Feature } from '@iota/core'; +import { useFeature } from '@growthbook/growthbook-react'; export function Sidebar() { + const featureFlags = { + Migrations: useFeature(Feature.StardustMigration).value, + Vesting: useFeature(Feature.SupplyIncreaseVesting).value, + }; + + const filteredRoutes = PROTECTED_ROUTES.filter(({ title }) => { + return title in featureFlags ? featureFlags[title as keyof typeof featureFlags] : true; + }); + return (