@bradthomasbrown/evm-single-context 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +91 -0
- package/dist/lib.d.ts +26 -0
- package/dist/lib.d.ts.map +1 -0
- package/dist/lib.js +129 -0
- package/dist/machine.d.ts +40 -0
- package/dist/machine.d.ts.map +1 -0
- package/dist/machine.js +166 -0
- package/dist/opsets/9db704/opcodes/ADD.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/ADD.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/ADD.js +13 -0
- package/dist/opsets/9db704/opcodes/ADDRESS.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/ADDRESS.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/ADDRESS.js +11 -0
- package/dist/opsets/9db704/opcodes/AND.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/AND.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/AND.js +13 -0
- package/dist/opsets/9db704/opcodes/BYTE.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/BYTE.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/BYTE.js +13 -0
- package/dist/opsets/9db704/opcodes/CALLDATACOPY.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/CALLDATACOPY.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/CALLDATACOPY.js +14 -0
- package/dist/opsets/9db704/opcodes/CALLDATALOAD.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/CALLDATALOAD.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/CALLDATALOAD.js +17 -0
- package/dist/opsets/9db704/opcodes/CALLDATASIZE.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/CALLDATASIZE.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/CALLDATASIZE.js +11 -0
- package/dist/opsets/9db704/opcodes/CALLER.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/CALLER.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/CALLER.js +11 -0
- package/dist/opsets/9db704/opcodes/CALLVALUE.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/CALLVALUE.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/CALLVALUE.js +11 -0
- package/dist/opsets/9db704/opcodes/CHAINID.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/CHAINID.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/CHAINID.js +12 -0
- package/dist/opsets/9db704/opcodes/CODECOPY.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/CODECOPY.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/CODECOPY.js +13 -0
- package/dist/opsets/9db704/opcodes/CREATE.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/CREATE.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/CREATE.js +49 -0
- package/dist/opsets/9db704/opcodes/CREATE2.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/CREATE2.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/CREATE2.js +50 -0
- package/dist/opsets/9db704/opcodes/DIV.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/DIV.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/DIV.js +16 -0
- package/dist/opsets/9db704/opcodes/DUP.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/DUP.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/DUP.js +11 -0
- package/dist/opsets/9db704/opcodes/EQ.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/EQ.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/EQ.js +13 -0
- package/dist/opsets/9db704/opcodes/EXTCODECOPY.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/EXTCODECOPY.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/EXTCODECOPY.js +20 -0
- package/dist/opsets/9db704/opcodes/EXTCODESIZE.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/EXTCODESIZE.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/EXTCODESIZE.js +20 -0
- package/dist/opsets/9db704/opcodes/GAS.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/GAS.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/GAS.js +11 -0
- package/dist/opsets/9db704/opcodes/GT.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/GT.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/GT.js +13 -0
- package/dist/opsets/9db704/opcodes/ISZERO.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/ISZERO.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/ISZERO.js +13 -0
- package/dist/opsets/9db704/opcodes/JUMP.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/JUMP.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/JUMP.js +16 -0
- package/dist/opsets/9db704/opcodes/JUMPDEST.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/JUMPDEST.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/JUMPDEST.js +10 -0
- package/dist/opsets/9db704/opcodes/JUMPI.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/JUMPI.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/JUMPI.js +20 -0
- package/dist/opsets/9db704/opcodes/KECCAK256.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/KECCAK256.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/KECCAK256.js +14 -0
- package/dist/opsets/9db704/opcodes/LOG.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/LOG.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/LOG.js +14 -0
- package/dist/opsets/9db704/opcodes/LT.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/LT.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/LT.js +13 -0
- package/dist/opsets/9db704/opcodes/MLOAD.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/MLOAD.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/MLOAD.js +14 -0
- package/dist/opsets/9db704/opcodes/MSIZE.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/MSIZE.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/MSIZE.js +11 -0
- package/dist/opsets/9db704/opcodes/MSTORE.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/MSTORE.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/MSTORE.js +14 -0
- package/dist/opsets/9db704/opcodes/MSTORE8.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/MSTORE8.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/MSTORE8.js +14 -0
- package/dist/opsets/9db704/opcodes/MUL.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/MUL.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/MUL.js +13 -0
- package/dist/opsets/9db704/opcodes/NOT.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/NOT.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/NOT.js +13 -0
- package/dist/opsets/9db704/opcodes/OR.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/OR.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/OR.js +13 -0
- package/dist/opsets/9db704/opcodes/PC.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/PC.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/PC.js +11 -0
- package/dist/opsets/9db704/opcodes/POP.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/POP.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/POP.js +11 -0
- package/dist/opsets/9db704/opcodes/PUSH.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/PUSH.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/PUSH.js +11 -0
- package/dist/opsets/9db704/opcodes/RETURN.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/RETURN.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/RETURN.js +15 -0
- package/dist/opsets/9db704/opcodes/RETURNDATACOPY.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/RETURNDATACOPY.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/RETURNDATACOPY.js +13 -0
- package/dist/opsets/9db704/opcodes/RETURNDATASIZE.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/RETURNDATASIZE.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/RETURNDATASIZE.js +11 -0
- package/dist/opsets/9db704/opcodes/REVERT.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/REVERT.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/REVERT.js +15 -0
- package/dist/opsets/9db704/opcodes/SGT.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/SGT.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/SGT.js +15 -0
- package/dist/opsets/9db704/opcodes/SHL.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/SHL.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/SHL.js +13 -0
- package/dist/opsets/9db704/opcodes/SHR.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/SHR.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/SHR.js +13 -0
- package/dist/opsets/9db704/opcodes/SLOAD.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/SLOAD.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/SLOAD.js +21 -0
- package/dist/opsets/9db704/opcodes/SLT.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/SLT.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/SLT.js +15 -0
- package/dist/opsets/9db704/opcodes/SSTORE.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/SSTORE.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/SSTORE.js +50 -0
- package/dist/opsets/9db704/opcodes/STATICCALL.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/STATICCALL.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/STATICCALL.js +104 -0
- package/dist/opsets/9db704/opcodes/STOP.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/STOP.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/STOP.js +9 -0
- package/dist/opsets/9db704/opcodes/SUB.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/SUB.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/SUB.js +13 -0
- package/dist/opsets/9db704/opcodes/SWAP.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/SWAP.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/SWAP.js +15 -0
- package/dist/opsets/9db704/opcodes/TIMESTAMP.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/TIMESTAMP.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/TIMESTAMP.js +13 -0
- package/dist/opsets/9db704/opcodes/TLOAD.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/TLOAD.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/TLOAD.js +14 -0
- package/dist/opsets/9db704/opcodes/TSTORE.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/TSTORE.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/TSTORE.js +18 -0
- package/dist/opsets/9db704/opcodes/XOR.d.ts +8 -0
- package/dist/opsets/9db704/opcodes/XOR.d.ts.map +1 -0
- package/dist/opsets/9db704/opcodes/XOR.js +13 -0
- package/dist/opsets/9db704/opset.d.ts +53 -0
- package/dist/opsets/9db704/opset.d.ts.map +1 -0
- package/dist/opsets/9db704/opset.js +52 -0
- package/dist/types.d.ts +49 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +1 -0
- package/package.json +26 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { pop, getStateValue } from "../../../lib.js";
|
|
2
|
+
export default {
|
|
3
|
+
identifier: 0x55,
|
|
4
|
+
executor(context) {
|
|
5
|
+
const [key, newValue] = pop(context.stack, 2);
|
|
6
|
+
let C_sstore_0 = 2100n;
|
|
7
|
+
if (context.storageAccessSet.has(context.address) === false)
|
|
8
|
+
context.storageAccessSet.set(context.address, new Set());
|
|
9
|
+
if (context.storageAccessSet.get(context.address).has(key) === true)
|
|
10
|
+
C_sstore_0 = 0n;
|
|
11
|
+
else
|
|
12
|
+
(context.storageAccessSet.get(context.address).add(key));
|
|
13
|
+
const originalValue = getStateValue(context.states, 0, "storage", [context.address, key]) ?? 0n;
|
|
14
|
+
const currentValue = getStateValue(context.states, null, "storage", [context.address, key]) ?? 0n;
|
|
15
|
+
let C_sstore_1 = null;
|
|
16
|
+
if ((currentValue == newValue) || (originalValue != currentValue))
|
|
17
|
+
C_sstore_1 = 100n;
|
|
18
|
+
if ((currentValue != newValue) && (originalValue == currentValue) && (originalValue == 0n))
|
|
19
|
+
C_sstore_1 = 20000n;
|
|
20
|
+
if ((currentValue != newValue) && (originalValue == currentValue) && (originalValue != 0n))
|
|
21
|
+
C_sstore_1 = 2900n;
|
|
22
|
+
let r_dirtyclear = 0n;
|
|
23
|
+
if ((originalValue != 0n) && (currentValue == 0n))
|
|
24
|
+
r_dirtyclear = -4800n;
|
|
25
|
+
if ((originalValue != 0n) && (newValue == 0n))
|
|
26
|
+
r_dirtyclear = 4800n;
|
|
27
|
+
let r_dirtyreset = 0n;
|
|
28
|
+
if ((originalValue == newValue) && (originalValue == 0n))
|
|
29
|
+
r_dirtyreset = 19900n;
|
|
30
|
+
if ((originalValue == newValue) && (originalValue != 0n))
|
|
31
|
+
r_dirtyreset = 2800n;
|
|
32
|
+
let A_r = 0n;
|
|
33
|
+
if ((currentValue != newValue) && (originalValue == currentValue) && (newValue == 0n))
|
|
34
|
+
A_r = 4800n;
|
|
35
|
+
if ((currentValue != newValue) && (originalValue != currentValue))
|
|
36
|
+
A_r = r_dirtyreset + r_dirtyreset;
|
|
37
|
+
context.gas -= C_sstore_0 + C_sstore_1;
|
|
38
|
+
context.refund += A_r;
|
|
39
|
+
const state = context.states.at(-1);
|
|
40
|
+
if (state.storage === null)
|
|
41
|
+
state.storage = new Map();
|
|
42
|
+
if (state.storage.has(context.address) === false)
|
|
43
|
+
state.storage.set(context.address, new Map());
|
|
44
|
+
state.storage.get(context.address).set(key, newValue);
|
|
45
|
+
context.pc++;
|
|
46
|
+
},
|
|
47
|
+
instructionToString() {
|
|
48
|
+
return "SSTORE";
|
|
49
|
+
}
|
|
50
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"STATICCALL.d.ts","sourceRoot":"","sources":["../../../../src/opsets/9db704/opcodes/STATICCALL.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;;;sBAS5B,OAAO;;;AAJ5B,wBA0GE"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { keccak256 } from "@bradthomasbrown/keccak/keccak256";
|
|
2
|
+
import { _780119_ } from "@bradthomasbrown/ecdsa/concrete";
|
|
3
|
+
import { peek, pop, memoryExpand, createContext, numberToHex, getStateValue, byteSliceToBigInt_be, copy } from "../../../lib.js";
|
|
4
|
+
export default {
|
|
5
|
+
identifier: 0xfa,
|
|
6
|
+
executor(context) {
|
|
7
|
+
if (context.blocked) {
|
|
8
|
+
// if there was no code at the address
|
|
9
|
+
if (context.subcontext === null) {
|
|
10
|
+
const [_gas, address, argsOffset, argsSize, retOffset, retSize] = pop(context.stack, 6);
|
|
11
|
+
let C_precompile = 0n;
|
|
12
|
+
if (address == 1n) {
|
|
13
|
+
C_precompile = 3000n;
|
|
14
|
+
const data = new Uint8Array(context.memory.slice(Number(argsOffset), Number(argsOffset) + Number(argsSize)));
|
|
15
|
+
const hash = data.slice(0, 32);
|
|
16
|
+
const v = byteSliceToBigInt_be(data, 32, 32, false) - 27n;
|
|
17
|
+
const r = byteSliceToBigInt_be(data, 64, 32, false);
|
|
18
|
+
const s = byteSliceToBigInt_be(data, 96, 32, false);
|
|
19
|
+
const q = _780119_.recover({ r, s, v }, hash);
|
|
20
|
+
const qBytes = new Uint8Array(64);
|
|
21
|
+
let i;
|
|
22
|
+
let x = q.x;
|
|
23
|
+
let y = q.y;
|
|
24
|
+
for (i = qBytes.byteLength - 1; y > 0n; y >>= 8n, i--)
|
|
25
|
+
qBytes[i] = Number(y & 0xffn);
|
|
26
|
+
for (i = (qBytes.byteLength >> 1) - 1; x > 0n; x >>= 8n, i--)
|
|
27
|
+
qBytes[i] = Number(x & 0xffn);
|
|
28
|
+
const returndata = new ArrayBuffer(32);
|
|
29
|
+
const addressBytes = keccak256(qBytes).fill(0, 0, 12).buffer;
|
|
30
|
+
copy(returndata, addressBytes, 12, 12, 20, false);
|
|
31
|
+
memoryExpand(context, Number(retOffset) + Number(retSize));
|
|
32
|
+
copy(context.memory, addressBytes, Number(retOffset), 0, Number(retSize), false);
|
|
33
|
+
context.subcontext = createContext({
|
|
34
|
+
origin: context.origin,
|
|
35
|
+
sender: context.address,
|
|
36
|
+
to: `0x${"1".padStart(40, '0')}`,
|
|
37
|
+
code: new ArrayBuffer(),
|
|
38
|
+
returndata,
|
|
39
|
+
reverted: false // machine will not continue without this, rightfully so
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
context.stack.push(1n);
|
|
43
|
+
context.gas += context.L - C_precompile;
|
|
44
|
+
context.blocked = false;
|
|
45
|
+
context.pc++;
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
if (context.subcontext.reverted === null)
|
|
49
|
+
return;
|
|
50
|
+
const [_gas, _address, _argsOffset, _argsSize, _retOffset, _retSize] = pop(context.stack, 6);
|
|
51
|
+
if (context.states.at(-1).accounts === null)
|
|
52
|
+
context.states.at(-1).accounts = new Map();
|
|
53
|
+
context.stack.push(context.subcontext.reverted === false ? 1n : 0n);
|
|
54
|
+
context.states.at(-1).accounts.set(context.subcontext.address, { nonce: 1n, balance: context.subcontext.value, code: context.subcontext.returndata });
|
|
55
|
+
context.gas += context.subcontext.gas - (context.subcontext.returndata === null ? 0n : 200n * BigInt(context.subcontext.returndata.byteLength));
|
|
56
|
+
context.blocked = false;
|
|
57
|
+
context.pc++;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
const [gas, address, argsOffset, argsSize, retOffset, retSize] = peek(context.stack, 6);
|
|
62
|
+
memoryExpand(context, Math.max(Number(argsOffset) + Number(argsSize), Number(retOffset) + Number(retSize)));
|
|
63
|
+
const addressHex = `0x${numberToHex(address, 40)}`;
|
|
64
|
+
const C_new = 0n;
|
|
65
|
+
const C_xfer = 0n;
|
|
66
|
+
let C_aaccess = 2600n;
|
|
67
|
+
if (context.accountAccessSet.has(addressHex))
|
|
68
|
+
C_aaccess = 100n;
|
|
69
|
+
else
|
|
70
|
+
(context.accountAccessSet.add(addressHex));
|
|
71
|
+
const C_extra = C_aaccess + C_xfer + C_new;
|
|
72
|
+
const _ad_ = context.gas - C_extra;
|
|
73
|
+
const L = _ad_ < 0n ? 0n : _ad_ - (_ad_ >> 6n);
|
|
74
|
+
const C_gascap = L < gas ? L : gas;
|
|
75
|
+
const C_callgas = C_gascap;
|
|
76
|
+
const C_call = C_gascap + C_extra;
|
|
77
|
+
context.gas -= C_call;
|
|
78
|
+
context.L = C_callgas;
|
|
79
|
+
const code = getStateValue(context.states, null, "accounts", [addressHex])?.code ?? null;
|
|
80
|
+
if (code === null) {
|
|
81
|
+
context.blocked = true; // sketchy, needed for gas cost to be "right"
|
|
82
|
+
context.subcontext = null;
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
context.subcontext = createContext({
|
|
86
|
+
origin: context.origin,
|
|
87
|
+
sender: context.address,
|
|
88
|
+
address: addressHex,
|
|
89
|
+
gas: C_callgas,
|
|
90
|
+
states: context.states,
|
|
91
|
+
accountAccessSet: context.accountAccessSet,
|
|
92
|
+
storageAccessSet: context.storageAccessSet,
|
|
93
|
+
depth: context.depth + 1,
|
|
94
|
+
code
|
|
95
|
+
});
|
|
96
|
+
context.states.push({ accounts: null, transientStorage: null, storage: null });
|
|
97
|
+
context.blocked = true;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
instructionToString() {
|
|
102
|
+
return "STATICCALL";
|
|
103
|
+
}
|
|
104
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"STOP.d.ts","sourceRoot":"","sources":["../../../../src/opsets/9db704/opcodes/STOP.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;;;sBAM5B,OAAO;;;AAJ5B,wBAYE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SUB.d.ts","sourceRoot":"","sources":["../../../../src/opsets/9db704/opcodes/SUB.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;;;sBAO5B,OAAO;;;AAJ5B,wBAeE"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { pop, F } from "../../../lib.js";
|
|
2
|
+
export default {
|
|
3
|
+
identifier: 0x03,
|
|
4
|
+
executor(context) {
|
|
5
|
+
const [a, b] = pop(context.stack, 2);
|
|
6
|
+
context.stack.push(F.subtract(a, b));
|
|
7
|
+
context.gas -= 3n;
|
|
8
|
+
context.pc++;
|
|
9
|
+
},
|
|
10
|
+
instructionToString() {
|
|
11
|
+
return "SUB";
|
|
12
|
+
}
|
|
13
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Context, Artifact } from "../../../types.js";
|
|
2
|
+
declare const _default: {
|
|
3
|
+
identifier: number;
|
|
4
|
+
executor(context: Context, artifact: Artifact): void;
|
|
5
|
+
instructionToString(instruction: number): string;
|
|
6
|
+
};
|
|
7
|
+
export default _default;
|
|
8
|
+
//# sourceMappingURL=SWAP.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SWAP.d.ts","sourceRoot":"","sources":["../../../../src/opsets/9db704/opcodes/SWAP.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;;;sBAMtC,OAAO,YAAW,QAAQ;qCAUX,MAAM;;AAd1C,wBAkBE"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
identifier: 0x90,
|
|
3
|
+
executor(context, artifact) {
|
|
4
|
+
const i = context.stack.length - 1;
|
|
5
|
+
const j = context.stack.length - (artifact.variant + 2);
|
|
6
|
+
const a = context.stack[i];
|
|
7
|
+
context.stack[i] = context.stack[j];
|
|
8
|
+
context.stack[j] = a;
|
|
9
|
+
context.gas -= 3n;
|
|
10
|
+
context.pc++;
|
|
11
|
+
},
|
|
12
|
+
instructionToString(instruction) {
|
|
13
|
+
return `SWAP${instruction - 0x8f}`;
|
|
14
|
+
}
|
|
15
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TIMESTAMP.d.ts","sourceRoot":"","sources":["../../../../src/opsets/9db704/opcodes/TIMESTAMP.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;;;sBAQ5B,OAAO;;;AAN5B,wBAgBE"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
identifier: 0x42,
|
|
3
|
+
// this one is a bit weird
|
|
4
|
+
// will need to use the timestamp in the block header
|
|
5
|
+
executor(context) {
|
|
6
|
+
context.stack.push(BigInt(Date.now()) / 1000n);
|
|
7
|
+
context.gas -= 2n;
|
|
8
|
+
context.pc++;
|
|
9
|
+
},
|
|
10
|
+
instructionToString() {
|
|
11
|
+
return "TIMESTAMP";
|
|
12
|
+
}
|
|
13
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TLOAD.d.ts","sourceRoot":"","sources":["../../../../src/opsets/9db704/opcodes/TLOAD.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;;;sBAO5B,OAAO;;;AAJ5B,wBAgBE"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { pop, getStateValue } from "../../../lib.js";
|
|
2
|
+
export default {
|
|
3
|
+
identifier: 0x5c,
|
|
4
|
+
executor(context) {
|
|
5
|
+
const [key] = pop(context.stack, 1);
|
|
6
|
+
context.gas -= 100n;
|
|
7
|
+
const value = getStateValue(context.states, null, "transientStorage", [context.address, key]) ?? 0n;
|
|
8
|
+
context.stack.push(value);
|
|
9
|
+
context.pc++;
|
|
10
|
+
},
|
|
11
|
+
instructionToString() {
|
|
12
|
+
return "TLOAD";
|
|
13
|
+
}
|
|
14
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TSTORE.d.ts","sourceRoot":"","sources":["../../../../src/opsets/9db704/opcodes/TSTORE.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;;;sBAO5B,OAAO;;;AAJ5B,wBAqBE"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { pop } from "../../../lib.js";
|
|
2
|
+
export default {
|
|
3
|
+
identifier: 0x5d,
|
|
4
|
+
executor(context) {
|
|
5
|
+
const [key, value] = pop(context.stack, 2);
|
|
6
|
+
context.gas -= 100n;
|
|
7
|
+
const state = context.states.at(-1);
|
|
8
|
+
if (state.transientStorage === null)
|
|
9
|
+
state.transientStorage = new Map();
|
|
10
|
+
if (state.transientStorage.has(context.address) === false)
|
|
11
|
+
state.transientStorage.set(context.address, new Map());
|
|
12
|
+
state.transientStorage.get(context.address).set(key, value);
|
|
13
|
+
context.pc++;
|
|
14
|
+
},
|
|
15
|
+
instructionToString() {
|
|
16
|
+
return "TSTORE";
|
|
17
|
+
}
|
|
18
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"XOR.d.ts","sourceRoot":"","sources":["../../../../src/opsets/9db704/opcodes/XOR.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;;;sBAO5B,OAAO;;;AAJ5B,wBAeE"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { pop } from "../../../lib.js";
|
|
2
|
+
export default {
|
|
3
|
+
identifier: 0x18,
|
|
4
|
+
executor(context) {
|
|
5
|
+
const [a, b] = pop(context.stack, 2);
|
|
6
|
+
context.stack.push(a ^ b);
|
|
7
|
+
context.gas -= 3n;
|
|
8
|
+
context.pc++;
|
|
9
|
+
},
|
|
10
|
+
instructionToString() {
|
|
11
|
+
return "XOR";
|
|
12
|
+
}
|
|
13
|
+
};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export { default as STOP } from "./opcodes/STOP.js";
|
|
2
|
+
export { default as ADD } from "./opcodes/ADD.js";
|
|
3
|
+
export { default as MUL } from "./opcodes/MUL.js";
|
|
4
|
+
export { default as SUB } from "./opcodes/SUB.js";
|
|
5
|
+
export { default as DIV } from "./opcodes/DIV.js";
|
|
6
|
+
export { default as LT } from "./opcodes/LT.js";
|
|
7
|
+
export { default as GT } from "./opcodes/GT.js";
|
|
8
|
+
export { default as SLT } from "./opcodes/SLT.js";
|
|
9
|
+
export { default as SGT } from "./opcodes/SGT.js";
|
|
10
|
+
export { default as EQ } from "./opcodes/EQ.js";
|
|
11
|
+
export { default as ISZERO } from "./opcodes/ISZERO.js";
|
|
12
|
+
export { default as AND } from "./opcodes/AND.js";
|
|
13
|
+
export { default as OR } from "./opcodes/OR.js";
|
|
14
|
+
export { default as XOR } from "./opcodes/XOR.js";
|
|
15
|
+
export { default as BYTE } from "./opcodes/BYTE.js";
|
|
16
|
+
export { default as NOT } from "./opcodes/NOT.js";
|
|
17
|
+
export { default as SHL } from "./opcodes/SHL.js";
|
|
18
|
+
export { default as SHR } from "./opcodes/SHR.js";
|
|
19
|
+
export { default as KECCAK256 } from "./opcodes/KECCAK256.js";
|
|
20
|
+
export { default as ADDRESS } from "./opcodes/ADDRESS.js";
|
|
21
|
+
export { default as CALLER } from "./opcodes/CALLER.js";
|
|
22
|
+
export { default as CALLVALUE } from "./opcodes/CALLVALUE.js";
|
|
23
|
+
export { default as CALLDATALOAD } from "./opcodes/CALLDATALOAD.js";
|
|
24
|
+
export { default as CALLDATASIZE } from "./opcodes/CALLDATASIZE.js";
|
|
25
|
+
export { default as CALLDATACOPY } from "./opcodes/CALLDATACOPY.js";
|
|
26
|
+
export { default as CODECOPY } from "./opcodes/CODECOPY.js";
|
|
27
|
+
export { default as EXTCODESIZE } from "./opcodes/EXTCODESIZE.js";
|
|
28
|
+
export { default as EXTCODECOPY } from "./opcodes/EXTCODECOPY.js";
|
|
29
|
+
export { default as RETURNDATASIZE } from "./opcodes/RETURNDATASIZE.js";
|
|
30
|
+
export { default as TIMESTAMP } from "./opcodes/TIMESTAMP.js";
|
|
31
|
+
export { default as CHAINID } from "./opcodes/CHAINID.js";
|
|
32
|
+
export { default as POP } from "./opcodes/POP.js";
|
|
33
|
+
export { default as MLOAD } from "./opcodes/MLOAD.js";
|
|
34
|
+
export { default as MSTORE } from "./opcodes/MSTORE.js";
|
|
35
|
+
export { default as SLOAD } from "./opcodes/SLOAD.js";
|
|
36
|
+
export { default as SSTORE } from "./opcodes/SSTORE.js";
|
|
37
|
+
export { default as JUMP } from "./opcodes/JUMP.js";
|
|
38
|
+
export { default as JUMPI } from "./opcodes/JUMPI.js";
|
|
39
|
+
export { default as MSIZE } from "./opcodes/MSIZE.js";
|
|
40
|
+
export { default as GAS } from "./opcodes/GAS.js";
|
|
41
|
+
export { default as JUMPDEST } from "./opcodes/JUMPDEST.js";
|
|
42
|
+
export { default as TLOAD } from "./opcodes/TLOAD.js";
|
|
43
|
+
export { default as TSTORE } from "./opcodes/TSTORE.js";
|
|
44
|
+
export { default as PUSH } from "./opcodes/PUSH.js";
|
|
45
|
+
export { default as DUP } from "./opcodes/DUP.js";
|
|
46
|
+
export { default as SWAP } from "./opcodes/SWAP.js";
|
|
47
|
+
export { default as LOG } from "./opcodes/LOG.js";
|
|
48
|
+
export { default as CREATE } from "./opcodes/CREATE.js";
|
|
49
|
+
export { default as RETURN } from "./opcodes/RETURN.js";
|
|
50
|
+
export { default as CREATE2 } from "./opcodes/CREATE2.js";
|
|
51
|
+
export { default as STATICCALL } from "./opcodes/STATICCALL.js";
|
|
52
|
+
export { default as REVERT } from "./opcodes/REVERT.js";
|
|
53
|
+
//# sourceMappingURL=opset.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opset.d.ts","sourceRoot":"","sources":["../../../src/opsets/9db704/opset.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export { default as STOP } from "./opcodes/STOP.js";
|
|
2
|
+
export { default as ADD } from "./opcodes/ADD.js";
|
|
3
|
+
export { default as MUL } from "./opcodes/MUL.js";
|
|
4
|
+
export { default as SUB } from "./opcodes/SUB.js";
|
|
5
|
+
export { default as DIV } from "./opcodes/DIV.js";
|
|
6
|
+
export { default as LT } from "./opcodes/LT.js";
|
|
7
|
+
export { default as GT } from "./opcodes/GT.js";
|
|
8
|
+
export { default as SLT } from "./opcodes/SLT.js";
|
|
9
|
+
export { default as SGT } from "./opcodes/SGT.js";
|
|
10
|
+
export { default as EQ } from "./opcodes/EQ.js";
|
|
11
|
+
export { default as ISZERO } from "./opcodes/ISZERO.js";
|
|
12
|
+
export { default as AND } from "./opcodes/AND.js";
|
|
13
|
+
export { default as OR } from "./opcodes/OR.js";
|
|
14
|
+
export { default as XOR } from "./opcodes/XOR.js";
|
|
15
|
+
export { default as BYTE } from "./opcodes/BYTE.js";
|
|
16
|
+
export { default as NOT } from "./opcodes/NOT.js";
|
|
17
|
+
export { default as SHL } from "./opcodes/SHL.js";
|
|
18
|
+
export { default as SHR } from "./opcodes/SHR.js";
|
|
19
|
+
export { default as KECCAK256 } from "./opcodes/KECCAK256.js";
|
|
20
|
+
export { default as ADDRESS } from "./opcodes/ADDRESS.js";
|
|
21
|
+
export { default as CALLER } from "./opcodes/CALLER.js";
|
|
22
|
+
export { default as CALLVALUE } from "./opcodes/CALLVALUE.js";
|
|
23
|
+
export { default as CALLDATALOAD } from "./opcodes/CALLDATALOAD.js";
|
|
24
|
+
export { default as CALLDATASIZE } from "./opcodes/CALLDATASIZE.js";
|
|
25
|
+
export { default as CALLDATACOPY } from "./opcodes/CALLDATACOPY.js";
|
|
26
|
+
export { default as CODECOPY } from "./opcodes/CODECOPY.js";
|
|
27
|
+
export { default as EXTCODESIZE } from "./opcodes/EXTCODESIZE.js";
|
|
28
|
+
export { default as EXTCODECOPY } from "./opcodes/EXTCODECOPY.js";
|
|
29
|
+
export { default as RETURNDATASIZE } from "./opcodes/RETURNDATASIZE.js";
|
|
30
|
+
export { default as TIMESTAMP } from "./opcodes/TIMESTAMP.js";
|
|
31
|
+
export { default as CHAINID } from "./opcodes/CHAINID.js";
|
|
32
|
+
export { default as POP } from "./opcodes/POP.js";
|
|
33
|
+
export { default as MLOAD } from "./opcodes/MLOAD.js";
|
|
34
|
+
export { default as MSTORE } from "./opcodes/MSTORE.js";
|
|
35
|
+
export { default as SLOAD } from "./opcodes/SLOAD.js";
|
|
36
|
+
export { default as SSTORE } from "./opcodes/SSTORE.js";
|
|
37
|
+
export { default as JUMP } from "./opcodes/JUMP.js";
|
|
38
|
+
export { default as JUMPI } from "./opcodes/JUMPI.js";
|
|
39
|
+
export { default as MSIZE } from "./opcodes/MSIZE.js";
|
|
40
|
+
export { default as GAS } from "./opcodes/GAS.js";
|
|
41
|
+
export { default as JUMPDEST } from "./opcodes/JUMPDEST.js";
|
|
42
|
+
export { default as TLOAD } from "./opcodes/TLOAD.js";
|
|
43
|
+
export { default as TSTORE } from "./opcodes/TSTORE.js";
|
|
44
|
+
export { default as PUSH } from "./opcodes/PUSH.js";
|
|
45
|
+
export { default as DUP } from "./opcodes/DUP.js";
|
|
46
|
+
export { default as SWAP } from "./opcodes/SWAP.js";
|
|
47
|
+
export { default as LOG } from "./opcodes/LOG.js";
|
|
48
|
+
export { default as CREATE } from "./opcodes/CREATE.js";
|
|
49
|
+
export { default as RETURN } from "./opcodes/RETURN.js";
|
|
50
|
+
export { default as CREATE2 } from "./opcodes/CREATE2.js";
|
|
51
|
+
export { default as STATICCALL } from "./opcodes/STATICCALL.js";
|
|
52
|
+
export { default as REVERT } from "./opcodes/REVERT.js";
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
type MapComponents<M, V = never, A extends unknown[] = []> = M extends Map<infer K, infer V> ? MapComponents<V, V, [...A, K]> : {
|
|
2
|
+
keyPath: A;
|
|
3
|
+
value: V;
|
|
4
|
+
};
|
|
5
|
+
type Context = {
|
|
6
|
+
origin: string;
|
|
7
|
+
sender: string;
|
|
8
|
+
to: null | string;
|
|
9
|
+
address: null | string;
|
|
10
|
+
value: bigint;
|
|
11
|
+
pc: number;
|
|
12
|
+
gas: bigint;
|
|
13
|
+
stack: Array<bigint>;
|
|
14
|
+
memory: null | ArrayBuffer;
|
|
15
|
+
C_mem_prev: bigint;
|
|
16
|
+
returndata: null | ArrayBuffer;
|
|
17
|
+
accountAccessSet: Set<string>;
|
|
18
|
+
storageAccessSet: Map<string, Set<bigint>>;
|
|
19
|
+
depth: number;
|
|
20
|
+
calldata: null | ArrayBuffer;
|
|
21
|
+
subcontext: null | Context;
|
|
22
|
+
blocked: boolean;
|
|
23
|
+
reverted: null | boolean;
|
|
24
|
+
states: Array<{
|
|
25
|
+
accounts: null | Map<string, {
|
|
26
|
+
nonce: bigint;
|
|
27
|
+
balance: bigint;
|
|
28
|
+
code: null | ArrayBuffer;
|
|
29
|
+
}>;
|
|
30
|
+
transientStorage: null | Map<string, Map<bigint, bigint>>;
|
|
31
|
+
storage: null | Map<string, Map<bigint, bigint>>;
|
|
32
|
+
}>;
|
|
33
|
+
refund: bigint;
|
|
34
|
+
code: null | ArrayBuffer;
|
|
35
|
+
memoryWords: number;
|
|
36
|
+
L: null | bigint;
|
|
37
|
+
};
|
|
38
|
+
type Artifact = {
|
|
39
|
+
variant: null | number;
|
|
40
|
+
width: number;
|
|
41
|
+
literal: null | bigint;
|
|
42
|
+
};
|
|
43
|
+
type PartialContext = {
|
|
44
|
+
origin: string;
|
|
45
|
+
sender: string;
|
|
46
|
+
code: ArrayBuffer;
|
|
47
|
+
} & Partial<Context>;
|
|
48
|
+
export type { MapComponents, Context, Artifact, PartialContext };
|
|
49
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,KAAK,aAAa,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,SAAS,OAAO,EAAE,GAAG,EAAE,IACrD,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,GACzB,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAC9B;IAAE,OAAO,EAAC,CAAC,CAAC;IAAC,KAAK,EAAC,CAAC,CAAA;CAAE,CAAC;AAEjC,KAAK,OAAO,GAAG;IACX,MAAM,EAAC,MAAM,CAAC;IACd,MAAM,EAAC,MAAM,CAAC;IACd,EAAE,EAAC,IAAI,GAAC,MAAM,CAAC;IACf,OAAO,EAAC,IAAI,GAAC,MAAM,CAAC;IACpB,KAAK,EAAC,MAAM,CAAC;IACb,EAAE,EAAC,MAAM,CAAC;IACV,GAAG,EAAC,MAAM,CAAC;IACX,KAAK,EAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IACnB,MAAM,EAAC,IAAI,GAAC,WAAW,CAAA;IACvB,UAAU,EAAC,MAAM,CAAC;IAClB,UAAU,EAAC,IAAI,GAAC,WAAW,CAAA;IAC3B,gBAAgB,EAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,gBAAgB,EAAC,GAAG,CAAC,MAAM,EAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IACzC,KAAK,EAAC,MAAM,CAAC;IACb,QAAQ,EAAC,IAAI,GAAC,WAAW,CAAC;IAC1B,UAAU,EAAC,IAAI,GAAC,OAAO,CAAC;IACxB,OAAO,EAAC,OAAO,CAAC;IAChB,QAAQ,EAAC,IAAI,GAAC,OAAO,CAAC;IACtB,MAAM,EAAC,KAAK,CAAC;QACT,QAAQ,EAAC,IAAI,GAAC,GAAG,CAAC,MAAM,EAAC;YAAE,KAAK,EAAC,MAAM,CAAC;YAAC,OAAO,EAAC,MAAM,CAAC;YAAC,IAAI,EAAC,IAAI,GAAC,WAAW,CAAA;SAAE,CAAC,CAAC;QAClF,gBAAgB,EAAC,IAAI,GAAC,GAAG,CAAC,MAAM,EAAC,GAAG,CAAC,MAAM,EAAC,MAAM,CAAC,CAAC,CAAC;QACrD,OAAO,EAAC,IAAI,GAAC,GAAG,CAAC,MAAM,EAAC,GAAG,CAAC,MAAM,EAAC,MAAM,CAAC,CAAC,CAAA;KAC9C,CAAC,CAAC;IACH,MAAM,EAAC,MAAM,CAAC;IACd,IAAI,EAAC,IAAI,GAAC,WAAW,CAAC;IACtB,WAAW,EAAC,MAAM,CAAC;IACnB,CAAC,EAAC,IAAI,GAAC,MAAM,CAAA;CAChB,CAAC;AAEF,KAAK,QAAQ,GAAG;IACZ,OAAO,EAAC,IAAI,GAAC,MAAM,CAAA;IACnB,KAAK,EAAC,MAAM,CAAC;IACb,OAAO,EAAC,IAAI,GAAC,MAAM,CAAC;CACvB,CAAC;AAGF,KAAK,cAAc,GAAG;IAClB,MAAM,EAAC,MAAM,CAAC;IACd,MAAM,EAAC,MAAM,CAAC;IACd,IAAI,EAAC,WAAW,CAAA;CACnB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAErB,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/package.json
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@bradthomasbrown/evm-single-context",
|
|
3
|
+
"description": "An implementation of a single-context ethereum virtual machine in JavaScript/TypeScript.",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"author": "Brad Brown <https://t.me/bradthomasbrown>",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist/"
|
|
9
|
+
],
|
|
10
|
+
"exports": {
|
|
11
|
+
".": "./dist/machine.js",
|
|
12
|
+
"./lib": "./dist/lib.js",
|
|
13
|
+
"./types": "./dist/types.js",
|
|
14
|
+
"./opsets/9db704": "./dist/opsets/9db704/opset.js"
|
|
15
|
+
},
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"@bradthomasbrown/75bb14": "^1.0.0",
|
|
18
|
+
"@bradthomasbrown/900ef2": "^1.0.0",
|
|
19
|
+
"@bradthomasbrown/ecdsa": "^2.0.1",
|
|
20
|
+
"@bradthomasbrown/entity": "^1.0.1",
|
|
21
|
+
"@bradthomasbrown/finite-field": "^2.0.5",
|
|
22
|
+
"@bradthomasbrown/keccak": "^1.0.1",
|
|
23
|
+
"@bradthomasbrown/machine": "^1.0.0",
|
|
24
|
+
"@bradthomasbrown/rlp": "^1.0.0"
|
|
25
|
+
}
|
|
26
|
+
}
|