@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,307 @@
|
|
|
1
|
+
import {
|
|
2
|
+
BIGINT_0,
|
|
3
|
+
bigIntToBytes,
|
|
4
|
+
bytesToBigInt,
|
|
5
|
+
concatBytes,
|
|
6
|
+
equalsBytes,
|
|
7
|
+
setLengthLeft,
|
|
8
|
+
} from '@feelyourprotocol/util'
|
|
9
|
+
import { bls12_381 } from '@noble/curves/bls12-381.js'
|
|
10
|
+
|
|
11
|
+
import { EVMError } from '../../errors.ts'
|
|
12
|
+
|
|
13
|
+
import {
|
|
14
|
+
BLS_FIELD_MODULUS,
|
|
15
|
+
BLS_G1_INFINITY_POINT_BYTES,
|
|
16
|
+
BLS_G1_POINT_BYTE_LENGTH,
|
|
17
|
+
BLS_G2_INFINITY_POINT_BYTES,
|
|
18
|
+
BLS_G2_POINT_BYTE_LENGTH,
|
|
19
|
+
BLS_ONE_BUFFER,
|
|
20
|
+
BLS_ZERO_BUFFER,
|
|
21
|
+
} from './constants.ts'
|
|
22
|
+
|
|
23
|
+
import type { Fp2 } from '@noble/curves/abstract/tower.js'
|
|
24
|
+
import type { AffinePoint } from '@noble/curves/abstract/weierstrass.js'
|
|
25
|
+
import type { EVMBLSInterface } from '../../types.ts'
|
|
26
|
+
|
|
27
|
+
const G1_ZERO = bls12_381.G1.Point.ZERO
|
|
28
|
+
|
|
29
|
+
const G2_ZERO = bls12_381.G2.Point.ZERO
|
|
30
|
+
|
|
31
|
+
function BLS12_381_ToFp2Point(fpXCoordinate: Uint8Array, fpYCoordinate: Uint8Array) {
|
|
32
|
+
// check if the coordinates are in the field
|
|
33
|
+
if (bytesToBigInt(fpXCoordinate) >= BLS_FIELD_MODULUS) {
|
|
34
|
+
throw new EVMError(EVMError.errorMessages.BLS_12_381_FP_NOT_IN_FIELD)
|
|
35
|
+
}
|
|
36
|
+
if (bytesToBigInt(fpYCoordinate) >= BLS_FIELD_MODULUS) {
|
|
37
|
+
throw new EVMError(EVMError.errorMessages.BLS_12_381_FP_NOT_IN_FIELD)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const fpBytes = concatBytes(fpXCoordinate.subarray(16), fpYCoordinate.subarray(16))
|
|
41
|
+
|
|
42
|
+
const FP = bls12_381.fields.Fp2.fromBytes(fpBytes)
|
|
43
|
+
return FP
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Converts an Uint8Array to a Noble G1 point. Raises errors if the point is not on the curve
|
|
48
|
+
* and (if activated) if the point is in the subgroup / order check.
|
|
49
|
+
* @param input Input Uint8Array. Should be 128 bytes
|
|
50
|
+
* @returns Noble G1 point
|
|
51
|
+
*/
|
|
52
|
+
function BLS12_381_ToG1Point(input: Uint8Array, verifyOrder = true) {
|
|
53
|
+
if (equalsBytes(input, BLS_G1_INFINITY_POINT_BYTES) === true) {
|
|
54
|
+
return G1_ZERO
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const x = bytesToBigInt(input.subarray(16, BLS_G1_POINT_BYTE_LENGTH / 2))
|
|
58
|
+
const y = bytesToBigInt(input.subarray(80, BLS_G1_POINT_BYTE_LENGTH))
|
|
59
|
+
|
|
60
|
+
const G1 = bls12_381.G1.Point.fromAffine({
|
|
61
|
+
x,
|
|
62
|
+
y,
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
try {
|
|
66
|
+
G1.assertValidity()
|
|
67
|
+
} catch (e) {
|
|
68
|
+
if (verifyOrder || (e as Error).message !== 'bad point: not in prime-order subgroup')
|
|
69
|
+
throw new EVMError(EVMError.errorMessages.BLS_12_381_POINT_NOT_ON_CURVE)
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return G1
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// input: a Noble G1 point
|
|
76
|
+
// output: a 128-byte Uint8Array
|
|
77
|
+
function BLS12_381_FromG1Point(input: AffinePoint<bigint>): Uint8Array {
|
|
78
|
+
const xBytes = setLengthLeft(bigIntToBytes(input.x), 64)
|
|
79
|
+
const yBytes = setLengthLeft(bigIntToBytes(input.y), 64)
|
|
80
|
+
|
|
81
|
+
return concatBytes(xBytes, yBytes)
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Converts an Uint8Array to a Noble G2 point. Raises errors if the point is not on the curve
|
|
86
|
+
* and (if activated) if the point is in the subgroup / order check.
|
|
87
|
+
* @param input Input Uint8Array. Should be 256 bytes
|
|
88
|
+
* @returns Noble G2 point
|
|
89
|
+
*/
|
|
90
|
+
function BLS12_381_ToG2Point(input: Uint8Array, verifyOrder = true) {
|
|
91
|
+
if (equalsBytes(input, BLS_G2_INFINITY_POINT_BYTES) === true) {
|
|
92
|
+
return G2_ZERO
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
const p_x_1 = input.subarray(0, 64)
|
|
96
|
+
const p_x_2 = input.subarray(64, BLS_G2_POINT_BYTE_LENGTH / 2)
|
|
97
|
+
const p_y_1 = input.subarray(128, 192)
|
|
98
|
+
const p_y_2 = input.subarray(192, BLS_G2_POINT_BYTE_LENGTH)
|
|
99
|
+
|
|
100
|
+
const Fp2X = BLS12_381_ToFp2Point(p_x_1, p_x_2)
|
|
101
|
+
const Fp2Y = BLS12_381_ToFp2Point(p_y_1, p_y_2)
|
|
102
|
+
|
|
103
|
+
const pG2 = bls12_381.G2.Point.fromAffine({
|
|
104
|
+
x: Fp2X,
|
|
105
|
+
y: Fp2Y,
|
|
106
|
+
})
|
|
107
|
+
|
|
108
|
+
try {
|
|
109
|
+
pG2.assertValidity()
|
|
110
|
+
} catch (e) {
|
|
111
|
+
if (verifyOrder || (e as Error).message !== 'bad point: not in prime-order subgroup')
|
|
112
|
+
throw new EVMError(EVMError.errorMessages.BLS_12_381_POINT_NOT_ON_CURVE)
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return pG2
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// input: a Noble G1 point
|
|
119
|
+
// output: a 128-byte Uint8Array
|
|
120
|
+
function BLS12_381_FromG2Point(input: AffinePoint<Fp2>): Uint8Array {
|
|
121
|
+
const xBytes1 = setLengthLeft(bigIntToBytes(input.x.c0), 64)
|
|
122
|
+
const xBytes2 = setLengthLeft(bigIntToBytes(input.x.c1), 64)
|
|
123
|
+
const yBytes1 = setLengthLeft(bigIntToBytes(input.y.c0), 64)
|
|
124
|
+
const yBytes2 = setLengthLeft(bigIntToBytes(input.y.c1), 64)
|
|
125
|
+
|
|
126
|
+
return concatBytes(xBytes1, xBytes2, yBytes1, yBytes2)
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// input: a 32-byte hex scalar Uint8Array
|
|
130
|
+
// output: a Noble Fr point
|
|
131
|
+
|
|
132
|
+
function BLS12_381_ToFrPoint(input: Uint8Array): bigint {
|
|
133
|
+
const Fr = bls12_381.fields.Fr.fromBytes(input)
|
|
134
|
+
if (Fr >= bls12_381.fields.Fr.ORDER) {
|
|
135
|
+
return bls12_381.fields.Fr.create(Fr % bls12_381.fields.Fr.ORDER)
|
|
136
|
+
}
|
|
137
|
+
return bls12_381.fields.Fr.create(Fr)
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// input: a 64-byte buffer
|
|
141
|
+
// output: a Noble Fp point
|
|
142
|
+
|
|
143
|
+
function BLS12_381_ToFpPoint(fpCoordinate: Uint8Array) {
|
|
144
|
+
// check if point is in field
|
|
145
|
+
if (bytesToBigInt(fpCoordinate) >= BLS_FIELD_MODULUS) {
|
|
146
|
+
throw new EVMError(EVMError.errorMessages.BLS_12_381_FP_NOT_IN_FIELD)
|
|
147
|
+
}
|
|
148
|
+
const FP = bls12_381.fields.Fp.fromBytes(fpCoordinate.slice(16))
|
|
149
|
+
return FP
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Implementation of the `EVMBLSInterface` using the `ethereum-cryptography (`@noble/curves`)
|
|
154
|
+
* JS library, see https://github.com/ethereum/js-ethereum-cryptography.
|
|
155
|
+
*
|
|
156
|
+
* This is the EVM default implementation.
|
|
157
|
+
*/
|
|
158
|
+
export class NobleBLS implements EVMBLSInterface {
|
|
159
|
+
addG1(input: Uint8Array): Uint8Array {
|
|
160
|
+
const p1 = BLS12_381_ToG1Point(input.subarray(0, BLS_G1_POINT_BYTE_LENGTH), false)
|
|
161
|
+
const p2 = BLS12_381_ToG1Point(
|
|
162
|
+
input.subarray(BLS_G1_POINT_BYTE_LENGTH, BLS_G1_POINT_BYTE_LENGTH * 2),
|
|
163
|
+
false,
|
|
164
|
+
)
|
|
165
|
+
|
|
166
|
+
const p = p1.add(p2)
|
|
167
|
+
const result = BLS12_381_FromG1Point(p.toAffine())
|
|
168
|
+
|
|
169
|
+
return result
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
addG2(input: Uint8Array): Uint8Array {
|
|
173
|
+
const p1 = BLS12_381_ToG2Point(input.subarray(0, BLS_G2_POINT_BYTE_LENGTH), false)
|
|
174
|
+
const p2 = BLS12_381_ToG2Point(
|
|
175
|
+
input.subarray(BLS_G2_POINT_BYTE_LENGTH, BLS_G2_POINT_BYTE_LENGTH * 2),
|
|
176
|
+
false,
|
|
177
|
+
)
|
|
178
|
+
const p = p1.add(p2)
|
|
179
|
+
const result = BLS12_381_FromG2Point(p.toAffine())
|
|
180
|
+
|
|
181
|
+
return result
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
mapFPtoG1(input: Uint8Array): Uint8Array {
|
|
185
|
+
// convert input to Fp1 point
|
|
186
|
+
const FP = BLS12_381_ToFpPoint(input.subarray(0, 64))
|
|
187
|
+
|
|
188
|
+
// @ts-expect-error - @noble/curves v2 type resolution mismatch
|
|
189
|
+
const result = bls12_381.G1.mapToCurve(FP).toAffine()
|
|
190
|
+
const resultBytes = BLS12_381_FromG1Point(result)
|
|
191
|
+
return resultBytes
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
mapFP2toG2(input: Uint8Array): Uint8Array {
|
|
195
|
+
// convert input to Fp2 point
|
|
196
|
+
const Fp2Point = BLS12_381_ToFp2Point(input.subarray(0, 64), input.subarray(64, 128))
|
|
197
|
+
|
|
198
|
+
// @ts-expect-error - @noble/curves v2 type resolution mismatch
|
|
199
|
+
const result = bls12_381.G2.mapToCurve([Fp2Point.c0, Fp2Point.c1]).toAffine()
|
|
200
|
+
const resultBytes = BLS12_381_FromG2Point(result)
|
|
201
|
+
return resultBytes
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
msmG1(input: Uint8Array): Uint8Array {
|
|
205
|
+
// Note: This implementation is using the naive "algorithm" of just doing
|
|
206
|
+
// p1G1*v1F1 + p2G1*v1F1 + ... while the EIP is suggesting to use an optimized
|
|
207
|
+
// algorithm (Pippenger's algorithm, see https://eips.ethereum.org/EIPS/eip-2537#g1g2-msm).
|
|
208
|
+
//
|
|
209
|
+
// While this functionally works the approach is not "gas-cost-competitive" and an
|
|
210
|
+
// optimization should be considered in the future.
|
|
211
|
+
const pairLength = 160
|
|
212
|
+
const numPairs = input.length / pairLength
|
|
213
|
+
|
|
214
|
+
let pRes = G1_ZERO
|
|
215
|
+
for (let k = 0; k < numPairs; k++) {
|
|
216
|
+
const pairStart = pairLength * k
|
|
217
|
+
const G1 = BLS12_381_ToG1Point(
|
|
218
|
+
input.subarray(pairStart, pairStart + BLS_G1_POINT_BYTE_LENGTH),
|
|
219
|
+
)
|
|
220
|
+
const Fr = BLS12_381_ToFrPoint(
|
|
221
|
+
input.subarray(pairStart + BLS_G1_POINT_BYTE_LENGTH, pairStart + pairLength),
|
|
222
|
+
)
|
|
223
|
+
let pMul
|
|
224
|
+
if (Fr === BIGINT_0) {
|
|
225
|
+
pMul = G1_ZERO
|
|
226
|
+
} else {
|
|
227
|
+
pMul = G1.multiplyUnsafe(Fr)
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
pRes = pRes.add(pMul)
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
return BLS12_381_FromG1Point(pRes.toAffine())
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
msmG2(input: Uint8Array): Uint8Array {
|
|
237
|
+
// Note: This implementation is using the naive "algorithm" of just doing
|
|
238
|
+
// p1G1*v1F1 + p2G1*v1F1 + ... while the EIP is suggesting to use an optimized
|
|
239
|
+
// algorithm (Pippenger's algorithm, see https://eips.ethereum.org/EIPS/eip-2537#g1g2-msm).
|
|
240
|
+
//
|
|
241
|
+
// While this functionally works the approach is not "gas-cost-competitive" and an
|
|
242
|
+
// optimization should be considered in the future.
|
|
243
|
+
const pairLength = 288
|
|
244
|
+
const numPairs = input.length / pairLength
|
|
245
|
+
|
|
246
|
+
let pRes = G2_ZERO
|
|
247
|
+
for (let k = 0; k < numPairs; k++) {
|
|
248
|
+
const pairStart = pairLength * k
|
|
249
|
+
const G2 = BLS12_381_ToG2Point(
|
|
250
|
+
input.subarray(pairStart, pairStart + BLS_G2_POINT_BYTE_LENGTH),
|
|
251
|
+
)
|
|
252
|
+
const Fr = BLS12_381_ToFrPoint(
|
|
253
|
+
input.subarray(pairStart + BLS_G2_POINT_BYTE_LENGTH, pairStart + pairLength),
|
|
254
|
+
)
|
|
255
|
+
let pMul
|
|
256
|
+
if (Fr === BIGINT_0) {
|
|
257
|
+
pMul = G2_ZERO
|
|
258
|
+
} else {
|
|
259
|
+
pMul = G2.multiplyUnsafe(Fr)
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
pRes = pRes.add(pMul)
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
return BLS12_381_FromG2Point(pRes.toAffine())
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
pairingCheck(input: Uint8Array): Uint8Array {
|
|
269
|
+
// Extract the pairs from the input
|
|
270
|
+
const pairLength = 384
|
|
271
|
+
const pairs = []
|
|
272
|
+
for (let k = 0; k < input.length / pairLength; k++) {
|
|
273
|
+
const pairStart = pairLength * k
|
|
274
|
+
const G1 = BLS12_381_ToG1Point(
|
|
275
|
+
input.subarray(pairStart, pairStart + BLS_G1_POINT_BYTE_LENGTH),
|
|
276
|
+
)
|
|
277
|
+
|
|
278
|
+
const g2start = pairStart + BLS_G1_POINT_BYTE_LENGTH
|
|
279
|
+
const G2 = BLS12_381_ToG2Point(input.subarray(g2start, g2start + BLS_G2_POINT_BYTE_LENGTH))
|
|
280
|
+
|
|
281
|
+
pairs.push({ g1: G1, g2: G2 })
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
// Filter out infinity pairs
|
|
285
|
+
const filteredPairs = pairs.filter(
|
|
286
|
+
(pair) => pair.g1.equals(G1_ZERO) === false && pair.g2.equals(G2_ZERO) === false,
|
|
287
|
+
)
|
|
288
|
+
|
|
289
|
+
const FP12 = bls12_381.pairingBatch(filteredPairs, true)
|
|
290
|
+
|
|
291
|
+
if (bls12_381.fields.Fp12.eql(FP12, bls12_381.fields.Fp12.ONE)) {
|
|
292
|
+
return BLS_ONE_BUFFER
|
|
293
|
+
} else {
|
|
294
|
+
return BLS_ZERO_BUFFER
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
export {
|
|
300
|
+
BLS12_381_FromG1Point,
|
|
301
|
+
BLS12_381_FromG2Point,
|
|
302
|
+
BLS12_381_ToFp2Point,
|
|
303
|
+
BLS12_381_ToFpPoint,
|
|
304
|
+
BLS12_381_ToFrPoint,
|
|
305
|
+
BLS12_381_ToG1Point,
|
|
306
|
+
BLS12_381_ToG2Point,
|
|
307
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { equalsBytes } from '@feelyourprotocol/util'
|
|
2
|
+
|
|
3
|
+
import type { PrecompileInput } from '../types.ts'
|
|
4
|
+
|
|
5
|
+
const ZERO_BYTES_16 = new Uint8Array(16)
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Calculates the gas used for the MSM precompiles based on the number of pairs and
|
|
9
|
+
* calculating in some discount in relation to the number of pairs.
|
|
10
|
+
*
|
|
11
|
+
* @param numPairs - Number of pairings provided to the precompile
|
|
12
|
+
* @param gasUsedPerPair - Base gas cost per pairing
|
|
13
|
+
* @param discountTable - Discount table (pair count -> multiplier)
|
|
14
|
+
* @returns Total gas to charge after applying the discount table
|
|
15
|
+
*/
|
|
16
|
+
export const msmGasUsed = (
|
|
17
|
+
numPairs: number,
|
|
18
|
+
gasUsedPerPair: bigint,
|
|
19
|
+
discountTable: [number, number][],
|
|
20
|
+
) => {
|
|
21
|
+
const gasDiscountMax = discountTable[discountTable.length - 1][1]
|
|
22
|
+
let gasDiscountMultiplier
|
|
23
|
+
|
|
24
|
+
if (numPairs <= discountTable.length) {
|
|
25
|
+
if (numPairs === 0) {
|
|
26
|
+
gasDiscountMultiplier = 0 // this implicitly sets gasUsed to 0 as per the EIP.
|
|
27
|
+
} else {
|
|
28
|
+
gasDiscountMultiplier = discountTable[numPairs - 1][1]
|
|
29
|
+
}
|
|
30
|
+
} else {
|
|
31
|
+
gasDiscountMultiplier = gasDiscountMax
|
|
32
|
+
}
|
|
33
|
+
// (numPairs * multiplication_cost * discount) / multiplier
|
|
34
|
+
return (BigInt(numPairs) * gasUsedPerPair * BigInt(gasDiscountMultiplier)) / BigInt(1000)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* BLS-specific zero check to check that the top 16 bytes of a 64 byte field element provided
|
|
39
|
+
* are always zero (see EIP notes on field element encoding).
|
|
40
|
+
*
|
|
41
|
+
* Zero byte ranges are expected to be passed in the following format (and so each referencing
|
|
42
|
+
* 16-byte ranges):
|
|
43
|
+
*
|
|
44
|
+
* ```ts
|
|
45
|
+
* const zeroByteRanges = [
|
|
46
|
+
* [0, 16],
|
|
47
|
+
* [64, 80],
|
|
48
|
+
* [128, 144]
|
|
49
|
+
*
|
|
50
|
+
* ]
|
|
51
|
+
* ```
|
|
52
|
+
*
|
|
53
|
+
* @param opts - Precompile input wrapper containing the data to inspect
|
|
54
|
+
* @param zeroByteRanges - Ranges (as [start, end]) within which bytes must be zero
|
|
55
|
+
* @param pName - Human readable precompile name for logging
|
|
56
|
+
* @param pairStart - Optional offset into the data when iterating through pairs
|
|
57
|
+
* @returns `true` if every specified range contains only zero bytes
|
|
58
|
+
*/
|
|
59
|
+
export const leading16ZeroBytesCheck = (
|
|
60
|
+
opts: PrecompileInput,
|
|
61
|
+
zeroByteRanges: number[][],
|
|
62
|
+
pName: string,
|
|
63
|
+
pairStart = 0,
|
|
64
|
+
) => {
|
|
65
|
+
for (const index in zeroByteRanges) {
|
|
66
|
+
const slicedBuffer = opts.data.subarray(
|
|
67
|
+
zeroByteRanges[index][0] + pairStart,
|
|
68
|
+
zeroByteRanges[index][1] + pairStart,
|
|
69
|
+
)
|
|
70
|
+
if (!(equalsBytes(slicedBuffer, ZERO_BYTES_16) === true)) {
|
|
71
|
+
if (opts._debug !== undefined) {
|
|
72
|
+
opts._debug(`${pName} failed: Point not on curve`)
|
|
73
|
+
}
|
|
74
|
+
return false
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return true
|
|
78
|
+
}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import {
|
|
2
|
+
BIGINT_0,
|
|
3
|
+
bigIntToBytes,
|
|
4
|
+
bytesToBigInt,
|
|
5
|
+
concatBytes,
|
|
6
|
+
equalsBytes,
|
|
7
|
+
hexToBytes,
|
|
8
|
+
setLengthLeft,
|
|
9
|
+
} from '@feelyourprotocol/util'
|
|
10
|
+
import { bn254 } from '@noble/curves/bn254.js'
|
|
11
|
+
|
|
12
|
+
import { EVMError } from '../../errors.ts'
|
|
13
|
+
|
|
14
|
+
import type { AffinePoint } from '@noble/curves/abstract/weierstrass.js'
|
|
15
|
+
import type { EVMBN254Interface } from '../../types.ts'
|
|
16
|
+
|
|
17
|
+
const G1_INFINITY_POINT_BYTES = new Uint8Array(64)
|
|
18
|
+
const G2_INFINITY_POINT_BYTES = new Uint8Array(128)
|
|
19
|
+
const G1_POINT_BYTE_LENGTH = 64
|
|
20
|
+
const G1_ELEMENT_BYTE_LENGTH = 32
|
|
21
|
+
const G2_POINT_BYTE_LENGTH = 128
|
|
22
|
+
|
|
23
|
+
const ZERO_BUFFER = new Uint8Array(32)
|
|
24
|
+
const ONE_BUFFER = concatBytes(new Uint8Array(31), hexToBytes('0x01'))
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Converts an Uint8Array to a Noble G1 point.
|
|
28
|
+
* @param input Input Uint8Array. Should be 64 bytes
|
|
29
|
+
* @returns Noble G1 point
|
|
30
|
+
*/
|
|
31
|
+
function toG1Point(input: Uint8Array) {
|
|
32
|
+
if (equalsBytes(input, G1_INFINITY_POINT_BYTES) === true) {
|
|
33
|
+
return bn254.G1.Point.ZERO
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const x = bytesToBigInt(input.subarray(0, G1_ELEMENT_BYTE_LENGTH))
|
|
37
|
+
const y = bytesToBigInt(input.subarray(G1_ELEMENT_BYTE_LENGTH, G1_POINT_BYTE_LENGTH))
|
|
38
|
+
|
|
39
|
+
const G1 = bn254.G1.Point.fromAffine({
|
|
40
|
+
x,
|
|
41
|
+
y,
|
|
42
|
+
})
|
|
43
|
+
G1.assertValidity()
|
|
44
|
+
return G1
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function fromG1Point(input: AffinePoint<bigint>): Uint8Array {
|
|
48
|
+
const xBytes = setLengthLeft(bigIntToBytes(input.x), G1_ELEMENT_BYTE_LENGTH)
|
|
49
|
+
const yBytes = setLengthLeft(bigIntToBytes(input.y), G1_ELEMENT_BYTE_LENGTH)
|
|
50
|
+
|
|
51
|
+
return concatBytes(xBytes, yBytes)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function toFp2Point(fpXCoordinate: Uint8Array, fpYCoordinate: Uint8Array) {
|
|
55
|
+
if (bytesToBigInt(fpXCoordinate) >= bn254.fields.Fp2.ORDER) {
|
|
56
|
+
throw new EVMError(EVMError.errorMessages.BN254_FP_NOT_IN_FIELD)
|
|
57
|
+
}
|
|
58
|
+
if (bytesToBigInt(fpYCoordinate) >= bn254.fields.Fp2.ORDER) {
|
|
59
|
+
throw new EVMError(EVMError.errorMessages.BN254_FP_NOT_IN_FIELD)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const fpBytes = concatBytes(fpXCoordinate, fpYCoordinate)
|
|
63
|
+
|
|
64
|
+
const FP = bn254.fields.Fp2.fromBytes(fpBytes)
|
|
65
|
+
return FP
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Converts an Uint8Array to a Noble G2 point. Raises errors if the point is not on the curve
|
|
70
|
+
* and (if activated) if the point is in the subgroup / order check.
|
|
71
|
+
* @param input Input Uint8Array. Should be 256 bytes
|
|
72
|
+
* @returns Noble G2 point
|
|
73
|
+
*/
|
|
74
|
+
function toG2Point(input: Uint8Array) {
|
|
75
|
+
if (equalsBytes(input, G2_INFINITY_POINT_BYTES) === true) {
|
|
76
|
+
return bn254.G2.Point.ZERO
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const p_x_2 = input.subarray(0, G1_ELEMENT_BYTE_LENGTH)
|
|
80
|
+
const p_x_1 = input.subarray(G1_ELEMENT_BYTE_LENGTH, G1_ELEMENT_BYTE_LENGTH * 2)
|
|
81
|
+
const start2 = G1_ELEMENT_BYTE_LENGTH * 2
|
|
82
|
+
const p_y_2 = input.subarray(start2, start2 + G1_ELEMENT_BYTE_LENGTH)
|
|
83
|
+
const p_y_1 = input.subarray(start2 + G1_ELEMENT_BYTE_LENGTH, start2 + G1_ELEMENT_BYTE_LENGTH * 2)
|
|
84
|
+
|
|
85
|
+
for (const p of [p_x_1, p_x_2, p_y_1, p_y_2]) {
|
|
86
|
+
const pB = bytesToBigInt(p)
|
|
87
|
+
if (bn254.fields.Fp.create(pB) !== pB) {
|
|
88
|
+
throw new EVMError(EVMError.errorMessages.BN254_FP_NOT_IN_FIELD)
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
const Fp2X = toFp2Point(p_x_1, p_x_2)
|
|
93
|
+
const Fp2Y = toFp2Point(p_y_1, p_y_2)
|
|
94
|
+
|
|
95
|
+
const pG2 = bn254.G2.Point.fromAffine({
|
|
96
|
+
x: Fp2X,
|
|
97
|
+
y: Fp2Y,
|
|
98
|
+
})
|
|
99
|
+
|
|
100
|
+
pG2.assertValidity()
|
|
101
|
+
|
|
102
|
+
return pG2
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Implementation of the `EVMBN254Interface` using the `ethereum-cryptography (`@noble/curves`)
|
|
107
|
+
* JS library, see https://github.com/ethereum/js-ethereum-cryptography.
|
|
108
|
+
*
|
|
109
|
+
* This is the EVM default implementation.
|
|
110
|
+
*/
|
|
111
|
+
export class NobleBN254 implements EVMBN254Interface {
|
|
112
|
+
add(input: Uint8Array): Uint8Array {
|
|
113
|
+
const p1 = toG1Point(input.slice(0, G1_POINT_BYTE_LENGTH))
|
|
114
|
+
const p2 = toG1Point(input.slice(G1_POINT_BYTE_LENGTH, G1_POINT_BYTE_LENGTH * 2))
|
|
115
|
+
|
|
116
|
+
const result = fromG1Point(p1.add(p2).toAffine())
|
|
117
|
+
return result
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
mul(input: Uint8Array): Uint8Array {
|
|
121
|
+
const p1 = toG1Point(input.slice(0, G1_POINT_BYTE_LENGTH))
|
|
122
|
+
const scalar = bn254.fields.Fr.create(bytesToBigInt(input.slice(G1_POINT_BYTE_LENGTH, 96)))
|
|
123
|
+
|
|
124
|
+
if (scalar === BIGINT_0) {
|
|
125
|
+
return G1_INFINITY_POINT_BYTES
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
const result = fromG1Point(p1.multiply(scalar).toAffine())
|
|
129
|
+
return result
|
|
130
|
+
}
|
|
131
|
+
pairing(input: Uint8Array): Uint8Array {
|
|
132
|
+
// Extract the pairs from the input
|
|
133
|
+
const pairLength = 192
|
|
134
|
+
const pairs = []
|
|
135
|
+
for (let k = 0; k < input.length / pairLength; k++) {
|
|
136
|
+
const pairStart = pairLength * k
|
|
137
|
+
const G1 = toG1Point(input.subarray(pairStart, pairStart + G1_POINT_BYTE_LENGTH))
|
|
138
|
+
|
|
139
|
+
const g2start = pairStart + G1_POINT_BYTE_LENGTH
|
|
140
|
+
const G2 = toG2Point(input.subarray(g2start, g2start + G2_POINT_BYTE_LENGTH))
|
|
141
|
+
|
|
142
|
+
if (G1 === bn254.G1.Point.ZERO || G2 === bn254.G2.Point.ZERO) {
|
|
143
|
+
continue
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
pairs.push({ g1: G1, g2: G2 })
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
const res = bn254.pairingBatch(pairs)
|
|
150
|
+
if (bn254.fields.Fp12.eql(res, bn254.fields.Fp12.ONE) === true) {
|
|
151
|
+
return ONE_BUFFER
|
|
152
|
+
} else {
|
|
153
|
+
return ZERO_BUFFER
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { bytesToUnprefixedHex, hexToBytes } from '@feelyourprotocol/util'
|
|
2
|
+
|
|
3
|
+
import type { EVMBN254Interface } from '../../types.ts'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Implementation of the `EVMBN254Interface` using a WASM wrapper https://github.com/ethereumjs/rustbn.js
|
|
7
|
+
* around the Parity fork of the Zcash bn pairing cryptography library.
|
|
8
|
+
*
|
|
9
|
+
* This can be optionally used to replace the build-in Noble implementation (`NobleBN254`) with
|
|
10
|
+
* a more performant WASM variant. See EVM `bls` constructor option on how to use.
|
|
11
|
+
*/
|
|
12
|
+
export class RustBN254 implements EVMBN254Interface {
|
|
13
|
+
protected readonly _rustbn: any
|
|
14
|
+
|
|
15
|
+
constructor(rustbn: any) {
|
|
16
|
+
this._rustbn = rustbn
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
add(input: Uint8Array): Uint8Array {
|
|
20
|
+
// Using deprecated bytesToUnprefixedHex for performance: rustbn WASM library expects unprefixed hex strings.
|
|
21
|
+
const inputStr = bytesToUnprefixedHex(input)
|
|
22
|
+
return hexToBytes(this._rustbn.ec_add(inputStr))
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
mul(input: Uint8Array): Uint8Array {
|
|
26
|
+
// Using deprecated bytesToUnprefixedHex for performance: rustbn WASM library expects unprefixed hex strings.
|
|
27
|
+
const inputHex = bytesToUnprefixedHex(input)
|
|
28
|
+
return hexToBytes(this._rustbn.ec_mul(inputHex))
|
|
29
|
+
}
|
|
30
|
+
pairing(input: Uint8Array): Uint8Array {
|
|
31
|
+
// Using deprecated bytesToUnprefixedHex for performance: rustbn WASM library expects unprefixed hex strings.
|
|
32
|
+
const inputStr = bytesToUnprefixedHex(input)
|
|
33
|
+
return hexToBytes(this._rustbn.ec_pairing(inputStr))
|
|
34
|
+
}
|
|
35
|
+
}
|