@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,436 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ContainerSectionType = void 0;
|
|
4
|
+
exports.verifyCode = verifyCode;
|
|
5
|
+
const errors_ts_1 = require("./errors.js");
|
|
6
|
+
const stackDelta_ts_1 = require("./stackDelta.js");
|
|
7
|
+
exports.ContainerSectionType = {
|
|
8
|
+
InitCode: 'initCode', // Targeted by EOFCreate
|
|
9
|
+
DeploymentCode: 'deploymentCode', // Targeted by RETURNCONTRACT
|
|
10
|
+
RuntimeCode: 'runtimeCode', // "Default" runtime code
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* This method validates an EOF container deeply. It will validate the opcodes, validate the stack, and performs
|
|
14
|
+
* various checks such as checking for forbidden opcodes in certain modes, jumps to invalid places, etc.
|
|
15
|
+
* For more information, see "Code validation" of https://github.com/ipsilon/eof/blob/main/spec/eof.md
|
|
16
|
+
* This is a compilation of all the extra validation rules introduced by the various EIPs
|
|
17
|
+
* In particular, the stack validation EIP https://eips.ethereum.org/EIPS/eip-5450 is a big part here
|
|
18
|
+
* @param container EOFContainer to verify
|
|
19
|
+
* @param evm The EVM to run in (pulls opcodes from here)
|
|
20
|
+
* @param mode The validation mode to run in
|
|
21
|
+
* @returns Returns a Map which marks what ContainerSectionType each container is
|
|
22
|
+
* NOTE: this should likely not be a map, since a container section can only be of a single type, not multiple
|
|
23
|
+
*/
|
|
24
|
+
function verifyCode(container, evm, mode = exports.ContainerSectionType.RuntimeCode) {
|
|
25
|
+
return validateOpcodes(container, evm, mode);
|
|
26
|
+
}
|
|
27
|
+
// Helper methods to read Int16s / Uint16s
|
|
28
|
+
function readInt16(code, start) {
|
|
29
|
+
return new DataView(code.buffer).getInt16(start);
|
|
30
|
+
}
|
|
31
|
+
function readUint16(code, start) {
|
|
32
|
+
return new DataView(code.buffer).getUint16(start);
|
|
33
|
+
}
|
|
34
|
+
function validateOpcodes(container, evm, mode = exports.ContainerSectionType.RuntimeCode) {
|
|
35
|
+
// Track the type of the container targets
|
|
36
|
+
// Should at the end of the analysis have all the containers
|
|
37
|
+
const containerTypeMap = new Map();
|
|
38
|
+
// TODO (?) -> stackDelta currently only has active EOF opcodes, can use it directly (?)
|
|
39
|
+
// (so no need to generate the valid opcodeNumbers)
|
|
40
|
+
// Validate each code section
|
|
41
|
+
const opcodes = evm.getActiveOpcodes();
|
|
42
|
+
const opcodeNumbers = new Set();
|
|
43
|
+
for (const [key] of opcodes) {
|
|
44
|
+
opcodeNumbers.add(key);
|
|
45
|
+
}
|
|
46
|
+
// Add INVALID as valid
|
|
47
|
+
opcodeNumbers.add(0xfe);
|
|
48
|
+
// Remove CODESIZE, CODECOPY, EXTCODESIZE, EXTCODECOPY, EXTCODEHASH, GAS
|
|
49
|
+
opcodeNumbers.delete(0x38);
|
|
50
|
+
opcodeNumbers.delete(0x39);
|
|
51
|
+
opcodeNumbers.delete(0x5a);
|
|
52
|
+
opcodeNumbers.delete(0x3b);
|
|
53
|
+
opcodeNumbers.delete(0x3c);
|
|
54
|
+
opcodeNumbers.delete(0x3f);
|
|
55
|
+
// Remove CALLCODE and SELFDESTRUCT
|
|
56
|
+
opcodeNumbers.delete(0xf2);
|
|
57
|
+
opcodeNumbers.delete(0xff);
|
|
58
|
+
// TODO omnibus https://github.com/ipsilon/eof/blob/main/spec/eof.md states
|
|
59
|
+
// JUMP / JUMPI / PC / CREATE / CREATE2 also banned
|
|
60
|
+
// This is not in the EIPs yet
|
|
61
|
+
// Add these opcodes here
|
|
62
|
+
opcodeNumbers.delete(0x56); // JUMP
|
|
63
|
+
opcodeNumbers.delete(0x57); // JUMPI
|
|
64
|
+
opcodeNumbers.delete(0x58); // PC
|
|
65
|
+
opcodeNumbers.delete(0xf0); // CREATE
|
|
66
|
+
opcodeNumbers.delete(0xf5); // CREATE2
|
|
67
|
+
// Note: Name might be misleading since this is the list of opcodes which are OK as final opcodes in a code section
|
|
68
|
+
// TODO if using stackDelta for EOF it is possible to add a "termination" boolean for the opcode to mark it as terminating
|
|
69
|
+
// (so no need to generate this set here)
|
|
70
|
+
const terminatingOpcodes = new Set();
|
|
71
|
+
terminatingOpcodes.add(0x00); // STOP
|
|
72
|
+
terminatingOpcodes.add(0xf3); // RETURN
|
|
73
|
+
terminatingOpcodes.add(0xfd); // REVERT
|
|
74
|
+
terminatingOpcodes.add(0xfe); // INVALID
|
|
75
|
+
terminatingOpcodes.add(0xee); // RETURNCONTRACT
|
|
76
|
+
terminatingOpcodes.add(0xe4); // RETF
|
|
77
|
+
terminatingOpcodes.add(0xe5); // JUMPF
|
|
78
|
+
terminatingOpcodes.add(0xe0); // RJUMPing back into code section is OK
|
|
79
|
+
for (const opcode of terminatingOpcodes) {
|
|
80
|
+
if (!opcodeNumbers.has(opcode)) {
|
|
81
|
+
terminatingOpcodes.delete(opcode);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
const validJumps = new Set();
|
|
85
|
+
// Add all reachable code sections
|
|
86
|
+
const reachableSections = {};
|
|
87
|
+
let codeSection = -1;
|
|
88
|
+
for (const code of container.body.codeSections) {
|
|
89
|
+
// Track the intermediate bytes
|
|
90
|
+
const intermediateBytes = new Set();
|
|
91
|
+
// Track the jump locations (for forward jumps it is unknown at the first pass if the byte is intermediate)
|
|
92
|
+
const jumpLocations = new Set();
|
|
93
|
+
function addJump(location) {
|
|
94
|
+
if (intermediateBytes.has(location)) {
|
|
95
|
+
// When trying to JUMP into an intermediate byte: this is invalid
|
|
96
|
+
(0, errors_ts_1.validationError)(errors_ts_1.EOFErrorMessage.INVALID_RJUMP);
|
|
97
|
+
}
|
|
98
|
+
jumpLocations.add(location);
|
|
99
|
+
}
|
|
100
|
+
function addIntermediate(location) {
|
|
101
|
+
if (jumpLocations.has(location)) {
|
|
102
|
+
// When trying to add an intermediate to a location already JUMPed to: this is invalid
|
|
103
|
+
(0, errors_ts_1.validationError)(errors_ts_1.EOFErrorMessage.INVALID_RJUMP);
|
|
104
|
+
}
|
|
105
|
+
intermediateBytes.add(location);
|
|
106
|
+
}
|
|
107
|
+
codeSection++;
|
|
108
|
+
reachableSections[codeSection] = new Set();
|
|
109
|
+
// Section is marked as "non-returning": it does never "return" to another code section
|
|
110
|
+
// it rather exits the current EVM call frame
|
|
111
|
+
const nonReturningFunction = container.body.typeSections[codeSection].outputs === 0x80;
|
|
112
|
+
// Boolean flag to mark if this section has a returning opcode:
|
|
113
|
+
// RETF
|
|
114
|
+
// Or JUMPF into a returning section
|
|
115
|
+
// Each returning section should contain a returning opcode
|
|
116
|
+
let sectionHasReturningOpcode = false;
|
|
117
|
+
// Tracking set of reachable opcodes
|
|
118
|
+
const reachableOpcodes = new Set();
|
|
119
|
+
reachableOpcodes.add(0);
|
|
120
|
+
// Validate that each opcode is defined
|
|
121
|
+
let ptr = 0;
|
|
122
|
+
let lastOpcode = 0; // Note: code sections cannot be empty, so this number will always be set
|
|
123
|
+
// Implement the EIP 5450 stack validation algorithm
|
|
124
|
+
const inputs = container.body.typeSections[codeSection].inputs;
|
|
125
|
+
let maxStackHeight = inputs;
|
|
126
|
+
// These arrays track the min/max stack height **before** executing the instruction
|
|
127
|
+
const stackHeightMin = [inputs];
|
|
128
|
+
const stackHeightMax = [inputs];
|
|
129
|
+
// Loop over the entire code section and validate various rules
|
|
130
|
+
// For (most) validation rules, see https://github.com/ipsilon/eof/blob/main/spec/eof.md
|
|
131
|
+
// For all validation rules per opcode, find the corresponding EIP, the rules are there
|
|
132
|
+
while (ptr < code.length) {
|
|
133
|
+
// Tracks the successor opcodes of this opcode (for stack purposes)
|
|
134
|
+
const successorSet = new Set();
|
|
135
|
+
// ReachableOpcodes: this can likely be deleted after implementing the 5450 algorithm
|
|
136
|
+
if (!reachableOpcodes.has(ptr)) {
|
|
137
|
+
(0, errors_ts_1.validationError)(errors_ts_1.EOFErrorMessage.UNREACHABLE_CODE);
|
|
138
|
+
}
|
|
139
|
+
if (stackHeightMin[ptr] === undefined || stackHeightMax[ptr] === undefined) {
|
|
140
|
+
// Code is either unreachable or only reachable via a backwards jump
|
|
141
|
+
(0, errors_ts_1.validationError)(errors_ts_1.EOFErrorMessage.UNREACHABLE_CODE);
|
|
142
|
+
}
|
|
143
|
+
validJumps.add(ptr);
|
|
144
|
+
const opcode = code[ptr];
|
|
145
|
+
const minStackCurrent = stackHeightMin[ptr];
|
|
146
|
+
const maxStackCurrent = stackHeightMax[ptr];
|
|
147
|
+
const opcodeInputs = stackDelta_ts_1.stackDelta[opcode].inputs;
|
|
148
|
+
const opcodeOutputs = stackDelta_ts_1.stackDelta[opcode].outputs;
|
|
149
|
+
if (minStackCurrent - opcodeInputs < 0) {
|
|
150
|
+
(0, errors_ts_1.validationError)(errors_ts_1.EOFErrorMessage.STACK_UNDERFLOW);
|
|
151
|
+
}
|
|
152
|
+
const delta = opcodeOutputs - opcodeInputs;
|
|
153
|
+
let minStackNext = minStackCurrent + delta;
|
|
154
|
+
let maxStackNext = maxStackCurrent + delta;
|
|
155
|
+
if (maxStackNext > 1024) {
|
|
156
|
+
// TODO verify if 1023 or 1024 is the right constant
|
|
157
|
+
(0, errors_ts_1.validationError)(errors_ts_1.EOFErrorMessage.STACK_OVERFLOW);
|
|
158
|
+
}
|
|
159
|
+
if (nonReturningFunction && opcode === 0xe4) {
|
|
160
|
+
(0, errors_ts_1.validationError)(errors_ts_1.EOFErrorMessage.INVALID_RETURNING_SECTION);
|
|
161
|
+
}
|
|
162
|
+
lastOpcode = opcode;
|
|
163
|
+
if (!opcodeNumbers.has(opcode)) {
|
|
164
|
+
(0, errors_ts_1.validationError)(errors_ts_1.EOFErrorMessage.INVALID_OPCODE);
|
|
165
|
+
}
|
|
166
|
+
if (opcode === 0xe0 || opcode === 0xe1) {
|
|
167
|
+
// RJUMP / RJUMPI
|
|
168
|
+
const target = readInt16(code, ptr + 1) + ptr + 3;
|
|
169
|
+
if (target < 0 || target >= code.length) {
|
|
170
|
+
(0, errors_ts_1.validationError)(errors_ts_1.EOFErrorMessage.INVALID_RJUMP);
|
|
171
|
+
}
|
|
172
|
+
successorSet.add(target);
|
|
173
|
+
addJump(target);
|
|
174
|
+
reachableOpcodes.add(target);
|
|
175
|
+
if (opcode === 0xe0) {
|
|
176
|
+
// For RJUMP check that the instruction after RJUMP is reachable
|
|
177
|
+
// If not the case then it is not yet targeted by a forward jump
|
|
178
|
+
// and hence violates the spec
|
|
179
|
+
if (!reachableOpcodes.has(ptr + 3) && ptr + 3 < code.length) {
|
|
180
|
+
// Note: the final condition above ensures that the bytes after ptr are there
|
|
181
|
+
// This is an edge case, if the container ends with RJUMP (which is valid)
|
|
182
|
+
(0, errors_ts_1.validationError)(errors_ts_1.EOFErrorMessage.UNREACHABLE_CODE);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
else if (opcode === 0xe2) {
|
|
187
|
+
// RJUMPV
|
|
188
|
+
const tableSize = code[ptr + 1] + 1;
|
|
189
|
+
if (tableSize === undefined) {
|
|
190
|
+
(0, errors_ts_1.validationError)(errors_ts_1.EOFErrorMessage.OPCODE_INTERMEDIATES_OOB);
|
|
191
|
+
}
|
|
192
|
+
else if (tableSize === 0) {
|
|
193
|
+
(0, errors_ts_1.validationError)(errors_ts_1.EOFErrorMessage.RJUMPV_TABLE_SIZE0);
|
|
194
|
+
}
|
|
195
|
+
if (ptr + tableSize * 2 + 2 >= code.length) {
|
|
196
|
+
// Fall-through case
|
|
197
|
+
(0, errors_ts_1.validationError)(errors_ts_1.EOFErrorMessage.OPCODE_INTERMEDIATES_OOB);
|
|
198
|
+
}
|
|
199
|
+
const newPc = ptr + 2 + tableSize * 2;
|
|
200
|
+
for (let i = 0; i < tableSize; i++) {
|
|
201
|
+
const newPtr = ptr + 2 + i * 2;
|
|
202
|
+
// Add the table bytes to intermediates
|
|
203
|
+
addIntermediate(newPtr);
|
|
204
|
+
addIntermediate(newPtr + 1);
|
|
205
|
+
const target = readInt16(code, newPtr) + newPc;
|
|
206
|
+
if (target < 0 || target >= code.length) {
|
|
207
|
+
(0, errors_ts_1.validationError)(errors_ts_1.EOFErrorMessage.OPCODE_INTERMEDIATES_OOB);
|
|
208
|
+
}
|
|
209
|
+
successorSet.add(target);
|
|
210
|
+
addJump(target);
|
|
211
|
+
reachableOpcodes.add(target);
|
|
212
|
+
}
|
|
213
|
+
// Special case for RJUMPV: move ptr over the table (the immediate starting byte will be added later)
|
|
214
|
+
// In this special case, add the immediate starting byte
|
|
215
|
+
addIntermediate(ptr + 1);
|
|
216
|
+
ptr += 2 * tableSize + 1;
|
|
217
|
+
}
|
|
218
|
+
else if (opcode === 0xe3 || opcode === 0xe5) {
|
|
219
|
+
// CALLF / JUMPF
|
|
220
|
+
const target = readUint16(code, ptr + 1);
|
|
221
|
+
reachableSections[codeSection].add(target);
|
|
222
|
+
if (target >= container.header.codeSizes.length) {
|
|
223
|
+
(0, errors_ts_1.validationError)(errors_ts_1.EOFErrorMessage.INVALID_CALL_TARGET);
|
|
224
|
+
}
|
|
225
|
+
if (opcode === 0xe3) {
|
|
226
|
+
// CALLF
|
|
227
|
+
const targetOutputs = container.body.typeSections[target].outputs;
|
|
228
|
+
const targetInputs = container.body.typeSections[target].inputs;
|
|
229
|
+
if (targetOutputs === 0x80) {
|
|
230
|
+
// CALLF points to non-returning function which is not allowed
|
|
231
|
+
(0, errors_ts_1.validationError)(errors_ts_1.EOFErrorMessage.INVALID_CALLF_RETURNING);
|
|
232
|
+
}
|
|
233
|
+
if (minStackCurrent < targetInputs) {
|
|
234
|
+
(0, errors_ts_1.validationError)(errors_ts_1.EOFErrorMessage.STACK_UNDERFLOW);
|
|
235
|
+
}
|
|
236
|
+
if (maxStackCurrent + container.body.typeSections[target].maxStackHeight - targetInputs >
|
|
237
|
+
1024) {
|
|
238
|
+
(0, errors_ts_1.validationError)(errors_ts_1.EOFErrorMessage.STACK_OVERFLOW);
|
|
239
|
+
}
|
|
240
|
+
minStackNext += targetOutputs - targetInputs;
|
|
241
|
+
maxStackNext += targetOutputs - targetInputs;
|
|
242
|
+
}
|
|
243
|
+
else {
|
|
244
|
+
// JUMPF
|
|
245
|
+
const currentOutputs = container.body.typeSections[codeSection].outputs;
|
|
246
|
+
const targetOutputs = container.body.typeSections[target].outputs;
|
|
247
|
+
const targetInputs = container.body.typeSections[target].inputs;
|
|
248
|
+
const targetNonReturning = targetOutputs === 0x80;
|
|
249
|
+
if (targetOutputs > currentOutputs && !targetNonReturning) {
|
|
250
|
+
// Spec rule:
|
|
251
|
+
// JUMPF operand must point to a code section with equal or fewer number of outputs as
|
|
252
|
+
// the section in which it resides, or to a section with 0x80 as outputs (non-returning)
|
|
253
|
+
(0, errors_ts_1.validationError)(errors_ts_1.EOFErrorMessage.INVALID_JUMPF);
|
|
254
|
+
}
|
|
255
|
+
if (nonReturningFunction && targetOutputs <= 0x7f) {
|
|
256
|
+
// Current function is returning, but target is not, cannot jump into this
|
|
257
|
+
(0, errors_ts_1.validationError)(errors_ts_1.EOFErrorMessage.INVALID_RETURNING_SECTION);
|
|
258
|
+
}
|
|
259
|
+
if (targetNonReturning) {
|
|
260
|
+
// Target is returning
|
|
261
|
+
if (minStackCurrent < targetInputs) {
|
|
262
|
+
(0, errors_ts_1.validationError)(errors_ts_1.EOFErrorMessage.STACK_UNDERFLOW);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
else {
|
|
266
|
+
// Target is returning
|
|
267
|
+
const expectedStack = currentOutputs + targetInputs - targetOutputs;
|
|
268
|
+
if (!(minStackCurrent === maxStackCurrent && maxStackCurrent === expectedStack)) {
|
|
269
|
+
(0, errors_ts_1.validationError)(errors_ts_1.EOFErrorMessage.INVALID_STACK_HEIGHT);
|
|
270
|
+
}
|
|
271
|
+
sectionHasReturningOpcode = true;
|
|
272
|
+
}
|
|
273
|
+
if (maxStackCurrent + container.body.typeSections[target].maxStackHeight - targetInputs >
|
|
274
|
+
1024) {
|
|
275
|
+
(0, errors_ts_1.validationError)(errors_ts_1.EOFErrorMessage.STACK_OVERFLOW);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
else if (opcode === 0xe4) {
|
|
280
|
+
// RETF
|
|
281
|
+
// Stack height must match the outputs of current code section
|
|
282
|
+
const outputs = container.body.typeSections[codeSection].outputs;
|
|
283
|
+
if (!(minStackCurrent === maxStackCurrent && maxStackCurrent === outputs)) {
|
|
284
|
+
(0, errors_ts_1.validationError)(errors_ts_1.EOFErrorMessage.INVALID_STACK_HEIGHT);
|
|
285
|
+
}
|
|
286
|
+
sectionHasReturningOpcode = true;
|
|
287
|
+
}
|
|
288
|
+
else if (opcode === 0xe6) {
|
|
289
|
+
// DUPN
|
|
290
|
+
const toDup = code[ptr + 1];
|
|
291
|
+
if (toDup + 1 > minStackCurrent) {
|
|
292
|
+
(0, errors_ts_1.validationError)(errors_ts_1.EOFErrorMessage.STACK_UNDERFLOW);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
else if (opcode === 0xe7) {
|
|
296
|
+
// SWAPN
|
|
297
|
+
const toSwap = code[ptr + 1];
|
|
298
|
+
if (toSwap + 2 > minStackCurrent) {
|
|
299
|
+
(0, errors_ts_1.validationError)(errors_ts_1.EOFErrorMessage.STACK_UNDERFLOW);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
else if (opcode === 0xe8) {
|
|
303
|
+
// EXCHANGE
|
|
304
|
+
const exchangeRaw = code[ptr + 1];
|
|
305
|
+
const n = (exchangeRaw >> 4) + 1;
|
|
306
|
+
const m = (exchangeRaw & 0x0f) + 1;
|
|
307
|
+
if (n + m + 1 > minStackCurrent) {
|
|
308
|
+
(0, errors_ts_1.validationError)(errors_ts_1.EOFErrorMessage.STACK_UNDERFLOW);
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
else if (opcode === 0xec) {
|
|
312
|
+
// EOFCREATE
|
|
313
|
+
const target = code[ptr + 1];
|
|
314
|
+
if (target >= container.header.containerSizes.length) {
|
|
315
|
+
(0, errors_ts_1.validationError)(errors_ts_1.EOFErrorMessage.INVALID_EOF_CREATE_TARGET);
|
|
316
|
+
}
|
|
317
|
+
if (containerTypeMap.has(target)) {
|
|
318
|
+
if (containerTypeMap.get(target) !== exports.ContainerSectionType.InitCode) {
|
|
319
|
+
(0, errors_ts_1.validationError)(errors_ts_1.EOFErrorMessage.CONTAINER_DOUBLE_TYPE);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
containerTypeMap.set(target, exports.ContainerSectionType.InitCode);
|
|
323
|
+
}
|
|
324
|
+
else if (opcode === 0xee) {
|
|
325
|
+
// RETURNCONTRACT
|
|
326
|
+
if (mode !== exports.ContainerSectionType.InitCode) {
|
|
327
|
+
(0, errors_ts_1.validationError)(errors_ts_1.EOFErrorMessage.CONTAINER_TYPE_ERROR);
|
|
328
|
+
}
|
|
329
|
+
const target = code[ptr + 1];
|
|
330
|
+
if (target >= container.header.containerSizes.length) {
|
|
331
|
+
(0, errors_ts_1.validationError)(errors_ts_1.EOFErrorMessage.INVALID_RETURN_CONTRACT_TARGET);
|
|
332
|
+
}
|
|
333
|
+
if (containerTypeMap.has(target)) {
|
|
334
|
+
if (containerTypeMap.get(target) !== exports.ContainerSectionType.DeploymentCode) {
|
|
335
|
+
(0, errors_ts_1.validationError)(errors_ts_1.EOFErrorMessage.CONTAINER_DOUBLE_TYPE);
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
containerTypeMap.set(target, exports.ContainerSectionType.DeploymentCode);
|
|
339
|
+
}
|
|
340
|
+
else if (opcode === 0xd1) {
|
|
341
|
+
// DATALOADN
|
|
342
|
+
const dataTarget = readUint16(code, ptr + 1);
|
|
343
|
+
const endOfSlice = dataTarget + 32;
|
|
344
|
+
if (container.header.dataSize < endOfSlice) {
|
|
345
|
+
(0, errors_ts_1.validationError)(errors_ts_1.EOFErrorMessage.DATALOADN_OOB);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
else if (opcode === 0x00 || opcode === 0xf3) {
|
|
349
|
+
// STOP / RETURN
|
|
350
|
+
if (mode === exports.ContainerSectionType.InitCode) {
|
|
351
|
+
(0, errors_ts_1.validationError)(errors_ts_1.EOFErrorMessage.CONTAINER_TYPE_ERROR);
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
// Move ptr forward over any intermediates (if any)
|
|
355
|
+
// Note: for EOF this stackDelta is guaranteed to exist
|
|
356
|
+
const intermediates = stackDelta_ts_1.stackDelta[opcode].intermediates;
|
|
357
|
+
if (intermediates > 0) {
|
|
358
|
+
for (let i = 1; i <= intermediates; i++) {
|
|
359
|
+
addIntermediate(ptr + i);
|
|
360
|
+
}
|
|
361
|
+
ptr += intermediates; // If the opcode has any intermediates, jump over it
|
|
362
|
+
}
|
|
363
|
+
if (ptr >= code.length) {
|
|
364
|
+
(0, errors_ts_1.validationError)(errors_ts_1.EOFErrorMessage.OPCODE_INTERMEDIATES_OOB);
|
|
365
|
+
}
|
|
366
|
+
ptr++; // Move to next opcode
|
|
367
|
+
if (stackDelta_ts_1.stackDelta[opcode].terminating === undefined) {
|
|
368
|
+
// If the opcode is not terminating we can add the next opcode to the reachable opcodes
|
|
369
|
+
// It can be reached by sequential instruction flow
|
|
370
|
+
reachableOpcodes.add(ptr);
|
|
371
|
+
// Add next opcode to successorSet
|
|
372
|
+
// NOTE: these are all opcodes except RJUMP
|
|
373
|
+
if (opcode !== 0xe0) {
|
|
374
|
+
successorSet.add(ptr);
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
// TODO here validate stack / reachability and stack overflow check
|
|
378
|
+
for (const successor of successorSet) {
|
|
379
|
+
if (successor < ptr) {
|
|
380
|
+
// Reached via backwards jump
|
|
381
|
+
if (stackHeightMin[successor] !== minStackNext ||
|
|
382
|
+
stackHeightMax[successor] !== maxStackNext) {
|
|
383
|
+
(0, errors_ts_1.validationError)(errors_ts_1.EOFErrorMessage.UNSTABLE_STACK);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
if (stackHeightMax[successor] === undefined) {
|
|
387
|
+
// Target is seen for first time
|
|
388
|
+
stackHeightMin[successor] = minStackNext;
|
|
389
|
+
stackHeightMax[successor] = maxStackNext;
|
|
390
|
+
}
|
|
391
|
+
else {
|
|
392
|
+
stackHeightMin[successor] = Math.min(stackHeightMin[successor], minStackNext);
|
|
393
|
+
stackHeightMax[successor] = Math.max(stackHeightMax[successor], maxStackNext);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
maxStackHeight = Math.max(maxStackNext, maxStackHeight);
|
|
397
|
+
}
|
|
398
|
+
// Validate that the final opcode terminates
|
|
399
|
+
if (!terminatingOpcodes.has(lastOpcode)) {
|
|
400
|
+
(0, errors_ts_1.validationError)(errors_ts_1.EOFErrorMessage.INVALID_TERMINATOR);
|
|
401
|
+
}
|
|
402
|
+
if (container.body.typeSections[codeSection].maxStackHeight !== maxStackHeight) {
|
|
403
|
+
(0, errors_ts_1.validationError)(errors_ts_1.EOFErrorMessage.MAX_STACK_HEIGHT_VIOLATION);
|
|
404
|
+
}
|
|
405
|
+
if (maxStackHeight > 1024) {
|
|
406
|
+
// TODO verify if 1023 or 1024 is the right constant
|
|
407
|
+
(0, errors_ts_1.validationError)(errors_ts_1.EOFErrorMessage.MAX_STACK_HEIGHT_LIMIT);
|
|
408
|
+
}
|
|
409
|
+
// Validate that if the section is returning, there is a returning opcode
|
|
410
|
+
if (!sectionHasReturningOpcode && !nonReturningFunction) {
|
|
411
|
+
(0, errors_ts_1.validationError)(errors_ts_1.EOFErrorMessage.RETURNING_NO_RETURN);
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
// Verify that each code section can be reached from code section 0
|
|
415
|
+
const sectionAccumulator = new Set();
|
|
416
|
+
sectionAccumulator.add(0); // 0 is always reachable
|
|
417
|
+
const toCheck = [0];
|
|
418
|
+
while (toCheck.length > 0) {
|
|
419
|
+
const checkArray = reachableSections[toCheck.pop()];
|
|
420
|
+
for (const checkSection of checkArray) {
|
|
421
|
+
if (!sectionAccumulator.has(checkSection)) {
|
|
422
|
+
// Only check the reachable section if
|
|
423
|
+
sectionAccumulator.add(checkSection);
|
|
424
|
+
toCheck.push(checkSection);
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
if (sectionAccumulator.size !== container.header.codeSizes.length) {
|
|
429
|
+
(0, errors_ts_1.validationError)(errors_ts_1.EOFErrorMessage.UNREACHABLE_CODE_SECTIONS);
|
|
430
|
+
}
|
|
431
|
+
if (containerTypeMap.size !== container.header.containerSizes.length) {
|
|
432
|
+
(0, errors_ts_1.validationError)(errors_ts_1.EOFErrorMessage.UNREACHABLE_CONTAINER_SECTIONS);
|
|
433
|
+
}
|
|
434
|
+
return containerTypeMap;
|
|
435
|
+
}
|
|
436
|
+
//# sourceMappingURL=verify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../src/eof/verify.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export type EVMErrorType = (typeof EVMErrorMessage)[keyof typeof EVMErrorMessage];
|
|
2
|
+
export declare const EVMErrorTypeString = "EVMError";
|
|
3
|
+
declare const EVMErrorMessage: {
|
|
4
|
+
readonly OUT_OF_GAS: "out of gas";
|
|
5
|
+
readonly CODESTORE_OUT_OF_GAS: "code store out of gas";
|
|
6
|
+
readonly CODESIZE_EXCEEDS_MAXIMUM: "code size to deposit exceeds maximum code size";
|
|
7
|
+
readonly STACK_UNDERFLOW: "stack underflow";
|
|
8
|
+
readonly STACK_OVERFLOW: "stack overflow";
|
|
9
|
+
readonly INVALID_JUMP: "invalid JUMP";
|
|
10
|
+
readonly INVALID_OPCODE: "invalid opcode";
|
|
11
|
+
readonly OUT_OF_RANGE: "value out of range";
|
|
12
|
+
readonly REVERT: "revert";
|
|
13
|
+
readonly STATIC_STATE_CHANGE: "static state change";
|
|
14
|
+
readonly INTERNAL_ERROR: "internal error";
|
|
15
|
+
readonly CREATE_COLLISION: "create collision";
|
|
16
|
+
readonly STOP: "stop";
|
|
17
|
+
readonly REFUND_EXHAUSTED: "refund exhausted";
|
|
18
|
+
readonly VALUE_OVERFLOW: "value overflow";
|
|
19
|
+
readonly INSUFFICIENT_BALANCE: "insufficient balance";
|
|
20
|
+
readonly INVALID_BYTECODE_RESULT: "invalid bytecode deployed";
|
|
21
|
+
readonly INITCODE_SIZE_VIOLATION: "initcode exceeds max initcode size";
|
|
22
|
+
readonly INVALID_INPUT_LENGTH: "invalid input length";
|
|
23
|
+
readonly INVALID_EOF_FORMAT: "invalid EOF format";
|
|
24
|
+
readonly BLS_12_381_INVALID_INPUT_LENGTH: "invalid input length";
|
|
25
|
+
readonly BLS_12_381_POINT_NOT_ON_CURVE: "point not on curve";
|
|
26
|
+
readonly BLS_12_381_INPUT_EMPTY: "input is empty";
|
|
27
|
+
readonly BLS_12_381_FP_NOT_IN_FIELD: "fp point not in field";
|
|
28
|
+
readonly BN254_FP_NOT_IN_FIELD: "fp point not in field";
|
|
29
|
+
readonly INVALID_COMMITMENT: "kzg commitment does not match versioned hash";
|
|
30
|
+
readonly INVALID_INPUTS: "kzg inputs invalid";
|
|
31
|
+
readonly INVALID_PROOF: "kzg proof invalid";
|
|
32
|
+
};
|
|
33
|
+
export declare class EVMError {
|
|
34
|
+
error: EVMErrorType;
|
|
35
|
+
errorType: string;
|
|
36
|
+
static errorMessages: Record<keyof typeof EVMErrorMessage, EVMErrorType>;
|
|
37
|
+
constructor(error: EVMErrorType);
|
|
38
|
+
}
|
|
39
|
+
export {};
|
|
40
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,OAAO,eAAe,CAAC,CAAA;AAEjF,eAAO,MAAM,kBAAkB,aAAa,CAAA;AAE5C,QAAA,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BX,CAAA;AAEV,qBAAa,QAAQ;IACnB,KAAK,EAAE,YAAY,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,OAAO,eAAe,EAAE,YAAY,CAAC,CAAkB;gBAE9E,KAAK,EAAE,YAAY;CAIhC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EVMError = exports.EVMErrorTypeString = void 0;
|
|
4
|
+
exports.EVMErrorTypeString = 'EVMError';
|
|
5
|
+
const EVMErrorMessage = {
|
|
6
|
+
OUT_OF_GAS: 'out of gas',
|
|
7
|
+
CODESTORE_OUT_OF_GAS: 'code store out of gas',
|
|
8
|
+
CODESIZE_EXCEEDS_MAXIMUM: 'code size to deposit exceeds maximum code size',
|
|
9
|
+
STACK_UNDERFLOW: 'stack underflow',
|
|
10
|
+
STACK_OVERFLOW: 'stack overflow',
|
|
11
|
+
INVALID_JUMP: 'invalid JUMP',
|
|
12
|
+
INVALID_OPCODE: 'invalid opcode',
|
|
13
|
+
OUT_OF_RANGE: 'value out of range',
|
|
14
|
+
REVERT: 'revert',
|
|
15
|
+
STATIC_STATE_CHANGE: 'static state change',
|
|
16
|
+
INTERNAL_ERROR: 'internal error',
|
|
17
|
+
CREATE_COLLISION: 'create collision',
|
|
18
|
+
STOP: 'stop',
|
|
19
|
+
REFUND_EXHAUSTED: 'refund exhausted',
|
|
20
|
+
VALUE_OVERFLOW: 'value overflow',
|
|
21
|
+
INSUFFICIENT_BALANCE: 'insufficient balance',
|
|
22
|
+
INVALID_BYTECODE_RESULT: 'invalid bytecode deployed',
|
|
23
|
+
INITCODE_SIZE_VIOLATION: 'initcode exceeds max initcode size',
|
|
24
|
+
INVALID_INPUT_LENGTH: 'invalid input length',
|
|
25
|
+
INVALID_EOF_FORMAT: 'invalid EOF format',
|
|
26
|
+
BLS_12_381_INVALID_INPUT_LENGTH: 'invalid input length',
|
|
27
|
+
BLS_12_381_POINT_NOT_ON_CURVE: 'point not on curve',
|
|
28
|
+
BLS_12_381_INPUT_EMPTY: 'input is empty',
|
|
29
|
+
BLS_12_381_FP_NOT_IN_FIELD: 'fp point not in field',
|
|
30
|
+
BN254_FP_NOT_IN_FIELD: 'fp point not in field',
|
|
31
|
+
INVALID_COMMITMENT: 'kzg commitment does not match versioned hash',
|
|
32
|
+
INVALID_INPUTS: 'kzg inputs invalid',
|
|
33
|
+
INVALID_PROOF: 'kzg proof invalid',
|
|
34
|
+
};
|
|
35
|
+
class EVMError {
|
|
36
|
+
constructor(error) {
|
|
37
|
+
this.error = error;
|
|
38
|
+
this.errorType = exports.EVMErrorTypeString;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
exports.EVMError = EVMError;
|
|
42
|
+
EVMError.errorMessages = EVMErrorMessage;
|
|
43
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":";;;AAEa,QAAA,kBAAkB,GAAG,UAAU,CAAA;AAE5C,MAAM,eAAe,GAAG;IACtB,UAAU,EAAE,YAAY;IACxB,oBAAoB,EAAE,uBAAuB;IAC7C,wBAAwB,EAAE,gDAAgD;IAC1E,eAAe,EAAE,iBAAiB;IAClC,cAAc,EAAE,gBAAgB;IAChC,YAAY,EAAE,cAAc;IAC5B,cAAc,EAAE,gBAAgB;IAChC,YAAY,EAAE,oBAAoB;IAClC,MAAM,EAAE,QAAQ;IAChB,mBAAmB,EAAE,qBAAqB;IAC1C,cAAc,EAAE,gBAAgB;IAChC,gBAAgB,EAAE,kBAAkB;IACpC,IAAI,EAAE,MAAM;IACZ,gBAAgB,EAAE,kBAAkB;IACpC,cAAc,EAAE,gBAAgB;IAChC,oBAAoB,EAAE,sBAAsB;IAC5C,uBAAuB,EAAE,2BAA2B;IACpD,uBAAuB,EAAE,oCAAoC;IAC7D,oBAAoB,EAAE,sBAAsB;IAC5C,kBAAkB,EAAE,oBAAoB;IACxC,+BAA+B,EAAE,sBAAsB;IACvD,6BAA6B,EAAE,oBAAoB;IACnD,sBAAsB,EAAE,gBAAgB;IACxC,0BAA0B,EAAE,uBAAuB;IACnD,qBAAqB,EAAE,uBAAuB;IAC9C,kBAAkB,EAAE,8CAA8C;IAClE,cAAc,EAAE,oBAAoB;IACpC,aAAa,EAAE,mBAAmB;CAC1B,CAAA;AAEV,MAAa,QAAQ;IAKnB,YAAY,KAAmB;QAC7B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,SAAS,GAAG,0BAAkB,CAAA;IACrC,CAAC;;AARH,4BASC;AANQ,sBAAa,GAAuD,eAAe,CAAA"}
|