@feelyourprotocol/evm 8141.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/LICENSE +373 -0
- package/README.md +690 -0
- package/dist/cjs/binaryTreeAccessWitness.d.ts +61 -0
- package/dist/cjs/binaryTreeAccessWitness.d.ts.map +1 -0
- package/dist/cjs/binaryTreeAccessWitness.js +314 -0
- package/dist/cjs/binaryTreeAccessWitness.js.map +1 -0
- package/dist/cjs/chunkCache.d.ts +13 -0
- package/dist/cjs/chunkCache.d.ts.map +1 -0
- package/dist/cjs/chunkCache.js +30 -0
- package/dist/cjs/chunkCache.js.map +1 -0
- package/dist/cjs/constructors.d.ts +11 -0
- package/dist/cjs/constructors.d.ts.map +1 -0
- package/dist/cjs/constructors.js +30 -0
- package/dist/cjs/constructors.js.map +1 -0
- package/dist/cjs/eip7708.d.ts +24 -0
- package/dist/cjs/eip7708.d.ts.map +1 -0
- package/dist/cjs/eip7708.js +37 -0
- package/dist/cjs/eip7708.js.map +1 -0
- package/dist/cjs/eof/constants.d.ts +22 -0
- package/dist/cjs/eof/constants.d.ts.map +1 -0
- package/dist/cjs/eof/constants.js +31 -0
- package/dist/cjs/eof/constants.js.map +1 -0
- package/dist/cjs/eof/container.d.ts +87 -0
- package/dist/cjs/eof/container.d.ts.map +1 -0
- package/dist/cjs/eof/container.js +380 -0
- package/dist/cjs/eof/container.js.map +1 -0
- package/dist/cjs/eof/errors.d.ts +66 -0
- package/dist/cjs/eof/errors.d.ts.map +1 -0
- package/dist/cjs/eof/errors.js +200 -0
- package/dist/cjs/eof/errors.js.map +1 -0
- package/dist/cjs/eof/setup.d.ts +9 -0
- package/dist/cjs/eof/setup.d.ts.map +1 -0
- package/dist/cjs/eof/setup.js +26 -0
- package/dist/cjs/eof/setup.js.map +1 -0
- package/dist/cjs/eof/stackDelta.d.ts +10 -0
- package/dist/cjs/eof/stackDelta.d.ts.map +1 -0
- package/dist/cjs/eof/stackDelta.js +164 -0
- package/dist/cjs/eof/stackDelta.js.map +1 -0
- package/dist/cjs/eof/util.d.ts +8 -0
- package/dist/cjs/eof/util.d.ts.map +1 -0
- package/dist/cjs/eof/util.js +18 -0
- package/dist/cjs/eof/util.js.map +1 -0
- package/dist/cjs/eof/verify.d.ts +38 -0
- package/dist/cjs/eof/verify.d.ts.map +1 -0
- package/dist/cjs/eof/verify.js +436 -0
- package/dist/cjs/eof/verify.js.map +1 -0
- package/dist/cjs/errors.d.ts +40 -0
- package/dist/cjs/errors.d.ts.map +1 -0
- package/dist/cjs/errors.js +43 -0
- package/dist/cjs/errors.js.map +1 -0
- package/dist/cjs/evm.d.ts +181 -0
- package/dist/cjs/evm.d.ts.map +1 -0
- package/dist/cjs/evm.js +1142 -0
- package/dist/cjs/evm.js.map +1 -0
- package/dist/cjs/frameContext.d.ts +50 -0
- package/dist/cjs/frameContext.d.ts.map +1 -0
- package/dist/cjs/frameContext.js +17 -0
- package/dist/cjs/frameContext.js.map +1 -0
- package/dist/cjs/index.d.ts +18 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +43 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/interpreter.d.ts +361 -0
- package/dist/cjs/interpreter.d.ts.map +1 -0
- package/dist/cjs/interpreter.js +1057 -0
- package/dist/cjs/interpreter.js.map +1 -0
- package/dist/cjs/journal.d.ts +69 -0
- package/dist/cjs/journal.d.ts.map +1 -0
- package/dist/cjs/journal.js +247 -0
- package/dist/cjs/journal.js.map +1 -0
- package/dist/cjs/logger.d.ts +38 -0
- package/dist/cjs/logger.d.ts.map +1 -0
- package/dist/cjs/logger.js +126 -0
- package/dist/cjs/logger.js.map +1 -0
- package/dist/cjs/memory.d.ts +29 -0
- package/dist/cjs/memory.d.ts.map +1 -0
- package/dist/cjs/memory.js +75 -0
- package/dist/cjs/memory.js.map +1 -0
- package/dist/cjs/message.d.ts +70 -0
- package/dist/cjs/message.d.ts.map +1 -0
- package/dist/cjs/message.js +51 -0
- package/dist/cjs/message.js.map +1 -0
- package/dist/cjs/opcodes/EIP1283.d.ts +13 -0
- package/dist/cjs/opcodes/EIP1283.d.ts.map +1 -0
- package/dist/cjs/opcodes/EIP1283.js +58 -0
- package/dist/cjs/opcodes/EIP1283.js.map +1 -0
- package/dist/cjs/opcodes/EIP2200.d.ts +13 -0
- package/dist/cjs/opcodes/EIP2200.d.ts.map +1 -0
- package/dist/cjs/opcodes/EIP2200.js +64 -0
- package/dist/cjs/opcodes/EIP2200.js.map +1 -0
- package/dist/cjs/opcodes/EIP2929.d.ts +68 -0
- package/dist/cjs/opcodes/EIP2929.d.ts.map +1 -0
- package/dist/cjs/opcodes/EIP2929.js +146 -0
- package/dist/cjs/opcodes/EIP2929.js.map +1 -0
- package/dist/cjs/opcodes/codes.d.ts +45 -0
- package/dist/cjs/opcodes/codes.d.ts.map +1 -0
- package/dist/cjs/opcodes/codes.js +453 -0
- package/dist/cjs/opcodes/codes.js.map +1 -0
- package/dist/cjs/opcodes/functions.d.ts +11 -0
- package/dist/cjs/opcodes/functions.d.ts.map +1 -0
- package/dist/cjs/opcodes/functions.js +1778 -0
- package/dist/cjs/opcodes/functions.js.map +1 -0
- package/dist/cjs/opcodes/gas.d.ts +15 -0
- package/dist/cjs/opcodes/gas.d.ts.map +1 -0
- package/dist/cjs/opcodes/gas.js +1016 -0
- package/dist/cjs/opcodes/gas.js.map +1 -0
- package/dist/cjs/opcodes/index.d.ts +4 -0
- package/dist/cjs/opcodes/index.d.ts.map +1 -0
- package/dist/cjs/opcodes/index.js +20 -0
- package/dist/cjs/opcodes/index.js.map +1 -0
- package/dist/cjs/opcodes/util.d.ts +86 -0
- package/dist/cjs/opcodes/util.d.ts.map +1 -0
- package/dist/cjs/opcodes/util.js +281 -0
- package/dist/cjs/opcodes/util.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/params.d.ts +3 -0
- package/dist/cjs/params.d.ts.map +1 -0
- package/dist/cjs/params.js +424 -0
- package/dist/cjs/params.js.map +1 -0
- package/dist/cjs/precompiles/01-ecrecover.d.ts +4 -0
- package/dist/cjs/precompiles/01-ecrecover.d.ts.map +1 -0
- package/dist/cjs/precompiles/01-ecrecover.js +58 -0
- package/dist/cjs/precompiles/01-ecrecover.js.map +1 -0
- package/dist/cjs/precompiles/02-sha256.d.ts +4 -0
- package/dist/cjs/precompiles/02-sha256.d.ts.map +1 -0
- package/dist/cjs/precompiles/02-sha256.js +27 -0
- package/dist/cjs/precompiles/02-sha256.js.map +1 -0
- package/dist/cjs/precompiles/03-ripemd160.d.ts +4 -0
- package/dist/cjs/precompiles/03-ripemd160.d.ts.map +1 -0
- package/dist/cjs/precompiles/03-ripemd160.js +26 -0
- package/dist/cjs/precompiles/03-ripemd160.js.map +1 -0
- package/dist/cjs/precompiles/04-identity.d.ts +4 -0
- package/dist/cjs/precompiles/04-identity.d.ts.map +1 -0
- package/dist/cjs/precompiles/04-identity.js +24 -0
- package/dist/cjs/precompiles/04-identity.js.map +1 -0
- package/dist/cjs/precompiles/05-modexp.d.ts +5 -0
- package/dist/cjs/precompiles/05-modexp.d.ts.map +1 -0
- package/dist/cjs/precompiles/05-modexp.js +185 -0
- package/dist/cjs/precompiles/05-modexp.js.map +1 -0
- package/dist/cjs/precompiles/06-bn254-add.d.ts +4 -0
- package/dist/cjs/precompiles/06-bn254-add.d.ts.map +1 -0
- package/dist/cjs/precompiles/06-bn254-add.js +42 -0
- package/dist/cjs/precompiles/06-bn254-add.js.map +1 -0
- package/dist/cjs/precompiles/07-bn254-mul.d.ts +4 -0
- package/dist/cjs/precompiles/07-bn254-mul.d.ts.map +1 -0
- package/dist/cjs/precompiles/07-bn254-mul.js +43 -0
- package/dist/cjs/precompiles/07-bn254-mul.js.map +1 -0
- package/dist/cjs/precompiles/08-bn254-pairing.d.ts +4 -0
- package/dist/cjs/precompiles/08-bn254-pairing.d.ts.map +1 -0
- package/dist/cjs/precompiles/08-bn254-pairing.js +45 -0
- package/dist/cjs/precompiles/08-bn254-pairing.js.map +1 -0
- package/dist/cjs/precompiles/09-blake2f.d.ts +5 -0
- package/dist/cjs/precompiles/09-blake2f.d.ts.map +1 -0
- package/dist/cjs/precompiles/09-blake2f.js +201 -0
- package/dist/cjs/precompiles/09-blake2f.js.map +1 -0
- package/dist/cjs/precompiles/0a-kzg-point-evaluation.d.ts +5 -0
- package/dist/cjs/precompiles/0a-kzg-point-evaluation.d.ts.map +1 -0
- package/dist/cjs/precompiles/0a-kzg-point-evaluation.js +68 -0
- package/dist/cjs/precompiles/0a-kzg-point-evaluation.js.map +1 -0
- package/dist/cjs/precompiles/0b-bls12-g1add.d.ts +4 -0
- package/dist/cjs/precompiles/0b-bls12-g1add.d.ts.map +1 -0
- package/dist/cjs/precompiles/0b-bls12-g1add.js +49 -0
- package/dist/cjs/precompiles/0b-bls12-g1add.js.map +1 -0
- package/dist/cjs/precompiles/0c-bls12-g1msm.d.ts +4 -0
- package/dist/cjs/precompiles/0c-bls12-g1msm.d.ts.map +1 -0
- package/dist/cjs/precompiles/0c-bls12-g1msm.js +62 -0
- package/dist/cjs/precompiles/0c-bls12-g1msm.js.map +1 -0
- package/dist/cjs/precompiles/0d-bls12-g2add.d.ts +4 -0
- package/dist/cjs/precompiles/0d-bls12-g2add.d.ts.map +1 -0
- package/dist/cjs/precompiles/0d-bls12-g2add.js +51 -0
- package/dist/cjs/precompiles/0d-bls12-g2add.js.map +1 -0
- package/dist/cjs/precompiles/0e-bls12-g2msm.d.ts +4 -0
- package/dist/cjs/precompiles/0e-bls12-g2msm.d.ts.map +1 -0
- package/dist/cjs/precompiles/0e-bls12-g2msm.js +60 -0
- package/dist/cjs/precompiles/0e-bls12-g2msm.js.map +1 -0
- package/dist/cjs/precompiles/0f-bls12-pairing.d.ts +4 -0
- package/dist/cjs/precompiles/0f-bls12-pairing.d.ts.map +1 -0
- package/dist/cjs/precompiles/0f-bls12-pairing.js +66 -0
- package/dist/cjs/precompiles/0f-bls12-pairing.js.map +1 -0
- package/dist/cjs/precompiles/10-bls12-map-fp-to-g1.d.ts +4 -0
- package/dist/cjs/precompiles/10-bls12-map-fp-to-g1.d.ts.map +1 -0
- package/dist/cjs/precompiles/10-bls12-map-fp-to-g1.js +44 -0
- package/dist/cjs/precompiles/10-bls12-map-fp-to-g1.js.map +1 -0
- package/dist/cjs/precompiles/100-p256verify.d.ts +4 -0
- package/dist/cjs/precompiles/100-p256verify.d.ts.map +1 -0
- package/dist/cjs/precompiles/100-p256verify.js +131 -0
- package/dist/cjs/precompiles/100-p256verify.js.map +1 -0
- package/dist/cjs/precompiles/11-bls12-map-fp2-to-g2.d.ts +4 -0
- package/dist/cjs/precompiles/11-bls12-map-fp2-to-g2.d.ts.map +1 -0
- package/dist/cjs/precompiles/11-bls12-map-fp2-to-g2.js +47 -0
- package/dist/cjs/precompiles/11-bls12-map-fp2-to-g2.js.map +1 -0
- package/dist/cjs/precompiles/bls12_381/constants.d.ts +10 -0
- package/dist/cjs/precompiles/bls12_381/constants.d.ts.map +1 -0
- package/dist/cjs/precompiles/bls12_381/constants.js +274 -0
- package/dist/cjs/precompiles/bls12_381/constants.js.map +1 -0
- package/dist/cjs/precompiles/bls12_381/index.d.ts +5 -0
- package/dist/cjs/precompiles/bls12_381/index.d.ts.map +1 -0
- package/dist/cjs/precompiles/bls12_381/index.js +24 -0
- package/dist/cjs/precompiles/bls12_381/index.js.map +1 -0
- package/dist/cjs/precompiles/bls12_381/mcl.d.ts +45 -0
- package/dist/cjs/precompiles/bls12_381/mcl.d.ts.map +1 -0
- package/dist/cjs/precompiles/bls12_381/mcl.js +264 -0
- package/dist/cjs/precompiles/bls12_381/mcl.js.map +1 -0
- package/dist/cjs/precompiles/bls12_381/noble.d.ts +39 -0
- package/dist/cjs/precompiles/bls12_381/noble.d.ts.map +1 -0
- package/dist/cjs/precompiles/bls12_381/noble.js +228 -0
- package/dist/cjs/precompiles/bls12_381/noble.js.map +1 -0
- package/dist/cjs/precompiles/bls12_381/util.d.ts +35 -0
- package/dist/cjs/precompiles/bls12_381/util.d.ts.map +1 -0
- package/dist/cjs/precompiles/bls12_381/util.js +68 -0
- package/dist/cjs/precompiles/bls12_381/util.js.map +1 -0
- package/dist/cjs/precompiles/bn254/index.d.ts +3 -0
- package/dist/cjs/precompiles/bn254/index.d.ts.map +1 -0
- package/dist/cjs/precompiles/bn254/index.js +8 -0
- package/dist/cjs/precompiles/bn254/index.js.map +1 -0
- package/dist/cjs/precompiles/bn254/noble.d.ts +13 -0
- package/dist/cjs/precompiles/bn254/noble.d.ts.map +1 -0
- package/dist/cjs/precompiles/bn254/noble.js +124 -0
- package/dist/cjs/precompiles/bn254/noble.js.map +1 -0
- package/dist/cjs/precompiles/bn254/rustbn.d.ts +16 -0
- package/dist/cjs/precompiles/bn254/rustbn.d.ts.map +1 -0
- package/dist/cjs/precompiles/bn254/rustbn.js +33 -0
- package/dist/cjs/precompiles/bn254/rustbn.js.map +1 -0
- package/dist/cjs/precompiles/index.d.ts +67 -0
- package/dist/cjs/precompiles/index.d.ts.map +1 -0
- package/dist/cjs/precompiles/index.js +262 -0
- package/dist/cjs/precompiles/index.js.map +1 -0
- package/dist/cjs/precompiles/types.d.ts +13 -0
- package/dist/cjs/precompiles/types.d.ts.map +1 -0
- package/dist/cjs/precompiles/types.js +3 -0
- package/dist/cjs/precompiles/types.js.map +1 -0
- package/dist/cjs/precompiles/util.d.ts +30 -0
- package/dist/cjs/precompiles/util.d.ts.map +1 -0
- package/dist/cjs/precompiles/util.js +63 -0
- package/dist/cjs/precompiles/util.js.map +1 -0
- package/dist/cjs/stack.d.ts +55 -0
- package/dist/cjs/stack.d.ts.map +1 -0
- package/dist/cjs/stack.js +143 -0
- package/dist/cjs/stack.js.map +1 -0
- package/dist/cjs/stemCache.d.ts +20 -0
- package/dist/cjs/stemCache.d.ts.map +1 -0
- package/dist/cjs/stemCache.js +37 -0
- package/dist/cjs/stemCache.js.map +1 -0
- package/dist/cjs/transientStorage.d.ts +54 -0
- package/dist/cjs/transientStorage.d.ts.map +1 -0
- package/dist/cjs/transientStorage.js +113 -0
- package/dist/cjs/transientStorage.js.map +1 -0
- package/dist/cjs/types.d.ts +465 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +28 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/esm/binaryTreeAccessWitness.d.ts +61 -0
- package/dist/esm/binaryTreeAccessWitness.d.ts.map +1 -0
- package/dist/esm/binaryTreeAccessWitness.js +308 -0
- package/dist/esm/binaryTreeAccessWitness.js.map +1 -0
- package/dist/esm/chunkCache.d.ts +13 -0
- package/dist/esm/chunkCache.d.ts.map +1 -0
- package/dist/esm/chunkCache.js +26 -0
- package/dist/esm/chunkCache.js.map +1 -0
- package/dist/esm/constructors.d.ts +11 -0
- package/dist/esm/constructors.d.ts.map +1 -0
- package/dist/esm/constructors.js +27 -0
- package/dist/esm/constructors.js.map +1 -0
- package/dist/esm/eip7708.d.ts +24 -0
- package/dist/esm/eip7708.d.ts.map +1 -0
- package/dist/esm/eip7708.js +32 -0
- package/dist/esm/eip7708.js.map +1 -0
- package/dist/esm/eof/constants.d.ts +22 -0
- package/dist/esm/eof/constants.d.ts.map +1 -0
- package/dist/esm/eof/constants.js +28 -0
- package/dist/esm/eof/constants.js.map +1 -0
- package/dist/esm/eof/container.d.ts +87 -0
- package/dist/esm/eof/container.d.ts.map +1 -0
- package/dist/esm/eof/container.js +375 -0
- package/dist/esm/eof/container.js.map +1 -0
- package/dist/esm/eof/errors.d.ts +66 -0
- package/dist/esm/eof/errors.d.ts.map +1 -0
- package/dist/esm/eof/errors.js +195 -0
- package/dist/esm/eof/errors.js.map +1 -0
- package/dist/esm/eof/setup.d.ts +9 -0
- package/dist/esm/eof/setup.d.ts.map +1 -0
- package/dist/esm/eof/setup.js +23 -0
- package/dist/esm/eof/setup.js.map +1 -0
- package/dist/esm/eof/stackDelta.d.ts +10 -0
- package/dist/esm/eof/stackDelta.d.ts.map +1 -0
- package/dist/esm/eof/stackDelta.js +161 -0
- package/dist/esm/eof/stackDelta.js.map +1 -0
- package/dist/esm/eof/util.d.ts +8 -0
- package/dist/esm/eof/util.d.ts.map +1 -0
- package/dist/esm/eof/util.js +14 -0
- package/dist/esm/eof/util.js.map +1 -0
- package/dist/esm/eof/verify.d.ts +38 -0
- package/dist/esm/eof/verify.d.ts.map +1 -0
- package/dist/esm/eof/verify.js +432 -0
- package/dist/esm/eof/verify.js.map +1 -0
- package/dist/esm/errors.d.ts +40 -0
- package/dist/esm/errors.d.ts.map +1 -0
- package/dist/esm/errors.js +39 -0
- package/dist/esm/errors.js.map +1 -0
- package/dist/esm/evm.d.ts +181 -0
- package/dist/esm/evm.d.ts.map +1 -0
- package/dist/esm/evm.js +1131 -0
- package/dist/esm/evm.js.map +1 -0
- package/dist/esm/frameContext.d.ts +50 -0
- package/dist/esm/frameContext.d.ts.map +1 -0
- package/dist/esm/frameContext.js +14 -0
- package/dist/esm/frameContext.js.map +1 -0
- package/dist/esm/index.d.ts +18 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +15 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/interpreter.d.ts +361 -0
- package/dist/esm/interpreter.d.ts.map +1 -0
- package/dist/esm/interpreter.js +1054 -0
- package/dist/esm/interpreter.js.map +1 -0
- package/dist/esm/journal.d.ts +69 -0
- package/dist/esm/journal.d.ts.map +1 -0
- package/dist/esm/journal.js +243 -0
- package/dist/esm/journal.js.map +1 -0
- package/dist/esm/logger.d.ts +38 -0
- package/dist/esm/logger.d.ts.map +1 -0
- package/dist/esm/logger.js +121 -0
- package/dist/esm/logger.js.map +1 -0
- package/dist/esm/memory.d.ts +29 -0
- package/dist/esm/memory.d.ts.map +1 -0
- package/dist/esm/memory.js +71 -0
- package/dist/esm/memory.js.map +1 -0
- package/dist/esm/message.d.ts +70 -0
- package/dist/esm/message.d.ts.map +1 -0
- package/dist/esm/message.js +47 -0
- package/dist/esm/message.js.map +1 -0
- package/dist/esm/opcodes/EIP1283.d.ts +13 -0
- package/dist/esm/opcodes/EIP1283.d.ts.map +1 -0
- package/dist/esm/opcodes/EIP1283.js +55 -0
- package/dist/esm/opcodes/EIP1283.js.map +1 -0
- package/dist/esm/opcodes/EIP2200.d.ts +13 -0
- package/dist/esm/opcodes/EIP2200.d.ts.map +1 -0
- package/dist/esm/opcodes/EIP2200.js +61 -0
- package/dist/esm/opcodes/EIP2200.js.map +1 -0
- package/dist/esm/opcodes/EIP2929.d.ts +68 -0
- package/dist/esm/opcodes/EIP2929.d.ts.map +1 -0
- package/dist/esm/opcodes/EIP2929.js +138 -0
- package/dist/esm/opcodes/EIP2929.js.map +1 -0
- package/dist/esm/opcodes/codes.d.ts +45 -0
- package/dist/esm/opcodes/codes.d.ts.map +1 -0
- package/dist/esm/opcodes/codes.js +448 -0
- package/dist/esm/opcodes/codes.js.map +1 -0
- package/dist/esm/opcodes/functions.d.ts +11 -0
- package/dist/esm/opcodes/functions.d.ts.map +1 -0
- package/dist/esm/opcodes/functions.js +1775 -0
- package/dist/esm/opcodes/functions.js.map +1 -0
- package/dist/esm/opcodes/gas.d.ts +15 -0
- package/dist/esm/opcodes/gas.d.ts.map +1 -0
- package/dist/esm/opcodes/gas.js +1013 -0
- package/dist/esm/opcodes/gas.js.map +1 -0
- package/dist/esm/opcodes/index.d.ts +4 -0
- package/dist/esm/opcodes/index.d.ts.map +1 -0
- package/dist/esm/opcodes/index.js +4 -0
- package/dist/esm/opcodes/index.js.map +1 -0
- package/dist/esm/opcodes/util.d.ts +86 -0
- package/dist/esm/opcodes/util.d.ts.map +1 -0
- package/dist/esm/opcodes/util.js +257 -0
- package/dist/esm/opcodes/util.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/params.d.ts +3 -0
- package/dist/esm/params.d.ts.map +1 -0
- package/dist/esm/params.js +421 -0
- package/dist/esm/params.js.map +1 -0
- package/dist/esm/precompiles/01-ecrecover.d.ts +4 -0
- package/dist/esm/precompiles/01-ecrecover.d.ts.map +1 -0
- package/dist/esm/precompiles/01-ecrecover.js +55 -0
- package/dist/esm/precompiles/01-ecrecover.js.map +1 -0
- package/dist/esm/precompiles/02-sha256.d.ts +4 -0
- package/dist/esm/precompiles/02-sha256.d.ts.map +1 -0
- package/dist/esm/precompiles/02-sha256.js +24 -0
- package/dist/esm/precompiles/02-sha256.js.map +1 -0
- package/dist/esm/precompiles/03-ripemd160.d.ts +4 -0
- package/dist/esm/precompiles/03-ripemd160.d.ts.map +1 -0
- package/dist/esm/precompiles/03-ripemd160.js +23 -0
- package/dist/esm/precompiles/03-ripemd160.js.map +1 -0
- package/dist/esm/precompiles/04-identity.d.ts +4 -0
- package/dist/esm/precompiles/04-identity.d.ts.map +1 -0
- package/dist/esm/precompiles/04-identity.js +21 -0
- package/dist/esm/precompiles/04-identity.js.map +1 -0
- package/dist/esm/precompiles/05-modexp.d.ts +5 -0
- package/dist/esm/precompiles/05-modexp.d.ts.map +1 -0
- package/dist/esm/precompiles/05-modexp.js +181 -0
- package/dist/esm/precompiles/05-modexp.js.map +1 -0
- package/dist/esm/precompiles/06-bn254-add.d.ts +4 -0
- package/dist/esm/precompiles/06-bn254-add.d.ts.map +1 -0
- package/dist/esm/precompiles/06-bn254-add.js +39 -0
- package/dist/esm/precompiles/06-bn254-add.js.map +1 -0
- package/dist/esm/precompiles/07-bn254-mul.d.ts +4 -0
- package/dist/esm/precompiles/07-bn254-mul.d.ts.map +1 -0
- package/dist/esm/precompiles/07-bn254-mul.js +40 -0
- package/dist/esm/precompiles/07-bn254-mul.js.map +1 -0
- package/dist/esm/precompiles/08-bn254-pairing.d.ts +4 -0
- package/dist/esm/precompiles/08-bn254-pairing.d.ts.map +1 -0
- package/dist/esm/precompiles/08-bn254-pairing.js +42 -0
- package/dist/esm/precompiles/08-bn254-pairing.js.map +1 -0
- package/dist/esm/precompiles/09-blake2f.d.ts +5 -0
- package/dist/esm/precompiles/09-blake2f.d.ts.map +1 -0
- package/dist/esm/precompiles/09-blake2f.js +197 -0
- package/dist/esm/precompiles/09-blake2f.js.map +1 -0
- package/dist/esm/precompiles/0a-kzg-point-evaluation.d.ts +5 -0
- package/dist/esm/precompiles/0a-kzg-point-evaluation.d.ts.map +1 -0
- package/dist/esm/precompiles/0a-kzg-point-evaluation.js +64 -0
- package/dist/esm/precompiles/0a-kzg-point-evaluation.js.map +1 -0
- package/dist/esm/precompiles/0b-bls12-g1add.d.ts +4 -0
- package/dist/esm/precompiles/0b-bls12-g1add.d.ts.map +1 -0
- package/dist/esm/precompiles/0b-bls12-g1add.js +46 -0
- package/dist/esm/precompiles/0b-bls12-g1add.js.map +1 -0
- package/dist/esm/precompiles/0c-bls12-g1msm.d.ts +4 -0
- package/dist/esm/precompiles/0c-bls12-g1msm.d.ts.map +1 -0
- package/dist/esm/precompiles/0c-bls12-g1msm.js +59 -0
- package/dist/esm/precompiles/0c-bls12-g1msm.js.map +1 -0
- package/dist/esm/precompiles/0d-bls12-g2add.d.ts +4 -0
- package/dist/esm/precompiles/0d-bls12-g2add.d.ts.map +1 -0
- package/dist/esm/precompiles/0d-bls12-g2add.js +48 -0
- package/dist/esm/precompiles/0d-bls12-g2add.js.map +1 -0
- package/dist/esm/precompiles/0e-bls12-g2msm.d.ts +4 -0
- package/dist/esm/precompiles/0e-bls12-g2msm.d.ts.map +1 -0
- package/dist/esm/precompiles/0e-bls12-g2msm.js +57 -0
- package/dist/esm/precompiles/0e-bls12-g2msm.js.map +1 -0
- package/dist/esm/precompiles/0f-bls12-pairing.d.ts +4 -0
- package/dist/esm/precompiles/0f-bls12-pairing.d.ts.map +1 -0
- package/dist/esm/precompiles/0f-bls12-pairing.js +63 -0
- package/dist/esm/precompiles/0f-bls12-pairing.js.map +1 -0
- package/dist/esm/precompiles/10-bls12-map-fp-to-g1.d.ts +4 -0
- package/dist/esm/precompiles/10-bls12-map-fp-to-g1.d.ts.map +1 -0
- package/dist/esm/precompiles/10-bls12-map-fp-to-g1.js +41 -0
- package/dist/esm/precompiles/10-bls12-map-fp-to-g1.js.map +1 -0
- package/dist/esm/precompiles/100-p256verify.d.ts +4 -0
- package/dist/esm/precompiles/100-p256verify.d.ts.map +1 -0
- package/dist/esm/precompiles/100-p256verify.js +128 -0
- package/dist/esm/precompiles/100-p256verify.js.map +1 -0
- package/dist/esm/precompiles/11-bls12-map-fp2-to-g2.d.ts +4 -0
- package/dist/esm/precompiles/11-bls12-map-fp2-to-g2.d.ts.map +1 -0
- package/dist/esm/precompiles/11-bls12-map-fp2-to-g2.js +44 -0
- package/dist/esm/precompiles/11-bls12-map-fp2-to-g2.js.map +1 -0
- package/dist/esm/precompiles/bls12_381/constants.d.ts +10 -0
- package/dist/esm/precompiles/bls12_381/constants.d.ts.map +1 -0
- package/dist/esm/precompiles/bls12_381/constants.js +271 -0
- package/dist/esm/precompiles/bls12_381/constants.js.map +1 -0
- package/dist/esm/precompiles/bls12_381/index.d.ts +5 -0
- package/dist/esm/precompiles/bls12_381/index.d.ts.map +1 -0
- package/dist/esm/precompiles/bls12_381/index.js +5 -0
- package/dist/esm/precompiles/bls12_381/index.js.map +1 -0
- package/dist/esm/precompiles/bls12_381/mcl.d.ts +45 -0
- package/dist/esm/precompiles/bls12_381/mcl.d.ts.map +1 -0
- package/dist/esm/precompiles/bls12_381/mcl.js +254 -0
- package/dist/esm/precompiles/bls12_381/mcl.js.map +1 -0
- package/dist/esm/precompiles/bls12_381/noble.d.ts +39 -0
- package/dist/esm/precompiles/bls12_381/noble.d.ts.map +1 -0
- package/dist/esm/precompiles/bls12_381/noble.js +218 -0
- package/dist/esm/precompiles/bls12_381/noble.js.map +1 -0
- package/dist/esm/precompiles/bls12_381/util.d.ts +35 -0
- package/dist/esm/precompiles/bls12_381/util.d.ts.map +1 -0
- package/dist/esm/precompiles/bls12_381/util.js +63 -0
- package/dist/esm/precompiles/bls12_381/util.js.map +1 -0
- package/dist/esm/precompiles/bn254/index.d.ts +3 -0
- package/dist/esm/precompiles/bn254/index.d.ts.map +1 -0
- package/dist/esm/precompiles/bn254/index.js +3 -0
- package/dist/esm/precompiles/bn254/index.js.map +1 -0
- package/dist/esm/precompiles/bn254/noble.d.ts +13 -0
- package/dist/esm/precompiles/bn254/noble.d.ts.map +1 -0
- package/dist/esm/precompiles/bn254/noble.js +120 -0
- package/dist/esm/precompiles/bn254/noble.js.map +1 -0
- package/dist/esm/precompiles/bn254/rustbn.d.ts +16 -0
- package/dist/esm/precompiles/bn254/rustbn.d.ts.map +1 -0
- package/dist/esm/precompiles/bn254/rustbn.js +29 -0
- package/dist/esm/precompiles/bn254/rustbn.js.map +1 -0
- package/dist/esm/precompiles/index.d.ts +67 -0
- package/dist/esm/precompiles/index.d.ts.map +1 -0
- package/dist/esm/precompiles/index.js +251 -0
- package/dist/esm/precompiles/index.js.map +1 -0
- package/dist/esm/precompiles/types.d.ts +13 -0
- package/dist/esm/precompiles/types.d.ts.map +1 -0
- package/dist/esm/precompiles/types.js +2 -0
- package/dist/esm/precompiles/types.js.map +1 -0
- package/dist/esm/precompiles/util.d.ts +30 -0
- package/dist/esm/precompiles/util.d.ts.map +1 -0
- package/dist/esm/precompiles/util.js +57 -0
- package/dist/esm/precompiles/util.js.map +1 -0
- package/dist/esm/stack.d.ts +55 -0
- package/dist/esm/stack.d.ts.map +1 -0
- package/dist/esm/stack.js +139 -0
- package/dist/esm/stack.js.map +1 -0
- package/dist/esm/stemCache.d.ts +20 -0
- package/dist/esm/stemCache.d.ts.map +1 -0
- package/dist/esm/stemCache.js +33 -0
- package/dist/esm/stemCache.js.map +1 -0
- package/dist/esm/transientStorage.d.ts +54 -0
- package/dist/esm/transientStorage.d.ts.map +1 -0
- package/dist/esm/transientStorage.js +109 -0
- package/dist/esm/transientStorage.js.map +1 -0
- package/dist/esm/types.d.ts +465 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +23 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/tsconfig.prod.cjs.tsbuildinfo +1 -0
- package/dist/tsconfig.prod.esm.tsbuildinfo +1 -0
- package/package.json +98 -0
- package/src/binaryTreeAccessWitness.ts +447 -0
- package/src/chunkCache.ts +36 -0
- package/src/constructors.ts +35 -0
- package/src/eip7708.ts +47 -0
- package/src/eof/constants.ts +36 -0
- package/src/eof/container.ts +495 -0
- package/src/eof/errors.ts +214 -0
- package/src/eof/setup.ts +27 -0
- package/src/eof/stackDelta.ts +169 -0
- package/src/eof/util.ts +16 -0
- package/src/eof/verify.ts +531 -0
- package/src/errors.ts +45 -0
- package/src/evm.ts +1415 -0
- package/src/frameContext.ts +56 -0
- package/src/index.ts +75 -0
- package/src/interpreter.ts +1437 -0
- package/src/journal.ts +317 -0
- package/src/logger.ts +180 -0
- package/src/memory.ts +82 -0
- package/src/message.ts +114 -0
- package/src/opcodes/EIP1283.ts +77 -0
- package/src/opcodes/EIP2200.ts +87 -0
- package/src/opcodes/EIP2929.ts +173 -0
- package/src/opcodes/codes.ts +528 -0
- package/src/opcodes/functions.ts +1937 -0
- package/src/opcodes/gas.ts +1329 -0
- package/src/opcodes/index.ts +3 -0
- package/src/opcodes/util.ts +313 -0
- package/src/params.ts +423 -0
- package/src/precompiles/01-ecrecover.ts +77 -0
- package/src/precompiles/02-sha256.ts +32 -0
- package/src/precompiles/03-ripemd160.ts +32 -0
- package/src/precompiles/04-identity.ts +29 -0
- package/src/precompiles/05-modexp.ts +215 -0
- package/src/precompiles/06-bn254-add.ts +49 -0
- package/src/precompiles/07-bn254-mul.ts +50 -0
- package/src/precompiles/08-bn254-pairing.ts +54 -0
- package/src/precompiles/09-blake2f.ts +243 -0
- package/src/precompiles/0a-kzg-point-evaluation.ts +94 -0
- package/src/precompiles/0b-bls12-g1add.ts +63 -0
- package/src/precompiles/0c-bls12-g1msm.ts +87 -0
- package/src/precompiles/0d-bls12-g2add.ts +66 -0
- package/src/precompiles/0e-bls12-g2msm.ts +84 -0
- package/src/precompiles/0f-bls12-pairing.ts +86 -0
- package/src/precompiles/10-bls12-map-fp-to-g1.ts +58 -0
- package/src/precompiles/100-p256verify.ts +152 -0
- package/src/precompiles/11-bls12-map-fp2-to-g2.ts +61 -0
- package/src/precompiles/bls12_381/constants.ts +278 -0
- package/src/precompiles/bls12_381/index.ts +4 -0
- package/src/precompiles/bls12_381/mcl.ts +376 -0
- package/src/precompiles/bls12_381/noble.ts +307 -0
- package/src/precompiles/bls12_381/util.ts +78 -0
- package/src/precompiles/bn254/index.ts +2 -0
- package/src/precompiles/bn254/noble.ts +156 -0
- package/src/precompiles/bn254/rustbn.ts +35 -0
- package/src/precompiles/index.ts +344 -0
- package/src/precompiles/types.ts +15 -0
- package/src/precompiles/util.ts +70 -0
- package/src/stack.ts +166 -0
- package/src/stemCache.ts +45 -0
- package/src/transientStorage.ts +131 -0
- package/src/types.ts +538 -0
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import { EthereumJSErrorWithoutCode } from '@feelyourprotocol/util'
|
|
2
|
+
|
|
3
|
+
export type EOFErrorMessage = (typeof EOFErrorMessage)[keyof typeof EOFErrorMessage]
|
|
4
|
+
|
|
5
|
+
export const EOFErrorMessage = {
|
|
6
|
+
OUT_OF_BOUNDS: 'Trying to read out of bounds',
|
|
7
|
+
VERIFY_UINT: 'Uint does not match expected value ',
|
|
8
|
+
VERIFY_BYTES: 'Bytes do not match expected value',
|
|
9
|
+
FORMAT: 'err: invalid format',
|
|
10
|
+
MAGIC: 'err: invalid magic',
|
|
11
|
+
VERSION: 'err: invalid eof version',
|
|
12
|
+
KIND_TYPE: 'err: expected kind types',
|
|
13
|
+
KIND_CODE: 'err: expected kind code',
|
|
14
|
+
KIND_DATA: 'err: expected kind data',
|
|
15
|
+
TERMINATOR: 'err: expected terminator',
|
|
16
|
+
TYPE_SIZE: 'missing type size',
|
|
17
|
+
INVALID_TYPE_SIZE: 'err: type section size invalid',
|
|
18
|
+
CODE_SIZE: 'missing code size',
|
|
19
|
+
CODE_SECTION_SIZE: 'code section should be at least one byte',
|
|
20
|
+
INVALID_CODE_SIZE: 'code size does not match type size',
|
|
21
|
+
DATA_SIZE: 'missing data size',
|
|
22
|
+
CONTAINER_SIZE: 'missing container size',
|
|
23
|
+
CONTAINER_SECTION_SIZE:
|
|
24
|
+
'container section should at least contain one section and at most 255 sections',
|
|
25
|
+
TYPE_SECTIONS: 'err: mismatch of code sections count and type signatures',
|
|
26
|
+
INPUTS: 'expected inputs',
|
|
27
|
+
OUTPUTS: 'expected outputs',
|
|
28
|
+
MAX_INPUTS: 'inputs exceeds 127, the maximum, got: ',
|
|
29
|
+
MAX_OUTPUTS: 'outputs exceeds 127, the maximum, got: ',
|
|
30
|
+
CODE0_INPUTS: 'first code section should have 0 inputs',
|
|
31
|
+
CODE0_OUTPUTS: 'first code section should have 0x80 (terminating section) outputs',
|
|
32
|
+
MAX_STACK_HEIGHT: 'expected maxStackHeight',
|
|
33
|
+
MAX_STACK_HEIGHT_LIMIT: 'stack height limit of 1024 exceeded: ',
|
|
34
|
+
MIN_CODE_SECTIONS: 'should have at least 1 code section',
|
|
35
|
+
CODE_SECTION: 'expected a code section',
|
|
36
|
+
DATA_SECTION: 'Expected data section',
|
|
37
|
+
CONTAINER_SECTION: 'expected a container section',
|
|
38
|
+
CONTAINER_SECTION_MIN: 'container section should be at least 1 byte',
|
|
39
|
+
INVALID_EOF_CREATE_TARGET: 'EOFCREATE targets an undefined container',
|
|
40
|
+
INVALID_RETURN_CONTRACT_TARGET: 'RETURNCONTRACT targets an undefined container',
|
|
41
|
+
CONTAINER_DOUBLE_TYPE: 'Container is targeted by both EOFCREATE and RETURNCONTRACT',
|
|
42
|
+
UNREACHABLE_CONTAINER_SECTIONS: 'Unreachable containers (by both EOFCREATE and RETURNCONTRACT)',
|
|
43
|
+
CONTAINER_TYPE_ERROR:
|
|
44
|
+
'Container contains opcodes which this mode (deployment mode / init code / runtime mode) cannot have',
|
|
45
|
+
DANGLING_BYTES: 'got dangling bytes in body',
|
|
46
|
+
INVALID_OPCODE: 'invalid opcode',
|
|
47
|
+
INVALID_TERMINATOR: 'invalid terminating opcode',
|
|
48
|
+
OPCODE_INTERMEDIATES_OOB: 'invalid opcode: intermediates out-of-bounds',
|
|
49
|
+
INVALID_RJUMP: 'invalid rjump* target',
|
|
50
|
+
INVALID_CALL_TARGET: 'invalid callf/jumpf target',
|
|
51
|
+
INVALID_CALLF_RETURNING: 'invalid callf: calls to non-returning function',
|
|
52
|
+
INVALID_STACK_HEIGHT: 'invalid stack height',
|
|
53
|
+
INVALID_JUMPF: 'invalid jumpf target (output count)',
|
|
54
|
+
INVALID_RETURNING_SECTION: 'invalid returning code section: section is not returning',
|
|
55
|
+
RETURNING_NO_RETURN: 'invalid section: section should return but has no RETF/JUMP to return',
|
|
56
|
+
RJUMPV_TABLE_SIZE0: 'invalid RJUMPV: table size 0',
|
|
57
|
+
UNREACHABLE_CODE_SECTIONS: 'unreachable code sections',
|
|
58
|
+
UNREACHABLE_CODE: 'unreachable code (by forward jumps)',
|
|
59
|
+
DATALOADN_OOB: 'DATALOADN reading out of bounds',
|
|
60
|
+
MAX_STACK_HEIGHT_VIOLATION: 'Max stack height does not match the reported max stack height',
|
|
61
|
+
STACK_UNDERFLOW: 'Stack underflow',
|
|
62
|
+
STACK_OVERFLOW: 'Stack overflow',
|
|
63
|
+
UNSTABLE_STACK: 'Unstable stack (can reach stack under/overflow by jumps)',
|
|
64
|
+
RETF_NO_RETURN: 'Trying to return to undefined function',
|
|
65
|
+
RETURN_STACK_OVERFLOW: 'Return stack overflow',
|
|
66
|
+
INVALID_EXTCALL_TARGET: 'invalid extcall target: address > 20 bytes',
|
|
67
|
+
INVALID_RETURN_CONTRACT_DATA_SIZE: 'invalid RETURNCONTRACT: data size lower than expected',
|
|
68
|
+
} as const
|
|
69
|
+
|
|
70
|
+
export function validationErrorMsg(type: EOFErrorMessage, ...args: any) {
|
|
71
|
+
switch (type) {
|
|
72
|
+
case EOFErrorMessage.OUT_OF_BOUNDS: {
|
|
73
|
+
return EOFErrorMessage.OUT_OF_BOUNDS + ` at pos: ${args[0]}: ${args[1]}`
|
|
74
|
+
}
|
|
75
|
+
case EOFErrorMessage.VERIFY_BYTES: {
|
|
76
|
+
return EOFErrorMessage.VERIFY_BYTES + ` at pos: ${args[0]}: ${args[1]}`
|
|
77
|
+
}
|
|
78
|
+
case EOFErrorMessage.VERIFY_UINT: {
|
|
79
|
+
return EOFErrorMessage.VERIFY_UINT + `at pos: ${args[0]}: ${args[1]}`
|
|
80
|
+
}
|
|
81
|
+
case EOFErrorMessage.TYPE_SIZE: {
|
|
82
|
+
return EOFErrorMessage.TYPE_SIZE + args[0]
|
|
83
|
+
}
|
|
84
|
+
case EOFErrorMessage.INVALID_TYPE_SIZE: {
|
|
85
|
+
return EOFErrorMessage.INVALID_TYPE_SIZE + args[0]
|
|
86
|
+
}
|
|
87
|
+
case EOFErrorMessage.INVALID_CODE_SIZE: {
|
|
88
|
+
return EOFErrorMessage.INVALID_CODE_SIZE + args[0]
|
|
89
|
+
}
|
|
90
|
+
case EOFErrorMessage.INPUTS: {
|
|
91
|
+
return `${EOFErrorMessage.INPUTS} - typeSection ${args[0]}`
|
|
92
|
+
}
|
|
93
|
+
case EOFErrorMessage.OUTPUTS: {
|
|
94
|
+
return `${EOFErrorMessage.OUTPUTS} - typeSection ${args[0]}`
|
|
95
|
+
}
|
|
96
|
+
case EOFErrorMessage.CODE0_INPUTS: {
|
|
97
|
+
return `first code section should have 0 inputs`
|
|
98
|
+
}
|
|
99
|
+
case EOFErrorMessage.CODE0_OUTPUTS: {
|
|
100
|
+
return `first code section should have 0 outputs`
|
|
101
|
+
}
|
|
102
|
+
case EOFErrorMessage.MAX_INPUTS: {
|
|
103
|
+
return EOFErrorMessage.MAX_INPUTS + `${args[1]} - code section ${args[0]}`
|
|
104
|
+
}
|
|
105
|
+
case EOFErrorMessage.MAX_OUTPUTS: {
|
|
106
|
+
return EOFErrorMessage.MAX_OUTPUTS + `${args[1]} - code section ${args[0]}`
|
|
107
|
+
}
|
|
108
|
+
case EOFErrorMessage.CODE_SECTION: {
|
|
109
|
+
return `expected code: codeSection ${args[0]}: `
|
|
110
|
+
}
|
|
111
|
+
case EOFErrorMessage.DATA_SECTION: {
|
|
112
|
+
return EOFErrorMessage.DATA_SECTION
|
|
113
|
+
}
|
|
114
|
+
case EOFErrorMessage.MAX_STACK_HEIGHT: {
|
|
115
|
+
return `${EOFErrorMessage.MAX_STACK_HEIGHT} - typeSection ${args[0]}: `
|
|
116
|
+
}
|
|
117
|
+
case EOFErrorMessage.MAX_STACK_HEIGHT_LIMIT: {
|
|
118
|
+
return `${EOFErrorMessage.MAX_STACK_HEIGHT_LIMIT}, got: ${args[1]} - typeSection ${args[0]}`
|
|
119
|
+
}
|
|
120
|
+
case EOFErrorMessage.DANGLING_BYTES: {
|
|
121
|
+
return EOFErrorMessage.DANGLING_BYTES
|
|
122
|
+
}
|
|
123
|
+
default: {
|
|
124
|
+
return type
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
export function validationError(type: EOFErrorMessage, ...args: any): never {
|
|
129
|
+
switch (type) {
|
|
130
|
+
case EOFErrorMessage.OUT_OF_BOUNDS: {
|
|
131
|
+
const pos = args[0]
|
|
132
|
+
if (pos === 0 || pos === 2 || pos === 3 || pos === 6) {
|
|
133
|
+
throw EthereumJSErrorWithoutCode(args[1])
|
|
134
|
+
}
|
|
135
|
+
throw EthereumJSErrorWithoutCode(EOFErrorMessage.OUT_OF_BOUNDS + ` `)
|
|
136
|
+
}
|
|
137
|
+
case EOFErrorMessage.VERIFY_BYTES: {
|
|
138
|
+
const pos = args[0]
|
|
139
|
+
if (pos === 0 || pos === 2 || pos === 3 || pos === 6) {
|
|
140
|
+
throw EthereumJSErrorWithoutCode(args[1])
|
|
141
|
+
}
|
|
142
|
+
throw EthereumJSErrorWithoutCode(
|
|
143
|
+
EOFErrorMessage.VERIFY_BYTES + ` at pos: ${args[0]}: ${args[1]}`,
|
|
144
|
+
)
|
|
145
|
+
}
|
|
146
|
+
case EOFErrorMessage.VERIFY_UINT: {
|
|
147
|
+
const pos = args[0]
|
|
148
|
+
if (pos === 0 || pos === 2 || pos === 3 || pos === 6 || pos === 18) {
|
|
149
|
+
throw EthereumJSErrorWithoutCode(args[1])
|
|
150
|
+
}
|
|
151
|
+
throw EthereumJSErrorWithoutCode(
|
|
152
|
+
EOFErrorMessage.VERIFY_UINT + `at pos: ${args[0]}: ${args[1]}`,
|
|
153
|
+
)
|
|
154
|
+
}
|
|
155
|
+
case EOFErrorMessage.TYPE_SIZE: {
|
|
156
|
+
throw EthereumJSErrorWithoutCode(EOFErrorMessage.TYPE_SIZE + args[0])
|
|
157
|
+
}
|
|
158
|
+
case EOFErrorMessage.TYPE_SECTIONS: {
|
|
159
|
+
throw EthereumJSErrorWithoutCode(
|
|
160
|
+
`${EOFErrorMessage.TYPE_SECTIONS} (types ${args[0]} code ${args[1]})`,
|
|
161
|
+
)
|
|
162
|
+
}
|
|
163
|
+
case EOFErrorMessage.INVALID_TYPE_SIZE: {
|
|
164
|
+
throw EthereumJSErrorWithoutCode(EOFErrorMessage.INVALID_TYPE_SIZE)
|
|
165
|
+
}
|
|
166
|
+
case EOFErrorMessage.INVALID_CODE_SIZE: {
|
|
167
|
+
throw EthereumJSErrorWithoutCode(EOFErrorMessage.INVALID_CODE_SIZE + args[0])
|
|
168
|
+
}
|
|
169
|
+
case EOFErrorMessage.INPUTS: {
|
|
170
|
+
throw EthereumJSErrorWithoutCode(`${EOFErrorMessage.INPUTS} - typeSection ${args[0]}`)
|
|
171
|
+
}
|
|
172
|
+
case EOFErrorMessage.OUTPUTS: {
|
|
173
|
+
throw EthereumJSErrorWithoutCode(`${EOFErrorMessage.OUTPUTS} - typeSection ${args[0]}`)
|
|
174
|
+
}
|
|
175
|
+
case EOFErrorMessage.CODE0_INPUTS: {
|
|
176
|
+
throw EthereumJSErrorWithoutCode(`first code section should have 0 inputs`)
|
|
177
|
+
}
|
|
178
|
+
case EOFErrorMessage.CODE0_OUTPUTS: {
|
|
179
|
+
throw EthereumJSErrorWithoutCode(`first code section should have 0 outputs`)
|
|
180
|
+
}
|
|
181
|
+
case EOFErrorMessage.MAX_INPUTS: {
|
|
182
|
+
throw EthereumJSErrorWithoutCode(
|
|
183
|
+
EOFErrorMessage.MAX_INPUTS + `${args[1]} - code section ${args[0]}`,
|
|
184
|
+
)
|
|
185
|
+
}
|
|
186
|
+
case EOFErrorMessage.MAX_OUTPUTS: {
|
|
187
|
+
throw EthereumJSErrorWithoutCode(
|
|
188
|
+
EOFErrorMessage.MAX_OUTPUTS + `${args[1]} - code section ${args[0]}`,
|
|
189
|
+
)
|
|
190
|
+
}
|
|
191
|
+
case EOFErrorMessage.CODE_SECTION: {
|
|
192
|
+
throw EthereumJSErrorWithoutCode(`expected code: codeSection ${args[0]}: `)
|
|
193
|
+
}
|
|
194
|
+
case EOFErrorMessage.DATA_SECTION: {
|
|
195
|
+
throw EthereumJSErrorWithoutCode(EOFErrorMessage.DATA_SECTION)
|
|
196
|
+
}
|
|
197
|
+
case EOFErrorMessage.MAX_STACK_HEIGHT: {
|
|
198
|
+
throw EthereumJSErrorWithoutCode(
|
|
199
|
+
`${EOFErrorMessage.MAX_STACK_HEIGHT} - typeSection ${args[0]}: `,
|
|
200
|
+
)
|
|
201
|
+
}
|
|
202
|
+
case EOFErrorMessage.MAX_STACK_HEIGHT_LIMIT: {
|
|
203
|
+
throw EthereumJSErrorWithoutCode(
|
|
204
|
+
`${EOFErrorMessage.MAX_STACK_HEIGHT_LIMIT}, got: ${args[1]} - typeSection ${args[0]}`,
|
|
205
|
+
)
|
|
206
|
+
}
|
|
207
|
+
case EOFErrorMessage.DANGLING_BYTES: {
|
|
208
|
+
throw EthereumJSErrorWithoutCode(EOFErrorMessage.DANGLING_BYTES)
|
|
209
|
+
}
|
|
210
|
+
default: {
|
|
211
|
+
throw EthereumJSErrorWithoutCode(type)
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
package/src/eof/setup.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { EOFContainer, EOFContainerMode } from './container.ts'
|
|
2
|
+
|
|
3
|
+
import type { RunState } from '../interpreter.ts'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Setup EOF by preparing the `RunState` to run EVM in EOF mode
|
|
7
|
+
* @param runState Current run state
|
|
8
|
+
* @param eofMode EOF mode to run in (only changes in case of EOFCREATE)
|
|
9
|
+
*/
|
|
10
|
+
export function setupEOF(runState: RunState, eofMode: EOFContainerMode = EOFContainerMode.Default) {
|
|
11
|
+
runState.env.eof = {
|
|
12
|
+
container: new EOFContainer(runState.code, eofMode),
|
|
13
|
+
eofRunState: {
|
|
14
|
+
returnStack: [], // Return stack for RETF/CALLF/JUMPF
|
|
15
|
+
},
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// In case that txCallData is set, set the `callData` of `env` to this calldata
|
|
19
|
+
// This ensures that CALLDATA can be read when deploying EOF contracts using txs
|
|
20
|
+
if (runState.env.eof.container.body.txCallData !== undefined) {
|
|
21
|
+
runState.env.callData = runState.env.eof.container.body.txCallData
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// Set program counter to the first code section
|
|
25
|
+
const pc = runState.env.eof.container.header.getCodePosition(0)
|
|
26
|
+
runState.programCounter = pc
|
|
27
|
+
}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
// Generated using a script, which can be found in ./evm/scripts/stackDeltaGenerator.ts
|
|
2
|
+
|
|
3
|
+
export const stackDelta: {
|
|
4
|
+
[key: number]: {
|
|
5
|
+
inputs: number // Number of inputs to this operation
|
|
6
|
+
outputs: number // Number of outputs after this operation
|
|
7
|
+
name: string // Name of the opcode
|
|
8
|
+
intermediates: number // Intermediate bytes (such as 2 intermediates after a PUSH2)
|
|
9
|
+
terminating?: boolean // Marks the opcode as terminating. This opcode will exit the current CALL frame. (Such as STOP/RETURN)
|
|
10
|
+
}
|
|
11
|
+
} = {
|
|
12
|
+
0x00: { inputs: 0, outputs: 0, name: 'STOP', intermediates: 0, terminating: true },
|
|
13
|
+
0x01: { inputs: 2, outputs: 1, name: 'ADD', intermediates: 0 },
|
|
14
|
+
0x02: { inputs: 2, outputs: 1, name: 'MUL', intermediates: 0 },
|
|
15
|
+
0x03: { inputs: 2, outputs: 1, name: 'SUB', intermediates: 0 },
|
|
16
|
+
0x04: { inputs: 2, outputs: 1, name: 'DIV', intermediates: 0 },
|
|
17
|
+
0x05: { inputs: 2, outputs: 1, name: 'SDIV', intermediates: 0 },
|
|
18
|
+
0x06: { inputs: 2, outputs: 1, name: 'MOD', intermediates: 0 },
|
|
19
|
+
0x07: { inputs: 2, outputs: 1, name: 'SMOD', intermediates: 0 },
|
|
20
|
+
0x08: { inputs: 3, outputs: 1, name: 'ADDMOD', intermediates: 0 },
|
|
21
|
+
0x09: { inputs: 3, outputs: 1, name: 'MULMOD', intermediates: 0 },
|
|
22
|
+
0x0a: { inputs: 2, outputs: 1, name: 'EXP', intermediates: 0 },
|
|
23
|
+
0x0b: { inputs: 2, outputs: 1, name: 'SIGNEXTEND', intermediates: 0 },
|
|
24
|
+
0x10: { inputs: 2, outputs: 1, name: 'LT', intermediates: 0 },
|
|
25
|
+
0x11: { inputs: 2, outputs: 1, name: 'GT', intermediates: 0 },
|
|
26
|
+
0x12: { inputs: 2, outputs: 1, name: 'SLT', intermediates: 0 },
|
|
27
|
+
0x13: { inputs: 2, outputs: 1, name: 'SGT', intermediates: 0 },
|
|
28
|
+
0x14: { inputs: 2, outputs: 1, name: 'EQ', intermediates: 0 },
|
|
29
|
+
0x15: { inputs: 1, outputs: 1, name: 'ISZERO', intermediates: 0 },
|
|
30
|
+
0x16: { inputs: 2, outputs: 1, name: 'AND', intermediates: 0 },
|
|
31
|
+
0x17: { inputs: 2, outputs: 1, name: 'OR', intermediates: 0 },
|
|
32
|
+
0x18: { inputs: 2, outputs: 1, name: 'XOR', intermediates: 0 },
|
|
33
|
+
0x19: { inputs: 1, outputs: 1, name: 'NOT', intermediates: 0 },
|
|
34
|
+
0x1a: { inputs: 2, outputs: 1, name: 'BYTE', intermediates: 0 },
|
|
35
|
+
0x1b: { inputs: 2, outputs: 1, name: 'SHL', intermediates: 0 },
|
|
36
|
+
0x1c: { inputs: 2, outputs: 1, name: 'SHR', intermediates: 0 },
|
|
37
|
+
0x1d: { inputs: 2, outputs: 1, name: 'SAR', intermediates: 0 },
|
|
38
|
+
0x20: { inputs: 2, outputs: 1, name: 'SHA3', intermediates: 0 },
|
|
39
|
+
0x30: { inputs: 0, outputs: 1, name: 'ADDRESS', intermediates: 0 },
|
|
40
|
+
0x31: { inputs: 1, outputs: 1, name: 'BALANCE', intermediates: 0 },
|
|
41
|
+
0x32: { inputs: 0, outputs: 1, name: 'ORIGIN', intermediates: 0 },
|
|
42
|
+
0x33: { inputs: 0, outputs: 1, name: 'CALLER', intermediates: 0 },
|
|
43
|
+
0x34: { inputs: 0, outputs: 1, name: 'CALLVALUE', intermediates: 0 },
|
|
44
|
+
0x35: { inputs: 1, outputs: 1, name: 'CALLDATALOAD', intermediates: 0 },
|
|
45
|
+
0x36: { inputs: 0, outputs: 1, name: 'CALLDATASIZE', intermediates: 0 },
|
|
46
|
+
0x37: { inputs: 3, outputs: 0, name: 'CALLDATACOPY', intermediates: 0 },
|
|
47
|
+
0x3a: { inputs: 0, outputs: 1, name: 'GASPRICE', intermediates: 0 },
|
|
48
|
+
0x3d: { inputs: 0, outputs: 1, name: 'RETURNDATASIZE', intermediates: 0 },
|
|
49
|
+
0x3e: { inputs: 3, outputs: 0, name: 'RETURNDATACOPY', intermediates: 0 },
|
|
50
|
+
0x40: { inputs: 1, outputs: 1, name: 'BLOCKHASH', intermediates: 0 },
|
|
51
|
+
0x41: { inputs: 0, outputs: 1, name: 'COINBASE', intermediates: 0 },
|
|
52
|
+
0x42: { inputs: 0, outputs: 1, name: 'TIMESTAMP', intermediates: 0 },
|
|
53
|
+
0x43: { inputs: 0, outputs: 1, name: 'NUMBER', intermediates: 0 },
|
|
54
|
+
0x44: { inputs: 0, outputs: 1, name: 'PREVRANDAO', intermediates: 0 },
|
|
55
|
+
0x45: { inputs: 0, outputs: 1, name: 'GASLIMIT', intermediates: 0 },
|
|
56
|
+
0x4b: { inputs: 0, outputs: 1, name: 'SLOTNUM', intermediates: 0 },
|
|
57
|
+
0x46: { inputs: 0, outputs: 1, name: 'CHAINID', intermediates: 0 },
|
|
58
|
+
0x47: { inputs: 0, outputs: 1, name: 'SELFBALANCE', intermediates: 0 },
|
|
59
|
+
0x48: { inputs: 0, outputs: 1, name: 'BASEFEE', intermediates: 0 },
|
|
60
|
+
0x49: { inputs: 1, outputs: 1, name: 'BLOBAHASH', intermediates: 0 },
|
|
61
|
+
0x4a: { inputs: 0, outputs: 1, name: 'BLOBBASEFEE', intermediates: 0 },
|
|
62
|
+
0x50: { inputs: 1, outputs: 0, name: 'POP', intermediates: 0 },
|
|
63
|
+
0x51: { inputs: 1, outputs: 1, name: 'MLOAD', intermediates: 0 },
|
|
64
|
+
0x52: { inputs: 2, outputs: 0, name: 'MSTORE', intermediates: 0 },
|
|
65
|
+
0x53: { inputs: 2, outputs: 0, name: 'MSTORE8', intermediates: 0 },
|
|
66
|
+
0x54: { inputs: 1, outputs: 1, name: 'SLOAD', intermediates: 0 },
|
|
67
|
+
0x55: { inputs: 2, outputs: 0, name: 'SSTORE', intermediates: 0 },
|
|
68
|
+
0x59: { inputs: 0, outputs: 1, name: 'MSIZE', intermediates: 0 },
|
|
69
|
+
0x5b: { inputs: 0, outputs: 0, name: 'NOOP', intermediates: 0 },
|
|
70
|
+
0x5c: { inputs: 1, outputs: 1, name: 'TLOAD', intermediates: 0 },
|
|
71
|
+
0x5d: { inputs: 2, outputs: 0, name: 'TSTORE', intermediates: 0 },
|
|
72
|
+
0x5e: { inputs: 3, outputs: 0, name: 'MCOPY', intermediates: 0 },
|
|
73
|
+
0x5f: { inputs: 0, outputs: 1, name: 'PUSH0', intermediates: 0 },
|
|
74
|
+
0x60: { inputs: 0, outputs: 1, name: 'PUSH1', intermediates: 1 },
|
|
75
|
+
0x61: { inputs: 0, outputs: 1, name: 'PUSH2', intermediates: 2 },
|
|
76
|
+
0x62: { inputs: 0, outputs: 1, name: 'PUSH3', intermediates: 3 },
|
|
77
|
+
0x63: { inputs: 0, outputs: 1, name: 'PUSH4', intermediates: 4 },
|
|
78
|
+
0x64: { inputs: 0, outputs: 1, name: 'PUSH5', intermediates: 5 },
|
|
79
|
+
0x65: { inputs: 0, outputs: 1, name: 'PUSH6', intermediates: 6 },
|
|
80
|
+
0x66: { inputs: 0, outputs: 1, name: 'PUSH7', intermediates: 7 },
|
|
81
|
+
0x67: { inputs: 0, outputs: 1, name: 'PUSH8', intermediates: 8 },
|
|
82
|
+
0x68: { inputs: 0, outputs: 1, name: 'PUSH9', intermediates: 9 },
|
|
83
|
+
0x69: { inputs: 0, outputs: 1, name: 'PUSH10', intermediates: 10 },
|
|
84
|
+
0x6a: { inputs: 0, outputs: 1, name: 'PUSH11', intermediates: 11 },
|
|
85
|
+
0x6b: { inputs: 0, outputs: 1, name: 'PUSH12', intermediates: 12 },
|
|
86
|
+
0x6c: { inputs: 0, outputs: 1, name: 'PUSH13', intermediates: 13 },
|
|
87
|
+
0x6d: { inputs: 0, outputs: 1, name: 'PUSH14', intermediates: 14 },
|
|
88
|
+
0x6e: { inputs: 0, outputs: 1, name: 'PUSH15', intermediates: 15 },
|
|
89
|
+
0x6f: { inputs: 0, outputs: 1, name: 'PUSH16', intermediates: 16 },
|
|
90
|
+
0x70: { inputs: 0, outputs: 1, name: 'PUSH17', intermediates: 17 },
|
|
91
|
+
0x71: { inputs: 0, outputs: 1, name: 'PUSH18', intermediates: 18 },
|
|
92
|
+
0x72: { inputs: 0, outputs: 1, name: 'PUSH19', intermediates: 19 },
|
|
93
|
+
0x73: { inputs: 0, outputs: 1, name: 'PUSH20', intermediates: 20 },
|
|
94
|
+
0x74: { inputs: 0, outputs: 1, name: 'PUSH21', intermediates: 21 },
|
|
95
|
+
0x75: { inputs: 0, outputs: 1, name: 'PUSH22', intermediates: 22 },
|
|
96
|
+
0x76: { inputs: 0, outputs: 1, name: 'PUSH23', intermediates: 23 },
|
|
97
|
+
0x77: { inputs: 0, outputs: 1, name: 'PUSH24', intermediates: 24 },
|
|
98
|
+
0x78: { inputs: 0, outputs: 1, name: 'PUSH25', intermediates: 25 },
|
|
99
|
+
0x79: { inputs: 0, outputs: 1, name: 'PUSH26', intermediates: 26 },
|
|
100
|
+
0x7a: { inputs: 0, outputs: 1, name: 'PUSH27', intermediates: 27 },
|
|
101
|
+
0x7b: { inputs: 0, outputs: 1, name: 'PUSH28', intermediates: 28 },
|
|
102
|
+
0x7c: { inputs: 0, outputs: 1, name: 'PUSH29', intermediates: 29 },
|
|
103
|
+
0x7d: { inputs: 0, outputs: 1, name: 'PUSH30', intermediates: 30 },
|
|
104
|
+
0x7e: { inputs: 0, outputs: 1, name: 'PUSH31', intermediates: 31 },
|
|
105
|
+
0x7f: { inputs: 0, outputs: 1, name: 'PUSH32', intermediates: 32 },
|
|
106
|
+
0x80: { inputs: 1, outputs: 2, name: 'DUP1', intermediates: 0 },
|
|
107
|
+
0x81: { inputs: 2, outputs: 3, name: 'DUP2', intermediates: 0 },
|
|
108
|
+
0x82: { inputs: 3, outputs: 4, name: 'DUP3', intermediates: 0 },
|
|
109
|
+
0x83: { inputs: 4, outputs: 5, name: 'DUP4', intermediates: 0 },
|
|
110
|
+
0x84: { inputs: 5, outputs: 6, name: 'DUP5', intermediates: 0 },
|
|
111
|
+
0x85: { inputs: 6, outputs: 7, name: 'DUP6', intermediates: 0 },
|
|
112
|
+
0x86: { inputs: 7, outputs: 8, name: 'DUP7', intermediates: 0 },
|
|
113
|
+
0x87: { inputs: 8, outputs: 9, name: 'DUP8', intermediates: 0 },
|
|
114
|
+
0x88: { inputs: 9, outputs: 10, name: 'DUP9', intermediates: 0 },
|
|
115
|
+
0x89: { inputs: 10, outputs: 11, name: 'DUP10', intermediates: 0 },
|
|
116
|
+
0x8a: { inputs: 11, outputs: 12, name: 'DUP11', intermediates: 0 },
|
|
117
|
+
0x8b: { inputs: 12, outputs: 13, name: 'DUP12', intermediates: 0 },
|
|
118
|
+
0x8c: { inputs: 13, outputs: 14, name: 'DUP13', intermediates: 0 },
|
|
119
|
+
0x8d: { inputs: 14, outputs: 15, name: 'DUP14', intermediates: 0 },
|
|
120
|
+
0x8e: { inputs: 15, outputs: 16, name: 'DUP15', intermediates: 0 },
|
|
121
|
+
0x8f: { inputs: 16, outputs: 17, name: 'DUP16', intermediates: 0 },
|
|
122
|
+
0x90: { inputs: 2, outputs: 2, name: 'SWAP1', intermediates: 0 },
|
|
123
|
+
0x91: { inputs: 3, outputs: 3, name: 'SWAP2', intermediates: 0 },
|
|
124
|
+
0x92: { inputs: 4, outputs: 4, name: 'SWAP3', intermediates: 0 },
|
|
125
|
+
0x93: { inputs: 5, outputs: 5, name: 'SWAP4', intermediates: 0 },
|
|
126
|
+
0x94: { inputs: 6, outputs: 6, name: 'SWAP5', intermediates: 0 },
|
|
127
|
+
0x95: { inputs: 7, outputs: 7, name: 'SWAP6', intermediates: 0 },
|
|
128
|
+
0x96: { inputs: 8, outputs: 8, name: 'SWAP7', intermediates: 0 },
|
|
129
|
+
0x97: { inputs: 9, outputs: 9, name: 'SWAP8', intermediates: 0 },
|
|
130
|
+
0x98: { inputs: 10, outputs: 10, name: 'SWAP9', intermediates: 0 },
|
|
131
|
+
0x99: { inputs: 11, outputs: 11, name: 'SWAP10', intermediates: 0 },
|
|
132
|
+
0x9a: { inputs: 12, outputs: 12, name: 'SWAP11', intermediates: 0 },
|
|
133
|
+
0x9b: { inputs: 13, outputs: 13, name: 'SWAP12', intermediates: 0 },
|
|
134
|
+
0x9c: { inputs: 14, outputs: 14, name: 'SWAP13', intermediates: 0 },
|
|
135
|
+
0x9d: { inputs: 15, outputs: 15, name: 'SWAP14', intermediates: 0 },
|
|
136
|
+
0x9e: { inputs: 16, outputs: 16, name: 'SWAP15', intermediates: 0 },
|
|
137
|
+
0x9f: { inputs: 17, outputs: 17, name: 'SWAP16', intermediates: 0 },
|
|
138
|
+
0xa0: { inputs: 2, outputs: 0, name: 'LOG0', intermediates: 0 },
|
|
139
|
+
0xa1: { inputs: 3, outputs: 0, name: 'LOG1', intermediates: 0 },
|
|
140
|
+
0xa2: { inputs: 4, outputs: 0, name: 'LOG2', intermediates: 0 },
|
|
141
|
+
0xa3: { inputs: 5, outputs: 0, name: 'LOG3', intermediates: 0 },
|
|
142
|
+
0xa4: { inputs: 6, outputs: 0, name: 'LOG4', intermediates: 0 },
|
|
143
|
+
0xd0: { inputs: 1, outputs: 1, name: 'DATALOAD', intermediates: 0 },
|
|
144
|
+
0xd1: { inputs: 0, outputs: 1, name: 'DATALOADN', intermediates: 2 },
|
|
145
|
+
0xd2: { inputs: 0, outputs: 1, name: 'DATASIZE', intermediates: 0 },
|
|
146
|
+
0xd3: { inputs: 3, outputs: 0, name: 'DATACOPY', intermediates: 0 },
|
|
147
|
+
0xe0: { inputs: 0, outputs: 0, name: 'RJUMP', intermediates: 2 },
|
|
148
|
+
0xe1: { inputs: 1, outputs: 0, name: 'RJUMPI', intermediates: 2 },
|
|
149
|
+
// NOTE: for RJUMPV the intermediate byte is set to 0, this has to do with the validation algorithm specifics
|
|
150
|
+
// This has to do with the dynamic intermediate size of RJUMPV, which depends upon the table size byte right after RJUMPV
|
|
151
|
+
0xe2: { inputs: 1, outputs: 0, name: 'RJUMPV', intermediates: 0 },
|
|
152
|
+
// CALLF special case for stack validation algorithm: the inputs and outputs MUST stay 0
|
|
153
|
+
// (this is currently the case also in EVM)
|
|
154
|
+
0xe3: { inputs: 0, outputs: 0, name: 'CALLF', intermediates: 2 },
|
|
155
|
+
0xe4: { inputs: 0, outputs: 0, name: 'RETF', intermediates: 0, terminating: true },
|
|
156
|
+
0xe5: { inputs: 0, outputs: 0, name: 'JUMPF', intermediates: 2, terminating: true },
|
|
157
|
+
0xe6: { inputs: 0, outputs: 1, name: 'DUPN', intermediates: 1 },
|
|
158
|
+
0xe7: { inputs: 0, outputs: 0, name: 'SWAPN', intermediates: 1 },
|
|
159
|
+
0xe8: { inputs: 0, outputs: 0, name: 'EXCHANGE', intermediates: 1 },
|
|
160
|
+
0xec: { inputs: 4, outputs: 1, name: 'EOFCREATE', intermediates: 1 },
|
|
161
|
+
0xee: { inputs: 2, outputs: 0, name: 'RETURNCONTRACT', intermediates: 1, terminating: true },
|
|
162
|
+
0xf3: { inputs: 2, outputs: 0, name: 'RETURN', intermediates: 0, terminating: true },
|
|
163
|
+
0xf7: { inputs: 1, outputs: 1, name: 'RETURNDATALOAD', intermediates: 0 },
|
|
164
|
+
0xf8: { inputs: 4, outputs: 1, name: 'EXTCALL', intermediates: 0 },
|
|
165
|
+
0xf9: { inputs: 3, outputs: 1, name: 'EXTDELEGATECALL', intermediates: 0 },
|
|
166
|
+
0xfb: { inputs: 3, outputs: 1, name: 'EXTSTATICCALL', intermediates: 0 },
|
|
167
|
+
0xfd: { inputs: 2, outputs: 0, name: 'REVERT', intermediates: 0, terminating: true },
|
|
168
|
+
0xfe: { inputs: 0, outputs: 0, name: 'INVALID', intermediates: 0, terminating: true },
|
|
169
|
+
}
|
package/src/eof/util.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { equalsBytes } from '@feelyourprotocol/util'
|
|
2
|
+
import { keccak_256 } from '@noble/hashes/sha3.js'
|
|
3
|
+
|
|
4
|
+
import { FORMAT, MAGIC } from './constants.ts'
|
|
5
|
+
|
|
6
|
+
export const EOFBYTES = new Uint8Array([FORMAT, MAGIC])
|
|
7
|
+
export const EOFHASH = keccak_256(EOFBYTES)
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Returns `true` if `code` is an EOF contract, otherwise `false`
|
|
11
|
+
* @param code Code to test
|
|
12
|
+
*/
|
|
13
|
+
export function isEOF(code: Uint8Array): boolean {
|
|
14
|
+
const check = code.subarray(0, EOFBYTES.length)
|
|
15
|
+
return equalsBytes(EOFBYTES, check)
|
|
16
|
+
}
|