@opcat-labs/scrypt-ts-opcat 1.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/assets/.templates/smart-contract/builtin-libs/TxHashPreimageUtils.scrypt.map +1 -0
- package/assets/.templates/smart-contract/builtin-libs/TxHashPreimageUtils.scrypt.tpl +18 -0
- package/assets/.templates/smart-contract/builtin-libs/TxHashPreimageUtils.transformer.json +7 -0
- package/assets/.templates/smart-contract/builtin-libs/backtrace.scrypt.map +1 -0
- package/assets/.templates/smart-contract/builtin-libs/backtrace.scrypt.tpl +36 -0
- package/assets/.templates/smart-contract/builtin-libs/backtrace.transformer.json +7 -0
- package/assets/.templates/smart-contract/builtin-libs/byteStringReader.scrypt.map +1 -0
- package/assets/.templates/smart-contract/builtin-libs/byteStringReader.scrypt.tpl +64 -0
- package/assets/.templates/smart-contract/builtin-libs/byteStringReader.transformer.json +7 -0
- package/assets/.templates/smart-contract/builtin-libs/byteStringWriter.scrypt.map +1 -0
- package/assets/.templates/smart-contract/builtin-libs/byteStringWriter.scrypt.tpl +48 -0
- package/assets/.templates/smart-contract/builtin-libs/byteStringWriter.transformer.json +7 -0
- package/assets/.templates/smart-contract/builtin-libs/contextUtils.scrypt.map +1 -0
- package/assets/.templates/smart-contract/builtin-libs/contextUtils.scrypt.tpl +101 -0
- package/assets/.templates/smart-contract/builtin-libs/contextUtils.transformer.json +7 -0
- package/assets/.templates/smart-contract/builtin-libs/p2pk.scrypt.map +1 -0
- package/assets/.templates/smart-contract/builtin-libs/p2pk.scrypt.tpl +7 -0
- package/assets/.templates/smart-contract/builtin-libs/p2pk.transformer.json +7 -0
- package/assets/.templates/smart-contract/builtin-libs/p2pkh.scrypt.map +1 -0
- package/assets/.templates/smart-contract/builtin-libs/p2pkh.scrypt.tpl +8 -0
- package/assets/.templates/smart-contract/builtin-libs/p2pkh.transformer.json +7 -0
- package/assets/.templates/smart-contract/builtin-libs/stateLib.scrypt.map +1 -0
- package/assets/.templates/smart-contract/builtin-libs/stateLib.scrypt.tpl +3 -0
- package/assets/.templates/smart-contract/builtin-libs/stateLib.transformer.json +7 -0
- package/assets/.templates/smart-contract/builtin-libs/stateUtils.scrypt.map +1 -0
- package/assets/.templates/smart-contract/builtin-libs/stateUtils.scrypt.tpl +7 -0
- package/assets/.templates/smart-contract/builtin-libs/stateUtils.transformer.json +7 -0
- package/assets/.templates/smart-contract/builtin-libs/stdUtils.scrypt.map +1 -0
- package/assets/.templates/smart-contract/builtin-libs/stdUtils.scrypt.tpl +89 -0
- package/assets/.templates/smart-contract/builtin-libs/stdUtils.transformer.json +7 -0
- package/assets/.templates/smart-contract/builtin-libs/txUtils.scrypt.map +1 -0
- package/assets/.templates/smart-contract/builtin-libs/txUtils.scrypt.tpl +42 -0
- package/assets/.templates/smart-contract/builtin-libs/txUtils.transformer.json +7 -0
- package/assets/.templates/smart-contract/types/structs.scrypt.map +1 -0
- package/assets/.templates/smart-contract/types/structs.scrypt.tpl +48 -0
- package/assets/.templates/smart-contract/types/structs.transformer.json +7 -0
- package/assets/smart-contract/builtin-libs/TxHashPreimageUtils.scrypt +20 -0
- package/assets/smart-contract/builtin-libs/backtrace.scrypt +38 -0
- package/assets/smart-contract/builtin-libs/byteStringReader.scrypt +66 -0
- package/assets/smart-contract/builtin-libs/byteStringWriter.scrypt +50 -0
- package/assets/smart-contract/builtin-libs/contextUtils.scrypt +103 -0
- package/assets/smart-contract/builtin-libs/p2pk.scrypt +9 -0
- package/assets/smart-contract/builtin-libs/p2pkh.scrypt +10 -0
- package/assets/smart-contract/builtin-libs/stateLib.scrypt +5 -0
- package/assets/smart-contract/builtin-libs/stateUtils.scrypt +9 -0
- package/assets/smart-contract/builtin-libs/stdUtils.scrypt +91 -0
- package/assets/smart-contract/builtin-libs/txUtils.scrypt +44 -0
- package/assets/smart-contract/types/structs.scrypt +50 -0
- package/dist/cjs/features/call.cjs +38 -0
- package/dist/cjs/features/call.js.map +1 -0
- package/dist/cjs/features/deploy.cjs +33 -0
- package/dist/cjs/features/deploy.js.map +1 -0
- package/dist/cjs/features/index.cjs +8 -0
- package/dist/cjs/features/index.js.map +1 -0
- package/dist/cjs/globalTypes.cjs +3 -0
- package/dist/cjs/globalTypes.js.map +1 -0
- package/dist/cjs/index.cjs +55 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/networks.cjs +69 -0
- package/dist/cjs/networks.js.map +1 -0
- package/dist/cjs/providers/chainProvider.cjs +3 -0
- package/dist/cjs/providers/chainProvider.js.map +1 -0
- package/dist/cjs/providers/dummyProvider.cjs +87 -0
- package/dist/cjs/providers/dummyProvider.js.map +1 -0
- package/dist/cjs/providers/index.cjs +13 -0
- package/dist/cjs/providers/index.js.map +1 -0
- package/dist/cjs/providers/mempoolProvider.cjs +207 -0
- package/dist/cjs/providers/mempoolProvider.js.map +1 -0
- package/dist/cjs/providers/rpcProvider.cjs +296 -0
- package/dist/cjs/providers/rpcProvider.js.map +1 -0
- package/dist/cjs/providers/utxoProvider.cjs +18 -0
- package/dist/cjs/providers/utxoProvider.js.map +1 -0
- package/dist/cjs/psbt/bip66.cjs +182 -0
- package/dist/cjs/psbt/bip66.js.map +1 -0
- package/dist/cjs/psbt/bufferutils.cjs +186 -0
- package/dist/cjs/psbt/bufferutils.js.map +1 -0
- package/dist/cjs/psbt/contextProvider.cjs +111 -0
- package/dist/cjs/psbt/contextProvider.js.map +1 -0
- package/dist/cjs/psbt/extPsbt.cjs +589 -0
- package/dist/cjs/psbt/extPsbt.js.map +1 -0
- package/dist/cjs/psbt/psbt.cjs +973 -0
- package/dist/cjs/psbt/psbt.js.map +1 -0
- package/dist/cjs/psbt/psbtutils.cjs +140 -0
- package/dist/cjs/psbt/psbtutils.js.map +1 -0
- package/dist/cjs/psbt/signatureutils.cjs +230 -0
- package/dist/cjs/psbt/signatureutils.js.map +1 -0
- package/dist/cjs/psbt/types.cjs +3 -0
- package/dist/cjs/psbt/types.js.map +1 -0
- package/dist/cjs/signer.cjs +3 -0
- package/dist/cjs/signer.js.map +1 -0
- package/dist/cjs/signers/defaultSigner.cjs +68 -0
- package/dist/cjs/signers/defaultSigner.js.map +1 -0
- package/dist/cjs/signers/index.cjs +8 -0
- package/dist/cjs/signers/index.js.map +1 -0
- package/dist/cjs/signers/unisatSigner.cjs +38 -0
- package/dist/cjs/signers/unisatSigner.js.map +1 -0
- package/dist/cjs/smart-contract/abi.cjs +380 -0
- package/dist/cjs/smart-contract/abi.js.map +1 -0
- package/dist/cjs/smart-contract/abiutils.cjs +183 -0
- package/dist/cjs/smart-contract/abiutils.js.map +1 -0
- package/dist/cjs/smart-contract/abstractContract.cjs +25 -0
- package/dist/cjs/smart-contract/abstractContract.js.map +1 -0
- package/dist/cjs/smart-contract/builtin-libs/backtrace.cjs +102 -0
- package/dist/cjs/smart-contract/builtin-libs/backtrace.js.map +1 -0
- package/dist/cjs/smart-contract/builtin-libs/byteStringReader.cjs +138 -0
- package/dist/cjs/smart-contract/builtin-libs/byteStringReader.js.map +1 -0
- package/dist/cjs/smart-contract/builtin-libs/byteStringWriter.cjs +109 -0
- package/dist/cjs/smart-contract/builtin-libs/byteStringWriter.js.map +1 -0
- package/dist/cjs/smart-contract/builtin-libs/contextUtils.cjs +304 -0
- package/dist/cjs/smart-contract/builtin-libs/contextUtils.js.map +1 -0
- package/dist/cjs/smart-contract/builtin-libs/index.cjs +18 -0
- package/dist/cjs/smart-contract/builtin-libs/index.js.map +1 -0
- package/dist/cjs/smart-contract/builtin-libs/p2pk.cjs +74 -0
- package/dist/cjs/smart-contract/builtin-libs/p2pk.js.map +1 -0
- package/dist/cjs/smart-contract/builtin-libs/p2pkh.cjs +80 -0
- package/dist/cjs/smart-contract/builtin-libs/p2pkh.js.map +1 -0
- package/dist/cjs/smart-contract/builtin-libs/stateLib.cjs +65 -0
- package/dist/cjs/smart-contract/builtin-libs/stateLib.js.map +1 -0
- package/dist/cjs/smart-contract/builtin-libs/stateUtils.cjs +42 -0
- package/dist/cjs/smart-contract/builtin-libs/stateUtils.js.map +1 -0
- package/dist/cjs/smart-contract/builtin-libs/stdUtils.cjs +192 -0
- package/dist/cjs/smart-contract/builtin-libs/stdUtils.js.map +1 -0
- package/dist/cjs/smart-contract/builtin-libs/txHashPreimageUtils.cjs +56 -0
- package/dist/cjs/smart-contract/builtin-libs/txHashPreimageUtils.js.map +1 -0
- package/dist/cjs/smart-contract/builtin-libs/txUtils.cjs +183 -0
- package/dist/cjs/smart-contract/builtin-libs/txUtils.js.map +1 -0
- package/dist/cjs/smart-contract/consts.cjs +100 -0
- package/dist/cjs/smart-contract/consts.js.map +1 -0
- package/dist/cjs/smart-contract/decorators.cjs +83 -0
- package/dist/cjs/smart-contract/decorators.js.map +1 -0
- package/dist/cjs/smart-contract/fns/assert.cjs +17 -0
- package/dist/cjs/smart-contract/fns/assert.js.map +1 -0
- package/dist/cjs/smart-contract/fns/bitwise.cjs +141 -0
- package/dist/cjs/smart-contract/fns/bitwise.js.map +1 -0
- package/dist/cjs/smart-contract/fns/byteString.cjs +106 -0
- package/dist/cjs/smart-contract/fns/byteString.js.map +1 -0
- package/dist/cjs/smart-contract/fns/equals.cjs +66 -0
- package/dist/cjs/smart-contract/fns/equals.js.map +1 -0
- package/dist/cjs/smart-contract/fns/fill.cjs +19 -0
- package/dist/cjs/smart-contract/fns/fill.js.map +1 -0
- package/dist/cjs/smart-contract/fns/hashes.cjs +81 -0
- package/dist/cjs/smart-contract/fns/hashes.js.map +1 -0
- package/dist/cjs/smart-contract/fns/index.cjs +37 -0
- package/dist/cjs/smart-contract/fns/index.js.map +1 -0
- package/dist/cjs/smart-contract/fns/math.cjs +52 -0
- package/dist/cjs/smart-contract/fns/math.js.map +1 -0
- package/dist/cjs/smart-contract/fns/pubKey2Addr.cjs +17 -0
- package/dist/cjs/smart-contract/fns/pubKey2Addr.js.map +1 -0
- package/dist/cjs/smart-contract/methods/backtraceToGenensis.cjs +41 -0
- package/dist/cjs/smart-contract/methods/backtraceToGenensis.js.map +1 -0
- package/dist/cjs/smart-contract/methods/buildOutput.cjs +41 -0
- package/dist/cjs/smart-contract/methods/buildOutput.js.map +1 -0
- package/dist/cjs/smart-contract/methods/checkCtx.cjs +58 -0
- package/dist/cjs/smart-contract/methods/checkCtx.js.map +1 -0
- package/dist/cjs/smart-contract/methods/checkInputState.cjs +16 -0
- package/dist/cjs/smart-contract/methods/checkInputState.js.map +1 -0
- package/dist/cjs/smart-contract/methods/checkInputStateHashes.cjs +16 -0
- package/dist/cjs/smart-contract/methods/checkInputStateHashes.js.map +1 -0
- package/dist/cjs/smart-contract/methods/checkSHPreimage.cjs +17 -0
- package/dist/cjs/smart-contract/methods/checkSHPreimage.js.map +1 -0
- package/dist/cjs/smart-contract/methods/checkSig.cjs +77 -0
- package/dist/cjs/smart-contract/methods/checkSig.js.map +1 -0
- package/dist/cjs/smart-contract/serializer.cjs +145 -0
- package/dist/cjs/smart-contract/serializer.js.map +1 -0
- package/dist/cjs/smart-contract/smartContract.cjs +568 -0
- package/dist/cjs/smart-contract/smartContract.js.map +1 -0
- package/dist/cjs/smart-contract/smartContractLib.cjs +46 -0
- package/dist/cjs/smart-contract/smartContractLib.js.map +1 -0
- package/dist/cjs/smart-contract/stateSerializer.cjs +134 -0
- package/dist/cjs/smart-contract/stateSerializer.js.map +1 -0
- package/dist/cjs/smart-contract/types/abi.cjs +69 -0
- package/dist/cjs/smart-contract/types/abi.js.map +1 -0
- package/dist/cjs/smart-contract/types/artifact.cjs +16 -0
- package/dist/cjs/smart-contract/types/artifact.js.map +1 -0
- package/dist/cjs/smart-contract/types/bn.cjs +117 -0
- package/dist/cjs/smart-contract/types/bn.js.map +1 -0
- package/dist/cjs/smart-contract/types/context.cjs +3 -0
- package/dist/cjs/smart-contract/types/context.js.map +1 -0
- package/dist/cjs/smart-contract/types/index.cjs +16 -0
- package/dist/cjs/smart-contract/types/index.js.map +1 -0
- package/dist/cjs/smart-contract/types/opCode.cjs +754 -0
- package/dist/cjs/smart-contract/types/opCode.js.map +1 -0
- package/dist/cjs/smart-contract/types/primitives.cjs +108 -0
- package/dist/cjs/smart-contract/types/primitives.js.map +1 -0
- package/dist/cjs/smart-contract/types/script.cjs +43 -0
- package/dist/cjs/smart-contract/types/script.js.map +1 -0
- package/dist/cjs/smart-contract/types/structs.cjs +3 -0
- package/dist/cjs/smart-contract/types/structs.js.map +1 -0
- package/dist/cjs/smart-contract/types/utils.cjs +21 -0
- package/dist/cjs/smart-contract/types/utils.js.map +1 -0
- package/dist/cjs/utils/bvm.cjs +30 -0
- package/dist/cjs/utils/bvm.js.map +1 -0
- package/dist/cjs/utils/checkIntegrity.cjs +49 -0
- package/dist/cjs/utils/checkIntegrity.js.map +1 -0
- package/dist/cjs/utils/common.cjs +228 -0
- package/dist/cjs/utils/common.js.map +1 -0
- package/dist/cjs/utils/constants.cjs +5 -0
- package/dist/cjs/utils/constants.js.map +1 -0
- package/dist/cjs/utils/index.cjs +45 -0
- package/dist/cjs/utils/index.js.map +1 -0
- package/dist/cjs/utils/preimage.cjs +93 -0
- package/dist/cjs/utils/preimage.js.map +1 -0
- package/dist/cjs/utils/proof.cjs +110 -0
- package/dist/cjs/utils/proof.js.map +1 -0
- package/dist/cjs/utils/script_number.cjs +107 -0
- package/dist/cjs/utils/script_number.js.map +1 -0
- package/dist/esm/features/call.js +34 -0
- package/dist/esm/features/call.js.map +1 -0
- package/dist/esm/features/deploy.js +29 -0
- package/dist/esm/features/deploy.js.map +1 -0
- package/dist/esm/features/index.js +3 -0
- package/dist/esm/features/index.js.map +1 -0
- package/dist/esm/globalTypes.js +2 -0
- package/dist/esm/globalTypes.js.map +1 -0
- package/dist/esm/index.js +23 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/networks.js +41 -0
- package/dist/esm/networks.js.map +1 -0
- package/dist/esm/providers/chainProvider.js +2 -0
- package/dist/esm/providers/chainProvider.js.map +1 -0
- package/dist/esm/providers/dummyProvider.js +60 -0
- package/dist/esm/providers/dummyProvider.js.map +1 -0
- package/dist/esm/providers/index.js +5 -0
- package/dist/esm/providers/index.js.map +1 -0
- package/dist/esm/providers/mempoolProvider.js +200 -0
- package/dist/esm/providers/mempoolProvider.js.map +1 -0
- package/dist/esm/providers/rpcProvider.js +266 -0
- package/dist/esm/providers/rpcProvider.js.map +1 -0
- package/dist/esm/providers/utxoProvider.js +13 -0
- package/dist/esm/providers/utxoProvider.js.map +1 -0
- package/dist/esm/psbt/bip66.js +175 -0
- package/dist/esm/psbt/bip66.js.map +1 -0
- package/dist/esm/psbt/bufferutils.js +156 -0
- package/dist/esm/psbt/bufferutils.js.map +1 -0
- package/dist/esm/psbt/contextProvider.js +84 -0
- package/dist/esm/psbt/contextProvider.js.map +1 -0
- package/dist/esm/psbt/extPsbt.js +562 -0
- package/dist/esm/psbt/extPsbt.js.map +1 -0
- package/dist/esm/psbt/psbt.js +945 -0
- package/dist/esm/psbt/psbt.js.map +1 -0
- package/dist/esm/psbt/psbtutils.js +110 -0
- package/dist/esm/psbt/psbtutils.js.map +1 -0
- package/dist/esm/psbt/signatureutils.js +199 -0
- package/dist/esm/psbt/signatureutils.js.map +1 -0
- package/dist/esm/psbt/types.js +2 -0
- package/dist/esm/psbt/types.js.map +1 -0
- package/dist/esm/signer.js +2 -0
- package/dist/esm/signer.js.map +1 -0
- package/dist/esm/signers/defaultSigner.js +63 -0
- package/dist/esm/signers/defaultSigner.js.map +1 -0
- package/dist/esm/signers/index.js +3 -0
- package/dist/esm/signers/index.js.map +1 -0
- package/dist/esm/signers/unisatSigner.js +34 -0
- package/dist/esm/signers/unisatSigner.js.map +1 -0
- package/dist/esm/smart-contract/abi.js +373 -0
- package/dist/esm/smart-contract/abi.js.map +1 -0
- package/dist/esm/smart-contract/abiutils.js +171 -0
- package/dist/esm/smart-contract/abiutils.js.map +1 -0
- package/dist/esm/smart-contract/abstractContract.js +21 -0
- package/dist/esm/smart-contract/abstractContract.js.map +1 -0
- package/dist/esm/smart-contract/builtin-libs/backtrace.js +98 -0
- package/dist/esm/smart-contract/builtin-libs/backtrace.js.map +1 -0
- package/dist/esm/smart-contract/builtin-libs/byteStringReader.js +134 -0
- package/dist/esm/smart-contract/builtin-libs/byteStringReader.js.map +1 -0
- package/dist/esm/smart-contract/builtin-libs/byteStringWriter.js +105 -0
- package/dist/esm/smart-contract/builtin-libs/byteStringWriter.js.map +1 -0
- package/dist/esm/smart-contract/builtin-libs/contextUtils.js +300 -0
- package/dist/esm/smart-contract/builtin-libs/contextUtils.js.map +1 -0
- package/dist/esm/smart-contract/builtin-libs/index.js +8 -0
- package/dist/esm/smart-contract/builtin-libs/index.js.map +1 -0
- package/dist/esm/smart-contract/builtin-libs/p2pk.js +70 -0
- package/dist/esm/smart-contract/builtin-libs/p2pk.js.map +1 -0
- package/dist/esm/smart-contract/builtin-libs/p2pkh.js +76 -0
- package/dist/esm/smart-contract/builtin-libs/p2pkh.js.map +1 -0
- package/dist/esm/smart-contract/builtin-libs/stateLib.js +61 -0
- package/dist/esm/smart-contract/builtin-libs/stateLib.js.map +1 -0
- package/dist/esm/smart-contract/builtin-libs/stateUtils.js +38 -0
- package/dist/esm/smart-contract/builtin-libs/stateUtils.js.map +1 -0
- package/dist/esm/smart-contract/builtin-libs/stdUtils.js +188 -0
- package/dist/esm/smart-contract/builtin-libs/stdUtils.js.map +1 -0
- package/dist/esm/smart-contract/builtin-libs/txHashPreimageUtils.js +52 -0
- package/dist/esm/smart-contract/builtin-libs/txHashPreimageUtils.js.map +1 -0
- package/dist/esm/smart-contract/builtin-libs/txUtils.js +179 -0
- package/dist/esm/smart-contract/builtin-libs/txUtils.js.map +1 -0
- package/dist/esm/smart-contract/consts.js +97 -0
- package/dist/esm/smart-contract/consts.js.map +1 -0
- package/dist/esm/smart-contract/decorators.js +78 -0
- package/dist/esm/smart-contract/decorators.js.map +1 -0
- package/dist/esm/smart-contract/fns/assert.js +13 -0
- package/dist/esm/smart-contract/fns/assert.js.map +1 -0
- package/dist/esm/smart-contract/fns/bitwise.js +109 -0
- package/dist/esm/smart-contract/fns/bitwise.js.map +1 -0
- package/dist/esm/smart-contract/fns/byteString.js +97 -0
- package/dist/esm/smart-contract/fns/byteString.js.map +1 -0
- package/dist/esm/smart-contract/fns/equals.js +62 -0
- package/dist/esm/smart-contract/fns/equals.js.map +1 -0
- package/dist/esm/smart-contract/fns/fill.js +15 -0
- package/dist/esm/smart-contract/fns/fill.js.map +1 -0
- package/dist/esm/smart-contract/fns/hashes.js +73 -0
- package/dist/esm/smart-contract/fns/hashes.js.map +1 -0
- package/dist/esm/smart-contract/fns/index.js +9 -0
- package/dist/esm/smart-contract/fns/index.js.map +1 -0
- package/dist/esm/smart-contract/fns/math.js +45 -0
- package/dist/esm/smart-contract/fns/math.js.map +1 -0
- package/dist/esm/smart-contract/fns/pubKey2Addr.js +13 -0
- package/dist/esm/smart-contract/fns/pubKey2Addr.js.map +1 -0
- package/dist/esm/smart-contract/methods/backtraceToGenensis.js +36 -0
- package/dist/esm/smart-contract/methods/backtraceToGenensis.js.map +1 -0
- package/dist/esm/smart-contract/methods/buildOutput.js +36 -0
- package/dist/esm/smart-contract/methods/buildOutput.js.map +1 -0
- package/dist/esm/smart-contract/methods/checkCtx.js +31 -0
- package/dist/esm/smart-contract/methods/checkCtx.js.map +1 -0
- package/dist/esm/smart-contract/methods/checkInputState.js +12 -0
- package/dist/esm/smart-contract/methods/checkInputState.js.map +1 -0
- package/dist/esm/smart-contract/methods/checkInputStateHashes.js +12 -0
- package/dist/esm/smart-contract/methods/checkInputStateHashes.js.map +1 -0
- package/dist/esm/smart-contract/methods/checkSHPreimage.js +13 -0
- package/dist/esm/smart-contract/methods/checkSHPreimage.js.map +1 -0
- package/dist/esm/smart-contract/methods/checkSig.js +73 -0
- package/dist/esm/smart-contract/methods/checkSig.js.map +1 -0
- package/dist/esm/smart-contract/serializer.js +112 -0
- package/dist/esm/smart-contract/serializer.js.map +1 -0
- package/dist/esm/smart-contract/smartContract.js +564 -0
- package/dist/esm/smart-contract/smartContract.js.map +1 -0
- package/dist/esm/smart-contract/smartContractLib.js +42 -0
- package/dist/esm/smart-contract/smartContractLib.js.map +1 -0
- package/dist/esm/smart-contract/stateSerializer.js +129 -0
- package/dist/esm/smart-contract/stateSerializer.js.map +1 -0
- package/dist/esm/smart-contract/types/abi.js +63 -0
- package/dist/esm/smart-contract/types/abi.js.map +1 -0
- package/dist/esm/smart-contract/types/artifact.js +13 -0
- package/dist/esm/smart-contract/types/artifact.js.map +1 -0
- package/dist/esm/smart-contract/types/bn.js +89 -0
- package/dist/esm/smart-contract/types/bn.js.map +1 -0
- package/dist/esm/smart-contract/types/context.js +2 -0
- package/dist/esm/smart-contract/types/context.js.map +1 -0
- package/dist/esm/smart-contract/types/index.js +3 -0
- package/dist/esm/smart-contract/types/index.js.map +1 -0
- package/dist/esm/smart-contract/types/opCode.js +750 -0
- package/dist/esm/smart-contract/types/opCode.js.map +1 -0
- package/dist/esm/smart-contract/types/primitives.js +95 -0
- package/dist/esm/smart-contract/types/primitives.js.map +1 -0
- package/dist/esm/smart-contract/types/script.js +16 -0
- package/dist/esm/smart-contract/types/script.js.map +1 -0
- package/dist/esm/smart-contract/types/structs.js +2 -0
- package/dist/esm/smart-contract/types/structs.js.map +1 -0
- package/dist/esm/smart-contract/types/utils.js +17 -0
- package/dist/esm/smart-contract/types/utils.js.map +1 -0
- package/dist/esm/utils/bvm.js +26 -0
- package/dist/esm/utils/bvm.js.map +1 -0
- package/dist/esm/utils/checkIntegrity.js +41 -0
- package/dist/esm/utils/checkIntegrity.js.map +1 -0
- package/dist/esm/utils/common.js +188 -0
- package/dist/esm/utils/common.js.map +1 -0
- package/dist/esm/utils/constants.js +2 -0
- package/dist/esm/utils/constants.js.map +1 -0
- package/dist/esm/utils/index.js +7 -0
- package/dist/esm/utils/index.js.map +1 -0
- package/dist/esm/utils/preimage.js +65 -0
- package/dist/esm/utils/preimage.js.map +1 -0
- package/dist/esm/utils/proof.js +98 -0
- package/dist/esm/utils/proof.js.map +1 -0
- package/dist/esm/utils/script_number.js +79 -0
- package/dist/esm/utils/script_number.js.map +1 -0
- package/dist/types/features/call.d.ts +21 -0
- package/dist/types/features/call.d.ts.map +1 -0
- package/dist/types/features/deploy.d.ts +16 -0
- package/dist/types/features/deploy.d.ts.map +1 -0
- package/dist/types/features/index.d.ts +3 -0
- package/dist/types/features/index.d.ts.map +1 -0
- package/dist/types/globalTypes.d.ts +37 -0
- package/dist/types/globalTypes.d.ts.map +1 -0
- package/dist/types/index.d.ts +18 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/networks.d.ts +19 -0
- package/dist/types/networks.d.ts.map +1 -0
- package/dist/types/providers/chainProvider.d.ts +31 -0
- package/dist/types/providers/chainProvider.d.ts.map +1 -0
- package/dist/types/providers/dummyProvider.d.ts +23 -0
- package/dist/types/providers/dummyProvider.d.ts.map +1 -0
- package/dist/types/providers/index.d.ts +6 -0
- package/dist/types/providers/index.d.ts.map +1 -0
- package/dist/types/providers/mempoolProvider.d.ts +28 -0
- package/dist/types/providers/mempoolProvider.d.ts.map +1 -0
- package/dist/types/providers/rpcProvider.d.ts +34 -0
- package/dist/types/providers/rpcProvider.d.ts.map +1 -0
- package/dist/types/providers/utxoProvider.d.ts +43 -0
- package/dist/types/providers/utxoProvider.d.ts.map +1 -0
- package/dist/types/psbt/bip66.d.ts +28 -0
- package/dist/types/psbt/bip66.d.ts.map +1 -0
- package/dist/types/psbt/bufferutils.d.ts +47 -0
- package/dist/types/psbt/bufferutils.d.ts.map +1 -0
- package/dist/types/psbt/contextProvider.d.ts +15 -0
- package/dist/types/psbt/contextProvider.d.ts.map +1 -0
- package/dist/types/psbt/extPsbt.d.ts +131 -0
- package/dist/types/psbt/extPsbt.d.ts.map +1 -0
- package/dist/types/psbt/psbt.d.ts +194 -0
- package/dist/types/psbt/psbt.d.ts.map +1 -0
- package/dist/types/psbt/psbtutils.d.ts +37 -0
- package/dist/types/psbt/psbtutils.d.ts.map +1 -0
- package/dist/types/psbt/signatureutils.d.ts +52 -0
- package/dist/types/psbt/signatureutils.d.ts.map +1 -0
- package/dist/types/psbt/types.d.ts +63 -0
- package/dist/types/psbt/types.d.ts.map +1 -0
- package/dist/types/signer.d.ts +48 -0
- package/dist/types/signer.d.ts.map +1 -0
- package/dist/types/signers/defaultSigner.d.ts +30 -0
- package/dist/types/signers/defaultSigner.d.ts.map +1 -0
- package/dist/types/signers/index.d.ts +4 -0
- package/dist/types/signers/index.d.ts.map +1 -0
- package/dist/types/signers/unisatSigner.d.ts +32 -0
- package/dist/types/signers/unisatSigner.d.ts.map +1 -0
- package/dist/types/smart-contract/abi.d.ts +43 -0
- package/dist/types/smart-contract/abi.d.ts.map +1 -0
- package/dist/types/smart-contract/abiutils.d.ts +51 -0
- package/dist/types/smart-contract/abiutils.d.ts.map +1 -0
- package/dist/types/smart-contract/abstractContract.d.ts +115 -0
- package/dist/types/smart-contract/abstractContract.d.ts.map +1 -0
- package/dist/types/smart-contract/builtin-libs/backtrace.d.ts +43 -0
- package/dist/types/smart-contract/builtin-libs/backtrace.d.ts.map +1 -0
- package/dist/types/smart-contract/builtin-libs/byteStringReader.d.ts +32 -0
- package/dist/types/smart-contract/builtin-libs/byteStringReader.d.ts.map +1 -0
- package/dist/types/smart-contract/builtin-libs/byteStringWriter.d.ts +29 -0
- package/dist/types/smart-contract/builtin-libs/byteStringWriter.d.ts.map +1 -0
- package/dist/types/smart-contract/builtin-libs/contextUtils.d.ts +53 -0
- package/dist/types/smart-contract/builtin-libs/contextUtils.d.ts.map +1 -0
- package/dist/types/smart-contract/builtin-libs/index.d.ts +8 -0
- package/dist/types/smart-contract/builtin-libs/index.d.ts.map +1 -0
- package/dist/types/smart-contract/builtin-libs/p2pk.d.ts +8 -0
- package/dist/types/smart-contract/builtin-libs/p2pk.d.ts.map +1 -0
- package/dist/types/smart-contract/builtin-libs/p2pkh.d.ts +8 -0
- package/dist/types/smart-contract/builtin-libs/p2pkh.d.ts.map +1 -0
- package/dist/types/smart-contract/builtin-libs/stateLib.d.ts +27 -0
- package/dist/types/smart-contract/builtin-libs/stateLib.d.ts.map +1 -0
- package/dist/types/smart-contract/builtin-libs/stateUtils.d.ts +18 -0
- package/dist/types/smart-contract/builtin-libs/stateUtils.d.ts.map +1 -0
- package/dist/types/smart-contract/builtin-libs/stdUtils.d.ts +44 -0
- package/dist/types/smart-contract/builtin-libs/stdUtils.d.ts.map +1 -0
- package/dist/types/smart-contract/builtin-libs/txHashPreimageUtils.d.ts +8 -0
- package/dist/types/smart-contract/builtin-libs/txHashPreimageUtils.d.ts.map +1 -0
- package/dist/types/smart-contract/builtin-libs/txUtils.d.ts +69 -0
- package/dist/types/smart-contract/builtin-libs/txUtils.d.ts.map +1 -0
- package/dist/types/smart-contract/consts.d.ts +97 -0
- package/dist/types/smart-contract/consts.d.ts.map +1 -0
- package/dist/types/smart-contract/decorators.d.ts +40 -0
- package/dist/types/smart-contract/decorators.d.ts.map +1 -0
- package/dist/types/smart-contract/fns/assert.d.ts +8 -0
- package/dist/types/smart-contract/fns/assert.d.ts.map +1 -0
- package/dist/types/smart-contract/fns/bitwise.d.ts +50 -0
- package/dist/types/smart-contract/fns/bitwise.d.ts.map +1 -0
- package/dist/types/smart-contract/fns/byteString.d.ts +56 -0
- package/dist/types/smart-contract/fns/byteString.d.ts.map +1 -0
- package/dist/types/smart-contract/fns/equals.d.ts +8 -0
- package/dist/types/smart-contract/fns/equals.d.ts.map +1 -0
- package/dist/types/smart-contract/fns/fill.d.ts +11 -0
- package/dist/types/smart-contract/fns/fill.d.ts.map +1 -0
- package/dist/types/smart-contract/fns/hashes.d.ts +60 -0
- package/dist/types/smart-contract/fns/hashes.d.ts.map +1 -0
- package/dist/types/smart-contract/fns/index.d.ts +9 -0
- package/dist/types/smart-contract/fns/index.d.ts.map +1 -0
- package/dist/types/smart-contract/fns/math.d.ts +38 -0
- package/dist/types/smart-contract/fns/math.d.ts.map +1 -0
- package/dist/types/smart-contract/fns/pubKey2Addr.d.ts +11 -0
- package/dist/types/smart-contract/fns/pubKey2Addr.d.ts.map +1 -0
- package/dist/types/smart-contract/methods/backtraceToGenensis.d.ts +20 -0
- package/dist/types/smart-contract/methods/backtraceToGenensis.d.ts.map +1 -0
- package/dist/types/smart-contract/methods/buildOutput.d.ts +25 -0
- package/dist/types/smart-contract/methods/buildOutput.d.ts.map +1 -0
- package/dist/types/smart-contract/methods/checkCtx.d.ts +18 -0
- package/dist/types/smart-contract/methods/checkCtx.d.ts.map +1 -0
- package/dist/types/smart-contract/methods/checkInputState.d.ts +9 -0
- package/dist/types/smart-contract/methods/checkInputState.d.ts.map +1 -0
- package/dist/types/smart-contract/methods/checkInputStateHashes.d.ts +10 -0
- package/dist/types/smart-contract/methods/checkInputStateHashes.d.ts.map +1 -0
- package/dist/types/smart-contract/methods/checkSHPreimage.d.ts +10 -0
- package/dist/types/smart-contract/methods/checkSHPreimage.d.ts.map +1 -0
- package/dist/types/smart-contract/methods/checkSig.d.ts +11 -0
- package/dist/types/smart-contract/methods/checkSig.d.ts.map +1 -0
- package/dist/types/smart-contract/serializer.d.ts +48 -0
- package/dist/types/smart-contract/serializer.d.ts.map +1 -0
- package/dist/types/smart-contract/smartContract.d.ts +274 -0
- package/dist/types/smart-contract/smartContract.d.ts.map +1 -0
- package/dist/types/smart-contract/smartContractLib.d.ts +26 -0
- package/dist/types/smart-contract/smartContractLib.d.ts.map +1 -0
- package/dist/types/smart-contract/stateSerializer.d.ts +8 -0
- package/dist/types/smart-contract/stateSerializer.d.ts.map +1 -0
- package/dist/types/smart-contract/types/abi.d.ts +55 -0
- package/dist/types/smart-contract/types/abi.d.ts.map +1 -0
- package/dist/types/smart-contract/types/artifact.d.ts +108 -0
- package/dist/types/smart-contract/types/artifact.d.ts.map +1 -0
- package/dist/types/smart-contract/types/bn.d.ts +3 -0
- package/dist/types/smart-contract/types/bn.d.ts.map +1 -0
- package/dist/types/smart-contract/types/context.d.ts +126 -0
- package/dist/types/smart-contract/types/context.d.ts.map +1 -0
- package/dist/types/smart-contract/types/index.d.ts +4 -0
- package/dist/types/smart-contract/types/index.d.ts.map +1 -0
- package/dist/types/smart-contract/types/opCode.d.ts +747 -0
- package/dist/types/smart-contract/types/opCode.d.ts.map +1 -0
- package/dist/types/smart-contract/types/primitives.d.ts +217 -0
- package/dist/types/smart-contract/types/primitives.d.ts.map +1 -0
- package/dist/types/smart-contract/types/script.d.ts +14 -0
- package/dist/types/smart-contract/types/script.d.ts.map +1 -0
- package/dist/types/smart-contract/types/structs.d.ts +206 -0
- package/dist/types/smart-contract/types/structs.d.ts.map +1 -0
- package/dist/types/smart-contract/types/utils.d.ts +5 -0
- package/dist/types/smart-contract/types/utils.d.ts.map +1 -0
- package/dist/types/utils/bvm.d.ts +9 -0
- package/dist/types/utils/bvm.d.ts.map +1 -0
- package/dist/types/utils/checkIntegrity.d.ts +46 -0
- package/dist/types/utils/checkIntegrity.d.ts.map +1 -0
- package/dist/types/utils/common.d.ts +61 -0
- package/dist/types/utils/common.d.ts.map +1 -0
- package/dist/types/utils/constants.d.ts +3 -0
- package/dist/types/utils/constants.d.ts.map +1 -0
- package/dist/types/utils/index.d.ts +7 -0
- package/dist/types/utils/index.d.ts.map +1 -0
- package/dist/types/utils/preimage.d.ts +31 -0
- package/dist/types/utils/preimage.d.ts.map +1 -0
- package/dist/types/utils/proof.d.ts +31 -0
- package/dist/types/utils/proof.d.ts.map +1 -0
- package/dist/types/utils/script_number.d.ts +19 -0
- package/dist/types/utils/script_number.d.ts.map +1 -0
- package/package.json +79 -0
- package/scrypt.index.json +85 -0
- package/src/smart-contract/builtin-libs/backtrace.ts +116 -0
- package/src/smart-contract/builtin-libs/byteStringReader.ts +111 -0
- package/src/smart-contract/builtin-libs/byteStringWriter.ts +86 -0
- package/src/smart-contract/builtin-libs/contextUtils.ts +270 -0
- package/src/smart-contract/builtin-libs/index.ts +7 -0
- package/src/smart-contract/builtin-libs/p2pk.ts +58 -0
- package/src/smart-contract/builtin-libs/p2pkh.ts +67 -0
- package/src/smart-contract/builtin-libs/stateLib.ts +82 -0
- package/src/smart-contract/builtin-libs/stateUtils.ts +37 -0
- package/src/smart-contract/builtin-libs/stdUtils.ts +156 -0
- package/src/smart-contract/builtin-libs/txHashPreimageUtils.ts +34 -0
- package/src/smart-contract/builtin-libs/txUtils.ts +152 -0
- package/src/smart-contract/types/structs.ts +244 -0
|
@@ -0,0 +1,564 @@
|
|
|
1
|
+
import { AbstractContract } from './abstractContract.js';
|
|
2
|
+
import { buildChangeOutputImpl, buildStateOutputImpl } from './methods/buildOutput.js';
|
|
3
|
+
import { checkCtxImpl } from './methods/checkCtx.js';
|
|
4
|
+
import { checkSHPreimageImpl as checkSHPreimageImpl } from './methods/checkSHPreimage.js';
|
|
5
|
+
import { checkSigImpl } from './methods/checkSig.js';
|
|
6
|
+
import { ABICoder } from './abi.js';
|
|
7
|
+
import { uint8ArrayToHex, cloneDeep, isFinal, hexToUint8Array } from '../utils/index.js';
|
|
8
|
+
import { hash256, sha256 } from './fns/hashes.js';
|
|
9
|
+
import { slice } from './fns/byteString.js';
|
|
10
|
+
import { checkInputStateImpl } from './methods/checkInputState.js';
|
|
11
|
+
import { deserializeOutputs } from './serializer.js';
|
|
12
|
+
import { backtraceToOutpointImpl, backtraceToScriptImpl } from './methods/backtraceToGenensis.js';
|
|
13
|
+
import { deserializeState, serializeState } from './stateSerializer.js';
|
|
14
|
+
import { getUnRenamedSymbol } from './abiutils.js';
|
|
15
|
+
import { checkInputStateHashesImpl } from './methods/checkInputStateHashes.js';
|
|
16
|
+
import { toTxHashPreimage } from '../utils/proof.js';
|
|
17
|
+
/**
|
|
18
|
+
* The main contract class. To write a contract, extend this class as such:
|
|
19
|
+
* @onchain
|
|
20
|
+
* @example
|
|
21
|
+
* ```ts
|
|
22
|
+
* class YourSmartContract extends SmartContract {
|
|
23
|
+
* // your smart contract code here
|
|
24
|
+
* }
|
|
25
|
+
* ```
|
|
26
|
+
* @category SmartContract
|
|
27
|
+
*/
|
|
28
|
+
export class SmartContract extends AbstractContract {
|
|
29
|
+
/**
|
|
30
|
+
*
|
|
31
|
+
* @ignore
|
|
32
|
+
*/
|
|
33
|
+
getStateType() {
|
|
34
|
+
const clazz = this.constructor;
|
|
35
|
+
return clazz.stateType;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* This function is usually called on the frontend.
|
|
39
|
+
* The contract class needs to call this function before instantiating.
|
|
40
|
+
* @param artifact a contract artifact json object
|
|
41
|
+
*/
|
|
42
|
+
static loadArtifact(artifact) {
|
|
43
|
+
if (getUnRenamedSymbol(artifact.contract) !== getUnRenamedSymbol(this.name)) {
|
|
44
|
+
throw new Error(`Artifact does not match contract ${this.name}!`);
|
|
45
|
+
}
|
|
46
|
+
this.artifact = artifact;
|
|
47
|
+
this.stateType = artifact.stateType;
|
|
48
|
+
return this;
|
|
49
|
+
}
|
|
50
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
51
|
+
constructor(...args) {
|
|
52
|
+
super();
|
|
53
|
+
const ContractClazz = this.constructor;
|
|
54
|
+
if (!ContractClazz.artifact) {
|
|
55
|
+
throw new Error(`Artifact not loaded for contract ${this.constructor.name}!`);
|
|
56
|
+
}
|
|
57
|
+
const artifact = ContractClazz.artifact;
|
|
58
|
+
this._abiCoder = new ABICoder(artifact);
|
|
59
|
+
if (Object.getPrototypeOf(this.constructor.prototype) !== SmartContract.prototype) {
|
|
60
|
+
// contract is not a direct child of SmartContract, should use ContractClazz.create instead
|
|
61
|
+
if (!SmartContract.newFromCreate) {
|
|
62
|
+
throw new Error(`Contract \`${this.constructor.name}\` is not a direct child of \`SmartContract\`, should use \`${this.constructor.name}.create\` instead of use \`new ${this.constructor.name}\``);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (!SmartContract.newFromCreate) {
|
|
66
|
+
this.generateLockingScript(...args);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* @ignore
|
|
71
|
+
* @param args
|
|
72
|
+
*/
|
|
73
|
+
generateLockingScript(...args) {
|
|
74
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
75
|
+
this.lockingScript = this._abiCoder.encodeConstructorCall(args);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Used to create an instance of a smart contract. If your smart contract has a base class, you must use this method to instantiate it.
|
|
79
|
+
* @param this
|
|
80
|
+
* @param args
|
|
81
|
+
* @returns
|
|
82
|
+
*/
|
|
83
|
+
static create(...args) {
|
|
84
|
+
SmartContract.newFromCreate = true;
|
|
85
|
+
const instance = new this(...args);
|
|
86
|
+
SmartContract.newFromCreate = false;
|
|
87
|
+
instance.generateLockingScript(...args);
|
|
88
|
+
return instance;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Using the [OP_PUSH_TX]{@link https://medium.com/@xiaohuiliu/op-push-tx-3d3d279174c1} technique, check if `shPreimage` is the preimage of the current transaction.
|
|
92
|
+
* @onchain
|
|
93
|
+
* @param txPreimage The format of the preimage is [specified]{@link https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki#signature-validation-rules}
|
|
94
|
+
* @returns true if `shPreimage` is the preimage of the current transaction. Otherwise false.
|
|
95
|
+
*/
|
|
96
|
+
checkSHPreimage(shPreimage) {
|
|
97
|
+
return checkSHPreimageImpl(this, shPreimage);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* A built-in function verifies an Schnorr signature. It takes two inputs from the stack, a public key (on top of the stack) and an Schnorr signature in its DER_CANONISED format concatenated with sighash flags.
|
|
101
|
+
* It outputs true or false on the stack based on whether the signature check passes or fails. [see]{@link https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki#specification}
|
|
102
|
+
* @onchain
|
|
103
|
+
* @category Signature Verification
|
|
104
|
+
*/
|
|
105
|
+
checkSig(signature, publickey, errorMsg = 'signature check failed') {
|
|
106
|
+
const fSuccess = checkSigImpl(this, signature, publickey);
|
|
107
|
+
if (!fSuccess && signature.length) {
|
|
108
|
+
// because NULLFAIL rule, always throw if catch a wrong signature
|
|
109
|
+
// https://github.com/bitcoin/bips/blob/master/bip-0146.mediawiki#nullfail
|
|
110
|
+
throw new Error(errorMsg);
|
|
111
|
+
}
|
|
112
|
+
return fSuccess;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* A built-in function to create an [change output]{@link https://en.bitcoin.it/wiki/Change}.
|
|
116
|
+
* @onchain
|
|
117
|
+
* @returns
|
|
118
|
+
*/
|
|
119
|
+
buildChangeOutput() {
|
|
120
|
+
this._checkPsbtBinding();
|
|
121
|
+
return buildChangeOutputImpl(this._curPsbt);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* @ignore
|
|
125
|
+
*/
|
|
126
|
+
get accessedInputStateProofs() {
|
|
127
|
+
return (this._abiCoder.artifact.abi.filter((func) => func.params.filter((p) => p.name === '__scrypt_ts_inputStateProofs').length > 0).length > 0);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* A built-in function to create all outputs added by `appendStateOutput()`
|
|
131
|
+
* @onchain
|
|
132
|
+
* @returns an output containing the new state
|
|
133
|
+
*/
|
|
134
|
+
buildStateOutput(satoshis) {
|
|
135
|
+
this._checkPsbtBinding();
|
|
136
|
+
return buildStateOutputImpl(this, this.state, satoshis, this.ctx.spentScriptHash);
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Calculate the hash of all states of the current contract
|
|
140
|
+
* @onchain
|
|
141
|
+
* @param state state of the contract
|
|
142
|
+
* @returns hash160 of the state
|
|
143
|
+
*/
|
|
144
|
+
static serializeState(state) {
|
|
145
|
+
const selfClazz = this;
|
|
146
|
+
const artifact = selfClazz.artifact;
|
|
147
|
+
if (!artifact) {
|
|
148
|
+
throw new Error(`Artifact is not loaded for the contract: ${this.name}`);
|
|
149
|
+
}
|
|
150
|
+
const stateType = selfClazz.stateType;
|
|
151
|
+
if (!stateType) {
|
|
152
|
+
throw new Error(`State struct \`${stateType}\` is not defined!`);
|
|
153
|
+
}
|
|
154
|
+
return serializeState(artifact, stateType, state);
|
|
155
|
+
}
|
|
156
|
+
static deserializeState(serializedState) {
|
|
157
|
+
const selfClazz = this;
|
|
158
|
+
const artifact = selfClazz.artifact;
|
|
159
|
+
if (!artifact) {
|
|
160
|
+
throw new Error(`Artifact is not loaded for the contract: ${this.name}`);
|
|
161
|
+
}
|
|
162
|
+
const stateType = selfClazz.stateType;
|
|
163
|
+
if (!stateType) {
|
|
164
|
+
throw new Error(`State struct \`${stateType}\` is not defined!`);
|
|
165
|
+
}
|
|
166
|
+
return deserializeState(artifact, stateType, serializedState);
|
|
167
|
+
}
|
|
168
|
+
static stateHash(state) {
|
|
169
|
+
return sha256(this.serializeState(state));
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* check StateHash of the input. By default, the system checks the StateHash of all inputs.
|
|
173
|
+
* If you use this function to specify checking only specific inputs' StateHash, you must set the `autoCheckInputState`
|
|
174
|
+
* option in the `@method()` decorator to false.
|
|
175
|
+
* @onchain
|
|
176
|
+
* @param inputIndex index of the input
|
|
177
|
+
* @param stateData the state data of the input
|
|
178
|
+
* @returns success if stateData is valid
|
|
179
|
+
*/
|
|
180
|
+
checkInputState(inputIndex, stateData) {
|
|
181
|
+
const stateHash = slice(this.inputContext.spentDataHashes, inputIndex * 32n, (inputIndex + 1n) * 32n);
|
|
182
|
+
checkInputStateImpl(stateHash, stateData);
|
|
183
|
+
return true;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Get the context details of the current PSBT input in which this contract is called or spent.
|
|
187
|
+
* @onchain
|
|
188
|
+
*/
|
|
189
|
+
get ctx() {
|
|
190
|
+
const { shPreimage, inputCount, prevouts, prevout, spentScriptHashes, spentAmounts, spentDataHashes, } = this.inputContext;
|
|
191
|
+
return {
|
|
192
|
+
...shPreimage,
|
|
193
|
+
inputCount,
|
|
194
|
+
prevouts,
|
|
195
|
+
prevout,
|
|
196
|
+
spentScriptHashes,
|
|
197
|
+
spentAmounts,
|
|
198
|
+
spentDataHashes,
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Mark the contract instance as spent from the input of the PSBT.
|
|
203
|
+
* @param psbt
|
|
204
|
+
* @param inputIndex
|
|
205
|
+
*/
|
|
206
|
+
spentFromInput(psbt, inputIndex) {
|
|
207
|
+
this._curPsbt = psbt;
|
|
208
|
+
this._curInputIndex = inputIndex;
|
|
209
|
+
}
|
|
210
|
+
get spentPsbt() {
|
|
211
|
+
return this._curPsbt;
|
|
212
|
+
}
|
|
213
|
+
setSighashType(sigHashType) {
|
|
214
|
+
this._checkPsbtBinding();
|
|
215
|
+
this._curPsbt.setSighashType(this._curInputIndex, sigHashType);
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Get the context of the current PSBT input in which this contract is called or spent.
|
|
219
|
+
* @returns the context of the current PSBT input
|
|
220
|
+
*/
|
|
221
|
+
get inputContext() {
|
|
222
|
+
this._checkPsbtBinding();
|
|
223
|
+
return this._curPsbt.getInputCtx(this._curInputIndex);
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
*
|
|
227
|
+
* @ignore
|
|
228
|
+
*/
|
|
229
|
+
extendMethodArgs(method, args, autoCheckInputState) {
|
|
230
|
+
// extend the args with the context
|
|
231
|
+
if (this._shouldInjectCtx(method)) {
|
|
232
|
+
this._autoInject(method, args, autoCheckInputState);
|
|
233
|
+
}
|
|
234
|
+
const unlockingScript = this._abiCoder.encodePubFunctionCall(method, args);
|
|
235
|
+
this._methodCall = {
|
|
236
|
+
method,
|
|
237
|
+
args,
|
|
238
|
+
unlockingScript,
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
*
|
|
243
|
+
* @ignore
|
|
244
|
+
*/
|
|
245
|
+
isPubFunction(method) {
|
|
246
|
+
return this._abiCoder.isPubFunction(method);
|
|
247
|
+
}
|
|
248
|
+
isSmartContract() {
|
|
249
|
+
return true;
|
|
250
|
+
}
|
|
251
|
+
_shouldInjectCtx(method) {
|
|
252
|
+
return this._abiCoder.artifact.abi.some((abiEntity) => {
|
|
253
|
+
return (abiEntity.name === method &&
|
|
254
|
+
abiEntity.params.some((param) => param.name === '__scrypt_ts_shPreimage'));
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
_autoInject(method, args, autoCheckInputState) {
|
|
258
|
+
const { shPreimage, prevouts, prevout, spentScriptHashes, spentAmounts, spentDataHashes, inputCount, } = this.inputContext;
|
|
259
|
+
checkCtxImpl(this, shPreimage, this._curInputIndex, prevouts, prevout, spentScriptHashes, spentAmounts, spentDataHashes);
|
|
260
|
+
const curState = this.state;
|
|
261
|
+
const abiEntity = this._abiCoder.artifact.abi.find((abiEntity) => {
|
|
262
|
+
return abiEntity.name === method;
|
|
263
|
+
});
|
|
264
|
+
if (abiEntity) {
|
|
265
|
+
abiEntity.params.forEach((param) => {
|
|
266
|
+
if (param.name === '__scrypt_ts_shPreimage') {
|
|
267
|
+
const { shPreimage } = this.inputContext;
|
|
268
|
+
args.push(shPreimage);
|
|
269
|
+
}
|
|
270
|
+
else if (param.name === '__scrypt_ts_changeInfo') {
|
|
271
|
+
args.push(this.changeInfo);
|
|
272
|
+
}
|
|
273
|
+
else if (param.name === '__scrypt_ts_prevouts') {
|
|
274
|
+
args.push(prevouts);
|
|
275
|
+
}
|
|
276
|
+
else if (param.name === '__scrypt_ts_prevout') {
|
|
277
|
+
args.push(prevout);
|
|
278
|
+
}
|
|
279
|
+
else if (param.name === '__scrypt_ts_spentScriptHashes') {
|
|
280
|
+
const { spentScriptHashes } = this.inputContext;
|
|
281
|
+
args.push(spentScriptHashes);
|
|
282
|
+
}
|
|
283
|
+
else if (param.name === '__scrypt_ts_spentAmounts') {
|
|
284
|
+
args.push(spentAmounts);
|
|
285
|
+
}
|
|
286
|
+
else if (param.name === '__scrypt_ts_inputCount') {
|
|
287
|
+
args.push(inputCount);
|
|
288
|
+
}
|
|
289
|
+
else if (param.name === '__scrypt_ts_spentDataHashes') {
|
|
290
|
+
checkInputStateHashesImpl(shPreimage.hashSpentDataHashes, spentDataHashes);
|
|
291
|
+
args.push(spentDataHashes);
|
|
292
|
+
}
|
|
293
|
+
else if (param.name === '__scrypt_ts_curState') {
|
|
294
|
+
this._checkState();
|
|
295
|
+
if (autoCheckInputState) {
|
|
296
|
+
checkInputStateImpl(shPreimage.spentDataHash, this.constructor.serializeState(curState));
|
|
297
|
+
}
|
|
298
|
+
args.push(curState);
|
|
299
|
+
}
|
|
300
|
+
else if (param.name === '__scrypt_ts_prevTxHashPreimage') {
|
|
301
|
+
if (!this.utxo.txHashPreimage) {
|
|
302
|
+
throw new Error('utxo.txHashPreimage is required for backtrace');
|
|
303
|
+
}
|
|
304
|
+
args.push(toTxHashPreimage(hexToUint8Array(this.utxo.txHashPreimage)));
|
|
305
|
+
}
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
_checkPsbtBinding() {
|
|
310
|
+
if (this._curPsbt === undefined || this._curInputIndex === undefined) {
|
|
311
|
+
throw new Error('Not binding to any PSBT input!');
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
_checkState() {
|
|
315
|
+
if (this.state === undefined) {
|
|
316
|
+
throw new Error('State is not initialized!');
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Get the change info of the change output for current psbt.
|
|
321
|
+
* @onchain
|
|
322
|
+
* @returns the change info of current psbt
|
|
323
|
+
*/
|
|
324
|
+
get changeInfo() {
|
|
325
|
+
this._checkPsbtBinding();
|
|
326
|
+
return this._curPsbt.getChangeInfo();
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* A set of functions for debugging contracts, which can only be called in `@method` methods.
|
|
330
|
+
* @onchain
|
|
331
|
+
*/
|
|
332
|
+
get debug() {
|
|
333
|
+
return {
|
|
334
|
+
diffOutputs: (outputsByte) => {
|
|
335
|
+
const outputs = deserializeOutputs(outputsByte);
|
|
336
|
+
if (outputs.length !== this._curPsbt?.txOutputs.length) {
|
|
337
|
+
console.warn(`Outputs count is different: ${outputs.length}(#contract) vs ${this._curPsbt?.txOutputs.length}(#context)`);
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
this._curPsbt?.txOutputs.forEach((output, index) => {
|
|
341
|
+
const scriptHash = sha256(uint8ArrayToHex(output.script));
|
|
342
|
+
const dataHash = sha256(uint8ArrayToHex(output.data));
|
|
343
|
+
if (outputs[index].dataHash !== dataHash) {
|
|
344
|
+
console.warn(`Output[${index}] dataHash is different: ${outputs[index]?.dataHash}(#contract) vs ${dataHash}(#context)`);
|
|
345
|
+
}
|
|
346
|
+
if (outputs[index].scriptHash !== scriptHash) {
|
|
347
|
+
console.warn(`Output[${index}] scriptHash is different: ${outputs[index]?.scriptHash}(#contract) vs ${scriptHash}(#context)`);
|
|
348
|
+
}
|
|
349
|
+
if (outputs[index]?.value !== output.value) {
|
|
350
|
+
console.warn(`Output[${index}] value is different: ${outputs[index]?.value}(#contract) vs ${output.value}(#context)`);
|
|
351
|
+
}
|
|
352
|
+
});
|
|
353
|
+
},
|
|
354
|
+
};
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Check the outputs with the context of current transaction.
|
|
358
|
+
* @param outputs the expected serialized outputs of the current transaction
|
|
359
|
+
* @returns true if the outputs are not consistent with the transaction context, otherwise false.
|
|
360
|
+
* @onchain
|
|
361
|
+
*/
|
|
362
|
+
checkOutputs(outputs) {
|
|
363
|
+
if (this.ctx.hashOutputs !== hash256(outputs)) {
|
|
364
|
+
this.debug.diffOutputs(outputs);
|
|
365
|
+
return false;
|
|
366
|
+
}
|
|
367
|
+
return true;
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* Returns the raw arguments from the call data of the smart contract.
|
|
371
|
+
* @returns The raw arguments extracted from the call data.
|
|
372
|
+
*/
|
|
373
|
+
getUnlockingScript() {
|
|
374
|
+
return this.getCallData().unlockingScript;
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Gets the method call data for the current smart contract.
|
|
378
|
+
* @throws {Error} If no method call is found.
|
|
379
|
+
* @returns {MethodCallData} The method call data object.
|
|
380
|
+
*/
|
|
381
|
+
getCallData() {
|
|
382
|
+
if (!this._methodCall) {
|
|
383
|
+
throw new Error('No method call found!');
|
|
384
|
+
}
|
|
385
|
+
return this._methodCall;
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* Transform unlocking script from the testimony into arguments previously used to invoke the contract.
|
|
389
|
+
* @ignore
|
|
390
|
+
* @param _args
|
|
391
|
+
* @param _method
|
|
392
|
+
*/
|
|
393
|
+
unlockingScriptToCallData(_args, _method) {
|
|
394
|
+
throw new Error('Method not implemented.');
|
|
395
|
+
}
|
|
396
|
+
/**
|
|
397
|
+
* Checks a locktime parameter with the transaction's locktime.
|
|
398
|
+
* There are two times of nLockTime: lock-by-blockheight and lock-by-blocktime,
|
|
399
|
+
* distinguished by whether nLockTime < LOCKTIME_THRESHOLD = 500000000
|
|
400
|
+
*
|
|
401
|
+
* See the corresponding code on bitcoin core:
|
|
402
|
+
* https://github.com/bitcoin/bitcoin/blob/ffd75adce01a78b3461b3ff05bcc2b530a9ce994/src/script/interpreter.cpp#L1129
|
|
403
|
+
*
|
|
404
|
+
* See the bip65 for specification
|
|
405
|
+
* https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki#summary
|
|
406
|
+
* @onchain
|
|
407
|
+
* @param {BN} nLockTime the locktime read from the script
|
|
408
|
+
* @return {boolean} true if the transaction's locktime is less than or equal to
|
|
409
|
+
* the transaction's locktime
|
|
410
|
+
*/
|
|
411
|
+
absTimeLock(nLockTime) {
|
|
412
|
+
// We want to compare apples to apples, so fail the script
|
|
413
|
+
// unless the type of nLockTime being tested is the same as
|
|
414
|
+
// the nLockTime in the transaction.
|
|
415
|
+
const locktime = this._curPsbt.getlockTime();
|
|
416
|
+
const LOCKTIME_THRESHOLD = 500000000;
|
|
417
|
+
const LOCKTIME_THRESHOLD_BN = BigInt(LOCKTIME_THRESHOLD);
|
|
418
|
+
if (!((locktime < LOCKTIME_THRESHOLD && nLockTime < LOCKTIME_THRESHOLD_BN) ||
|
|
419
|
+
(locktime >= LOCKTIME_THRESHOLD && nLockTime >= LOCKTIME_THRESHOLD_BN))) {
|
|
420
|
+
return false;
|
|
421
|
+
}
|
|
422
|
+
// Now that we know we're comparing apples-to-apples, the
|
|
423
|
+
// comparison is a simple numeric one.
|
|
424
|
+
if (nLockTime > BigInt(locktime)) {
|
|
425
|
+
return false;
|
|
426
|
+
}
|
|
427
|
+
// Finally the nLockTime feature can be disabled and thus
|
|
428
|
+
// CHECKLOCKTIMEVERIFY bypassed if every txin has been
|
|
429
|
+
// finalized by setting nSequence to maxint. The
|
|
430
|
+
// transaction would be allowed into the blockchain, making
|
|
431
|
+
// the opcode ineffective.
|
|
432
|
+
//
|
|
433
|
+
// Testing if this vin is not final is sufficient to
|
|
434
|
+
// prevent this condition. Alternatively we could test all
|
|
435
|
+
// inputs, but testing just this input minimizes the data
|
|
436
|
+
// required to prove correct CHECKLOCKTIMEVERIFY execution.
|
|
437
|
+
const sequence = this._curPsbt.getSequence(this._curInputIndex);
|
|
438
|
+
if (!isFinal(sequence)) {
|
|
439
|
+
return false;
|
|
440
|
+
}
|
|
441
|
+
return true;
|
|
442
|
+
}
|
|
443
|
+
/**
|
|
444
|
+
* Checks a sequence parameter with the transaction's sequence.
|
|
445
|
+
* @onchain
|
|
446
|
+
* @param {BN} nSequence the sequence read from the script
|
|
447
|
+
* @return {boolean} true if the transaction's sequence is less than or equal to
|
|
448
|
+
* the transaction's sequence
|
|
449
|
+
*/
|
|
450
|
+
relTimeLock(nSequence) {
|
|
451
|
+
// Relative lock times are supported by comparing the passed in operand to
|
|
452
|
+
// the sequence number of the input.
|
|
453
|
+
const txToSequence = this._curPsbt.getSequence(this._curInputIndex);
|
|
454
|
+
// Fail if the transaction's version number is not set high enough to
|
|
455
|
+
// trigger BIP 68 rules.
|
|
456
|
+
// if (this.tx.version < 2) {
|
|
457
|
+
// return false;
|
|
458
|
+
// }
|
|
459
|
+
// Sequence numbers with their most significant bit set are not consensus
|
|
460
|
+
// constrained. Testing that the transaction's sequence number do not have
|
|
461
|
+
// this bit set prevents using this property to get around a
|
|
462
|
+
// CHECKSEQUENCEVERIFY check.
|
|
463
|
+
// if (txToSequence & Interpreter.SEQUENCE_LOCKTIME_DISABLE_FLAG) {
|
|
464
|
+
// return false;
|
|
465
|
+
// }
|
|
466
|
+
/**
|
|
467
|
+
* If CTxIn::nSequence encodes a relative lock-time and this flag is set,
|
|
468
|
+
* the relative lock-time has units of 512 seconds, otherwise it specifies
|
|
469
|
+
* blocks with a granularity of 1.
|
|
470
|
+
*/
|
|
471
|
+
const SEQUENCE_LOCKTIME_TYPE_FLAG = 1 << 22;
|
|
472
|
+
/**
|
|
473
|
+
* If CTxIn::nSequence encodes a relative lock-time, this mask is applied to
|
|
474
|
+
* extract that lock-time from the sequence field.
|
|
475
|
+
*/
|
|
476
|
+
const SEQUENCE_LOCKTIME_MASK = 0x0000ffff;
|
|
477
|
+
// Mask off any bits that do not have consensus-enforced meaning before
|
|
478
|
+
// doing the integer comparisons
|
|
479
|
+
const nLockTimeMask = SEQUENCE_LOCKTIME_TYPE_FLAG | SEQUENCE_LOCKTIME_MASK;
|
|
480
|
+
const txToSequenceMasked = BigInt(txToSequence & nLockTimeMask);
|
|
481
|
+
const nSequenceMasked = nSequence & BigInt(nLockTimeMask);
|
|
482
|
+
// There are two kinds of nSequence: lock-by-blockheight and
|
|
483
|
+
// lock-by-blocktime, distinguished by whether nSequenceMasked <
|
|
484
|
+
// CTxIn::SEQUENCE_LOCKTIME_TYPE_FLAG.
|
|
485
|
+
//
|
|
486
|
+
// We want to compare apples to apples, so fail the script unless the type
|
|
487
|
+
// of nSequenceMasked being tested is the same as the nSequenceMasked in the
|
|
488
|
+
// transaction.
|
|
489
|
+
const SEQUENCE_LOCKTIME_TYPE_FLAG_BN = BigInt(SEQUENCE_LOCKTIME_TYPE_FLAG);
|
|
490
|
+
if (!((txToSequenceMasked < SEQUENCE_LOCKTIME_TYPE_FLAG_BN &&
|
|
491
|
+
nSequenceMasked < SEQUENCE_LOCKTIME_TYPE_FLAG_BN) ||
|
|
492
|
+
(txToSequenceMasked >= SEQUENCE_LOCKTIME_TYPE_FLAG_BN &&
|
|
493
|
+
nSequenceMasked >= SEQUENCE_LOCKTIME_TYPE_FLAG_BN))) {
|
|
494
|
+
return false;
|
|
495
|
+
}
|
|
496
|
+
// Now that we know we're comparing apples-to-apples, the comparison is a
|
|
497
|
+
// simple numeric one.
|
|
498
|
+
return nSequenceMasked <= txToSequenceMasked;
|
|
499
|
+
}
|
|
500
|
+
/**
|
|
501
|
+
* Check whether the contract can be traced back to the genesis outpoint.
|
|
502
|
+
* @param backtraceInfo the backtrace info to verify, including prevTx and prevPrevTx informations
|
|
503
|
+
* @param genesisOutpoint expected genesis outpoint to be traced back to
|
|
504
|
+
* @returns true if the contract can be backtraced to the genesis outpoint. Otherwise false.
|
|
505
|
+
* @onchain
|
|
506
|
+
* @category Backtrace
|
|
507
|
+
*/
|
|
508
|
+
backtraceToOutpoint(backtraceInfo, genesisOutpoint) {
|
|
509
|
+
return backtraceToOutpointImpl(this, backtraceInfo, genesisOutpoint);
|
|
510
|
+
}
|
|
511
|
+
/**
|
|
512
|
+
* Check whether the contract can be traced back to the genesis script.
|
|
513
|
+
* @param backtraceInfo the backtrace info to verify, including prevTx and prevPrevTx informations
|
|
514
|
+
* @param genesisScript expected genesis script to be traced back to
|
|
515
|
+
* @returns true if the contract can be backtraced to the genesis script. Otherwise false.
|
|
516
|
+
* @onchain
|
|
517
|
+
* @category Backtrace
|
|
518
|
+
*/
|
|
519
|
+
backtraceToScript(backtraceInfo, genesisScript) {
|
|
520
|
+
return backtraceToScriptImpl(this, backtraceInfo, genesisScript);
|
|
521
|
+
}
|
|
522
|
+
/**
|
|
523
|
+
* Get a new contract instance with the new state.
|
|
524
|
+
* @param newState the new state
|
|
525
|
+
* @returns the new covenant
|
|
526
|
+
*/
|
|
527
|
+
next(newState) {
|
|
528
|
+
const next = cloneDeep(this);
|
|
529
|
+
next.state = newState;
|
|
530
|
+
next.utxo = undefined;
|
|
531
|
+
return next;
|
|
532
|
+
}
|
|
533
|
+
/**
|
|
534
|
+
* Binds the smart contract to a UTXO by verifying and setting its script.
|
|
535
|
+
* @param utxo - The UTXO to bind to (script field is optional)
|
|
536
|
+
* @returns The contract instance for chaining
|
|
537
|
+
* @throws Error if the UTXO's script exists and doesn't match the contract's locking script
|
|
538
|
+
*/
|
|
539
|
+
bindToUtxo(utxo) {
|
|
540
|
+
if (utxo.script && this.lockingScript.toHex() !== utxo.script) {
|
|
541
|
+
throw new Error(`Different script, can not bind contract '${this.constructor.name}' to this UTXO: ${JSON.stringify(utxo)}!`);
|
|
542
|
+
}
|
|
543
|
+
this.utxo = { ...utxo, script: this.lockingScript.toHex() };
|
|
544
|
+
if (this.constructor.isStateful()) {
|
|
545
|
+
this.state = this.constructor.deserializeState(utxo.data);
|
|
546
|
+
}
|
|
547
|
+
return this;
|
|
548
|
+
}
|
|
549
|
+
/**
|
|
550
|
+
* Checks if the contract has state by verifying if the state object exists and is not empty.
|
|
551
|
+
* @returns {boolean} True if the contract has state, false otherwise.
|
|
552
|
+
*/
|
|
553
|
+
static isStateful() {
|
|
554
|
+
const selfClazz = this;
|
|
555
|
+
const artifact = selfClazz.artifact;
|
|
556
|
+
if (!artifact) {
|
|
557
|
+
throw new Error(`Artifact is not loaded for the contract: ${this.name}`);
|
|
558
|
+
}
|
|
559
|
+
const stateType = selfClazz.stateType;
|
|
560
|
+
return !!stateType;
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
SmartContract.newFromCreate = false;
|
|
564
|
+
//# sourceMappingURL=smartContract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"smartContract.js","sourceRoot":"","sources":["../../../src/smart-contract/smartContract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { getUnRenamedSymbol } from './abiutils.js';
|
|
2
|
+
/**
|
|
3
|
+
* The contract library class. To write a contract library, extend this class as such:
|
|
4
|
+
* @example
|
|
5
|
+
* ```ts
|
|
6
|
+
* class YourSmartContractLib extends SmartContractLib {
|
|
7
|
+
* // your library functions code here
|
|
8
|
+
* }
|
|
9
|
+
* ```
|
|
10
|
+
* @category SmartContract
|
|
11
|
+
*/
|
|
12
|
+
export class SmartContractLib {
|
|
13
|
+
static loadArtifact(artifact) {
|
|
14
|
+
const library = artifact.library.find((lib) => getUnRenamedSymbol(lib.name) === getUnRenamedSymbol(this.name));
|
|
15
|
+
if (!library) {
|
|
16
|
+
throw new Error(`Library ${this.name} is not found in the artifact`);
|
|
17
|
+
}
|
|
18
|
+
this.artifact = artifact;
|
|
19
|
+
this.stateType = library.stateType;
|
|
20
|
+
return this;
|
|
21
|
+
}
|
|
22
|
+
constructor(...args) {
|
|
23
|
+
this.args = [];
|
|
24
|
+
this.args = args;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
*
|
|
28
|
+
* @ignore
|
|
29
|
+
*/
|
|
30
|
+
getArgs() {
|
|
31
|
+
return (this.args || []).map((arg) => {
|
|
32
|
+
if (arg instanceof SmartContractLib) {
|
|
33
|
+
return arg.getArgs();
|
|
34
|
+
}
|
|
35
|
+
return arg;
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
isSmartContractLib() {
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=smartContractLib.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"smartContractLib.js","sourceRoot":"","sources":["../../../src/smart-contract/smartContractLib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAInD;;;;;;;;;GASG;AACH,MAAM,OAAO,gBAAgB;IAI3B,MAAM,CAAC,YAAY,CAAC,QAAkB;QACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CACnC,CAAC,GAAG,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CACxE,CAAC;QACF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,CAAC,IAAI,+BAA+B,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAGD,YAAY,GAAG,IAA0B;QADzC,SAAI,GAAG,EAAE,CAAC;QAER,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IACD;;;OAGG;IACH,OAAO;QACL,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YACnC,IAAI,GAAG,YAAY,gBAAgB,EAAE,CAAC;gBACpC,OAAO,GAAG,CAAC,OAAO,EAAE,CAAC;YACvB,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB;QAChB,OAAO,IAAI,CAAA;IACb,CAAC;CACF"}
|