Skip to content

Commit 8f57610

Browse files
authored
use flat vm fee (MystenLabs#4607)
* use flat vm fee
1 parent b3bf5a3 commit 8f57610

File tree

22 files changed

+97
-75
lines changed

22 files changed

+97
-75
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apps/wallet/src/ui/app/redux/slices/sui-objects/Coin.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@ import type {
1919

2020
const COIN_TYPE = '0x2::coin::Coin';
2121
const COIN_TYPE_ARG_REGEX = /^0x2::coin::Coin<(.+)>$/;
22-
export const DEFAULT_GAS_BUDGET_FOR_SPLIT = 1000;
23-
export const DEFAULT_GAS_BUDGET_FOR_MERGE = 500;
22+
export const DEFAULT_GAS_BUDGET_FOR_SPLIT = 10000;
23+
export const DEFAULT_GAS_BUDGET_FOR_MERGE = 10000;
2424
export const DEFAULT_GAS_BUDGET_FOR_TRANSFER = 100;
2525
export const DEFAULT_GAS_BUDGET_FOR_TRANSFER_SUI = 100;
26-
export const DEFAULT_GAS_BUDGET_FOR_STAKE = 1000;
26+
export const DEFAULT_GAS_BUDGET_FOR_STAKE = 10000;
2727
export const GAS_TYPE_ARG = '0x2::sui::SUI';
2828
export const GAS_SYMBOL = 'SUI';
2929
export const DEFAULT_NFT_TRANSFER_GAS_FEE = 450;

crates/sui-adapter-transactional-tests/tests/sui/coin_transfer.exp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ A: object(100), B: object(101), C: object(102)
66
task 1 'view-object'. lines 8-8:
77
Owner: Account Address ( A )
88
Version: 0
9-
Contents: sui::coin::Coin<sui::sui::SUI> {id: sui::object::UID {id: sui::object::ID {bytes: fake(100)}}, balance: sui::balance::Balance<sui::sui::SUI> {value: 100000u64}}
9+
Contents: sui::coin::Coin<sui::sui::SUI> {id: sui::object::UID {id: sui::object::ID {bytes: fake(100)}}, balance: sui::balance::Balance<sui::sui::SUI> {value: 1000000u64}}
1010

1111
task 2 'run'. lines 10-10:
1212
created: object(106)
@@ -15,7 +15,7 @@ written: object(100), object(105)
1515
task 3 'view-object'. lines 12-12:
1616
Owner: Account Address ( A )
1717
Version: 1
18-
Contents: sui::coin::Coin<sui::sui::SUI> {id: sui::object::UID {id: sui::object::ID {bytes: fake(100)}}, balance: sui::balance::Balance<sui::sui::SUI> {value: 99990u64}}
18+
Contents: sui::coin::Coin<sui::sui::SUI> {id: sui::object::UID {id: sui::object::ID {bytes: fake(100)}}, balance: sui::balance::Balance<sui::sui::SUI> {value: 999990u64}}
1919

2020
task 4 'view-object'. lines 14-14:
2121
Owner: Account Address ( B )
@@ -29,4 +29,4 @@ written: object(100), object(107)
2929
task 6 'view-object'. lines 18-18:
3030
Owner: Account Address ( A )
3131
Version: 2
32-
Contents: sui::coin::Coin<sui::sui::SUI> {id: sui::object::UID {id: sui::object::ID {bytes: fake(100)}}, balance: sui::balance::Balance<sui::sui::SUI> {value: 99990u64}}
32+
Contents: sui::coin::Coin<sui::sui::SUI> {id: sui::object::UID {id: sui::object::ID {bytes: fake(100)}}, balance: sui::balance::Balance<sui::sui::SUI> {value: 999990u64}}

crates/sui-adapter-transactional-tests/tests/transfer_object/transfer_coin.exp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@ A: object(100), B: object(101)
66
task 1 'view-object'. lines 8-8:
77
Owner: Account Address ( A )
88
Version: 0
9-
Contents: sui::coin::Coin<sui::sui::SUI> {id: sui::object::UID {id: sui::object::ID {bytes: fake(100)}}, balance: sui::balance::Balance<sui::sui::SUI> {value: 100000u64}}
9+
Contents: sui::coin::Coin<sui::sui::SUI> {id: sui::object::UID {id: sui::object::ID {bytes: fake(100)}}, balance: sui::balance::Balance<sui::sui::SUI> {value: 1000000u64}}
1010

1111
task 2 'transfer-object'. lines 10-10:
1212
written: object(100), object(104)
1313

1414
task 3 'view-object'. lines 12-12:
1515
Owner: Account Address ( B )
1616
Version: 1
17-
Contents: sui::coin::Coin<sui::sui::SUI> {id: sui::object::UID {id: sui::object::ID {bytes: fake(100)}}, balance: sui::balance::Balance<sui::sui::SUI> {value: 100000u64}}
17+
Contents: sui::coin::Coin<sui::sui::SUI> {id: sui::object::UID {id: sui::object::ID {bytes: fake(100)}}, balance: sui::balance::Balance<sui::sui::SUI> {value: 1000000u64}}

crates/sui-adapter/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ sui-framework = { path = "../sui-framework" }
2222
sui-json = { path = "../sui-json" }
2323
sui-verifier = { path = "../sui-verifier" }
2424
sui-types = { path = "../sui-types" }
25+
sui-cost-tables = { path = "../sui-cost-tables"}
2526
workspace-hack.workspace = true
2627

2728
[dev-dependencies]

crates/sui-adapter/src/adapter.rs

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ use move_core_types::{
1818
value::{MoveStruct, MoveTypeLayout, MoveValue},
1919
};
2020
pub use move_vm_runtime::move_vm::MoveVM;
21+
22+
use sui_cost_tables::bytecode_tables::GasStatus;
23+
2124
use move_vm_runtime::{
2225
native_extensions::NativeContextExtensions,
2326
native_functions::NativeFunctionTable,
@@ -37,7 +40,6 @@ use sui_types::{
3740
error::ExecutionError,
3841
error::{ExecutionErrorKind, SuiError},
3942
event::{Event, TransferType},
40-
gas::SuiGasStatus,
4143
messages::{CallArg, EntryArgumentErrorKind, InputObjectKind, ObjectArg},
4244
object::{self, Data, MoveObject, Object, Owner, ID_END_INDEX},
4345
storage::{DeleteKind, ObjectChange, ParentSync, Storage, WriteKind},
@@ -100,7 +102,7 @@ pub fn execute<
100102
function: &Identifier,
101103
type_args: Vec<TypeTag>,
102104
args: Vec<CallArg>,
103-
gas_status: &mut SuiGasStatus,
105+
gas_status: &mut GasStatus,
104106
ctx: &mut TxContext,
105107
) -> Result<(), ExecutionError> {
106108
let objects = args
@@ -176,7 +178,7 @@ fn execute_internal<
176178
object_data: BTreeMap<ObjectID, (object::Owner, SequenceNumber)>,
177179
by_value_objects: BTreeSet<ObjectID>,
178180
mut mutable_ref_objects: BTreeMap<LocalIndex, ObjectID>,
179-
gas_status: &mut SuiGasStatus, // gas status for the current call operation
181+
gas_status: &mut GasStatus, // gas status for the current call operation
180182
ctx: &mut TxContext,
181183
) -> Result<(), ExecutionError> {
182184
let input_objects = object_data
@@ -192,13 +194,7 @@ fn execute_internal<
192194
},
193195
(change_set, events, mut native_context_extensions),
194196
) = session
195-
.execute_function_bypass_visibility(
196-
module_id,
197-
function,
198-
type_args,
199-
args,
200-
gas_status.get_move_gas_status(),
201-
)
197+
.execute_function_bypass_visibility(module_id, function, type_args, args, gas_status)
202198
.and_then(|ret| Ok((ret, session.finish_with_extensions()?)))?;
203199
assert_invariant!(return_values.is_empty(), "Return values must be empty");
204200
let object_runtime: ObjectRuntime = native_context_extensions.remove();
@@ -296,9 +292,8 @@ pub fn publish<
296292
natives: NativeFunctionTable,
297293
module_bytes: Vec<Vec<u8>>,
298294
ctx: &mut TxContext,
299-
gas_status: &mut SuiGasStatus,
295+
gas_status: &mut GasStatus,
300296
) -> Result<(), ExecutionError> {
301-
gas_status.charge_publish_package(module_bytes.iter().map(|v| v.len()).sum())?;
302297
let mut modules = module_bytes
303298
.iter()
304299
.map(|b| {
@@ -329,7 +324,7 @@ pub fn store_package_and_init_modules<
329324
vm: &MoveVM,
330325
modules: Vec<CompiledModule>,
331326
ctx: &mut TxContext,
332-
gas_status: &mut SuiGasStatus,
327+
gas_status: &mut GasStatus,
333328
) -> Result<(), ExecutionError> {
334329
let modules_to_init = modules
335330
.iter()
@@ -367,7 +362,7 @@ fn init_modules<
367362
vm: &MoveVM,
368363
module_ids_to_init: Vec<(ModuleId, usize)>,
369364
ctx: &mut TxContext,
370-
gas_status: &mut SuiGasStatus,
365+
gas_status: &mut GasStatus,
371366
) -> Result<(), ExecutionError> {
372367
let init_ident = Identifier::new(INIT_FN_NAME.as_str()).unwrap();
373368
for (module_id, num_args) in module_ids_to_init {
@@ -413,7 +408,7 @@ pub fn verify_and_link<
413408
modules: &[CompiledModule],
414409
package_id: ObjectID,
415410
natives: NativeFunctionTable,
416-
gas_status: &mut SuiGasStatus,
411+
gas_status: &mut GasStatus,
417412
) -> Result<MoveVM, ExecutionError> {
418413
// Run the Move bytecode verifier and linker.
419414
// It is important to do this before running the Sui verifier, since the sui
@@ -435,7 +430,7 @@ pub fn verify_and_link<
435430
AccountAddress::from(package_id),
436431
// TODO: publish_module_bundle() currently doesn't charge gas.
437432
// Do we want to charge there?
438-
gas_status.get_move_gas_status(),
433+
gas_status,
439434
)?;
440435

441436
// run the Sui verifier

crates/sui-cluster-test/src/faucet.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ impl FaucetClient for LocalFaucetClient {
101101
async fn request_sui_coins(&self, request_address: SuiAddress) -> FaucetResponse {
102102
let receipt = self
103103
.simple_faucet
104-
.send(Uuid::new_v4(), request_address, &[50000; 5])
104+
.send(Uuid::new_v4(), request_address, &[100000; 5])
105105
.await
106106
.unwrap_or_else(|err| panic!("Failed to get gas tokens with error: {}", err));
107107

crates/sui-config/src/genesis.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -502,14 +502,14 @@ fn process_package(
502502
&modules,
503503
package_id,
504504
natives,
505-
&mut gas_status,
505+
&mut gas_status.create_move_gas_status(),
506506
)?;
507507
adapter::store_package_and_init_modules(
508508
&mut temporary_store,
509509
&vm,
510510
modules,
511511
ctx,
512-
&mut gas_status,
512+
&mut gas_status.create_move_gas_status(),
513513
)?;
514514

515515
let (
@@ -574,7 +574,7 @@ pub fn generate_genesis_system_object(
574574
CallArg::Pure(bcs::to_bytes(&stakes).unwrap()),
575575
CallArg::Pure(bcs::to_bytes(&gas_prices).unwrap()),
576576
],
577-
&mut SuiGasStatus::new_unmetered(),
577+
&mut SuiGasStatus::new_unmetered().create_move_gas_status(),
578578
genesis_ctx,
579579
)?;
580580

crates/sui-core/src/execution_engine.rs

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,12 @@ fn execute_transaction<S: BackingPackageStore + ParentSync>(
158158
type_arguments,
159159
arguments,
160160
}) => {
161+
// Charge gas for this VM execution
162+
if let Err(e) = gas_status.charge_vm_gas() {
163+
result = Err(e);
164+
break;
165+
}
166+
161167
let module_id = ModuleId::new(package.0.into(), module);
162168
adapter::execute(
163169
move_vm,
@@ -166,8 +172,29 @@ fn execute_transaction<S: BackingPackageStore + ParentSync>(
166172
&function,
167173
type_arguments,
168174
arguments,
169-
&mut gas_status,
175+
&mut gas_status.create_move_gas_status(),
176+
tx_ctx,
177+
)
178+
}
179+
SingleTransactionKind::Publish(MoveModulePublish { modules }) => {
180+
// Charge gas for this VM execution
181+
if let Err(e) = gas_status.charge_vm_gas() {
182+
result = Err(e);
183+
break;
184+
}
185+
// Charge gas for this publish
186+
if let Err(e) =
187+
gas_status.charge_publish_package(modules.iter().map(|v| v.len()).sum())
188+
{
189+
result = Err(e);
190+
break;
191+
}
192+
adapter::publish(
193+
temporary_store,
194+
native_functions.clone(),
195+
modules,
170196
tx_ctx,
197+
&mut gas_status.create_move_gas_status(),
171198
)
172199
}
173200
SingleTransactionKind::Pay(Pay {
@@ -185,13 +212,6 @@ fn execute_transaction<S: BackingPackageStore + ParentSync>(
185212
).collect();
186213
pay(temporary_store, coin_objects, recipients, amounts, tx_ctx)
187214
}
188-
SingleTransactionKind::Publish(MoveModulePublish { modules }) => adapter::publish(
189-
temporary_store,
190-
native_functions.clone(),
191-
modules,
192-
tx_ctx,
193-
&mut gas_status,
194-
),
195215
SingleTransactionKind::ChangeEpoch(ChangeEpoch {
196216
epoch,
197217
storage_charge,
@@ -212,7 +232,7 @@ fn execute_transaction<S: BackingPackageStore + ParentSync>(
212232
CallArg::Pure(bcs::to_bytes(&storage_charge).unwrap()),
213233
CallArg::Pure(bcs::to_bytes(&computation_charge).unwrap()),
214234
],
215-
&mut gas_status,
235+
&mut gas_status.create_move_gas_status(),
216236
tx_ctx,
217237
)
218238
}

crates/sui-core/src/unit_tests/batch_transaction_tests.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ async fn test_batch_transaction_ok() -> anyhow::Result<()> {
2323
// This batch transaction contains 100 transfers, and 100 Move calls.
2424
let (sender, sender_key): (_, AccountKeyPair) = get_key_pair();
2525
let (recipient, _): (_, AccountKeyPair) = get_key_pair();
26-
const N: usize = 100;
26+
const N: usize = 10;
2727
const TOTAL: usize = N + 1;
2828
let all_ids = (0..TOTAL).map(|_| ObjectID::random()).collect::<Vec<_>>();
2929
let (authority_state, package) = init_state_with_ids_and_object_basics(
@@ -61,7 +61,7 @@ async fn test_batch_transaction_ok() -> anyhow::Result<()> {
6161
.await?
6262
.unwrap()
6363
.compute_object_reference(),
64-
100000,
64+
1000000,
6565
);
6666

6767
let tx = to_sender_signed_transaction(data, &sender_key);

0 commit comments

Comments
 (0)