— No reviews yet
0 installs
8 views
0.0% view→install
Install
$ agentstack add skill-aptos-labs-aptos-agent-skills-analyze-gas-optimization ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ● Environment & secrets Used
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Are you the author of Analyze Gas Optimization? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claimAbout
Skill: analyze-gas-optimization
Analyze and optimize Aptos Move contracts for gas efficiency, identifying expensive operations and suggesting optimizations.
When to Use This Skill
Trigger phrases:
- "optimize gas", "reduce gas costs", "gas analysis"
- "make contract cheaper", "gas efficiency"
- "analyze gas usage", "gas optimization"
- "reduce transaction costs"
Use cases:
- Before mainnet deployment
- When transaction costs are high
- When optimizing for high-frequency operations
- When building DeFi protocols with many transactions
Core Gas Optimization Principles
1. Storage Optimization
- Minimize stored data size
- Use efficient data structures
- Pack struct fields efficiently
- Remove unnecessary fields
2. Computation Optimization
- Avoid loops over large collections
- Cache repeated calculations
- Use bitwise operations when possible
- Minimize vector operations
3. Reference Optimization
- Prefer borrowing over moving when possible
- Use
&and&mutefficiently - Avoid unnecessary copies
Gas Cost Analysis
Expensive Operations
1. Global Storage Operations
// EXPENSIVE: Writing to global storage
move_to(account, large_struct);
// EXPENSIVE: Reading and writing
let data = borrow_global_mut(addr);
// EXPENSIVE: Checking existence
if (exists(addr)) { ... }
2. Vector Operations
// EXPENSIVE: Growing vectors dynamically
vector::push_back(&mut vec, item); // O(n) worst case
// EXPENSIVE: Searching vectors
vector::contains(&vec, &item); // O(n)
// EXPENSIVE: Removing from middle
vector::remove(&mut vec, index); // O(n)
3. String Operations
// EXPENSIVE: String concatenation
string::append(&mut s1, s2);
// EXPENSIVE: UTF8 validation
string::utf8(bytes);
Optimization Patterns
1. Batch Operations
// BAD: Multiple storage accesses
public fun update_values(account: &signer, updates: vector) {
let i = 0;
while (i (update.address);
data.value = update.value;
i = i + 1;
}
}
// GOOD: Single storage access with batch update
public fun batch_update(account: &signer, updates: vector) {
let data = borrow_global_mut(signer::address_of(account));
let i = 0;
while (i (pool_addr);
if (pool.total_shares == 0) {
INITIAL_SHARE_PRICE
} else {
pool.total_assets * PRECISION / pool.total_shares
}
}
4. Event Optimization
// BAD: Large event data
struct TradeEvent has drop, store {
pool: Object,
trader: address,
token_in: Object,
token_out: Object,
amount_in: u64,
amount_out: u64,
fees: u64,
timestamp: u64,
metadata: vector, // Large metadata
}
// GOOD: Minimal event data
struct TradeEvent has drop, store {
pool_id: u64, // Use ID instead of Object
trader: address,
amounts: u128, // Pack amount_in and amount_out
fees: u64,
// Compute other data from state
}
5. Collection Optimization
// BAD: Linear search
public fun find_item(items: &vector, id: u64): Option {
let i = 0;
while (i ,
}
public fun find_item(storage: &Storage, id: u64): Option {
if (table::contains(&storage.items, id)) {
option::some(*table::borrow(&storage.items, id))
} else {
option::none()
}
}
Gas Measurement
1. Transaction Simulation
# Simulate to get gas estimate
aptos move run-function \
--function-id 0x1::module::function \
--args ... \
--simulate
# Output includes:
# - gas_unit_price
# - max_gas_amount
# - gas_used
2. Gas Profiling
#[test]
public fun test_gas_usage() {
// Measure gas for operation
let gas_before = gas::remaining_gas();
expensive_operation();
let gas_used = gas_before - gas::remaining_gas();
// Assert reasonable gas usage
assert!(gas_used ,
}
// After: O(1) lookup
struct Registry has key {
users: Table,
user_list: vector, // If iteration needed
}
2. Minimize Storage Reads
// Before: Multiple reads
public fun transfer(from: &signer, to: address, amount: u64) {
assert!(get_balance(signer::address_of(from)) >= amount, E_INSUFFICIENT);
let from_balance = borrow_global_mut(signer::address_of(from));
let to_balance = borrow_global_mut(to);
// ...
}
// After: Single read with validation
public fun transfer(from: &signer, to: address, amount: u64) {
let from_addr = signer::address_of(from);
let from_balance = borrow_global_mut(from_addr);
assert!(from_balance.value >= amount, E_INSUFFICIENT);
// ... rest of logic
}
3. Use Bitwise Flags
// Before: Multiple bool fields (8 bytes each)
struct Settings has copy, drop, store {
is_active: bool,
is_paused: bool,
is_initialized: bool,
allows_deposits: bool,
}
// After: Single u8 (1 byte)
struct Settings has copy, drop, store {
flags: u8, // Bit 0: active, 1: paused, 2: initialized, 3: deposits
}
const FLAG_ACTIVE: u8 = 1; // 0b00000001
const FLAG_PAUSED: u8 = 2; // 0b00000010
const FLAG_INITIALIZED: u8 = 4; // 0b00000100
const FLAG_DEPOSITS: u8 = 8; // 0b00001000
public fun is_active(settings: &Settings): bool {
(settings.flags & FLAG_ACTIVE) != 0
}
Gas Optimization Report Template
# Gas Optimization Report
## Summary
- Current average gas: X units
- Optimized average gas: Y units
- Savings: Z% reduction
## Optimizations Applied
### 1. Storage Optimization
- Packed struct fields (saved X bytes)
- Replaced vectors with tables (O(n) → O(1))
- Removed redundant fields
### 2. Computation Optimization
- Cached price calculations (saved X operations)
- Batched updates (N calls → 1 call)
- Early returns in validation
### 3. Event Optimization
- Reduced event size from X to Y bytes
- Removed redundant event fields
## Measurements
| Function | Before | After | Savings |
| -------- | ------ | ------ | ------- |
| mint | 50,000 | 35,000 | 30% |
| transfer | 30,000 | 25,000 | 17% |
| swap | 80,000 | 60,000 | 25% |
## Recommendations
1. Consider further optimizations for high-frequency functions
2. Monitor mainnet usage patterns
3. Set up gas usage alerts
Integration Notes
- Works with
security-auditto ensure optimizations don't compromise security - Use with
generate-teststo verify optimizations maintain correctness - Apply before
deploy-contractsfor mainnet deployments - Reference
STORAGE_OPTIMIZATION.mdfor detailed patterns
NEVER Rules
- ❌ NEVER optimize away security checks (access control, input validation)
- ❌ NEVER deploy optimized code without re-testing
- ❌ NEVER read
.envor~/.aptos/config.yamlduring gas analysis (contain private keys)
References
- Aptos Gas Schedule: https://github.com/aptos-labs/aptos-core/blob/main/aptos-move/aptos-gas-schedule
- Move VM Gas Metering: https://github.com/aptos-labs/aptos-core/tree/main/aptos-move/aptos-vm
- Gas Optimization Patterns: Check daily-move repository for real examples
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: aptos-labs
- Source: aptos-labs/aptos-agent-skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.