import { Frame, pushStack, popStack, consumeGas, writeMemory, readMemory } from 'voltaire/evm/Frame';
import { Address } from 'voltaire/primitives/Address';
// Simulate ADD opcode execution
const frame = Frame({
bytecode: new Uint8Array([0x60, 0x0a, 0x60, 0x14, 0x01]), // PUSH1 10, PUSH1 20, ADD
gas: 21000n,
caller: Address("0x1111111111111111111111111111111111111111"),
address: Address("0x2222222222222222222222222222222222222222"),
});
// PUSH1 10 (gas: 3)
consumeGas(frame, 3n);
pushStack(frame, 10n);
frame.pc += 2;
// PUSH1 20 (gas: 3)
consumeGas(frame, 3n);
pushStack(frame, 20n);
frame.pc += 2;
// ADD (gas: 3)
consumeGas(frame, 3n);
const error = frame.add();
frame.pc += 1;
// Result
const result = popStack(frame);
console.log(result.value); // 30n
console.log(frame.gasRemaining); // 20991n