Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
370533a
feat(iota-types, iota-tx-checks, iota-protocol-config): new struct mo…
Dkwcs Aug 18, 2025
90814dd
feat(iota-types): authcontext, authdigeset new types have been create…
Dkwcs Aug 18, 2025
7914ee1
feat(iota-execution): add a `validate_transaction` function (#8131)
valeriyr Aug 22, 2025
0dfba5a
feat: Added programmable_transaction.move and related test (#8146)
theiari Sep 2, 2025
f8a422c
feat(framework-snapshot): create protocol v12 framework snapshots
miker83z Sep 2, 2025
1edc591
feat: validate a transaction with a `MoveAuthenticator` signature sch…
valeriyr Sep 2, 2025
4af2c04
feat(iota-framework): Add create_auth_info_v1 native function (#8477)
TheMrAI Sep 11, 2025
25f4b30
feat(iota_account): implementation of a Move package to represent a b…
Dkwcs Sep 11, 2025
3b0ec45
fix(iota-framework): Update create_auth_info_v1 (#8532)
TheMrAI Sep 12, 2025
f2dc06f
fix: loading an authenticator info in `check_move_account` (#8553)
valeriyr Sep 16, 2025
4a412dc
fix: ptb arguments checking (#8574)
valeriyr Sep 16, 2025
ce6af9b
fix(auth_context): serialization uses TypeName instead of TypeInput (…
miker83z Sep 16, 2025
e443bf4
feat(docs): add an aa example using the rust sdk (#8543)
miker83z Sep 29, 2025
2323b06
feat: first dynamic multisig account implementation (#8638)
valeriyr Oct 1, 2025
fcf940c
feat(iota-e2e-tests): Provide e2e tests for create_auth_info feature …
TheMrAI Oct 1, 2025
fd3ebc0
refactor(examples): Make iota_account reusable (#8744)
TheMrAI Oct 7, 2025
919d230
feat: add `AuthenticatorInfoV1Key` instead of `AUTHENTICATOR_DF_NAME`…
valeriyr Oct 8, 2025
a04b770
Merge branch 'vm-lang/aa-auth/8805-beta-feature-branch' into vm-lang/…
miker83z Oct 8, 2025
7c9554c
Merge branch 'vm-lang/aa-auth/8805-beta-feature-branch' into vm-lang/…
miker83z Oct 8, 2025
da9f2a7
feat(e2e-tests): add abstract account create and issuing TX tests (#8…
miker83z Oct 8, 2025
470d7d9
chore(tx-checks): fix clippy
miker83z Oct 8, 2025
4c61aa5
feat(examples): Add "Time locked account" account abstraction example…
TheMrAI Oct 14, 2025
fb121a5
feat(examples/move): function key plugin implementation for IOTAccoun…
Dkwcs Oct 16, 2025
4f3071a
refactor: add a new `Validation` execution mode and refactor `AuthCon…
valeriyr Oct 16, 2025
ccd054e
feat: add the address check in MoveAuthenticator, allow only one(send…
valeriyr Oct 21, 2025
821de7b
feat(authority): support failing validation effects commit post-conse…
miker83z Oct 27, 2025
12351f1
refactor: optimize authenticator inputs loading (#9047)
valeriyr Oct 29, 2025
d943d7e
refactor: avoid gas coins double check (#9100)
valeriyr Oct 31, 2025
c16cd2e
feat: treat authenticator shared objects as TX input (#9132)
valeriyr Nov 5, 2025
4aa1cb9
feat(verifier): reject authenticate functions having a Receiving ref …
miker83z Nov 6, 2025
edd0007
feat(compiler): add a new known attribute based on Flavor and move th…
miker83z Nov 11, 2025
825e69c
feat(move-build, verifier): allow metadata in bytecode and fill metad…
miker83z Nov 11, 2025
069fd48
feat: force push the `object_to_authenticate` as first parameter of t…
valeriyr Nov 12, 2025
f8a33f6
feat: implement a template of authenticator info checking during atta…
valeriyr Nov 12, 2025
20d43f1
feat(compiler): add authenticator attribute (#9188)
miker83z Nov 12, 2025
07fdff2
feat(move-build,verifier): fill authenticator metadata during package…
miker83z Nov 12, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
// Copyright (c) 2025 IOTA Stiftung
// SPDX-License-Identifier: Apache-2.0

//# init --addresses Test=0x0

//# publish

module Test::M;

use iota::auth_context::AuthContext;

public fun authenticate(_: &AuthContext, _: &TxContext) {}

public fun authenticate_with_mut_auth_context(_: &mut AuthContext, _: &TxContext) {}

public fun authenticate_with_auth_context_value(_: AuthContext, _: &TxContext) {}

public fun authenticate_with_miss_placed_auth_context(_: &AuthContext, _: u64, _: &TxContext) {}

public fun authenticate_with_only_auth_context(_: &AuthContext) {}

// using `iota::auth_context::AuthContext` is not allowed in this execution mode
//# run Test::M::authenticate

// using a mutable reference to `iota::auth_context::AuthContext` is not allowed
//# run Test::M::authenticate_with_mut_auth_context

// using `iota::auth_context::AuthContext` by value is not allowed
//# run Test::M::authenticate_with_auth_context_value

// `iota::auth_context::AuthContext` must be the second last argument
//# run Test::M::authenticate_with_miss_placed_auth_context

// `iota::auth_context::AuthContext` must be the second last argument
//# run Test::M::authenticate_with_only_auth_context
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
---
source: external-crates/move/crates/move-transactional-test-runner/src/framework.rs
---
processed 7 tasks

task 1, lines 6-22:
//# publish
created: object(1,0)
mutated: object(0,0)
gas summary: computation_cost: 1000000, computation_cost_burned: 1000000, storage_cost: 5920400, storage_rebate: 0, non_refundable_storage_fee: 0

task 2, lines 23-25:
//# run Test::M::authenticate
Error: Transaction Effects Status: MOVE VM INVARIANT VIOLATION.
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: VMInvariantViolation, source: Some("`iota::auth_context::AuthContext` can't be used as a parameter in this execution mode"), command: Some(0) } }

task 3, lines 26-28:
//# run Test::M::authenticate_with_mut_auth_context
Error: Transaction Effects Status: Arity mismatch for Move function. The number of arguments does not match the number of parameters
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: ArityMismatch, source: Some("Expected 2 arguments calling function 'authenticate_with_mut_auth_context', but found 1"), command: Some(0) } }

task 4, lines 29-31:
//# run Test::M::authenticate_with_auth_context_value
Error: Transaction Effects Status: Arity mismatch for Move function. The number of arguments does not match the number of parameters
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: ArityMismatch, source: Some("Expected 2 arguments calling function 'authenticate_with_auth_context_value', but found 1"), command: Some(0) } }

task 5, lines 32-34:
//# run Test::M::authenticate_with_miss_placed_auth_context
Error: Transaction Effects Status: Arity mismatch for Move function. The number of arguments does not match the number of parameters
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: ArityMismatch, source: Some("Expected 3 arguments calling function 'authenticate_with_miss_placed_auth_context', but found 1"), command: Some(0) } }

task 6, line 35:
//# run Test::M::authenticate_with_only_auth_context
Error: Transaction Effects Status: Arity mismatch for Move function. The number of arguments does not match the number of parameters
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: ArityMismatch, source: Some("Expected 1 argument calling function 'authenticate_with_only_auth_context', but found 0"), command: Some(0) } }
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
// Copyright (c) 2025 IOTA Stiftung
// SPDX-License-Identifier: Apache-2.0

//# init --addresses Test=0x0 --move-auth false

//# publish

module Test::M;

use iota::auth_context::AuthContext;

public fun authenticate(_: &AuthContext, _: &TxContext) {}

// using `iota::auth_context::AuthContext` is not allowed by the protocol config
//# run Test::M::authenticate
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
source: external-crates/move/crates/move-transactional-test-runner/src/framework.rs
---
processed 3 tasks

task 1, lines 6-14:
//# publish
created: object(1,0)
mutated: object(0,0)
gas summary: computation_cost: 1000000, computation_cost_burned: 1000000, storage_cost: 4202800, storage_rebate: 0, non_refundable_storage_fee: 0

task 2, line 15:
//# run Test::M::authenticate
Error: Transaction Effects Status: MOVE VM INVARIANT VIOLATION.
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: VMInvariantViolation, source: Some("`iota::auth_context::AuthContext` can't be used as a parameter if the `move_auth` feature is disabled"), command: Some(0) } }
12 changes: 6 additions & 6 deletions crates/iota-analytics-indexer/src/handlers/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ use iota_types::{
base_types::ObjectID,
effects::{TransactionEffects, TransactionEffectsAPI},
object::{Object, Owner, bounded_visitor::BoundedVisitor},
transaction::{TransactionData, TransactionDataAPI},
transaction::{SenderSignedData, TransactionDataAPI},
};
use move_core_types::{
annotated_value::{MoveStruct, MoveTypeLayout, MoveValue},
Expand Down Expand Up @@ -90,14 +90,14 @@ struct InputObjectTracker {
}

impl InputObjectTracker {
fn new(txn_data: &TransactionData) -> Self {
let shared: BTreeSet<ObjectID> = txn_data
fn new(txn: &SenderSignedData) -> Self {
let shared: BTreeSet<ObjectID> = txn
.shared_input_objects()
.iter()
.map(|shared_io| shared_io.id())
.collect();
let coins: BTreeSet<ObjectID> = txn_data.gas().iter().map(|obj_ref| obj_ref.0).collect();
let input: BTreeSet<ObjectID> = txn_data
let tx_data = txn.transaction_data();
let coins: BTreeSet<ObjectID> = tx_data.gas().iter().map(|obj_ref| obj_ref.0).collect();
let input: BTreeSet<ObjectID> = tx_data
.input_objects()
.expect("Input objects must be valid")
.iter()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ impl TransactionHandler {
.input_objects()
.expect("Input objects must be valid")
.len() as u64,
shared_input: txn_data.shared_input_objects().len() as u64,
shared_input: transaction.shared_input_objects().count() as u64,
gas_coins: txn_data.gas().len() as u64,
created: effects.created().len() as u64,
mutated: (effects.mutated().len() + effects.unwrapped().len()) as u64,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,10 +93,12 @@ impl TransactionObjectsHandler {
state: &mut State,
) {
let transaction = &checkpoint_transaction.transaction;
let input_object_tracker = InputObjectTracker::new(transaction.data());
let object_status_tracker = ObjectStatusTracker::new(effects);

let transaction_digest = transaction.digest().base58_encode();
let txn_data = transaction.transaction_data();
let input_object_tracker = InputObjectTracker::new(txn_data);
let object_status_tracker = ObjectStatusTracker::new(effects);

// input
txn_data
.input_objects()
Expand Down
Loading