@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,57 @@
|
|
|
1
|
+
import { short } from '@feelyourprotocol/util';
|
|
2
|
+
/**
|
|
3
|
+
* Checks that the gas used remain under the gas limit.
|
|
4
|
+
*
|
|
5
|
+
* @param opts - Precompile input wrapper
|
|
6
|
+
* @param gasUsed - Amount of gas consumed by the precompile
|
|
7
|
+
* @param pName - Human readable precompile name for logging
|
|
8
|
+
* @returns `true` if the gas usage is within the provided limit
|
|
9
|
+
*/
|
|
10
|
+
export const gasLimitCheck = (opts, gasUsed, pName) => {
|
|
11
|
+
if (opts._debug !== undefined) {
|
|
12
|
+
opts._debug(`Run ${pName} precompile data=${short(opts.data)} length=${opts.data.length} gasLimit=${opts.gasLimit} gasUsed=${gasUsed}`);
|
|
13
|
+
}
|
|
14
|
+
if (opts.gasLimit < gasUsed) {
|
|
15
|
+
if (opts._debug !== undefined) {
|
|
16
|
+
opts._debug(`${pName} failed: OOG`);
|
|
17
|
+
}
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
return true;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Checks that the length of the provided data is equal to `length`.
|
|
24
|
+
*
|
|
25
|
+
* @param opts - Precompile input wrapper
|
|
26
|
+
* @param length - Required data length in bytes
|
|
27
|
+
* @param pName - Human readable precompile name for logging
|
|
28
|
+
* @returns `true` if the provided data matches the required length
|
|
29
|
+
*/
|
|
30
|
+
export const equalityLengthCheck = (opts, length, pName) => {
|
|
31
|
+
if (opts.data.length !== length) {
|
|
32
|
+
if (opts._debug !== undefined) {
|
|
33
|
+
opts._debug(`${pName} failed: Invalid input length length=${opts.data.length} (expected: ${length})`);
|
|
34
|
+
}
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
return true;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Checks that the total length of the provided data input can be subdivided into k equal parts
|
|
41
|
+
* with `length` (without leaving some remainder bytes).
|
|
42
|
+
*
|
|
43
|
+
* @param opts - Precompile input wrapper
|
|
44
|
+
* @param length - Required chunk size
|
|
45
|
+
* @param pName - Human readable precompile name for logging
|
|
46
|
+
* @returns `true` if the length is divisible by the chunk size
|
|
47
|
+
*/
|
|
48
|
+
export const moduloLengthCheck = (opts, length, pName) => {
|
|
49
|
+
if (opts.data.length % length !== 0) {
|
|
50
|
+
if (opts._debug !== undefined) {
|
|
51
|
+
opts._debug(`${pName} failed: Invalid input length length=${opts.data.length} (expected: ${length}*k bytes)`);
|
|
52
|
+
}
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
return true;
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/precompiles/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAIxC;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAqB,EAAE,OAAe,EAAE,KAAa,EAAE,EAAE;IACrF,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,CACT,OAAO,KAAK,oBAAoB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAC9C,IAAI,CAAC,IAAI,CAAC,MACZ,aAAa,IAAI,CAAC,QAAQ,YAAY,OAAO,EAAE,CAChD,CAAA;IACH,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,GAAG,OAAO,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,cAAc,CAAC,CAAA;QACrC,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,IAAqB,EAAE,MAAc,EAAE,KAAa,EAAE,EAAE;IAC1F,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM,CACT,GAAG,KAAK,wCAAwC,IAAI,CAAC,IAAI,CAAC,MAAM,eAAe,MAAM,GAAG,CACzF,CAAA;QACH,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,IAAqB,EAAE,MAAc,EAAE,KAAa,EAAE,EAAE;IACxF,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC;QACpC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM,CACT,GAAG,KAAK,wCAAwC,IAAI,CAAC,IAAI,CAAC,MAAM,eAAe,MAAM,WAAW,CACjG,CAAA;QACH,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Implementation of the stack used in evm.
|
|
3
|
+
*/
|
|
4
|
+
export declare class Stack {
|
|
5
|
+
private _store;
|
|
6
|
+
private _maxHeight;
|
|
7
|
+
private _len;
|
|
8
|
+
constructor(maxHeight?: number);
|
|
9
|
+
get length(): number;
|
|
10
|
+
/**
|
|
11
|
+
* Pushes a new bigint onto the stack.
|
|
12
|
+
* @param value - Value to push (must fit within the configured max height)
|
|
13
|
+
*/
|
|
14
|
+
push(value: bigint): void;
|
|
15
|
+
/**
|
|
16
|
+
* Pops the top value from the stack.
|
|
17
|
+
* @returns The value removed from the stack
|
|
18
|
+
*/
|
|
19
|
+
pop(): bigint;
|
|
20
|
+
/**
|
|
21
|
+
* Pops multiple items from the stack with the top-most item returned first.
|
|
22
|
+
* @param num - Number of items to pop (defaults to 1)
|
|
23
|
+
* @returns Array containing the popped values
|
|
24
|
+
*/
|
|
25
|
+
popN(num?: number): bigint[];
|
|
26
|
+
/**
|
|
27
|
+
* Returns items from the stack without removing them.
|
|
28
|
+
* @param num - Number of items to return (defaults to 1)
|
|
29
|
+
* @returns Array of items, with index 0 representing the top of the stack
|
|
30
|
+
* @throws {@link EVMError} with code STACK_UNDERFLOW if there are not enough items on the stack
|
|
31
|
+
*/
|
|
32
|
+
peek(num?: number): bigint[];
|
|
33
|
+
/**
|
|
34
|
+
* Swaps the top of the stack with another item.
|
|
35
|
+
* @param position - Zero-based index from the top of the stack (0 swaps with the top itself)
|
|
36
|
+
*/
|
|
37
|
+
swap(position: number): void;
|
|
38
|
+
/**
|
|
39
|
+
* Pushes a copy of an item deeper in the stack.
|
|
40
|
+
* @param position - One-based index of the item to duplicate
|
|
41
|
+
*/
|
|
42
|
+
dup(position: number): void;
|
|
43
|
+
/**
|
|
44
|
+
* Swaps two arbitrary entries relative to the top of the stack.
|
|
45
|
+
* @param swap1 - Distance from the top (0 = top element) for the first entry
|
|
46
|
+
* @param swap2 - Distance from the top for the second entry
|
|
47
|
+
*/
|
|
48
|
+
exchange(swap1: number, swap2: number): void;
|
|
49
|
+
/**
|
|
50
|
+
* Returns a copy of the current stack. This represents the actual state of the stack
|
|
51
|
+
* (not the internal state of the stack, which might have unreachable elements in it)
|
|
52
|
+
*/
|
|
53
|
+
getStack(): bigint[];
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=stack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stack.d.ts","sourceRoot":"","sources":["../../src/stack.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,qBAAa,KAAK;IAEhB,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,UAAU,CAAQ;IAE1B,OAAO,CAAC,IAAI,CAAY;gBAEZ,SAAS,CAAC,EAAE,MAAM;IAO9B,IAAI,MAAM,WAET;IAED;;;OAGG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM;IASlB;;;OAGG;IACH,GAAG,IAAI,MAAM;IAYb;;;;OAIG;IACH,IAAI,CAAC,GAAG,GAAE,MAAU,GAAG,MAAM,EAAE;IAoB/B;;;;;OAKG;IACH,IAAI,CAAC,GAAG,GAAE,MAAU,GAAG,MAAM,EAAE;IAc/B;;;OAGG;IACH,IAAI,CAAC,QAAQ,EAAE,MAAM;IAkBrB;;;OAGG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM;IAepB;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAerC;;;OAGG;IACH,QAAQ;CAGT"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { EVMError } from "./errors.js";
|
|
2
|
+
/**
|
|
3
|
+
* Implementation of the stack used in evm.
|
|
4
|
+
*/
|
|
5
|
+
export class Stack {
|
|
6
|
+
constructor(maxHeight) {
|
|
7
|
+
this._len = 0;
|
|
8
|
+
// It is possible to initialize the array with `maxHeight` items. However,
|
|
9
|
+
// this makes the constructor 10x slower and there do not seem to be any observable performance gains
|
|
10
|
+
this._store = [];
|
|
11
|
+
this._maxHeight = maxHeight ?? 1024;
|
|
12
|
+
}
|
|
13
|
+
get length() {
|
|
14
|
+
return this._len;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Pushes a new bigint onto the stack.
|
|
18
|
+
* @param value - Value to push (must fit within the configured max height)
|
|
19
|
+
*/
|
|
20
|
+
push(value) {
|
|
21
|
+
if (this._len >= this._maxHeight) {
|
|
22
|
+
throw new EVMError(EVMError.errorMessages.STACK_OVERFLOW);
|
|
23
|
+
}
|
|
24
|
+
// Read current length, set `_store` to value, and then increase the length
|
|
25
|
+
this._store[this._len++] = value;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Pops the top value from the stack.
|
|
29
|
+
* @returns The value removed from the stack
|
|
30
|
+
*/
|
|
31
|
+
pop() {
|
|
32
|
+
if (this._len < 1) {
|
|
33
|
+
throw new EVMError(EVMError.errorMessages.STACK_UNDERFLOW);
|
|
34
|
+
}
|
|
35
|
+
// Length is checked above, so pop shouldn't return undefined
|
|
36
|
+
// First decrease current length, then read the item and return it
|
|
37
|
+
// Note: this does thus not delete the item from the internal array
|
|
38
|
+
// However, the length is decreased, so it is not accessible to external observers
|
|
39
|
+
return this._store[--this._len];
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Pops multiple items from the stack with the top-most item returned first.
|
|
43
|
+
* @param num - Number of items to pop (defaults to 1)
|
|
44
|
+
* @returns Array containing the popped values
|
|
45
|
+
*/
|
|
46
|
+
popN(num = 1) {
|
|
47
|
+
if (this._len < num) {
|
|
48
|
+
throw new EVMError(EVMError.errorMessages.STACK_UNDERFLOW);
|
|
49
|
+
}
|
|
50
|
+
if (num === 0) {
|
|
51
|
+
return [];
|
|
52
|
+
}
|
|
53
|
+
const arr = Array(num);
|
|
54
|
+
const cache = this._store;
|
|
55
|
+
for (let pop = 0; pop < num; pop++) {
|
|
56
|
+
// Note: this thus also (correctly) reduces the length of the internal array (without deleting items)
|
|
57
|
+
arr[pop] = cache[--this._len];
|
|
58
|
+
}
|
|
59
|
+
return arr;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Returns items from the stack without removing them.
|
|
63
|
+
* @param num - Number of items to return (defaults to 1)
|
|
64
|
+
* @returns Array of items, with index 0 representing the top of the stack
|
|
65
|
+
* @throws {@link EVMError} with code STACK_UNDERFLOW if there are not enough items on the stack
|
|
66
|
+
*/
|
|
67
|
+
peek(num = 1) {
|
|
68
|
+
const peekArray = Array(num);
|
|
69
|
+
let start = this._len;
|
|
70
|
+
for (let peek = 0; peek < num; peek++) {
|
|
71
|
+
const index = --start;
|
|
72
|
+
if (index < 0) {
|
|
73
|
+
throw new EVMError(EVMError.errorMessages.STACK_UNDERFLOW);
|
|
74
|
+
}
|
|
75
|
+
peekArray[peek] = this._store[index];
|
|
76
|
+
}
|
|
77
|
+
return peekArray;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Swaps the top of the stack with another item.
|
|
81
|
+
* @param position - Zero-based index from the top of the stack (0 swaps with the top itself)
|
|
82
|
+
*/
|
|
83
|
+
swap(position) {
|
|
84
|
+
if (this._len <= position) {
|
|
85
|
+
throw new EVMError(EVMError.errorMessages.STACK_UNDERFLOW);
|
|
86
|
+
}
|
|
87
|
+
const head = this._len - 1;
|
|
88
|
+
const i = head - position;
|
|
89
|
+
const storageCached = this._store;
|
|
90
|
+
const tmp = storageCached[head];
|
|
91
|
+
storageCached[head] = storageCached[i];
|
|
92
|
+
storageCached[i] = tmp;
|
|
93
|
+
}
|
|
94
|
+
// I would say that we do not need this method any more
|
|
95
|
+
// since you can't copy a primitive data type
|
|
96
|
+
// Nevertheless not sure if we "loose" something here?
|
|
97
|
+
// Will keep commented out for now
|
|
98
|
+
/**
|
|
99
|
+
* Pushes a copy of an item deeper in the stack.
|
|
100
|
+
* @param position - One-based index of the item to duplicate
|
|
101
|
+
*/
|
|
102
|
+
dup(position) {
|
|
103
|
+
const len = this._len;
|
|
104
|
+
if (len < position) {
|
|
105
|
+
throw new EVMError(EVMError.errorMessages.STACK_UNDERFLOW);
|
|
106
|
+
}
|
|
107
|
+
// Note: this code is borrowed from `push()` (avoids a call)
|
|
108
|
+
if (len >= this._maxHeight) {
|
|
109
|
+
throw new EVMError(EVMError.errorMessages.STACK_OVERFLOW);
|
|
110
|
+
}
|
|
111
|
+
const i = len - position;
|
|
112
|
+
this._store[this._len++] = this._store[i];
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Swaps two arbitrary entries relative to the top of the stack.
|
|
116
|
+
* @param swap1 - Distance from the top (0 = top element) for the first entry
|
|
117
|
+
* @param swap2 - Distance from the top for the second entry
|
|
118
|
+
*/
|
|
119
|
+
exchange(swap1, swap2) {
|
|
120
|
+
const headIndex = this._len - 1;
|
|
121
|
+
const exchangeIndex1 = headIndex - swap1;
|
|
122
|
+
const exchangeIndex2 = headIndex - swap2;
|
|
123
|
+
// Stack underflow is not possible in EOF
|
|
124
|
+
if (exchangeIndex1 < 0 || exchangeIndex2 < 0) {
|
|
125
|
+
throw new EVMError(EVMError.errorMessages.STACK_UNDERFLOW);
|
|
126
|
+
}
|
|
127
|
+
const cache = this._store[exchangeIndex2];
|
|
128
|
+
this._store[exchangeIndex2] = this._store[exchangeIndex1];
|
|
129
|
+
this._store[exchangeIndex1] = cache;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Returns a copy of the current stack. This represents the actual state of the stack
|
|
133
|
+
* (not the internal state of the stack, which might have unreachable elements in it)
|
|
134
|
+
*/
|
|
135
|
+
getStack() {
|
|
136
|
+
return this._store.slice(0, this._len);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=stack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stack.js","sourceRoot":"","sources":["../../src/stack.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { PrefixedHexString } from '@feelyourprotocol/util';
|
|
2
|
+
import type { BinaryStemAccessEvent, BinaryStemMeta } from './binaryTreeAccessWitness.ts';
|
|
3
|
+
export declare class StemCache {
|
|
4
|
+
cache: Map<PrefixedHexString, BinaryStemAccessEvent & BinaryStemMeta>;
|
|
5
|
+
constructor();
|
|
6
|
+
set(stemKey: PrefixedHexString, accessedStem: BinaryStemAccessEvent & BinaryStemMeta): void;
|
|
7
|
+
get(stemHex: PrefixedHexString): (BinaryStemAccessEvent & BinaryStemMeta) | undefined;
|
|
8
|
+
del(stemHex: PrefixedHexString): void;
|
|
9
|
+
commit(): [PrefixedHexString, BinaryStemAccessEvent & BinaryStemMeta][];
|
|
10
|
+
/**
|
|
11
|
+
* Clear cache
|
|
12
|
+
*/
|
|
13
|
+
clear(): void;
|
|
14
|
+
/**
|
|
15
|
+
* Returns the size of the cache
|
|
16
|
+
* @returns Number of cached stems currently stored
|
|
17
|
+
*/
|
|
18
|
+
size(): number;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=stemCache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stemCache.d.ts","sourceRoot":"","sources":["../../src/stemCache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAEzF,qBAAa,SAAS;IACpB,KAAK,EAAE,GAAG,CAAC,iBAAiB,EAAE,qBAAqB,GAAG,cAAc,CAAC,CAAA;;IAMrE,GAAG,CAAC,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,qBAAqB,GAAG,cAAc;IAIpF,GAAG,CAAC,OAAO,EAAE,iBAAiB,GAAG,CAAC,qBAAqB,GAAG,cAAc,CAAC,GAAG,SAAS;IAIrF,GAAG,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAIrC,MAAM,IAAI,CAAC,iBAAiB,EAAE,qBAAqB,GAAG,cAAc,CAAC,EAAE;IAQvE;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;;OAGG;IACH,IAAI;CAGL"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export class StemCache {
|
|
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
|
+
/**
|
|
20
|
+
* Clear cache
|
|
21
|
+
*/
|
|
22
|
+
clear() {
|
|
23
|
+
this.cache.clear();
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Returns the size of the cache
|
|
27
|
+
* @returns Number of cached stems currently stored
|
|
28
|
+
*/
|
|
29
|
+
size() {
|
|
30
|
+
return this.cache.size;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=stemCache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stemCache.js","sourceRoot":"","sources":["../../src/stemCache.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,SAAS;IAGpB;QACE,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAA6D,CAAA;IACnF,CAAC;IAED,GAAG,CAAC,OAA0B,EAAE,YAAoD;QAClF,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,GAAkE,KAAK,CAAC,IAAI,CACrF,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CACrB,CAAA;QACD,IAAI,CAAC,KAAK,EAAE,CAAA;QACZ,OAAO,KAAK,CAAA;IACd,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IACpB,CAAC;IAED;;;OAGG;IACH,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAA;IACxB,CAAC;CACF"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { Address } from '@feelyourprotocol/util';
|
|
2
|
+
import type { TransientStorageInterface } from './types.ts';
|
|
3
|
+
export declare class TransientStorage implements TransientStorageInterface {
|
|
4
|
+
/**
|
|
5
|
+
* The current values of the transient storage, keyed by contract address and then slot
|
|
6
|
+
*/
|
|
7
|
+
private _storage;
|
|
8
|
+
/**
|
|
9
|
+
* Each change to storage is recorded in the journal. This is never cleared.
|
|
10
|
+
*/
|
|
11
|
+
private _changeJournal;
|
|
12
|
+
/**
|
|
13
|
+
* The length of the journal at the beginning of each call in the call stack.
|
|
14
|
+
*/
|
|
15
|
+
private _indices;
|
|
16
|
+
/**
|
|
17
|
+
* Get the value for the given address and key
|
|
18
|
+
* @param addr the address for which transient storage is accessed
|
|
19
|
+
* @param key the key of the address to get
|
|
20
|
+
*/
|
|
21
|
+
get(addr: Address, key: Uint8Array): Uint8Array;
|
|
22
|
+
/**
|
|
23
|
+
* Put the given value for the address and key
|
|
24
|
+
* @param addr the address of the contract for which the key is being set
|
|
25
|
+
* @param key the slot to set for the address
|
|
26
|
+
* @param value the new value of the transient storage slot to set
|
|
27
|
+
*/
|
|
28
|
+
put(addr: Address, key: Uint8Array, value: Uint8Array): void;
|
|
29
|
+
/**
|
|
30
|
+
* Commit all the changes since the last checkpoint
|
|
31
|
+
*/
|
|
32
|
+
commit(): void;
|
|
33
|
+
/**
|
|
34
|
+
* To be called whenever entering a new context. If revert is called after checkpoint, all changes after the latest checkpoint are reverted.
|
|
35
|
+
*/
|
|
36
|
+
checkpoint(): void;
|
|
37
|
+
/**
|
|
38
|
+
* Revert transient storage to the last checkpoint
|
|
39
|
+
*/
|
|
40
|
+
revert(): void;
|
|
41
|
+
/**
|
|
42
|
+
* Create a JSON representation of the current transient storage state
|
|
43
|
+
*/
|
|
44
|
+
toJSON(): {
|
|
45
|
+
[address: string]: {
|
|
46
|
+
[key: string]: string;
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Clear transient storage state.
|
|
51
|
+
*/
|
|
52
|
+
clear(): void;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=transientStorage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transientStorage.d.ts","sourceRoot":"","sources":["../../src/transientStorage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AAY3D,qBAAa,gBAAiB,YAAW,yBAAyB;IAChE;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAqC;IACrD;;OAEG;IACH,OAAO,CAAC,cAAc,CAA8B;IACpD;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAgB;IAEhC;;;;OAIG;IACI,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,GAAG,UAAU;IAYtD;;;;;OAKG;IACI,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU;IA2B5D;;OAEG;IACI,MAAM,IAAI,IAAI;IAMrB;;OAEG;IACI,UAAU,IAAI,IAAI;IAIzB;;OAEG;IACI,MAAM;IAWb;;OAEG;IACI,MAAM,IAAI;QAAE,CAAC,OAAO,EAAE,MAAM,GAAG;YAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;SAAE,CAAA;KAAE;IAWjE;;OAEG;IACI,KAAK,IAAI,IAAI;CAIrB"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { EthereumJSErrorWithoutCode, bytesToHex } from '@feelyourprotocol/util';
|
|
2
|
+
export class TransientStorage {
|
|
3
|
+
constructor() {
|
|
4
|
+
/**
|
|
5
|
+
* The current values of the transient storage, keyed by contract address and then slot
|
|
6
|
+
*/
|
|
7
|
+
this._storage = new Map();
|
|
8
|
+
/**
|
|
9
|
+
* Each change to storage is recorded in the journal. This is never cleared.
|
|
10
|
+
*/
|
|
11
|
+
this._changeJournal = [];
|
|
12
|
+
/**
|
|
13
|
+
* The length of the journal at the beginning of each call in the call stack.
|
|
14
|
+
*/
|
|
15
|
+
this._indices = [0];
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Get the value for the given address and key
|
|
19
|
+
* @param addr the address for which transient storage is accessed
|
|
20
|
+
* @param key the key of the address to get
|
|
21
|
+
*/
|
|
22
|
+
get(addr, key) {
|
|
23
|
+
const map = this._storage.get(addr.toString());
|
|
24
|
+
if (!map) {
|
|
25
|
+
return new Uint8Array(32);
|
|
26
|
+
}
|
|
27
|
+
const value = map.get(bytesToHex(key));
|
|
28
|
+
if (!value) {
|
|
29
|
+
return new Uint8Array(32);
|
|
30
|
+
}
|
|
31
|
+
return value;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Put the given value for the address and key
|
|
35
|
+
* @param addr the address of the contract for which the key is being set
|
|
36
|
+
* @param key the slot to set for the address
|
|
37
|
+
* @param value the new value of the transient storage slot to set
|
|
38
|
+
*/
|
|
39
|
+
put(addr, key, value) {
|
|
40
|
+
if (key.length !== 32) {
|
|
41
|
+
throw EthereumJSErrorWithoutCode('Transient storage key must be 32 bytes long');
|
|
42
|
+
}
|
|
43
|
+
if (value.length > 32) {
|
|
44
|
+
throw EthereumJSErrorWithoutCode('Transient storage value cannot be longer than 32 bytes');
|
|
45
|
+
}
|
|
46
|
+
const addrString = addr.toString();
|
|
47
|
+
if (!this._storage.has(addrString)) {
|
|
48
|
+
this._storage.set(addrString, new Map());
|
|
49
|
+
}
|
|
50
|
+
const map = this._storage.get(addrString);
|
|
51
|
+
const keyStr = bytesToHex(key);
|
|
52
|
+
const prevValue = map.get(keyStr) ?? new Uint8Array(32);
|
|
53
|
+
this._changeJournal.push({
|
|
54
|
+
addr: addrString,
|
|
55
|
+
key: keyStr,
|
|
56
|
+
prevValue,
|
|
57
|
+
});
|
|
58
|
+
map.set(keyStr, value);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Commit all the changes since the last checkpoint
|
|
62
|
+
*/
|
|
63
|
+
commit() {
|
|
64
|
+
if (this._indices.length === 0)
|
|
65
|
+
throw EthereumJSErrorWithoutCode('Nothing to commit');
|
|
66
|
+
// by discarding the length of the array from the last time checkpoint was called, all changes are included in the last stack
|
|
67
|
+
this._indices.pop();
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* To be called whenever entering a new context. If revert is called after checkpoint, all changes after the latest checkpoint are reverted.
|
|
71
|
+
*/
|
|
72
|
+
checkpoint() {
|
|
73
|
+
this._indices.push(this._changeJournal.length);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Revert transient storage to the last checkpoint
|
|
77
|
+
*/
|
|
78
|
+
revert() {
|
|
79
|
+
const lastCheckpoint = this._indices.pop();
|
|
80
|
+
if (typeof lastCheckpoint === 'undefined')
|
|
81
|
+
throw EthereumJSErrorWithoutCode('Nothing to revert');
|
|
82
|
+
for (let i = this._changeJournal.length - 1; i >= lastCheckpoint; i--) {
|
|
83
|
+
const { key, prevValue, addr } = this._changeJournal[i];
|
|
84
|
+
this._storage.get(addr).set(key, prevValue);
|
|
85
|
+
}
|
|
86
|
+
this._changeJournal.splice(lastCheckpoint, this._changeJournal.length - lastCheckpoint);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Create a JSON representation of the current transient storage state
|
|
90
|
+
*/
|
|
91
|
+
toJSON() {
|
|
92
|
+
const result = {};
|
|
93
|
+
for (const [address, map] of this._storage.entries()) {
|
|
94
|
+
result[address] = {};
|
|
95
|
+
for (const [key, value] of map.entries()) {
|
|
96
|
+
result[address][key] = bytesToHex(value);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return result;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Clear transient storage state.
|
|
103
|
+
*/
|
|
104
|
+
clear() {
|
|
105
|
+
this._storage = new Map();
|
|
106
|
+
this._changeJournal = [];
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=transientStorage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transientStorage.js","sourceRoot":"","sources":["../../src/transientStorage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAezE,MAAM,OAAO,gBAAgB;IAA7B;QACE;;WAEG;QACK,aAAQ,GAA4B,IAAI,GAAG,EAAE,CAAA;QACrD;;WAEG;QACK,mBAAc,GAA4B,EAAE,CAAA;QACpD;;WAEG;QACK,aAAQ,GAAa,CAAC,CAAC,CAAC,CAAA;IAuGlC,CAAC;IArGC;;;;OAIG;IACI,GAAG,CAAC,IAAa,EAAE,GAAe;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;QAC9C,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,IAAI,UAAU,CAAC,EAAE,CAAC,CAAA;QAC3B,CAAC;QACD,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAA;QACtC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,IAAI,UAAU,CAAC,EAAE,CAAC,CAAA;QAC3B,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAED;;;;;OAKG;IACI,GAAG,CAAC,IAAa,EAAE,GAAe,EAAE,KAAiB;QAC1D,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;YACtB,MAAM,0BAA0B,CAAC,6CAA6C,CAAC,CAAA;QACjF,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACtB,MAAM,0BAA0B,CAAC,wDAAwD,CAAC,CAAA;QAC5F,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;QAClC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,GAAG,EAAE,CAAC,CAAA;QAC1C,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAE,CAAA;QAE1C,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAA;QAC9B,MAAM,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,UAAU,CAAC,EAAE,CAAC,CAAA;QAEvD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;YACvB,IAAI,EAAE,UAAU;YAChB,GAAG,EAAE,MAAM;YACX,SAAS;SACV,CAAC,CAAA;QAEF,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IACxB,CAAC;IAED;;OAEG;IACI,MAAM;QACX,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,0BAA0B,CAAC,mBAAmB,CAAC,CAAA;QACrF,6HAA6H;QAC7H,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAA;IACrB,CAAC;IAED;;OAEG;IACI,UAAU;QACf,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;IAChD,CAAC;IAED;;OAEG;IACI,MAAM;QACX,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAA;QAC1C,IAAI,OAAO,cAAc,KAAK,WAAW;YAAE,MAAM,0BAA0B,CAAC,mBAAmB,CAAC,CAAA;QAEhG,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,cAAc,EAAE,CAAC,EAAE,EAAE,CAAC;YACtE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAA;YACvD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;QAC9C,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,cAAc,CAAC,CAAA;IACzF,CAAC;IAED;;OAEG;IACI,MAAM;QACX,MAAM,MAAM,GAAqD,EAAE,CAAA;QACnE,KAAK,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;YACrD,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAA;YACpB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;gBACzC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;YAC1C,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAED;;OAEG;IACI,KAAK;QACV,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAA;QACzB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAA;IAC1B,CAAC;CACF"}
|