@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,71 @@
|
|
|
1
|
+
import { EthereumJSErrorWithoutCode, concatBytes } from '@feelyourprotocol/util';
|
|
2
|
+
const ceil = (value, ceiling) => {
|
|
3
|
+
const r = value % ceiling;
|
|
4
|
+
if (r === 0) {
|
|
5
|
+
return value;
|
|
6
|
+
}
|
|
7
|
+
else {
|
|
8
|
+
return value + ceiling - r;
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
const CONTAINER_SIZE = 8192;
|
|
12
|
+
/**
|
|
13
|
+
* Memory implements a simple memory model
|
|
14
|
+
* for the ethereum virtual machine.
|
|
15
|
+
*/
|
|
16
|
+
export class Memory {
|
|
17
|
+
constructor() {
|
|
18
|
+
this._store = new Uint8Array(CONTAINER_SIZE);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Extends the memory given an offset and size. Rounds extended
|
|
22
|
+
* memory to word-size.
|
|
23
|
+
*/
|
|
24
|
+
extend(offset, size) {
|
|
25
|
+
if (size === 0) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
const newSize = ceil(offset + size, 32);
|
|
29
|
+
const sizeDiff = newSize - this._store.length;
|
|
30
|
+
if (sizeDiff > 0) {
|
|
31
|
+
const expandBy = Math.ceil(sizeDiff / CONTAINER_SIZE) * CONTAINER_SIZE;
|
|
32
|
+
this._store = concatBytes(this._store, new Uint8Array(expandBy));
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Writes a byte array with length `size` to memory, starting from `offset`.
|
|
37
|
+
* @param offset - Starting position
|
|
38
|
+
* @param size - How many bytes to write
|
|
39
|
+
* @param value - Value
|
|
40
|
+
*/
|
|
41
|
+
write(offset, size, value) {
|
|
42
|
+
if (size === 0) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
this.extend(offset, size);
|
|
46
|
+
if (value.length !== size)
|
|
47
|
+
throw EthereumJSErrorWithoutCode('Invalid value size');
|
|
48
|
+
if (offset + size > this._store.length)
|
|
49
|
+
throw EthereumJSErrorWithoutCode('Value exceeds memory capacity');
|
|
50
|
+
this._store.set(value, offset);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Reads a slice of memory from `offset` till `offset + size` as a `Uint8Array`.
|
|
54
|
+
* It fills up the difference between memory's length and `offset + size` with zeros.
|
|
55
|
+
* @param offset - Starting position
|
|
56
|
+
* @param size - How many bytes to read
|
|
57
|
+
* @param avoidCopy - Avoid memory copy if possible for performance reasons (optional)
|
|
58
|
+
*/
|
|
59
|
+
read(offset, size, avoidCopy) {
|
|
60
|
+
this.extend(offset, size);
|
|
61
|
+
const loaded = this._store.subarray(offset, offset + size);
|
|
62
|
+
if (avoidCopy === true) {
|
|
63
|
+
return loaded;
|
|
64
|
+
}
|
|
65
|
+
const returnBytes = new Uint8Array(size);
|
|
66
|
+
// Copy the stored "buffer" from memory into the return Uint8Array
|
|
67
|
+
returnBytes.set(loaded);
|
|
68
|
+
return returnBytes;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE1E,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,OAAe,EAAU,EAAE;IACtD,MAAM,CAAC,GAAG,KAAK,GAAG,OAAO,CAAA;IACzB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACZ,OAAO,KAAK,CAAA;IACd,CAAC;SAAM,CAAC;QACN,OAAO,KAAK,GAAG,OAAO,GAAG,CAAC,CAAA;IAC5B,CAAC;AACH,CAAC,CAAA;AAED,MAAM,cAAc,GAAG,IAAI,CAAA;AAE3B;;;GAGG;AACH,MAAM,OAAO,MAAM;IAGjB;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,UAAU,CAAC,cAAc,CAAC,CAAA;IAC9C,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,MAAc,EAAE,IAAY;QACjC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACf,OAAM;QACR,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,EAAE,CAAC,CAAA;QACvC,MAAM,QAAQ,GAAG,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAA;QAC7C,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAC,GAAG,cAAc,CAAA;YACtE,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAA;QAClE,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,MAAc,EAAE,IAAY,EAAE,KAAiB;QACnD,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACf,OAAM;QACR,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QAEzB,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI;YAAE,MAAM,0BAA0B,CAAC,oBAAoB,CAAC,CAAA;QACjF,IAAI,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;YACpC,MAAM,0BAA0B,CAAC,+BAA+B,CAAC,CAAA;QAEnE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IAChC,CAAC;IAED;;;;;;OAMG;IACH,IAAI,CAAC,MAAc,EAAE,IAAY,EAAE,SAAmB;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QAEzB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAA4B,CAAA;QACrF,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,OAAO,MAAM,CAAA;QACf,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAA;QACxC,kEAAkE;QAClE,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAEvB,OAAO,WAAW,CAAA;IACpB,CAAC;CACF"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { BinaryTreeAccessWitnessInterface } from '@feelyourprotocol/common';
|
|
2
|
+
import type { Address, PrefixedHexString } from '@feelyourprotocol/util';
|
|
3
|
+
import type { PrecompileFunc } from './precompiles/index.ts';
|
|
4
|
+
import type { EOFEnv, SelfdestructMap } from './types.ts';
|
|
5
|
+
interface MessageOpts {
|
|
6
|
+
to?: Address;
|
|
7
|
+
value?: bigint;
|
|
8
|
+
caller?: Address;
|
|
9
|
+
gasLimit: bigint;
|
|
10
|
+
data?: Uint8Array;
|
|
11
|
+
eofCallData?: Uint8Array;
|
|
12
|
+
depth?: number;
|
|
13
|
+
code?: Uint8Array | PrecompileFunc;
|
|
14
|
+
codeAddress?: Address;
|
|
15
|
+
isStatic?: boolean;
|
|
16
|
+
isCompiled?: boolean;
|
|
17
|
+
salt?: Uint8Array;
|
|
18
|
+
/**
|
|
19
|
+
* Selfdestructed addresses mapped to their beneficiary, see {@link Message.selfdestruct}
|
|
20
|
+
*/
|
|
21
|
+
selfdestruct?: SelfdestructMap;
|
|
22
|
+
/**
|
|
23
|
+
* Map of addresses which were created (used in EIP 6780)
|
|
24
|
+
*/
|
|
25
|
+
createdAddresses?: Set<PrefixedHexString>;
|
|
26
|
+
delegatecall?: boolean;
|
|
27
|
+
gasRefund?: bigint;
|
|
28
|
+
blobVersionedHashes?: PrefixedHexString[];
|
|
29
|
+
accessWitness?: BinaryTreeAccessWitnessInterface;
|
|
30
|
+
}
|
|
31
|
+
export declare class Message {
|
|
32
|
+
to?: Address;
|
|
33
|
+
value: bigint;
|
|
34
|
+
caller: Address;
|
|
35
|
+
gasLimit: bigint;
|
|
36
|
+
data: Uint8Array;
|
|
37
|
+
eofCallData?: Uint8Array;
|
|
38
|
+
isCreate?: boolean;
|
|
39
|
+
depth: number;
|
|
40
|
+
code?: Uint8Array | PrecompileFunc;
|
|
41
|
+
_codeAddress?: Address;
|
|
42
|
+
isStatic: boolean;
|
|
43
|
+
isCompiled: boolean;
|
|
44
|
+
salt?: Uint8Array;
|
|
45
|
+
eof?: EOFEnv;
|
|
46
|
+
chargeCodeAccesses?: boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Selfdestructed addresses mapped to their beneficiary.
|
|
49
|
+
*/
|
|
50
|
+
selfdestruct?: SelfdestructMap;
|
|
51
|
+
/**
|
|
52
|
+
* Map of addresses which were created (used in EIP 6780)
|
|
53
|
+
*/
|
|
54
|
+
createdAddresses?: Set<PrefixedHexString>;
|
|
55
|
+
delegatecall: boolean;
|
|
56
|
+
gasRefund: bigint;
|
|
57
|
+
/**
|
|
58
|
+
* List of versioned hashes if message is a blob transaction in the outer VM
|
|
59
|
+
*/
|
|
60
|
+
blobVersionedHashes?: PrefixedHexString[];
|
|
61
|
+
accessWitness?: BinaryTreeAccessWitnessInterface;
|
|
62
|
+
constructor(opts: MessageOpts);
|
|
63
|
+
/**
|
|
64
|
+
* Note: should only be called in instances where `_codeAddress` or `to` is defined.
|
|
65
|
+
*/
|
|
66
|
+
get codeAddress(): Address;
|
|
67
|
+
}
|
|
68
|
+
export type MessageWithTo = Message & Pick<Required<MessageOpts>, 'to'>;
|
|
69
|
+
export {};
|
|
70
|
+
//# sourceMappingURL=message.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../src/message.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,oBAAoB,CAAA;AAC1E,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAazD,UAAU,WAAW;IACnB,EAAE,CAAC,EAAE,OAAO,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,WAAW,CAAC,EAAE,UAAU,CAAA;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,UAAU,GAAG,cAAc,CAAA;IAClC,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB;;OAEG;IACH,YAAY,CAAC,EAAE,eAAe,CAAA;IAC9B;;OAEG;IACH,gBAAgB,CAAC,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAA;IACzC,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,mBAAmB,CAAC,EAAE,iBAAiB,EAAE,CAAA;IACzC,aAAa,CAAC,EAAE,gCAAgC,CAAA;CACjD;AAED,qBAAa,OAAO;IAClB,EAAE,CAAC,EAAE,OAAO,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,OAAO,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,UAAU,CAAA;IAChB,WAAW,CAAC,EAAE,UAAU,CAAA;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,UAAU,GAAG,cAAc,CAAA;IAClC,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,QAAQ,EAAE,OAAO,CAAA;IACjB,UAAU,EAAE,OAAO,CAAA;IACnB,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B;;OAEG;IACH,YAAY,CAAC,EAAE,eAAe,CAAA;IAC9B;;OAEG;IACH,gBAAgB,CAAC,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAA;IACzC,YAAY,EAAE,OAAO,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,mBAAmB,CAAC,EAAE,iBAAiB,EAAE,CAAA;IACzC,aAAa,CAAC,EAAE,gCAAgC,CAAA;gBAEpC,IAAI,EAAE,WAAW;IAwB7B;;OAEG;IACH,IAAI,WAAW,IAAI,OAAO,CAMzB;CACF;AAED,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,CAAA"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { BIGINT_0, EthereumJSErrorWithoutCode, createZeroAddress } from '@feelyourprotocol/util';
|
|
2
|
+
const defaults = {
|
|
3
|
+
value: BIGINT_0,
|
|
4
|
+
caller: createZeroAddress(),
|
|
5
|
+
data: new Uint8Array(0),
|
|
6
|
+
depth: 0,
|
|
7
|
+
isStatic: false,
|
|
8
|
+
isCompiled: false,
|
|
9
|
+
delegatecall: false,
|
|
10
|
+
gasRefund: BIGINT_0,
|
|
11
|
+
};
|
|
12
|
+
export class Message {
|
|
13
|
+
constructor(opts) {
|
|
14
|
+
this.to = opts.to;
|
|
15
|
+
this.value = opts.value ?? defaults.value;
|
|
16
|
+
this.caller = opts.caller ?? defaults.caller;
|
|
17
|
+
this.gasLimit = opts.gasLimit;
|
|
18
|
+
this.data = opts.data ?? defaults.data;
|
|
19
|
+
this.eofCallData = opts.eofCallData;
|
|
20
|
+
this.depth = opts.depth ?? defaults.depth;
|
|
21
|
+
this.code = opts.code;
|
|
22
|
+
this._codeAddress = opts.codeAddress;
|
|
23
|
+
this.isStatic = opts.isStatic ?? defaults.isStatic;
|
|
24
|
+
this.isCompiled = opts.isCompiled ?? defaults.isCompiled;
|
|
25
|
+
this.salt = opts.salt;
|
|
26
|
+
this.selfdestruct = opts.selfdestruct;
|
|
27
|
+
this.createdAddresses = opts.createdAddresses;
|
|
28
|
+
this.delegatecall = opts.delegatecall ?? defaults.delegatecall;
|
|
29
|
+
this.gasRefund = opts.gasRefund ?? defaults.gasRefund;
|
|
30
|
+
this.blobVersionedHashes = opts.blobVersionedHashes;
|
|
31
|
+
this.accessWitness = opts.accessWitness;
|
|
32
|
+
if (this.value < 0) {
|
|
33
|
+
throw EthereumJSErrorWithoutCode(`value field cannot be negative, received ${this.value}`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Note: should only be called in instances where `_codeAddress` or `to` is defined.
|
|
38
|
+
*/
|
|
39
|
+
get codeAddress() {
|
|
40
|
+
const codeAddress = this._codeAddress ?? this.to;
|
|
41
|
+
if (!codeAddress) {
|
|
42
|
+
throw EthereumJSErrorWithoutCode('Missing codeAddress');
|
|
43
|
+
}
|
|
44
|
+
return codeAddress;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=message.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message.js","sourceRoot":"","sources":["../../src/message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAO1F,MAAM,QAAQ,GAAG;IACf,KAAK,EAAE,QAAQ;IACf,MAAM,EAAE,iBAAiB,EAAE;IAC3B,IAAI,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC;IACvB,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,KAAK;IACf,UAAU,EAAE,KAAK;IACjB,YAAY,EAAE,KAAK;IACnB,SAAS,EAAE,QAAQ;CACpB,CAAA;AA6BD,MAAM,OAAO,OAAO;IAgClB,YAAY,IAAiB;QAC3B,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAA;QACjB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAA;QACzC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAA;QAC5C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAA;QACtC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;QACnC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAA;QACzC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;QACrB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAA;QACpC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAA;QAClD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,QAAQ,CAAC,UAAU,CAAA;QACxD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;QACrB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAA;QACrC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAA;QAC7C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,QAAQ,CAAC,YAAY,CAAA;QAC9D,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAA;QACrD,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAA;QACnD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAA;QACvC,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YACnB,MAAM,0BAA0B,CAAC,4CAA4C,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;QAC5F,CAAC;IACH,CAAC;IAED;;OAEG;IACH,IAAI,WAAW;QACb,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,EAAE,CAAA;QAChD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,0BAA0B,CAAC,qBAAqB,CAAC,CAAA;QACzD,CAAC;QACD,OAAO,WAAW,CAAA;IACpB,CAAC;CACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Common } from '@feelyourprotocol/common';
|
|
2
|
+
import type { RunState } from '../interpreter.ts';
|
|
3
|
+
/**
|
|
4
|
+
* Adjusts gas usage and refunds of SStore ops per EIP-1283 (Constantinople)
|
|
5
|
+
*
|
|
6
|
+
* @param {RunState} runState
|
|
7
|
+
* @param {Uint8Array} currentStorage
|
|
8
|
+
* @param {Uint8Array} originalStorage
|
|
9
|
+
* @param {Uint8Array} value
|
|
10
|
+
* @param {Common} common
|
|
11
|
+
*/
|
|
12
|
+
export declare function updateSstoreGasEIP1283(runState: RunState, currentStorage: Uint8Array, originalStorage: Uint8Array, value: Uint8Array, common: Common): bigint;
|
|
13
|
+
//# sourceMappingURL=EIP1283.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EIP1283.d.ts","sourceRoot":"","sources":["../../../src/opcodes/EIP1283.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEjD;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,UAAU,EAC1B,eAAe,EAAE,UAAU,EAC3B,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,MAAM,UAyDf"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { equalsBytes } from '@feelyourprotocol/util';
|
|
2
|
+
/**
|
|
3
|
+
* Adjusts gas usage and refunds of SStore ops per EIP-1283 (Constantinople)
|
|
4
|
+
*
|
|
5
|
+
* @param {RunState} runState
|
|
6
|
+
* @param {Uint8Array} currentStorage
|
|
7
|
+
* @param {Uint8Array} originalStorage
|
|
8
|
+
* @param {Uint8Array} value
|
|
9
|
+
* @param {Common} common
|
|
10
|
+
*/
|
|
11
|
+
export function updateSstoreGasEIP1283(runState, currentStorage, originalStorage, value, common) {
|
|
12
|
+
if (equalsBytes(currentStorage, value)) {
|
|
13
|
+
// If current value equals new value (this is a no-op), 200 gas is deducted.
|
|
14
|
+
return common.param('netSstoreNoopGas');
|
|
15
|
+
}
|
|
16
|
+
// If current value does not equal new value
|
|
17
|
+
if (equalsBytes(originalStorage, currentStorage)) {
|
|
18
|
+
// If original value equals current value (this storage slot has not been changed by the current execution context)
|
|
19
|
+
if (originalStorage.length === 0) {
|
|
20
|
+
// If original value is 0, 20000 gas is deducted.
|
|
21
|
+
return common.param('netSstoreInitGas');
|
|
22
|
+
}
|
|
23
|
+
if (value.length === 0) {
|
|
24
|
+
// If new value is 0, add 15000 gas to refund counter.
|
|
25
|
+
runState.interpreter.refundGas(common.param('netSstoreClearRefundGas'), 'EIP-1283 -> netSstoreClearRefund');
|
|
26
|
+
}
|
|
27
|
+
// Otherwise, 5000 gas is deducted.
|
|
28
|
+
return common.param('netSstoreCleanGas');
|
|
29
|
+
}
|
|
30
|
+
// If original value does not equal current value (this storage slot is dirty), 200 gas is deducted. Apply both of the following clauses.
|
|
31
|
+
if (originalStorage.length !== 0) {
|
|
32
|
+
// If original value is not 0
|
|
33
|
+
if (currentStorage.length === 0) {
|
|
34
|
+
// If current value is 0 (also means that new value is not 0), remove 15000 gas from refund counter. We can prove that refund counter will never go below 0.
|
|
35
|
+
runState.interpreter.subRefund(common.param('netSstoreClearRefundGas'), 'EIP-1283 -> netSstoreClearRefund');
|
|
36
|
+
}
|
|
37
|
+
else if (value.length === 0) {
|
|
38
|
+
// If new value is 0 (also means that current value is not 0), add 15000 gas to refund counter.
|
|
39
|
+
runState.interpreter.refundGas(common.param('netSstoreClearRefundGas'), 'EIP-1283 -> netSstoreClearRefund');
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (equalsBytes(originalStorage, value)) {
|
|
43
|
+
// If original value equals new value (this storage slot is reset)
|
|
44
|
+
if (originalStorage.length === 0) {
|
|
45
|
+
// If original value is 0, add 19800 gas to refund counter.
|
|
46
|
+
runState.interpreter.refundGas(common.param('netSstoreResetClearRefundGas'), 'EIP-1283 -> netSstoreResetClearRefund');
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
// Otherwise, add 4800 gas to refund counter.
|
|
50
|
+
runState.interpreter.refundGas(common.param('netSstoreResetRefundGas'), 'EIP-1283 -> netSstoreResetRefund');
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return common.param('netSstoreDirtyGas');
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=EIP1283.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EIP1283.js","sourceRoot":"","sources":["../../../src/opcodes/EIP1283.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAK9C;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CACpC,QAAkB,EAClB,cAA0B,EAC1B,eAA2B,EAC3B,KAAiB,EACjB,MAAc;IAEd,IAAI,WAAW,CAAC,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC;QACvC,4EAA4E;QAC5E,OAAO,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAA;IACzC,CAAC;IACD,4CAA4C;IAC5C,IAAI,WAAW,CAAC,eAAe,EAAE,cAAc,CAAC,EAAE,CAAC;QACjD,mHAAmH;QACnH,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,iDAAiD;YACjD,OAAO,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAA;QACzC,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,sDAAsD;YACtD,QAAQ,CAAC,WAAW,CAAC,SAAS,CAC5B,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,EACvC,kCAAkC,CACnC,CAAA;QACH,CAAC;QACD,mCAAmC;QACnC,OAAO,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAA;IAC1C,CAAC;IACD,yIAAyI;IACzI,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,6BAA6B;QAC7B,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,4JAA4J;YAC5J,QAAQ,CAAC,WAAW,CAAC,SAAS,CAC5B,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,EACvC,kCAAkC,CACnC,CAAA;QACH,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,+FAA+F;YAC/F,QAAQ,CAAC,WAAW,CAAC,SAAS,CAC5B,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,EACvC,kCAAkC,CACnC,CAAA;QACH,CAAC;IACH,CAAC;IACD,IAAI,WAAW,CAAC,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC;QACxC,kEAAkE;QAClE,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,2DAA2D;YAC3D,QAAQ,CAAC,WAAW,CAAC,SAAS,CAC5B,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,EAC5C,uCAAuC,CACxC,CAAA;QACH,CAAC;aAAM,CAAC;YACN,6CAA6C;YAC7C,QAAQ,CAAC,WAAW,CAAC,SAAS,CAC5B,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,EACvC,kCAAkC,CACnC,CAAA;QACH,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAA;AAC1C,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Common } from '@feelyourprotocol/common';
|
|
2
|
+
import type { RunState } from '../interpreter.ts';
|
|
3
|
+
/**
|
|
4
|
+
* Adjusts gas usage and refunds of SStore ops per EIP-2200 (Istanbul)
|
|
5
|
+
*
|
|
6
|
+
* @param {RunState} runState
|
|
7
|
+
* @param {Uint8Array} currentStorage
|
|
8
|
+
* @param {Uint8Array} originalStorage
|
|
9
|
+
* @param {Uint8Array} value
|
|
10
|
+
* @param {Common} common
|
|
11
|
+
*/
|
|
12
|
+
export declare function updateSstoreGasEIP2200(runState: RunState, currentStorage: Uint8Array, originalStorage: Uint8Array, value: Uint8Array, key: Uint8Array, common: Common): bigint;
|
|
13
|
+
//# sourceMappingURL=EIP2200.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EIP2200.d.ts","sourceRoot":"","sources":["../../../src/opcodes/EIP2200.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEjD;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,UAAU,EAC1B,eAAe,EAAE,UAAU,EAC3B,KAAK,EAAE,UAAU,EACjB,GAAG,EAAE,UAAU,EACf,MAAM,EAAE,MAAM,UA6Df"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { equalsBytes } from '@feelyourprotocol/util';
|
|
2
|
+
import { EVMError } from "../errors.js";
|
|
3
|
+
import { adjustSstoreGasEIP2929 } from "./EIP2929.js";
|
|
4
|
+
import { trap } from "./util.js";
|
|
5
|
+
/**
|
|
6
|
+
* Adjusts gas usage and refunds of SStore ops per EIP-2200 (Istanbul)
|
|
7
|
+
*
|
|
8
|
+
* @param {RunState} runState
|
|
9
|
+
* @param {Uint8Array} currentStorage
|
|
10
|
+
* @param {Uint8Array} originalStorage
|
|
11
|
+
* @param {Uint8Array} value
|
|
12
|
+
* @param {Common} common
|
|
13
|
+
*/
|
|
14
|
+
export function updateSstoreGasEIP2200(runState, currentStorage, originalStorage, value, key, common) {
|
|
15
|
+
// Fail if not enough gas is left
|
|
16
|
+
if (runState.interpreter.getGasLeft() <= common.param('sstoreSentryEIP2200Gas')) {
|
|
17
|
+
trap(EVMError.errorMessages.OUT_OF_GAS);
|
|
18
|
+
}
|
|
19
|
+
// Noop
|
|
20
|
+
if (equalsBytes(currentStorage, value)) {
|
|
21
|
+
const sstoreNoopCost = common.param('sstoreNoopEIP2200Gas');
|
|
22
|
+
return adjustSstoreGasEIP2929(runState, key, sstoreNoopCost, 'noop', common);
|
|
23
|
+
}
|
|
24
|
+
if (equalsBytes(originalStorage, currentStorage)) {
|
|
25
|
+
// Create slot
|
|
26
|
+
if (originalStorage.length === 0) {
|
|
27
|
+
return common.param('sstoreInitEIP2200Gas');
|
|
28
|
+
}
|
|
29
|
+
// Delete slot
|
|
30
|
+
if (value.length === 0) {
|
|
31
|
+
runState.interpreter.refundGas(common.param('sstoreClearRefundEIP2200Gas'), 'EIP-2200 -> sstoreClearRefundEIP2200');
|
|
32
|
+
}
|
|
33
|
+
// Write existing slot
|
|
34
|
+
return common.param('sstoreCleanEIP2200Gas');
|
|
35
|
+
}
|
|
36
|
+
if (originalStorage.length > 0) {
|
|
37
|
+
if (currentStorage.length === 0) {
|
|
38
|
+
// Recreate slot
|
|
39
|
+
runState.interpreter.subRefund(common.param('sstoreClearRefundEIP2200Gas'), 'EIP-2200 -> sstoreClearRefundEIP2200');
|
|
40
|
+
}
|
|
41
|
+
else if (value.length === 0) {
|
|
42
|
+
// Delete slot
|
|
43
|
+
runState.interpreter.refundGas(common.param('sstoreClearRefundEIP2200Gas'), 'EIP-2200 -> sstoreClearRefundEIP2200');
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
if (equalsBytes(originalStorage, value)) {
|
|
47
|
+
if (originalStorage.length === 0) {
|
|
48
|
+
// Reset to original non-existent slot
|
|
49
|
+
const sstoreInitRefund = common.param('sstoreInitRefundEIP2200Gas');
|
|
50
|
+
runState.interpreter.refundGas(adjustSstoreGasEIP2929(runState, key, sstoreInitRefund, 'initRefund', common), 'EIP-2200 -> initRefund');
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
// Reset to original existing slot
|
|
54
|
+
const sstoreCleanRefund = common.param('sstoreCleanRefundEIP2200Gas');
|
|
55
|
+
runState.interpreter.refundGas(BigInt(adjustSstoreGasEIP2929(runState, key, sstoreCleanRefund, 'cleanRefund', common)), 'EIP-2200 -> cleanRefund');
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// Dirty update
|
|
59
|
+
return common.param('sstoreDirtyEIP2200Gas');
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=EIP2200.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EIP2200.js","sourceRoot":"","sources":["../../../src/opcodes/EIP2200.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { Common } from '@feelyourprotocol/common';
|
|
2
|
+
import type { RunState } from '../interpreter.ts';
|
|
3
|
+
/**
|
|
4
|
+
* Returns the gas cost for accessing an address WITHOUT any side effects.
|
|
5
|
+
* Use this to check if you have enough gas before committing to the access.
|
|
6
|
+
*
|
|
7
|
+
* @param {RunState} runState
|
|
8
|
+
* @param {Uint8Array} address
|
|
9
|
+
* @param {Common} common
|
|
10
|
+
* @param {Boolean} chargeGas (default: true)
|
|
11
|
+
* @param {Boolean} isSelfdestruct (default: false)
|
|
12
|
+
* @returns {bigint} The gas cost for this address access
|
|
13
|
+
*/
|
|
14
|
+
export declare function getAddressAccessCost(runState: RunState, address: Uint8Array, common: Common, chargeGas?: boolean, isSelfdestruct?: boolean): bigint;
|
|
15
|
+
/**
|
|
16
|
+
* Warms an address (adds to EIP-2929 accessed addresses set).
|
|
17
|
+
* Call this AFTER verifying you have enough gas for the access.
|
|
18
|
+
*
|
|
19
|
+
* @param {RunState} runState
|
|
20
|
+
* @param {Uint8Array} address
|
|
21
|
+
*/
|
|
22
|
+
export declare function warmAddress(runState: RunState, address: Uint8Array): void;
|
|
23
|
+
/**
|
|
24
|
+
* Adds address to BAL (Block Access List) for EIP-7928.
|
|
25
|
+
* Call this AFTER verifying you have enough gas for the access.
|
|
26
|
+
*
|
|
27
|
+
* @param {RunState} runState
|
|
28
|
+
* @param {Uint8Array} address
|
|
29
|
+
* @param {Common} common
|
|
30
|
+
*/
|
|
31
|
+
export declare function addAddressToBAL(runState: RunState, address: Uint8Array, common: Common): void;
|
|
32
|
+
/**
|
|
33
|
+
* Adds address to accessedAddresses set if not already included.
|
|
34
|
+
* Adjusts cost incurred for executing opcode based on whether address read
|
|
35
|
+
* is warm/cold. (EIP 2929)
|
|
36
|
+
*
|
|
37
|
+
* This is a convenience function that combines getAddressAccessCost + warmAddress.
|
|
38
|
+
* For fine-grained control (e.g., EIP-7928 BAL with OOG checks), use the
|
|
39
|
+
* individual functions instead.
|
|
40
|
+
*
|
|
41
|
+
* @param {RunState} runState
|
|
42
|
+
* @param {Uint8Array} address
|
|
43
|
+
* @param {Common} common
|
|
44
|
+
* @param {Boolean} chargeGas (default: true)
|
|
45
|
+
* @param {Boolean} isSelfdestruct (default: false)
|
|
46
|
+
*/
|
|
47
|
+
export declare function accessAddressEIP2929(runState: RunState, address: Uint8Array, common: Common, chargeGas?: boolean, isSelfdestruct?: boolean): bigint;
|
|
48
|
+
/**
|
|
49
|
+
* Adds (address, key) to accessedStorage tuple set if not already included.
|
|
50
|
+
* Adjusts cost incurred for executing opcode based on whether storage read
|
|
51
|
+
* is warm/cold. (EIP 2929)
|
|
52
|
+
* @param {RunState} runState
|
|
53
|
+
* @param {Uint8Array} key (to storage slot)
|
|
54
|
+
* @param {Common} common
|
|
55
|
+
*/
|
|
56
|
+
export declare function accessStorageEIP2929(runState: RunState, key: Uint8Array, isSstore: boolean, common: Common, chargeGas?: boolean): bigint;
|
|
57
|
+
/**
|
|
58
|
+
* Adjusts cost of SSTORE_RESET_GAS or SLOAD (aka sstorenoop) (EIP-2200) downward when storage
|
|
59
|
+
* location is already warm
|
|
60
|
+
* @param {RunState} runState
|
|
61
|
+
* @param {Uint8Array} key storage slot
|
|
62
|
+
* @param {BigInt} defaultCost SSTORE_RESET_GAS / SLOAD
|
|
63
|
+
* @param {string} costName parameter name ('noop')
|
|
64
|
+
* @param {Common} common
|
|
65
|
+
* @return {BigInt} adjusted cost
|
|
66
|
+
*/
|
|
67
|
+
export declare function adjustSstoreGasEIP2929(runState: RunState, key: Uint8Array, defaultCost: bigint, costName: string, common: Common): bigint;
|
|
68
|
+
//# sourceMappingURL=EIP2929.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EIP2929.d.ts","sourceRoot":"","sources":["../../../src/opcodes/EIP2929.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEjD;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,MAAM,EACd,SAAS,UAAO,EAChB,cAAc,UAAQ,GACrB,MAAM,CAqBR;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI,CAIzE;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAK7F;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,MAAM,EACd,SAAS,UAAO,EAChB,cAAc,UAAQ,GACrB,MAAM,CAMR;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,UAAU,EACf,QAAQ,EAAE,OAAO,EACjB,MAAM,EAAE,MAAM,EACd,SAAS,UAAO,GACf,MAAM,CAmBR;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,UAAU,EACf,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,MAAM,CAmBR"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { BIGINT_0, bytesToHex } from '@feelyourprotocol/util';
|
|
2
|
+
/**
|
|
3
|
+
* Returns the gas cost for accessing an address WITHOUT any side effects.
|
|
4
|
+
* Use this to check if you have enough gas before committing to the access.
|
|
5
|
+
*
|
|
6
|
+
* @param {RunState} runState
|
|
7
|
+
* @param {Uint8Array} address
|
|
8
|
+
* @param {Common} common
|
|
9
|
+
* @param {Boolean} chargeGas (default: true)
|
|
10
|
+
* @param {Boolean} isSelfdestruct (default: false)
|
|
11
|
+
* @returns {bigint} The gas cost for this address access
|
|
12
|
+
*/
|
|
13
|
+
export function getAddressAccessCost(runState, address, common, chargeGas = true, isSelfdestruct = false) {
|
|
14
|
+
if (!common.isActivatedEIP(2929))
|
|
15
|
+
return BIGINT_0;
|
|
16
|
+
const isCold = !runState.interpreter.journal.isWarmedAddress(address);
|
|
17
|
+
if (isCold) {
|
|
18
|
+
// CREATE, CREATE2 opcodes have the address warmed for free.
|
|
19
|
+
// selfdestruct beneficiary address reads are charged an *additional* cold access
|
|
20
|
+
// if binary tree not activated
|
|
21
|
+
if (chargeGas && !common.isActivatedEIP(7864)) {
|
|
22
|
+
return common.param('coldaccountaccessGas');
|
|
23
|
+
}
|
|
24
|
+
else if (chargeGas && common.isActivatedEIP(7864)) {
|
|
25
|
+
// If binary tree is active, then the warmstoragereadGas should still be charged
|
|
26
|
+
// This is because otherwise opcodes will have cost 0 (this is thus the base fee)
|
|
27
|
+
return common.param('warmstoragereadGas');
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
else if (chargeGas && !isSelfdestruct) {
|
|
31
|
+
// Warm: (selfdestruct beneficiary address reads are not charged when warm)
|
|
32
|
+
return common.param('warmstoragereadGas');
|
|
33
|
+
}
|
|
34
|
+
return BIGINT_0;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Warms an address (adds to EIP-2929 accessed addresses set).
|
|
38
|
+
* Call this AFTER verifying you have enough gas for the access.
|
|
39
|
+
*
|
|
40
|
+
* @param {RunState} runState
|
|
41
|
+
* @param {Uint8Array} address
|
|
42
|
+
*/
|
|
43
|
+
export function warmAddress(runState, address) {
|
|
44
|
+
if (!runState.interpreter.journal.isWarmedAddress(address)) {
|
|
45
|
+
runState.interpreter.journal.addWarmedAddress(address);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Adds address to BAL (Block Access List) for EIP-7928.
|
|
50
|
+
* Call this AFTER verifying you have enough gas for the access.
|
|
51
|
+
*
|
|
52
|
+
* @param {RunState} runState
|
|
53
|
+
* @param {Uint8Array} address
|
|
54
|
+
* @param {Common} common
|
|
55
|
+
*/
|
|
56
|
+
export function addAddressToBAL(runState, address, common) {
|
|
57
|
+
if (common.isActivatedEIP(7928)) {
|
|
58
|
+
const addressHex = bytesToHex(address);
|
|
59
|
+
runState.interpreter._evm.blockLevelAccessList?.addAddress(addressHex);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Adds address to accessedAddresses set if not already included.
|
|
64
|
+
* Adjusts cost incurred for executing opcode based on whether address read
|
|
65
|
+
* is warm/cold. (EIP 2929)
|
|
66
|
+
*
|
|
67
|
+
* This is a convenience function that combines getAddressAccessCost + warmAddress.
|
|
68
|
+
* For fine-grained control (e.g., EIP-7928 BAL with OOG checks), use the
|
|
69
|
+
* individual functions instead.
|
|
70
|
+
*
|
|
71
|
+
* @param {RunState} runState
|
|
72
|
+
* @param {Uint8Array} address
|
|
73
|
+
* @param {Common} common
|
|
74
|
+
* @param {Boolean} chargeGas (default: true)
|
|
75
|
+
* @param {Boolean} isSelfdestruct (default: false)
|
|
76
|
+
*/
|
|
77
|
+
export function accessAddressEIP2929(runState, address, common, chargeGas = true, isSelfdestruct = false) {
|
|
78
|
+
if (!common.isActivatedEIP(2929))
|
|
79
|
+
return BIGINT_0;
|
|
80
|
+
const cost = getAddressAccessCost(runState, address, common, chargeGas, isSelfdestruct);
|
|
81
|
+
warmAddress(runState, address);
|
|
82
|
+
return cost;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Adds (address, key) to accessedStorage tuple set if not already included.
|
|
86
|
+
* Adjusts cost incurred for executing opcode based on whether storage read
|
|
87
|
+
* is warm/cold. (EIP 2929)
|
|
88
|
+
* @param {RunState} runState
|
|
89
|
+
* @param {Uint8Array} key (to storage slot)
|
|
90
|
+
* @param {Common} common
|
|
91
|
+
*/
|
|
92
|
+
export function accessStorageEIP2929(runState, key, isSstore, common, chargeGas = true) {
|
|
93
|
+
if (!common.isActivatedEIP(2929))
|
|
94
|
+
return BIGINT_0;
|
|
95
|
+
const address = runState.interpreter.getAddress().bytes;
|
|
96
|
+
const slotIsCold = !runState.interpreter.journal.isWarmedStorage(address, key);
|
|
97
|
+
// Cold (SLOAD and SSTORE)
|
|
98
|
+
if (slotIsCold) {
|
|
99
|
+
runState.interpreter.journal.addWarmedStorage(address, key);
|
|
100
|
+
if (chargeGas && !(common.isActivatedEIP(6800) || common.isActivatedEIP(7864))) {
|
|
101
|
+
return common.param('coldsloadGas');
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
else if (chargeGas &&
|
|
105
|
+
(!isSstore || common.isActivatedEIP(6800) || common.isActivatedEIP(7864))) {
|
|
106
|
+
return common.param('warmstoragereadGas');
|
|
107
|
+
}
|
|
108
|
+
return BIGINT_0;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Adjusts cost of SSTORE_RESET_GAS or SLOAD (aka sstorenoop) (EIP-2200) downward when storage
|
|
112
|
+
* location is already warm
|
|
113
|
+
* @param {RunState} runState
|
|
114
|
+
* @param {Uint8Array} key storage slot
|
|
115
|
+
* @param {BigInt} defaultCost SSTORE_RESET_GAS / SLOAD
|
|
116
|
+
* @param {string} costName parameter name ('noop')
|
|
117
|
+
* @param {Common} common
|
|
118
|
+
* @return {BigInt} adjusted cost
|
|
119
|
+
*/
|
|
120
|
+
export function adjustSstoreGasEIP2929(runState, key, defaultCost, costName, common) {
|
|
121
|
+
if (!common.isActivatedEIP(2929))
|
|
122
|
+
return defaultCost;
|
|
123
|
+
const address = runState.interpreter.getAddress().bytes;
|
|
124
|
+
const warmRead = common.param('warmstoragereadGas');
|
|
125
|
+
const coldSload = common.param('coldsloadGas');
|
|
126
|
+
if (runState.interpreter.journal.isWarmedStorage(address, key)) {
|
|
127
|
+
switch (costName) {
|
|
128
|
+
case 'noop':
|
|
129
|
+
return warmRead;
|
|
130
|
+
case 'initRefund':
|
|
131
|
+
return common.param('sstoreInitEIP2200Gas') - warmRead;
|
|
132
|
+
case 'cleanRefund':
|
|
133
|
+
return common.param('sstoreResetGas') - coldSload - warmRead;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return defaultCost;
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=EIP2929.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EIP2929.js","sourceRoot":"","sources":["../../../src/opcodes/EIP2929.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { Common } from '@feelyourprotocol/common';
|
|
2
|
+
import { type CustomOpcode } from '../types.ts';
|
|
3
|
+
import type { OpHandler } from './functions.ts';
|
|
4
|
+
import type { AsyncDynamicGasHandler, SyncDynamicGasHandler } from './gas.ts';
|
|
5
|
+
export declare class Opcode {
|
|
6
|
+
readonly code: number;
|
|
7
|
+
readonly name: string;
|
|
8
|
+
readonly fullName: string;
|
|
9
|
+
readonly fee: number;
|
|
10
|
+
readonly feeBigInt: bigint;
|
|
11
|
+
readonly isAsync: boolean;
|
|
12
|
+
readonly dynamicGas: boolean;
|
|
13
|
+
readonly isInvalid: boolean;
|
|
14
|
+
constructor({ code, name, fullName, fee, isAsync, dynamicGas, }: {
|
|
15
|
+
code: number;
|
|
16
|
+
name: string;
|
|
17
|
+
fullName: string;
|
|
18
|
+
fee: number;
|
|
19
|
+
isAsync: boolean;
|
|
20
|
+
dynamicGas: boolean;
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
export type OpcodeList = Map<number, Opcode>;
|
|
24
|
+
type OpcodeContext = {
|
|
25
|
+
dynamicGasHandlers: Map<number, AsyncDynamicGasHandler | SyncDynamicGasHandler>;
|
|
26
|
+
handlers: Map<number, OpHandler>;
|
|
27
|
+
opcodes: OpcodeList;
|
|
28
|
+
opcodeMap: OpcodeMap;
|
|
29
|
+
};
|
|
30
|
+
export type OpcodeMapEntry = {
|
|
31
|
+
opcodeInfo: Opcode;
|
|
32
|
+
opHandler: OpHandler;
|
|
33
|
+
gasHandler: AsyncDynamicGasHandler | SyncDynamicGasHandler;
|
|
34
|
+
};
|
|
35
|
+
export type OpcodeMap = OpcodeMapEntry[];
|
|
36
|
+
/**
|
|
37
|
+
* Get suitable opcodes for the required hardfork.
|
|
38
|
+
*
|
|
39
|
+
* @param common {Common} Ethereumjs Common metadata object.
|
|
40
|
+
* @param customOpcodes List with custom opcodes (see EVM `customOpcodes` option description).
|
|
41
|
+
* @returns {OpcodeList} Opcodes dictionary object.
|
|
42
|
+
*/
|
|
43
|
+
export declare function getOpcodesForHF(common: Common, customOpcodes?: CustomOpcode[]): OpcodeContext;
|
|
44
|
+
export {};
|
|
45
|
+
//# sourceMappingURL=codes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codes.d.ts","sourceRoot":"","sources":["../../../src/opcodes/codes.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,KAAK,YAAY,EAAe,MAAM,aAAa,CAAA;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,KAAK,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAA;AAE7E,qBAAa,MAAM;IACjB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;gBAEf,EACV,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,GAAG,EACH,OAAO,EACP,UAAU,GACX,EAAE;QACD,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,MAAM,CAAA;QACZ,QAAQ,EAAE,MAAM,CAAA;QAChB,GAAG,EAAE,MAAM,CAAA;QACX,OAAO,EAAE,OAAO,CAAA;QAChB,UAAU,EAAE,OAAO,CAAA;KACpB;CAaF;AAED,MAAM,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAoX5C,KAAK,aAAa,GAAG;IACnB,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,sBAAsB,GAAG,qBAAqB,CAAC,CAAA;IAC/E,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IAChC,OAAO,EAAE,UAAU,CAAA;IACnB,SAAS,EAAE,SAAS,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,SAAS,CAAA;IACpB,UAAU,EAAE,sBAAsB,GAAG,qBAAqB,CAAA;CAC3D,CAAA;AACD,MAAM,MAAM,SAAS,GAAG,cAAc,EAAE,CAAA;AAExC;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,YAAY,EAAE,GAAG,aAAa,CAmF7F"}
|