@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,308 @@
|
|
|
1
|
+
import { BinaryTreeAccessedStateType } from '@feelyourprotocol/common';
|
|
2
|
+
import { BIGINT_0, BINARY_TREE_BASIC_DATA_LEAF_KEY, BINARY_TREE_CODE_HASH_LEAF_KEY, BINARY_TREE_CODE_OFFSET, BINARY_TREE_HEADER_STORAGE_OFFSET, BINARY_TREE_MAIN_STORAGE_OFFSET, BINARY_TREE_NODE_WIDTH, bytesToHex, equalsBytes, getBinaryTreeIndicesForCodeChunk, getBinaryTreeIndicesForStorageSlot, getBinaryTreeKey, getBinaryTreeStem, hexToBytes, intToBytes, } from '@feelyourprotocol/util';
|
|
3
|
+
import debugDefault from 'debug';
|
|
4
|
+
import { ChunkCache } from "./chunkCache.js";
|
|
5
|
+
import { StemCache } from "./stemCache.js";
|
|
6
|
+
const debug = debugDefault('evm:binaryTree:aw');
|
|
7
|
+
/**
|
|
8
|
+
* Tree key constants.
|
|
9
|
+
*/
|
|
10
|
+
const WitnessBranchReadCost = BigInt(1900);
|
|
11
|
+
const WitnessChunkReadCost = BigInt(200);
|
|
12
|
+
const WitnessBranchWriteCost = BigInt(3000);
|
|
13
|
+
const WitnessChunkWriteCost = BigInt(500);
|
|
14
|
+
const WitnessChunkFillCost = BigInt(6200);
|
|
15
|
+
export function decodeBinaryAccessState(treeIndex, chunkIndex) {
|
|
16
|
+
const position = BigInt(treeIndex) * BigInt(BINARY_TREE_NODE_WIDTH) + BigInt(chunkIndex);
|
|
17
|
+
switch (position) {
|
|
18
|
+
case BigInt(0):
|
|
19
|
+
return { type: BinaryTreeAccessedStateType.BasicData };
|
|
20
|
+
case BigInt(1):
|
|
21
|
+
return { type: BinaryTreeAccessedStateType.CodeHash };
|
|
22
|
+
default:
|
|
23
|
+
if (position < BINARY_TREE_HEADER_STORAGE_OFFSET) {
|
|
24
|
+
throw Error(`No attribute yet stored >=2 and <${BINARY_TREE_HEADER_STORAGE_OFFSET}`);
|
|
25
|
+
}
|
|
26
|
+
if (position >= BINARY_TREE_HEADER_STORAGE_OFFSET && position < BINARY_TREE_CODE_OFFSET) {
|
|
27
|
+
const slot = position - BigInt(BINARY_TREE_HEADER_STORAGE_OFFSET);
|
|
28
|
+
return { type: BinaryTreeAccessedStateType.Storage, slot };
|
|
29
|
+
}
|
|
30
|
+
else if (position >= BINARY_TREE_CODE_OFFSET &&
|
|
31
|
+
position < BINARY_TREE_MAIN_STORAGE_OFFSET) {
|
|
32
|
+
const codeChunkIdx = Number(position) - BINARY_TREE_CODE_OFFSET;
|
|
33
|
+
return {
|
|
34
|
+
type: BinaryTreeAccessedStateType.Code,
|
|
35
|
+
codeOffset: codeChunkIdx * 31,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
else if (position >= BINARY_TREE_MAIN_STORAGE_OFFSET) {
|
|
39
|
+
const slot = BigInt(position - BINARY_TREE_MAIN_STORAGE_OFFSET);
|
|
40
|
+
return { type: BinaryTreeAccessedStateType.Storage, slot };
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
throw Error(`Invalid treeIndex=${treeIndex} chunkIndex=${chunkIndex} for binary tree access`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export class BinaryTreeAccessWitness {
|
|
48
|
+
constructor(opts) {
|
|
49
|
+
this.stemCache = new StemCache();
|
|
50
|
+
this.chunkCache = new ChunkCache();
|
|
51
|
+
this.hashFunction = opts.hashFunction;
|
|
52
|
+
this.stems = opts.stems ?? new Map();
|
|
53
|
+
this.chunks = opts.chunks ?? new Map();
|
|
54
|
+
}
|
|
55
|
+
readAccountBasicData(address) {
|
|
56
|
+
return this.touchAddressOnReadAndComputeGas(address, 0, BINARY_TREE_BASIC_DATA_LEAF_KEY);
|
|
57
|
+
}
|
|
58
|
+
writeAccountBasicData(address) {
|
|
59
|
+
return this.touchAddressOnWriteAndComputeGas(address, 0, BINARY_TREE_BASIC_DATA_LEAF_KEY);
|
|
60
|
+
}
|
|
61
|
+
readAccountCodeHash(address) {
|
|
62
|
+
return this.touchAddressOnReadAndComputeGas(address, 0, BINARY_TREE_CODE_HASH_LEAF_KEY);
|
|
63
|
+
}
|
|
64
|
+
writeAccountCodeHash(address) {
|
|
65
|
+
return this.touchAddressOnWriteAndComputeGas(address, 0, BINARY_TREE_CODE_HASH_LEAF_KEY);
|
|
66
|
+
}
|
|
67
|
+
readAccountHeader(address) {
|
|
68
|
+
let gas = BIGINT_0;
|
|
69
|
+
gas += this.readAccountBasicData(address);
|
|
70
|
+
gas += this.readAccountCodeHash(address);
|
|
71
|
+
return gas;
|
|
72
|
+
}
|
|
73
|
+
writeAccountHeader(address) {
|
|
74
|
+
let gas = BIGINT_0;
|
|
75
|
+
gas += this.writeAccountBasicData(address);
|
|
76
|
+
gas += this.writeAccountCodeHash(address);
|
|
77
|
+
return gas;
|
|
78
|
+
}
|
|
79
|
+
readAccountCodeChunks(contract, startPc, endPc) {
|
|
80
|
+
let gas = BIGINT_0;
|
|
81
|
+
for (let chunkNum = Math.floor(startPc / 31); chunkNum <= Math.floor(endPc / 31); chunkNum++) {
|
|
82
|
+
const { treeIndex, subIndex } = getBinaryTreeIndicesForCodeChunk(chunkNum);
|
|
83
|
+
gas += this.touchAddressOnReadAndComputeGas(contract, treeIndex, subIndex);
|
|
84
|
+
}
|
|
85
|
+
return gas;
|
|
86
|
+
}
|
|
87
|
+
writeAccountCodeChunks(contract, startPc, endPc) {
|
|
88
|
+
let gas = BIGINT_0;
|
|
89
|
+
for (let chunkNum = Math.floor(startPc / 31); chunkNum <= Math.floor(endPc / 31); chunkNum++) {
|
|
90
|
+
const { treeIndex, subIndex } = getBinaryTreeIndicesForCodeChunk(chunkNum);
|
|
91
|
+
gas += this.touchAddressOnWriteAndComputeGas(contract, treeIndex, subIndex);
|
|
92
|
+
}
|
|
93
|
+
return gas;
|
|
94
|
+
}
|
|
95
|
+
readAccountStorage(address, storageSlot) {
|
|
96
|
+
const { treeIndex, subIndex } = getBinaryTreeIndicesForStorageSlot(storageSlot);
|
|
97
|
+
return this.touchAddressOnReadAndComputeGas(address, treeIndex, subIndex);
|
|
98
|
+
}
|
|
99
|
+
writeAccountStorage(address, storageSlot) {
|
|
100
|
+
const { treeIndex, subIndex } = getBinaryTreeIndicesForStorageSlot(storageSlot);
|
|
101
|
+
return this.touchAddressOnWriteAndComputeGas(address, treeIndex, subIndex);
|
|
102
|
+
}
|
|
103
|
+
touchAddressOnWriteAndComputeGas(address, treeIndex, subIndex) {
|
|
104
|
+
return this.touchAddressAndComputeGas(address, treeIndex, subIndex, {
|
|
105
|
+
isWrite: true,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
touchAddressOnReadAndComputeGas(address, treeIndex, subIndex) {
|
|
109
|
+
return this.touchAddressAndComputeGas(address, treeIndex, subIndex, {
|
|
110
|
+
isWrite: false,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
touchAddressAndComputeGas(address, treeIndex, subIndex, { isWrite }) {
|
|
114
|
+
let gas = BIGINT_0;
|
|
115
|
+
const { stemRead, stemWrite, chunkRead, chunkWrite, chunkFill } = this.touchAddress(address, treeIndex, subIndex, { isWrite });
|
|
116
|
+
if (stemRead === true) {
|
|
117
|
+
gas += WitnessBranchReadCost;
|
|
118
|
+
}
|
|
119
|
+
if (stemWrite === true) {
|
|
120
|
+
gas += WitnessBranchWriteCost;
|
|
121
|
+
}
|
|
122
|
+
if (chunkRead === true) {
|
|
123
|
+
gas += WitnessChunkReadCost;
|
|
124
|
+
}
|
|
125
|
+
if (chunkWrite === true) {
|
|
126
|
+
gas += WitnessChunkWriteCost;
|
|
127
|
+
}
|
|
128
|
+
if (chunkFill === true) {
|
|
129
|
+
gas += WitnessChunkFillCost;
|
|
130
|
+
}
|
|
131
|
+
debug(`touchAddressAndComputeGas=${gas} address=${address} treeIndex=${treeIndex} subIndex=${subIndex}`);
|
|
132
|
+
return gas;
|
|
133
|
+
}
|
|
134
|
+
touchAddress(address, treeIndex, subIndex, { isWrite } = {}) {
|
|
135
|
+
let stemRead = false, stemWrite = false, chunkRead = false, chunkWrite = false;
|
|
136
|
+
// currently there are no gas charges for setting the chunk for the first time
|
|
137
|
+
// i.e. no fill cost is charged right now
|
|
138
|
+
const chunkFill = false;
|
|
139
|
+
const accessedStemKey = getBinaryTreeStem(this.hashFunction, address, treeIndex);
|
|
140
|
+
const accessedStemHex = bytesToHex(accessedStemKey);
|
|
141
|
+
let accessedStem = this.stemCache.get(accessedStemHex) ?? this.stems.get(accessedStemHex);
|
|
142
|
+
if (accessedStem === undefined) {
|
|
143
|
+
stemRead = true;
|
|
144
|
+
accessedStem = { address, treeIndex };
|
|
145
|
+
this.stemCache.set(accessedStemHex, accessedStem);
|
|
146
|
+
}
|
|
147
|
+
const accessedChunkKey = getBinaryTreeKey(accessedStemKey, typeof subIndex === 'number' ? intToBytes(subIndex) : subIndex);
|
|
148
|
+
const accessedChunkKeyHex = bytesToHex(accessedChunkKey);
|
|
149
|
+
let accessedChunk = this.chunkCache.get(accessedChunkKeyHex) ?? this.chunks.get(accessedChunkKeyHex);
|
|
150
|
+
if (accessedChunk === undefined) {
|
|
151
|
+
chunkRead = true;
|
|
152
|
+
accessedChunk = {};
|
|
153
|
+
this.chunkCache.set(accessedChunkKeyHex, accessedChunk);
|
|
154
|
+
}
|
|
155
|
+
if (isWrite === true) {
|
|
156
|
+
if (accessedStem.write !== true) {
|
|
157
|
+
stemWrite = true;
|
|
158
|
+
// this would also directly modify in the map
|
|
159
|
+
accessedStem.write = true;
|
|
160
|
+
}
|
|
161
|
+
if (accessedChunk.write !== true) {
|
|
162
|
+
chunkWrite = true;
|
|
163
|
+
// this would also directly modify in the map
|
|
164
|
+
accessedChunk.write = true;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
debug(`${accessedChunkKeyHex}: isWrite=${isWrite} for stemRead=${stemRead} stemWrite=${stemWrite} chunkRead=${chunkRead} chunkWrite=${chunkWrite} chunkFill=${chunkFill}`);
|
|
168
|
+
return { stemRead, stemWrite, chunkRead, chunkWrite, chunkFill };
|
|
169
|
+
}
|
|
170
|
+
merge(accessWitness) {
|
|
171
|
+
for (const [chunkKey, chunkValue] of accessWitness.chunks.entries()) {
|
|
172
|
+
const stemKey = chunkKey.slice(0, chunkKey.length - 2);
|
|
173
|
+
const stem = accessWitness.stems.get(stemKey);
|
|
174
|
+
if (stem === undefined) {
|
|
175
|
+
throw Error(`Internal error: missing stem for the chunkKey=${chunkKey}`);
|
|
176
|
+
}
|
|
177
|
+
const thisStem = this.stems.get(stemKey);
|
|
178
|
+
if (thisStem === undefined) {
|
|
179
|
+
this.stems.set(stemKey, stem);
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
thisStem.write = thisStem.write !== true ? stem.write : true;
|
|
183
|
+
}
|
|
184
|
+
const thisChunk = this.chunks.get(chunkKey);
|
|
185
|
+
if (thisChunk === undefined) {
|
|
186
|
+
this.chunks.set(chunkKey, chunkValue);
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
thisChunk.write = thisChunk.write !== true ? chunkValue.write : true;
|
|
190
|
+
thisChunk.fill = thisChunk.fill !== true ? thisChunk.fill : true;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
commit() {
|
|
195
|
+
const cachedStems = this.stemCache.commit();
|
|
196
|
+
for (const [stemKey, stemValue] of cachedStems) {
|
|
197
|
+
this.stems.set(stemKey, stemValue);
|
|
198
|
+
}
|
|
199
|
+
const cachedChunks = this.chunkCache.commit();
|
|
200
|
+
for (const [chunkKey, chunkValue] of cachedChunks) {
|
|
201
|
+
this.chunks.set(chunkKey, chunkValue);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
revert() {
|
|
205
|
+
this.stemCache.clear();
|
|
206
|
+
this.chunkCache.clear();
|
|
207
|
+
}
|
|
208
|
+
debugWitnessCost() {
|
|
209
|
+
// Calculate the aggregate gas cost for binary access witness per type
|
|
210
|
+
let stemReads = 0, stemWrites = 0, chunkReads = 0, chunkWrites = 0;
|
|
211
|
+
for (const [_, { write }] of this.stems.entries()) {
|
|
212
|
+
stemReads++;
|
|
213
|
+
if (write === true) {
|
|
214
|
+
stemWrites++;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
for (const [_, { write }] of this.chunks.entries()) {
|
|
218
|
+
chunkReads++;
|
|
219
|
+
if (write === true) {
|
|
220
|
+
chunkWrites++;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
debug(`${stemReads} stem reads, totalling ${BigInt(stemReads) * WitnessBranchReadCost} gas units`);
|
|
224
|
+
debug(`${stemWrites} stem writes, totalling ${BigInt(stemWrites) * WitnessBranchWriteCost} gas units`);
|
|
225
|
+
debug(`${chunkReads} chunk reads, totalling ${BigInt(chunkReads) * WitnessChunkReadCost} gas units`);
|
|
226
|
+
debug(`${chunkWrites} chunk writes, totalling ${BigInt(chunkWrites) * WitnessChunkWriteCost} gas units`);
|
|
227
|
+
}
|
|
228
|
+
*rawAccesses() {
|
|
229
|
+
for (const chunkKey of this.chunks.keys()) {
|
|
230
|
+
// drop the last byte
|
|
231
|
+
const stemKey = chunkKey.slice(0, chunkKey.length - 2);
|
|
232
|
+
const stem = this.stems.get(stemKey);
|
|
233
|
+
if (stem === undefined) {
|
|
234
|
+
throw Error(`Internal error: missing stem for the chunkKey=${chunkKey}`);
|
|
235
|
+
}
|
|
236
|
+
const { address, treeIndex } = stem;
|
|
237
|
+
const chunkIndex = Number(`0x${chunkKey.slice(chunkKey.length - 2)}`);
|
|
238
|
+
const accessedState = { address, treeIndex, chunkIndex, chunkKey };
|
|
239
|
+
yield accessedState;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
*accesses() {
|
|
243
|
+
for (const rawAccess of this.rawAccesses()) {
|
|
244
|
+
const { address, treeIndex, chunkIndex, chunkKey } = rawAccess;
|
|
245
|
+
const accessedState = decodeBinaryAccessState(treeIndex, chunkIndex);
|
|
246
|
+
yield { ...accessedState, address, chunkKey };
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Generate a {@link BinaryTreeExecutionWitness} from a state manager and an access witness.
|
|
252
|
+
* @param stateManager - The state manager containing the state to generate the witness for.
|
|
253
|
+
* @param accessWitness - The access witness containing the accessed states.
|
|
254
|
+
* @param parentStateRoot - The parent state root (i.e. prestate root) to generate the witness for.
|
|
255
|
+
* @returns The generated binary tree execution witness
|
|
256
|
+
*/
|
|
257
|
+
export const generateBinaryExecutionWitness = async (stateManager, accessWitness, parentStateRoot) => {
|
|
258
|
+
const tree = stateManager['_tree'];
|
|
259
|
+
await tree['_lock'].acquire();
|
|
260
|
+
const postStateRoot = await stateManager.getStateRoot();
|
|
261
|
+
const ew = {
|
|
262
|
+
stateDiff: [],
|
|
263
|
+
parentStateRoot: bytesToHex(parentStateRoot),
|
|
264
|
+
proof: undefined, // Binary proofs are not implemented
|
|
265
|
+
};
|
|
266
|
+
// Generate a map of all stems with their accessed suffixes
|
|
267
|
+
const accessedSuffixes = new Map();
|
|
268
|
+
for (const chunkKey of accessWitness['chunks'].keys()) {
|
|
269
|
+
const stem = chunkKey.slice(0, 64);
|
|
270
|
+
if (accessedSuffixes.has(stem)) {
|
|
271
|
+
const suffixes = accessedSuffixes.get(stem);
|
|
272
|
+
suffixes.push(parseInt(chunkKey.slice(64), 16));
|
|
273
|
+
accessedSuffixes.set(stem, suffixes);
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
accessedSuffixes.set(stem, [parseInt(chunkKey.slice(64), 16)]);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
// Get values from the tree for each stem and suffix
|
|
280
|
+
for (const stem of accessedSuffixes.keys()) {
|
|
281
|
+
tree.root(parentStateRoot);
|
|
282
|
+
const suffixes = accessedSuffixes.get(stem);
|
|
283
|
+
if (suffixes === undefined || suffixes.length === 0)
|
|
284
|
+
continue;
|
|
285
|
+
const currentValues = await tree.get(hexToBytes(stem), suffixes);
|
|
286
|
+
tree.root(postStateRoot);
|
|
287
|
+
const newValues = await tree.get(hexToBytes(stem), suffixes);
|
|
288
|
+
const stemStateDiff = [];
|
|
289
|
+
for (let x = 0; x < suffixes.length; x++) {
|
|
290
|
+
// skip if both are the same
|
|
291
|
+
const currentValue = currentValues[x];
|
|
292
|
+
const newValue = newValues[x];
|
|
293
|
+
if (currentValue instanceof Uint8Array &&
|
|
294
|
+
newValue instanceof Uint8Array &&
|
|
295
|
+
equalsBytes(currentValue, newValue))
|
|
296
|
+
continue;
|
|
297
|
+
stemStateDiff.push({
|
|
298
|
+
suffix: suffixes[x],
|
|
299
|
+
currentValue: currentValue ? bytesToHex(currentValue) : null,
|
|
300
|
+
newValue: newValue ? bytesToHex(newValue) : null,
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
ew.stateDiff.push({ stem, suffixDiffs: stemStateDiff });
|
|
304
|
+
}
|
|
305
|
+
tree['_lock'].release();
|
|
306
|
+
return ew;
|
|
307
|
+
};
|
|
308
|
+
//# sourceMappingURL=binaryTreeAccessWitness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binaryTreeAccessWitness.js","sourceRoot":"","sources":["../../src/binaryTreeAccessWitness.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { PrefixedHexString } from '@feelyourprotocol/util';
|
|
2
|
+
import type { BinaryChunkAccessEvent } from './binaryTreeAccessWitness.ts';
|
|
3
|
+
export declare class ChunkCache {
|
|
4
|
+
cache: Map<PrefixedHexString, BinaryChunkAccessEvent>;
|
|
5
|
+
constructor();
|
|
6
|
+
set(stemKey: PrefixedHexString, accessedStem: BinaryChunkAccessEvent): void;
|
|
7
|
+
get(stemHex: PrefixedHexString): BinaryChunkAccessEvent | undefined;
|
|
8
|
+
del(stemHex: PrefixedHexString): void;
|
|
9
|
+
commit(): [PrefixedHexString, BinaryChunkAccessEvent][];
|
|
10
|
+
clear(): void;
|
|
11
|
+
size(): number;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=chunkCache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunkCache.d.ts","sourceRoot":"","sources":["../../src/chunkCache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AAE1E,qBAAa,UAAU;IACrB,KAAK,EAAE,GAAG,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,CAAA;;IAMrD,GAAG,CAAC,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,sBAAsB;IAIpE,GAAG,CAAC,OAAO,EAAE,iBAAiB,GAAG,sBAAsB,GAAG,SAAS;IAInE,GAAG,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAIrC,MAAM,IAAI,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,EAAE;IAMvD,KAAK,IAAI,IAAI;IAIb,IAAI;CAGL"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export class ChunkCache {
|
|
2
|
+
constructor() {
|
|
3
|
+
this.cache = new Map();
|
|
4
|
+
}
|
|
5
|
+
set(stemKey, accessedStem) {
|
|
6
|
+
this.cache.set(stemKey, accessedStem);
|
|
7
|
+
}
|
|
8
|
+
get(stemHex) {
|
|
9
|
+
return this.cache.get(stemHex);
|
|
10
|
+
}
|
|
11
|
+
del(stemHex) {
|
|
12
|
+
this.cache.delete(stemHex);
|
|
13
|
+
}
|
|
14
|
+
commit() {
|
|
15
|
+
const items = Array.from(this.cache.entries());
|
|
16
|
+
this.clear();
|
|
17
|
+
return items;
|
|
18
|
+
}
|
|
19
|
+
clear() {
|
|
20
|
+
this.cache.clear();
|
|
21
|
+
}
|
|
22
|
+
size() {
|
|
23
|
+
return this.cache.size;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=chunkCache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunkCache.js","sourceRoot":"","sources":["../../src/chunkCache.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,UAAU;IAGrB;QACE,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAA6C,CAAA;IACnE,CAAC;IAED,GAAG,CAAC,OAA0B,EAAE,YAAoC;QAClE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;IACvC,CAAC;IAED,GAAG,CAAC,OAA0B;QAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAChC,CAAC;IAED,GAAG,CAAC,OAA0B;QAC5B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAC5B,CAAC;IAED,MAAM;QACJ,MAAM,KAAK,GAAkD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;QAC7F,IAAI,CAAC,KAAK,EAAE,CAAA;QACZ,OAAO,KAAK,CAAA;IACd,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IACpB,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAA;IACxB,CAAC;CACF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { EVM } from './index.ts';
|
|
2
|
+
import type { EVMOpts } from './index.ts';
|
|
3
|
+
/**
|
|
4
|
+
* Use this async static constructor for the initialization
|
|
5
|
+
* of an EVM object
|
|
6
|
+
*
|
|
7
|
+
* @param createOpts The EVM options
|
|
8
|
+
* @returns A new EVM
|
|
9
|
+
*/
|
|
10
|
+
export declare function createEVM(createOpts?: EVMOpts): Promise<EVM>;
|
|
11
|
+
//# sourceMappingURL=constructors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constructors.d.ts","sourceRoot":"","sources":["../../src/constructors.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAA;AAIhC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEzC;;;;;;GAMG;AACH,wBAAsB,SAAS,CAAC,UAAU,CAAC,EAAE,OAAO,gBAkBnD"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Common, Mainnet } from '@feelyourprotocol/common';
|
|
2
|
+
import { SimpleStateManager } from '@feelyourprotocol/statemanager';
|
|
3
|
+
import { EVM } from "./index.js";
|
|
4
|
+
import { NobleBN254 } from "./precompiles/index.js";
|
|
5
|
+
import { EVMMockBlockchain } from "./types.js";
|
|
6
|
+
/**
|
|
7
|
+
* Use this async static constructor for the initialization
|
|
8
|
+
* of an EVM object
|
|
9
|
+
*
|
|
10
|
+
* @param createOpts The EVM options
|
|
11
|
+
* @returns A new EVM
|
|
12
|
+
*/
|
|
13
|
+
export async function createEVM(createOpts) {
|
|
14
|
+
const opts = createOpts ?? {};
|
|
15
|
+
opts.bn254 = new NobleBN254();
|
|
16
|
+
if (opts.common === undefined) {
|
|
17
|
+
opts.common = new Common({ chain: Mainnet });
|
|
18
|
+
}
|
|
19
|
+
if (opts.blockchain === undefined) {
|
|
20
|
+
opts.blockchain = new EVMMockBlockchain();
|
|
21
|
+
}
|
|
22
|
+
if (opts.stateManager === undefined) {
|
|
23
|
+
opts.stateManager = new SimpleStateManager();
|
|
24
|
+
}
|
|
25
|
+
return new EVM(opts);
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=constructors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constructors.js","sourceRoot":"","sources":["../../src/constructors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAE7D,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAA;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAI9C;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,UAAoB;IAClD,MAAM,IAAI,GAAG,UAAU,IAAK,EAAc,CAAA;IAE1C,IAAI,CAAC,KAAK,GAAG,IAAI,UAAU,EAAE,CAAA;IAE7B,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;IAC9C,CAAC;IAED,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QAClC,IAAI,CAAC,UAAU,GAAG,IAAI,iBAAiB,EAAE,CAAA;IAC3C,CAAC;IAED,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACpC,IAAI,CAAC,YAAY,GAAG,IAAI,kBAAkB,EAAE,CAAA;IAC9C,CAAC;IAED,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,CAAA;AACtB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type Address } from '@feelyourprotocol/util';
|
|
2
|
+
import type { Log } from './types.ts';
|
|
3
|
+
/** EIP-7708 system address (canonical SYSTEM_ADDRESS_BYTES from util) */
|
|
4
|
+
export declare const EIP7708_SYSTEM_ADDRESS: Uint8Array<ArrayBufferLike>;
|
|
5
|
+
/**
|
|
6
|
+
* EIP-7708: keccak256('Transfer(address,address,uint256)')
|
|
7
|
+
* This matches the ERC-20 Transfer event signature
|
|
8
|
+
*/
|
|
9
|
+
export declare const EIP7708_TRANSFER_TOPIC: Uint8Array<ArrayBufferLike>;
|
|
10
|
+
/**
|
|
11
|
+
* EIP-7708: keccak256('Selfdestruct(address,uint256)')
|
|
12
|
+
* Emitted when a contract selfdestructs and burns remaining balance
|
|
13
|
+
*/
|
|
14
|
+
export declare const EIP7708_SELFDESTRUCT_TOPIC: Uint8Array<ArrayBufferLike>;
|
|
15
|
+
/**
|
|
16
|
+
* Creates an EIP-7708 ETH transfer log (used for CALL/CREATE value transfers).
|
|
17
|
+
* EIP-7708 logs are emitted from the system address with Transfer(address,address,uint256) topic.
|
|
18
|
+
*/
|
|
19
|
+
export declare function createEIP7708TransferLog(from: Address, to: Address, value: bigint): Log;
|
|
20
|
+
/**
|
|
21
|
+
* Creates an EIP-7708 SELFDESTRUCT burn log for residual balance finalization.
|
|
22
|
+
*/
|
|
23
|
+
export declare function createEIP7708SelfdestructLog(contract: Address, value: bigint): Log;
|
|
24
|
+
//# sourceMappingURL=eip7708.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eip7708.d.ts","sourceRoot":"","sources":["../../src/eip7708.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EAKb,MAAM,kBAAkB,CAAA;AACzB,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAA;AAErC,yEAAyE;AACzE,eAAO,MAAM,sBAAsB,6BAAuB,CAAA;AAE1D;;;GAGG;AACH,eAAO,MAAM,sBAAsB,6BAElC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,0BAA0B,6BAEtC,CAAA;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,CAKvF;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,CAIlF"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { SYSTEM_ADDRESS_BYTES, bigIntToBytes, hexToBytes, setLengthLeft, } from '@feelyourprotocol/util';
|
|
2
|
+
/** EIP-7708 system address (canonical SYSTEM_ADDRESS_BYTES from util) */
|
|
3
|
+
export const EIP7708_SYSTEM_ADDRESS = SYSTEM_ADDRESS_BYTES;
|
|
4
|
+
/**
|
|
5
|
+
* EIP-7708: keccak256('Transfer(address,address,uint256)')
|
|
6
|
+
* This matches the ERC-20 Transfer event signature
|
|
7
|
+
*/
|
|
8
|
+
export const EIP7708_TRANSFER_TOPIC = hexToBytes('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef');
|
|
9
|
+
/**
|
|
10
|
+
* EIP-7708: keccak256('Selfdestruct(address,uint256)')
|
|
11
|
+
* Emitted when a contract selfdestructs and burns remaining balance
|
|
12
|
+
*/
|
|
13
|
+
export const EIP7708_SELFDESTRUCT_TOPIC = hexToBytes('0x4bfaba3443c1a1836cd362418edc679fc96cae8449cbefccb6457cdf2c943083');
|
|
14
|
+
/**
|
|
15
|
+
* Creates an EIP-7708 ETH transfer log (used for CALL/CREATE value transfers).
|
|
16
|
+
* EIP-7708 logs are emitted from the system address with Transfer(address,address,uint256) topic.
|
|
17
|
+
*/
|
|
18
|
+
export function createEIP7708TransferLog(from, to, value) {
|
|
19
|
+
const fromTopic = setLengthLeft(from.bytes, 32);
|
|
20
|
+
const toTopic = setLengthLeft(to.bytes, 32);
|
|
21
|
+
const data = setLengthLeft(bigIntToBytes(value), 32);
|
|
22
|
+
return [EIP7708_SYSTEM_ADDRESS, [EIP7708_TRANSFER_TOPIC, fromTopic, toTopic], data];
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Creates an EIP-7708 SELFDESTRUCT burn log for residual balance finalization.
|
|
26
|
+
*/
|
|
27
|
+
export function createEIP7708SelfdestructLog(contract, value) {
|
|
28
|
+
const contractTopic = setLengthLeft(contract.bytes, 32);
|
|
29
|
+
const data = setLengthLeft(bigIntToBytes(value), 32);
|
|
30
|
+
return [EIP7708_SYSTEM_ADDRESS, [EIP7708_SELFDESTRUCT_TOPIC, contractTopic], data];
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=eip7708.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eip7708.js","sourceRoot":"","sources":["../../src/eip7708.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,oBAAoB,EACpB,aAAa,EACb,UAAU,EACV,aAAa,GACd,MAAM,kBAAkB,CAAA;AAGzB,yEAAyE;AACzE,MAAM,CAAC,MAAM,sBAAsB,GAAG,oBAAoB,CAAA;AAE1D;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,UAAU,CAC9C,oEAAoE,CACrE,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,UAAU,CAClD,oEAAoE,CACrE,CAAA;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAAa,EAAE,EAAW,EAAE,KAAa;IAChF,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAC/C,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAC3C,MAAM,IAAI,GAAG,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAA;IACpD,OAAO,CAAC,sBAAsB,EAAE,CAAC,sBAAsB,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,CAAA;AACrF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B,CAAC,QAAiB,EAAE,KAAa;IAC3E,MAAM,aAAa,GAAG,aAAa,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IACvD,MAAM,IAAI,GAAG,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAA;IACpD,OAAO,CAAC,sBAAsB,EAAE,CAAC,0BAA0B,EAAE,aAAa,CAAC,EAAE,IAAI,CAAC,CAAA;AACpF,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export declare const FORMAT = 239;
|
|
2
|
+
export declare const MAGIC = 0;
|
|
3
|
+
export declare const VERSION = 1;
|
|
4
|
+
export declare const MIN_HEADER_SIZE = 15;
|
|
5
|
+
export declare const MAX_HEADER_SIZE = 49152;
|
|
6
|
+
export declare const KIND_TYPE = 1;
|
|
7
|
+
export declare const KIND_CODE = 2;
|
|
8
|
+
export declare const KIND_CONTAINER = 3;
|
|
9
|
+
export declare const KIND_DATA = 4;
|
|
10
|
+
export declare const TERMINATOR = 0;
|
|
11
|
+
export declare const TYPE_MIN = 4;
|
|
12
|
+
export declare const TYPE_MAX = 4096;
|
|
13
|
+
export declare const TYPE_DIVISOR = 4;
|
|
14
|
+
export declare const CODE_MIN = 1;
|
|
15
|
+
export declare const CODE_SIZE_MIN = 1;
|
|
16
|
+
export declare const CONTAINER_MIN = 1;
|
|
17
|
+
export declare const CONTAINER_MAX = 256;
|
|
18
|
+
export declare const CONTAINER_SIZE_MIN = 1;
|
|
19
|
+
export declare const INPUTS_MAX = 127;
|
|
20
|
+
export declare const OUTPUTS_MAX = 128;
|
|
21
|
+
export declare const MAX_STACK_HEIGHT = 1023;
|
|
22
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/eof/constants.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,MAAM,MAAO,CAAA;AAC1B,eAAO,MAAM,KAAK,IAAO,CAAA;AACzB,eAAO,MAAM,OAAO,IAAO,CAAA;AAG3B,eAAO,MAAM,eAAe,KAAK,CAAA;AACjC,eAAO,MAAM,eAAe,QAAQ,CAAA;AAEpC,eAAO,MAAM,SAAS,IAAO,CAAA;AAC7B,eAAO,MAAM,SAAS,IAAO,CAAA;AAC7B,eAAO,MAAM,cAAc,IAAO,CAAA;AAClC,eAAO,MAAM,SAAS,IAAO,CAAA;AAC7B,eAAO,MAAM,UAAU,IAAO,CAAA;AAE9B,eAAO,MAAM,QAAQ,IAAS,CAAA;AAC9B,eAAO,MAAM,QAAQ,OAAS,CAAA;AAC9B,eAAO,MAAM,YAAY,IAAI,CAAA;AAE7B,eAAO,MAAM,QAAQ,IAAS,CAAA;AAE9B,eAAO,MAAM,aAAa,IAAI,CAAA;AAE9B,eAAO,MAAM,aAAa,IAAS,CAAA;AACnC,eAAO,MAAM,aAAa,MAAS,CAAA;AAEnC,eAAO,MAAM,kBAAkB,IAAI,CAAA;AAGnC,eAAO,MAAM,UAAU,MAAO,CAAA;AAC9B,eAAO,MAAM,WAAW,MAAO,CAAA;AAG/B,eAAO,MAAM,gBAAgB,OAAS,CAAA"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// Constants, which are taken from https://eips.ethereum.org/EIPS/eip-3540
|
|
2
|
+
// The "starting bytes" of an EOF contract
|
|
3
|
+
export const FORMAT = 0xef;
|
|
4
|
+
export const MAGIC = 0x00;
|
|
5
|
+
export const VERSION = 0x01;
|
|
6
|
+
// The min/max sizes of valid headers
|
|
7
|
+
export const MIN_HEADER_SIZE = 15; // Min size used to invalidate an invalid container quickly
|
|
8
|
+
export const MAX_HEADER_SIZE = 49152; // Max initcode size, EIP 3860
|
|
9
|
+
export const KIND_TYPE = 0x01; // Type byte of types section
|
|
10
|
+
export const KIND_CODE = 0x02; // Type byte of code section
|
|
11
|
+
export const KIND_CONTAINER = 0x03; // Type byte of container section (the only optional section in the header)
|
|
12
|
+
export const KIND_DATA = 0x04; // Type byte of data section
|
|
13
|
+
export const TERMINATOR = 0x00; // Terminator byte of header
|
|
14
|
+
export const TYPE_MIN = 0x0004; // Minimum size of types section
|
|
15
|
+
export const TYPE_MAX = 0x1000; // Maximum size of types section
|
|
16
|
+
export const TYPE_DIVISOR = 4; // Divisor of types: the type section size should be a multiple of this
|
|
17
|
+
export const CODE_MIN = 0x0001; // Minimum size of code section
|
|
18
|
+
export const CODE_SIZE_MIN = 1; // Minimum size of a code section in the body (the actual code)
|
|
19
|
+
export const CONTAINER_MIN = 0x0001; // Minimum size of container section
|
|
20
|
+
export const CONTAINER_MAX = 0x0100; // Maximum size of container section
|
|
21
|
+
export const CONTAINER_SIZE_MIN = 1; // Minimum size of a container in the body
|
|
22
|
+
// Constants regarding the type section in the body of the container
|
|
23
|
+
export const INPUTS_MAX = 0x7f; // Max inputs to a code section in the body
|
|
24
|
+
export const OUTPUTS_MAX = 0x80; // Max outputs of a code section in the body
|
|
25
|
+
// Note: 0x80 special amount, marks the code section as "terminating"
|
|
26
|
+
// A terminating section will exit the current call frame, such as RETURN / STOP opcodes. It will not RETF to another code section
|
|
27
|
+
export const MAX_STACK_HEIGHT = 0x03ff; // Maximum stack height of a code section (enforces that the stack of this section cannot overflow)
|
|
28
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/eof/constants.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAE1E,0CAA0C;AAC1C,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,CAAA;AAC1B,MAAM,CAAC,MAAM,KAAK,GAAG,IAAI,CAAA;AACzB,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAA;AAE3B,qCAAqC;AACrC,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAA,CAAC,2DAA2D;AAC7F,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAA,CAAC,8BAA8B;AAEnE,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAA,CAAC,6BAA6B;AAC3D,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAA,CAAC,4BAA4B;AAC1D,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAA,CAAC,2EAA2E;AAC9G,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAA,CAAC,6BAA6B;AAC3D,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAA,CAAC,4BAA4B;AAE3D,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAA,CAAC,gCAAgC;AAC/D,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAA,CAAC,gCAAgC;AAC/D,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAA,CAAC,uEAAuE;AAErG,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAA,CAAC,+BAA+B;AAE9D,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAA,CAAC,+DAA+D;AAE9F,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAA,CAAC,oCAAoC;AACxE,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAA,CAAC,oCAAoC;AAExE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAA,CAAC,0CAA0C;AAE9E,oEAAoE;AACpE,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAA,CAAC,2CAA2C;AAC1E,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAA,CAAC,4CAA4C;AAC5E,qEAAqE;AACrE,kIAAkI;AAClI,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAA,CAAC,mGAAmG"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { ContainerSectionType } from './verify.ts';
|
|
2
|
+
import type { EVM } from '../evm.ts';
|
|
3
|
+
export type EOFContainerMode = (typeof EOFContainerMode)[keyof typeof EOFContainerMode];
|
|
4
|
+
export declare const EOFContainerMode: {
|
|
5
|
+
readonly Default: "default";
|
|
6
|
+
readonly Initmode: "initMode";
|
|
7
|
+
readonly TxInitmode: "txInitMode";
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* The EOFHeader, describing the header of the EOF container
|
|
11
|
+
*/
|
|
12
|
+
declare class EOFHeader {
|
|
13
|
+
typeSize: number;
|
|
14
|
+
codeSizes: number[];
|
|
15
|
+
containerSizes: number[];
|
|
16
|
+
dataSize: number;
|
|
17
|
+
dataSizePtr: number;
|
|
18
|
+
buffer: Uint8Array;
|
|
19
|
+
private codeStartPos;
|
|
20
|
+
/**
|
|
21
|
+
* Create an EOF header. Performs various validation checks inside the constructor
|
|
22
|
+
* @param input either a raw header or a complete container
|
|
23
|
+
*/
|
|
24
|
+
constructor(input: Uint8Array);
|
|
25
|
+
sections(): (number | number[])[];
|
|
26
|
+
sectionSizes(): number[];
|
|
27
|
+
getCodePosition(section: number): number;
|
|
28
|
+
getSectionFromProgramCounter(programCounter: number): number;
|
|
29
|
+
}
|
|
30
|
+
export interface TypeSection {
|
|
31
|
+
inputs: number;
|
|
32
|
+
outputs: number;
|
|
33
|
+
maxStackHeight: number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* The EOF body holds the contents of the EOF container, such as the code sections (bytecode),
|
|
37
|
+
* the subcontainers (EOF containers to be deployed via EOFCREATE) and the data section
|
|
38
|
+
*/
|
|
39
|
+
declare class EOFBody {
|
|
40
|
+
typeSections: TypeSection[];
|
|
41
|
+
codeSections: Uint8Array[];
|
|
42
|
+
containerSections: Uint8Array[];
|
|
43
|
+
entireCode: Uint8Array;
|
|
44
|
+
dataSection: Uint8Array;
|
|
45
|
+
buffer: Uint8Array;
|
|
46
|
+
txCallData?: Uint8Array;
|
|
47
|
+
constructor(buf: Uint8Array, // Buffer of the body. This should be the entire body. It is not valid to pass an entire EOF container in here
|
|
48
|
+
header: EOFHeader, // EOFHeader corresponding to this body
|
|
49
|
+
eofMode?: EOFContainerMode, // Container mode of EOF
|
|
50
|
+
dataSectionAllowedSmaller?: boolean);
|
|
51
|
+
sections(): (Uint8Array<ArrayBufferLike> | Uint8Array<ArrayBufferLike>[] | TypeSection[])[];
|
|
52
|
+
size(): {
|
|
53
|
+
typeSize: number;
|
|
54
|
+
codeSize: number;
|
|
55
|
+
dataSize: number;
|
|
56
|
+
};
|
|
57
|
+
sectionSizes(): (number | number[])[];
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Main constructor for the EOFContainer
|
|
61
|
+
*/
|
|
62
|
+
export declare class EOFContainer {
|
|
63
|
+
header: EOFHeader;
|
|
64
|
+
body: EOFBody;
|
|
65
|
+
buffer: Uint8Array;
|
|
66
|
+
eofMode: EOFContainerMode;
|
|
67
|
+
/**
|
|
68
|
+
*
|
|
69
|
+
* @param buf Entire container buffer
|
|
70
|
+
* @param eofMode Container mode to validate the container on
|
|
71
|
+
* @param dataSectionAllowedSmaller `true` if the data section is allowed to be smaller than the data section size in the header
|
|
72
|
+
*/
|
|
73
|
+
constructor(buf: Uint8Array, eofMode?: EOFContainerMode, dataSectionAllowedSmaller?: boolean);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* This method validates the EOF. It also performs deeper validation of the body, such as stack/opcode validation
|
|
77
|
+
* This is ONLY necessary when trying to deploy contracts from a transaction: these can submit containers which are invalid
|
|
78
|
+
* Since all deployed EOF containers are valid by definition, `validateEOF` does not need to be called each time an EOF contract is called
|
|
79
|
+
* @param input Full container buffer
|
|
80
|
+
* @param evm EVM, to read opcodes from
|
|
81
|
+
* @param containerMode Container mode to validate on
|
|
82
|
+
* @param eofMode EOF mode to run in
|
|
83
|
+
* @returns The decoded EOF container
|
|
84
|
+
*/
|
|
85
|
+
export declare function validateEOF(input: Uint8Array, evm: EVM, containerMode?: ContainerSectionType, eofMode?: EOFContainerMode): EOFContainer;
|
|
86
|
+
export {};
|
|
87
|
+
//# sourceMappingURL=container.d.ts.map
|