@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,344 @@
|
|
|
1
|
+
import { Hardfork } from '@feelyourprotocol/common'
|
|
2
|
+
import { type Address, type PrefixedHexString, bytesToUnprefixedHex } from '@feelyourprotocol/util'
|
|
3
|
+
|
|
4
|
+
import { precompile0a } from './0a-kzg-point-evaluation.ts'
|
|
5
|
+
import { precompile0b } from './0b-bls12-g1add.ts'
|
|
6
|
+
import { precompile0c } from './0c-bls12-g1msm.ts'
|
|
7
|
+
import { precompile0d } from './0d-bls12-g2add.ts'
|
|
8
|
+
import { precompile0e } from './0e-bls12-g2msm.ts'
|
|
9
|
+
import { precompile0f } from './0f-bls12-pairing.ts'
|
|
10
|
+
import { precompile01 } from './01-ecrecover.ts'
|
|
11
|
+
import { precompile02 } from './02-sha256.ts'
|
|
12
|
+
import { precompile03 } from './03-ripemd160.ts'
|
|
13
|
+
import { precompile04 } from './04-identity.ts'
|
|
14
|
+
import { precompile05 } from './05-modexp.ts'
|
|
15
|
+
import { precompile06 } from './06-bn254-add.ts'
|
|
16
|
+
import { precompile07 } from './07-bn254-mul.ts'
|
|
17
|
+
import { precompile08 } from './08-bn254-pairing.ts'
|
|
18
|
+
import { precompile09 } from './09-blake2f.ts'
|
|
19
|
+
import { precompile10 } from './10-bls12-map-fp-to-g1.ts'
|
|
20
|
+
import { precompile11 } from './11-bls12-map-fp2-to-g2.ts'
|
|
21
|
+
import { precompile100 } from './100-p256verify.ts'
|
|
22
|
+
import { MCLBLS, NobleBLS } from './bls12_381/index.ts'
|
|
23
|
+
import { NobleBN254, RustBN254 } from './bn254/index.ts'
|
|
24
|
+
|
|
25
|
+
import type { Common } from '@feelyourprotocol/common'
|
|
26
|
+
import type { PrecompileFunc, PrecompileInput } from './types.ts'
|
|
27
|
+
|
|
28
|
+
interface PrecompileEntry {
|
|
29
|
+
address: string
|
|
30
|
+
check: PrecompileAvailabilityCheckType
|
|
31
|
+
precompile: PrecompileFunc
|
|
32
|
+
name: string
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
interface Precompiles {
|
|
36
|
+
[key: string]: PrecompileFunc
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
type PrecompileAvailabilityCheckType =
|
|
40
|
+
| PrecompileAvailabilityCheckTypeHardfork
|
|
41
|
+
| PrecompileAvailabilityCheckTypeEIP
|
|
42
|
+
|
|
43
|
+
export type PrecompileAvailabilityCheck =
|
|
44
|
+
(typeof PrecompileAvailabilityCheck)[keyof typeof PrecompileAvailabilityCheck]
|
|
45
|
+
|
|
46
|
+
export const PrecompileAvailabilityCheck = {
|
|
47
|
+
EIP: 'eip',
|
|
48
|
+
Hardfork: 'hardfork',
|
|
49
|
+
} as const
|
|
50
|
+
|
|
51
|
+
interface PrecompileAvailabilityCheckTypeHardfork {
|
|
52
|
+
type: typeof PrecompileAvailabilityCheck.Hardfork
|
|
53
|
+
param: string
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
interface PrecompileAvailabilityCheckTypeEIP {
|
|
57
|
+
type: typeof PrecompileAvailabilityCheck.EIP
|
|
58
|
+
param: number
|
|
59
|
+
}
|
|
60
|
+
const BYTES_19 = '00000000000000000000000000000000000000'
|
|
61
|
+
const ripemdPrecompileAddress = BYTES_19 + '03'
|
|
62
|
+
|
|
63
|
+
const precompileEntries: PrecompileEntry[] = [
|
|
64
|
+
{
|
|
65
|
+
address: BYTES_19 + '01',
|
|
66
|
+
check: {
|
|
67
|
+
type: PrecompileAvailabilityCheck.Hardfork,
|
|
68
|
+
param: Hardfork.Chainstart,
|
|
69
|
+
},
|
|
70
|
+
precompile: precompile01,
|
|
71
|
+
name: 'ECRECOVER (0x01)',
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
address: BYTES_19 + '02',
|
|
75
|
+
check: {
|
|
76
|
+
type: PrecompileAvailabilityCheck.Hardfork,
|
|
77
|
+
param: Hardfork.Chainstart,
|
|
78
|
+
},
|
|
79
|
+
precompile: precompile02,
|
|
80
|
+
name: 'SHA256 (0x02)',
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
address: BYTES_19 + '03',
|
|
84
|
+
check: {
|
|
85
|
+
type: PrecompileAvailabilityCheck.Hardfork,
|
|
86
|
+
param: Hardfork.Chainstart,
|
|
87
|
+
},
|
|
88
|
+
precompile: precompile03,
|
|
89
|
+
name: 'RIPEMD160 (0x03)',
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
address: BYTES_19 + '04',
|
|
93
|
+
check: {
|
|
94
|
+
type: PrecompileAvailabilityCheck.Hardfork,
|
|
95
|
+
param: Hardfork.Chainstart,
|
|
96
|
+
},
|
|
97
|
+
precompile: precompile04,
|
|
98
|
+
name: 'IDENTITY (0x04)',
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
address: BYTES_19 + '05',
|
|
102
|
+
check: {
|
|
103
|
+
type: PrecompileAvailabilityCheck.Hardfork,
|
|
104
|
+
param: Hardfork.Byzantium,
|
|
105
|
+
},
|
|
106
|
+
precompile: precompile05,
|
|
107
|
+
name: 'MODEXP (0x05)',
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
address: BYTES_19 + '06',
|
|
111
|
+
check: {
|
|
112
|
+
type: PrecompileAvailabilityCheck.Hardfork,
|
|
113
|
+
param: Hardfork.Byzantium,
|
|
114
|
+
},
|
|
115
|
+
precompile: precompile06,
|
|
116
|
+
name: 'BN254_ADD (0x06)',
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
address: BYTES_19 + '07',
|
|
120
|
+
check: {
|
|
121
|
+
type: PrecompileAvailabilityCheck.Hardfork,
|
|
122
|
+
param: Hardfork.Byzantium,
|
|
123
|
+
},
|
|
124
|
+
precompile: precompile07,
|
|
125
|
+
name: 'BN254_MUL (0x07)',
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
address: BYTES_19 + '08',
|
|
129
|
+
check: {
|
|
130
|
+
type: PrecompileAvailabilityCheck.Hardfork,
|
|
131
|
+
param: Hardfork.Byzantium,
|
|
132
|
+
},
|
|
133
|
+
precompile: precompile08,
|
|
134
|
+
name: 'BN254_PAIRING (0x08)',
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
address: BYTES_19 + '09',
|
|
138
|
+
check: {
|
|
139
|
+
type: PrecompileAvailabilityCheck.Hardfork,
|
|
140
|
+
param: Hardfork.Istanbul,
|
|
141
|
+
},
|
|
142
|
+
precompile: precompile09,
|
|
143
|
+
name: 'BLAKE2f (0x09)',
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
address: BYTES_19 + '0a',
|
|
147
|
+
check: {
|
|
148
|
+
type: PrecompileAvailabilityCheck.EIP,
|
|
149
|
+
param: 4844,
|
|
150
|
+
},
|
|
151
|
+
precompile: precompile0a,
|
|
152
|
+
name: 'KZG_POINT_EVALUATION (0x0a)',
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
address: BYTES_19 + '0b',
|
|
156
|
+
check: {
|
|
157
|
+
type: PrecompileAvailabilityCheck.EIP,
|
|
158
|
+
param: 2537,
|
|
159
|
+
},
|
|
160
|
+
precompile: precompile0b,
|
|
161
|
+
name: 'BLS12_G1ADD (0x0b)',
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
address: BYTES_19 + '0c',
|
|
165
|
+
check: {
|
|
166
|
+
type: PrecompileAvailabilityCheck.EIP,
|
|
167
|
+
param: 2537,
|
|
168
|
+
},
|
|
169
|
+
precompile: precompile0c,
|
|
170
|
+
name: 'BLS12_G1MSM (0x0c)',
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
address: BYTES_19 + '0d',
|
|
174
|
+
check: {
|
|
175
|
+
type: PrecompileAvailabilityCheck.EIP,
|
|
176
|
+
param: 2537,
|
|
177
|
+
},
|
|
178
|
+
precompile: precompile0d,
|
|
179
|
+
name: 'BLS12_G2ADD (0x0d)',
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
address: BYTES_19 + '0e',
|
|
183
|
+
check: {
|
|
184
|
+
type: PrecompileAvailabilityCheck.EIP,
|
|
185
|
+
param: 2537,
|
|
186
|
+
},
|
|
187
|
+
precompile: precompile0e,
|
|
188
|
+
name: 'BLS12_G2MSM (0x0e)',
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
address: BYTES_19 + '0f',
|
|
192
|
+
check: {
|
|
193
|
+
type: PrecompileAvailabilityCheck.EIP,
|
|
194
|
+
param: 2537,
|
|
195
|
+
},
|
|
196
|
+
precompile: precompile0f,
|
|
197
|
+
name: 'BLS12_PAIRING (0x0f)',
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
address: BYTES_19 + '10',
|
|
201
|
+
check: {
|
|
202
|
+
type: PrecompileAvailabilityCheck.EIP,
|
|
203
|
+
param: 2537,
|
|
204
|
+
},
|
|
205
|
+
precompile: precompile10,
|
|
206
|
+
name: 'BLS12_MAP_FP_TO_G1 (0x10)',
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
address: BYTES_19 + '11',
|
|
210
|
+
check: {
|
|
211
|
+
type: PrecompileAvailabilityCheck.EIP,
|
|
212
|
+
param: 2537,
|
|
213
|
+
},
|
|
214
|
+
precompile: precompile11,
|
|
215
|
+
name: 'BLS12_MAP_FP_TO_G2 (0x11)',
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
address: '0000000000000000000000000000000000000100',
|
|
219
|
+
check: {
|
|
220
|
+
type: PrecompileAvailabilityCheck.EIP,
|
|
221
|
+
param: 7951,
|
|
222
|
+
},
|
|
223
|
+
precompile: precompile100,
|
|
224
|
+
name: 'P256VERIFY (0x100)',
|
|
225
|
+
},
|
|
226
|
+
]
|
|
227
|
+
|
|
228
|
+
const precompiles: Precompiles = {
|
|
229
|
+
[BYTES_19 + '01']: precompile01,
|
|
230
|
+
[BYTES_19 + '02']: precompile02,
|
|
231
|
+
[ripemdPrecompileAddress]: precompile03,
|
|
232
|
+
[BYTES_19 + '04']: precompile04,
|
|
233
|
+
[BYTES_19 + '05']: precompile05,
|
|
234
|
+
[BYTES_19 + '06']: precompile06,
|
|
235
|
+
[BYTES_19 + '07']: precompile07,
|
|
236
|
+
[BYTES_19 + '08']: precompile08,
|
|
237
|
+
[BYTES_19 + '09']: precompile09,
|
|
238
|
+
[BYTES_19 + '0a']: precompile0a,
|
|
239
|
+
[BYTES_19 + '0b']: precompile0b,
|
|
240
|
+
[BYTES_19 + '0c']: precompile0c,
|
|
241
|
+
[BYTES_19 + '0d']: precompile0d,
|
|
242
|
+
[BYTES_19 + '0e']: precompile0e,
|
|
243
|
+
[BYTES_19 + '0f']: precompile0f,
|
|
244
|
+
[BYTES_19 + '10']: precompile10,
|
|
245
|
+
[BYTES_19 + '11']: precompile11,
|
|
246
|
+
'0000000000000000000000000000000000000100': precompile100,
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/**
|
|
250
|
+
* Specifies a precompile to remove from the EVM.
|
|
251
|
+
* The address can be an `Address` instance or a `0x`-prefixed hex string.
|
|
252
|
+
*/
|
|
253
|
+
type DeletePrecompile = {
|
|
254
|
+
address: Address | PrefixedHexString
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* Specifies a precompile to add to (or override in) the EVM.
|
|
259
|
+
* The address can be an `Address` instance or a `0x`-prefixed hex string.
|
|
260
|
+
*/
|
|
261
|
+
type AddPrecompile = {
|
|
262
|
+
address: Address | PrefixedHexString
|
|
263
|
+
function: PrecompileFunc
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* A custom precompile entry: either an addition/override or a deletion.
|
|
268
|
+
*
|
|
269
|
+
* ```ts
|
|
270
|
+
* // Add a custom precompile at a new address
|
|
271
|
+
* const add: CustomPrecompile = {
|
|
272
|
+
* address: '0x0000000000000000000000000000000000ff0001',
|
|
273
|
+
* function: myPrecompileImpl,
|
|
274
|
+
* }
|
|
275
|
+
* // Delete an existing precompile
|
|
276
|
+
* const del: CustomPrecompile = {
|
|
277
|
+
* address: '0x0000000000000000000000000000000000000002',
|
|
278
|
+
* }
|
|
279
|
+
* ```
|
|
280
|
+
*/
|
|
281
|
+
type CustomPrecompile = AddPrecompile | DeletePrecompile
|
|
282
|
+
|
|
283
|
+
function resolvePrecompileAddress(address: Address | PrefixedHexString): string {
|
|
284
|
+
if (typeof address === 'string') {
|
|
285
|
+
return address.slice(2).padStart(40, '0').toLowerCase()
|
|
286
|
+
}
|
|
287
|
+
return bytesToUnprefixedHex(address.bytes)
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
function getActivePrecompiles(
|
|
291
|
+
common: Common,
|
|
292
|
+
customPrecompiles?: CustomPrecompile[],
|
|
293
|
+
): Map<string, PrecompileFunc> {
|
|
294
|
+
const precompileMap = new Map()
|
|
295
|
+
if (customPrecompiles) {
|
|
296
|
+
for (const precompile of customPrecompiles) {
|
|
297
|
+
precompileMap.set(
|
|
298
|
+
resolvePrecompileAddress(precompile.address),
|
|
299
|
+
'function' in precompile ? precompile.function : undefined,
|
|
300
|
+
)
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
for (const entry of precompileEntries) {
|
|
304
|
+
if (precompileMap.has(entry.address)) {
|
|
305
|
+
continue
|
|
306
|
+
}
|
|
307
|
+
const type = entry.check.type
|
|
308
|
+
|
|
309
|
+
if (
|
|
310
|
+
(type === PrecompileAvailabilityCheck.Hardfork && common.gteHardfork(entry.check.param)) ||
|
|
311
|
+
(entry.check.type === PrecompileAvailabilityCheck.EIP &&
|
|
312
|
+
common.isActivatedEIP(entry.check.param))
|
|
313
|
+
) {
|
|
314
|
+
precompileMap.set(entry.address, entry.precompile)
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
return precompileMap
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
function getPrecompileName(addressUnprefixedStr: string) {
|
|
321
|
+
if (addressUnprefixedStr.length < 40) {
|
|
322
|
+
addressUnprefixedStr = addressUnprefixedStr.padStart(40, '0')
|
|
323
|
+
}
|
|
324
|
+
for (const entry of precompileEntries) {
|
|
325
|
+
if (entry.address === addressUnprefixedStr) {
|
|
326
|
+
return entry.name
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
return ''
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
export {
|
|
333
|
+
getActivePrecompiles,
|
|
334
|
+
getPrecompileName,
|
|
335
|
+
MCLBLS,
|
|
336
|
+
NobleBLS,
|
|
337
|
+
NobleBN254,
|
|
338
|
+
precompileEntries,
|
|
339
|
+
precompiles,
|
|
340
|
+
ripemdPrecompileAddress,
|
|
341
|
+
RustBN254,
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
export type { AddPrecompile, CustomPrecompile, DeletePrecompile, PrecompileFunc, PrecompileInput }
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Common } from '@feelyourprotocol/common'
|
|
2
|
+
import type { debug } from 'debug'
|
|
3
|
+
import type { EVMInterface, ExecResult } from '../types.ts'
|
|
4
|
+
|
|
5
|
+
export interface PrecompileFunc {
|
|
6
|
+
(input: PrecompileInput): Promise<ExecResult> | ExecResult
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface PrecompileInput {
|
|
10
|
+
data: Uint8Array
|
|
11
|
+
gasLimit: bigint
|
|
12
|
+
common: Common
|
|
13
|
+
_EVM: EVMInterface
|
|
14
|
+
_debug?: debug.Debugger
|
|
15
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { short } from '@feelyourprotocol/util'
|
|
2
|
+
|
|
3
|
+
import type { PrecompileInput } from './index.ts'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Checks that the gas used remain under the gas limit.
|
|
7
|
+
*
|
|
8
|
+
* @param opts - Precompile input wrapper
|
|
9
|
+
* @param gasUsed - Amount of gas consumed by the precompile
|
|
10
|
+
* @param pName - Human readable precompile name for logging
|
|
11
|
+
* @returns `true` if the gas usage is within the provided limit
|
|
12
|
+
*/
|
|
13
|
+
export const gasLimitCheck = (opts: PrecompileInput, gasUsed: bigint, pName: string) => {
|
|
14
|
+
if (opts._debug !== undefined) {
|
|
15
|
+
opts._debug(
|
|
16
|
+
`Run ${pName} precompile data=${short(opts.data)} length=${
|
|
17
|
+
opts.data.length
|
|
18
|
+
} gasLimit=${opts.gasLimit} gasUsed=${gasUsed}`,
|
|
19
|
+
)
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
if (opts.gasLimit < gasUsed) {
|
|
23
|
+
if (opts._debug !== undefined) {
|
|
24
|
+
opts._debug(`${pName} failed: OOG`)
|
|
25
|
+
}
|
|
26
|
+
return false
|
|
27
|
+
}
|
|
28
|
+
return true
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Checks that the length of the provided data is equal to `length`.
|
|
33
|
+
*
|
|
34
|
+
* @param opts - Precompile input wrapper
|
|
35
|
+
* @param length - Required data length in bytes
|
|
36
|
+
* @param pName - Human readable precompile name for logging
|
|
37
|
+
* @returns `true` if the provided data matches the required length
|
|
38
|
+
*/
|
|
39
|
+
export const equalityLengthCheck = (opts: PrecompileInput, length: number, pName: string) => {
|
|
40
|
+
if (opts.data.length !== length) {
|
|
41
|
+
if (opts._debug !== undefined) {
|
|
42
|
+
opts._debug(
|
|
43
|
+
`${pName} failed: Invalid input length length=${opts.data.length} (expected: ${length})`,
|
|
44
|
+
)
|
|
45
|
+
}
|
|
46
|
+
return false
|
|
47
|
+
}
|
|
48
|
+
return true
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Checks that the total length of the provided data input can be subdivided into k equal parts
|
|
53
|
+
* with `length` (without leaving some remainder bytes).
|
|
54
|
+
*
|
|
55
|
+
* @param opts - Precompile input wrapper
|
|
56
|
+
* @param length - Required chunk size
|
|
57
|
+
* @param pName - Human readable precompile name for logging
|
|
58
|
+
* @returns `true` if the length is divisible by the chunk size
|
|
59
|
+
*/
|
|
60
|
+
export const moduloLengthCheck = (opts: PrecompileInput, length: number, pName: string) => {
|
|
61
|
+
if (opts.data.length % length !== 0) {
|
|
62
|
+
if (opts._debug !== undefined) {
|
|
63
|
+
opts._debug(
|
|
64
|
+
`${pName} failed: Invalid input length length=${opts.data.length} (expected: ${length}*k bytes)`,
|
|
65
|
+
)
|
|
66
|
+
}
|
|
67
|
+
return false
|
|
68
|
+
}
|
|
69
|
+
return true
|
|
70
|
+
}
|
package/src/stack.ts
ADDED
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { EVMError } from './errors.ts'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Implementation of the stack used in evm.
|
|
5
|
+
*/
|
|
6
|
+
export class Stack {
|
|
7
|
+
// This array is initialized as an empty array. Once values are pushed, the array size will never decrease.
|
|
8
|
+
private _store: bigint[]
|
|
9
|
+
private _maxHeight: number
|
|
10
|
+
|
|
11
|
+
private _len: number = 0
|
|
12
|
+
|
|
13
|
+
constructor(maxHeight?: number) {
|
|
14
|
+
// It is possible to initialize the array with `maxHeight` items. However,
|
|
15
|
+
// this makes the constructor 10x slower and there do not seem to be any observable performance gains
|
|
16
|
+
this._store = []
|
|
17
|
+
this._maxHeight = maxHeight ?? 1024
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
get length() {
|
|
21
|
+
return this._len
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Pushes a new bigint onto the stack.
|
|
26
|
+
* @param value - Value to push (must fit within the configured max height)
|
|
27
|
+
*/
|
|
28
|
+
push(value: bigint) {
|
|
29
|
+
if (this._len >= this._maxHeight) {
|
|
30
|
+
throw new EVMError(EVMError.errorMessages.STACK_OVERFLOW)
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// Read current length, set `_store` to value, and then increase the length
|
|
34
|
+
this._store[this._len++] = value
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Pops the top value from the stack.
|
|
39
|
+
* @returns The value removed from the stack
|
|
40
|
+
*/
|
|
41
|
+
pop(): bigint {
|
|
42
|
+
if (this._len < 1) {
|
|
43
|
+
throw new EVMError(EVMError.errorMessages.STACK_UNDERFLOW)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// Length is checked above, so pop shouldn't return undefined
|
|
47
|
+
// First decrease current length, then read the item and return it
|
|
48
|
+
// Note: this does thus not delete the item from the internal array
|
|
49
|
+
// However, the length is decreased, so it is not accessible to external observers
|
|
50
|
+
return this._store[--this._len]
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Pops multiple items from the stack with the top-most item returned first.
|
|
55
|
+
* @param num - Number of items to pop (defaults to 1)
|
|
56
|
+
* @returns Array containing the popped values
|
|
57
|
+
*/
|
|
58
|
+
popN(num: number = 1): bigint[] {
|
|
59
|
+
if (this._len < num) {
|
|
60
|
+
throw new EVMError(EVMError.errorMessages.STACK_UNDERFLOW)
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
if (num === 0) {
|
|
64
|
+
return []
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const arr = Array(num)
|
|
68
|
+
const cache = this._store
|
|
69
|
+
|
|
70
|
+
for (let pop = 0; pop < num; pop++) {
|
|
71
|
+
// Note: this thus also (correctly) reduces the length of the internal array (without deleting items)
|
|
72
|
+
arr[pop] = cache[--this._len]
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return arr
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Returns items from the stack without removing them.
|
|
80
|
+
* @param num - Number of items to return (defaults to 1)
|
|
81
|
+
* @returns Array of items, with index 0 representing the top of the stack
|
|
82
|
+
* @throws {@link EVMError} with code STACK_UNDERFLOW if there are not enough items on the stack
|
|
83
|
+
*/
|
|
84
|
+
peek(num: number = 1): bigint[] {
|
|
85
|
+
const peekArray: bigint[] = Array(num)
|
|
86
|
+
let start = this._len
|
|
87
|
+
|
|
88
|
+
for (let peek = 0; peek < num; peek++) {
|
|
89
|
+
const index = --start
|
|
90
|
+
if (index < 0) {
|
|
91
|
+
throw new EVMError(EVMError.errorMessages.STACK_UNDERFLOW)
|
|
92
|
+
}
|
|
93
|
+
peekArray[peek] = this._store[index]
|
|
94
|
+
}
|
|
95
|
+
return peekArray
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Swaps the top of the stack with another item.
|
|
100
|
+
* @param position - Zero-based index from the top of the stack (0 swaps with the top itself)
|
|
101
|
+
*/
|
|
102
|
+
swap(position: number) {
|
|
103
|
+
if (this._len <= position) {
|
|
104
|
+
throw new EVMError(EVMError.errorMessages.STACK_UNDERFLOW)
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
const head = this._len - 1
|
|
108
|
+
const i = head - position
|
|
109
|
+
const storageCached = this._store
|
|
110
|
+
|
|
111
|
+
const tmp = storageCached[head]
|
|
112
|
+
storageCached[head] = storageCached[i]
|
|
113
|
+
storageCached[i] = tmp
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// I would say that we do not need this method any more
|
|
117
|
+
// since you can't copy a primitive data type
|
|
118
|
+
// Nevertheless not sure if we "loose" something here?
|
|
119
|
+
// Will keep commented out for now
|
|
120
|
+
/**
|
|
121
|
+
* Pushes a copy of an item deeper in the stack.
|
|
122
|
+
* @param position - One-based index of the item to duplicate
|
|
123
|
+
*/
|
|
124
|
+
dup(position: number) {
|
|
125
|
+
const len = this._len
|
|
126
|
+
if (len < position) {
|
|
127
|
+
throw new EVMError(EVMError.errorMessages.STACK_UNDERFLOW)
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// Note: this code is borrowed from `push()` (avoids a call)
|
|
131
|
+
if (len >= this._maxHeight) {
|
|
132
|
+
throw new EVMError(EVMError.errorMessages.STACK_OVERFLOW)
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
const i = len - position
|
|
136
|
+
this._store[this._len++] = this._store[i]
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Swaps two arbitrary entries relative to the top of the stack.
|
|
141
|
+
* @param swap1 - Distance from the top (0 = top element) for the first entry
|
|
142
|
+
* @param swap2 - Distance from the top for the second entry
|
|
143
|
+
*/
|
|
144
|
+
exchange(swap1: number, swap2: number) {
|
|
145
|
+
const headIndex = this._len - 1
|
|
146
|
+
const exchangeIndex1 = headIndex - swap1
|
|
147
|
+
const exchangeIndex2 = headIndex - swap2
|
|
148
|
+
|
|
149
|
+
// Stack underflow is not possible in EOF
|
|
150
|
+
if (exchangeIndex1 < 0 || exchangeIndex2 < 0) {
|
|
151
|
+
throw new EVMError(EVMError.errorMessages.STACK_UNDERFLOW)
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
const cache = this._store[exchangeIndex2]
|
|
155
|
+
this._store[exchangeIndex2] = this._store[exchangeIndex1]
|
|
156
|
+
this._store[exchangeIndex1] = cache
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Returns a copy of the current stack. This represents the actual state of the stack
|
|
161
|
+
* (not the internal state of the stack, which might have unreachable elements in it)
|
|
162
|
+
*/
|
|
163
|
+
getStack() {
|
|
164
|
+
return this._store.slice(0, this._len)
|
|
165
|
+
}
|
|
166
|
+
}
|
package/src/stemCache.ts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { PrefixedHexString } from '@feelyourprotocol/util'
|
|
2
|
+
import type { BinaryStemAccessEvent, BinaryStemMeta } from './binaryTreeAccessWitness.ts'
|
|
3
|
+
|
|
4
|
+
export class StemCache {
|
|
5
|
+
cache: Map<PrefixedHexString, BinaryStemAccessEvent & BinaryStemMeta>
|
|
6
|
+
|
|
7
|
+
constructor() {
|
|
8
|
+
this.cache = new Map<PrefixedHexString, BinaryStemAccessEvent & BinaryStemMeta>()
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
set(stemKey: PrefixedHexString, accessedStem: BinaryStemAccessEvent & BinaryStemMeta) {
|
|
12
|
+
this.cache.set(stemKey, accessedStem)
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
get(stemHex: PrefixedHexString): (BinaryStemAccessEvent & BinaryStemMeta) | undefined {
|
|
16
|
+
return this.cache.get(stemHex)
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
del(stemHex: PrefixedHexString): void {
|
|
20
|
+
this.cache.delete(stemHex)
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
commit(): [PrefixedHexString, BinaryStemAccessEvent & BinaryStemMeta][] {
|
|
24
|
+
const items: [PrefixedHexString, BinaryStemAccessEvent & BinaryStemMeta][] = Array.from(
|
|
25
|
+
this.cache.entries(),
|
|
26
|
+
)
|
|
27
|
+
this.clear()
|
|
28
|
+
return items
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Clear cache
|
|
33
|
+
*/
|
|
34
|
+
clear(): void {
|
|
35
|
+
this.cache.clear()
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Returns the size of the cache
|
|
40
|
+
* @returns Number of cached stems currently stored
|
|
41
|
+
*/
|
|
42
|
+
size() {
|
|
43
|
+
return this.cache.size
|
|
44
|
+
}
|
|
45
|
+
}
|