@alephium/web3 1.8.2 → 1.8.3-rc.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 +165 -0
- package/dist/{scripts → _cjs/scripts}/check-versions.js +1 -0
- package/dist/_cjs/scripts/check-versions.js.map +1 -0
- package/dist/{scripts → _cjs/scripts}/header.js +1 -0
- package/dist/_cjs/scripts/header.js.map +1 -0
- package/dist/{src → _cjs/src}/address/address.js +1 -0
- package/dist/_cjs/src/address/address.js.map +1 -0
- package/dist/{src → _cjs/src}/address/index.js +1 -0
- package/dist/_cjs/src/address/index.js.map +1 -0
- package/dist/{src → _cjs/src}/api/api-alephium.js +1 -0
- package/dist/_cjs/src/api/api-alephium.js.map +1 -0
- package/dist/{src → _cjs/src}/api/api-explorer.js +1 -0
- package/dist/_cjs/src/api/api-explorer.js.map +1 -0
- package/dist/{src → _cjs/src}/api/explorer-provider.js +1 -0
- package/dist/_cjs/src/api/explorer-provider.js.map +1 -0
- package/dist/{src → _cjs/src}/api/index.js +1 -0
- package/dist/_cjs/src/api/index.js.map +1 -0
- package/dist/{src → _cjs/src}/api/node-provider.js +1 -0
- package/dist/_cjs/src/api/node-provider.js.map +1 -0
- package/dist/{src → _cjs/src}/api/types.js +1 -0
- package/dist/_cjs/src/api/types.js.map +1 -0
- package/dist/{src → _cjs/src}/api/utils.js +1 -0
- package/dist/_cjs/src/api/utils.js.map +1 -0
- package/dist/{src → _cjs/src}/block/block.js +1 -0
- package/dist/_cjs/src/block/block.js.map +1 -0
- package/dist/{src → _cjs/src}/block/index.js +1 -0
- package/dist/_cjs/src/block/index.js.map +1 -0
- package/dist/{src → _cjs/src}/codec/array-codec.js +1 -0
- package/dist/_cjs/src/codec/array-codec.js.map +1 -0
- package/dist/{src → _cjs/src}/codec/asset-output-codec.js +1 -0
- package/dist/_cjs/src/codec/asset-output-codec.js.map +1 -0
- package/dist/{src → _cjs/src}/codec/bigint-codec.js +1 -0
- package/dist/_cjs/src/codec/bigint-codec.js.map +1 -0
- package/dist/{src → _cjs/src}/codec/bytestring-codec.js +1 -0
- package/dist/_cjs/src/codec/bytestring-codec.js.map +1 -0
- package/dist/{src → _cjs/src}/codec/codec.js +1 -0
- package/dist/_cjs/src/codec/codec.js.map +1 -0
- package/dist/{src → _cjs/src}/codec/compact-int-codec.js +1 -0
- package/dist/_cjs/src/codec/compact-int-codec.js.map +1 -0
- package/dist/{src → _cjs/src}/codec/contract-codec.js +1 -0
- package/dist/_cjs/src/codec/contract-codec.js.map +1 -0
- package/dist/{src → _cjs/src}/codec/contract-output-codec.js +1 -0
- package/dist/_cjs/src/codec/contract-output-codec.js.map +1 -0
- package/dist/{src → _cjs/src}/codec/contract-output-ref-codec.js +1 -0
- package/dist/_cjs/src/codec/contract-output-ref-codec.js.map +1 -0
- package/dist/{src → _cjs/src}/codec/either-codec.js +1 -0
- package/dist/_cjs/src/codec/either-codec.js.map +1 -0
- package/dist/{src → _cjs/src}/codec/hash.js +1 -0
- package/dist/_cjs/src/codec/hash.js.map +1 -0
- package/dist/{src → _cjs/src}/codec/index.js +1 -0
- package/dist/_cjs/src/codec/index.js.map +1 -0
- package/dist/{src → _cjs/src}/codec/input-codec.js +1 -0
- package/dist/_cjs/src/codec/input-codec.js.map +1 -0
- package/dist/{src → _cjs/src}/codec/instr-codec.js +1 -0
- package/dist/_cjs/src/codec/instr-codec.js.map +1 -0
- package/dist/{src → _cjs/src}/codec/int-as-4bytes-codec.js +1 -0
- package/dist/_cjs/src/codec/int-as-4bytes-codec.js.map +1 -0
- package/dist/{src → _cjs/src}/codec/lockup-script-codec.js +1 -0
- package/dist/_cjs/src/codec/lockup-script-codec.js.map +1 -0
- package/dist/{src → _cjs/src}/codec/method-codec.js +1 -0
- package/dist/_cjs/src/codec/method-codec.js.map +1 -0
- package/dist/{src → _cjs/src}/codec/option-codec.js +1 -0
- package/dist/_cjs/src/codec/option-codec.js.map +1 -0
- package/dist/{src → _cjs/src}/codec/output-codec.js +1 -0
- package/dist/_cjs/src/codec/output-codec.js.map +1 -0
- package/dist/{src → _cjs/src}/codec/reader.js +1 -0
- package/dist/_cjs/src/codec/reader.js.map +1 -0
- package/dist/{src → _cjs/src}/codec/script-codec.js +1 -0
- package/dist/_cjs/src/codec/script-codec.js.map +1 -0
- package/dist/{src → _cjs/src}/codec/signature-codec.js +1 -0
- package/dist/_cjs/src/codec/signature-codec.js.map +1 -0
- package/dist/{src → _cjs/src}/codec/timestamp-codec.js +1 -0
- package/dist/_cjs/src/codec/timestamp-codec.js.map +1 -0
- package/dist/{src → _cjs/src}/codec/token-codec.js +1 -0
- package/dist/_cjs/src/codec/token-codec.js.map +1 -0
- package/dist/{src → _cjs/src}/codec/transaction-codec.js +1 -0
- package/dist/_cjs/src/codec/transaction-codec.js.map +1 -0
- package/dist/{src → _cjs/src}/codec/unlock-script-codec.js +1 -0
- package/dist/_cjs/src/codec/unlock-script-codec.js.map +1 -0
- package/dist/{src → _cjs/src}/codec/unsigned-tx-codec.js +1 -0
- package/dist/_cjs/src/codec/unsigned-tx-codec.js.map +1 -0
- package/dist/{src → _cjs/src}/codec/val.js +1 -0
- package/dist/_cjs/src/codec/val.js.map +1 -0
- package/dist/{src → _cjs/src}/constants.js +1 -0
- package/dist/_cjs/src/constants.js.map +1 -0
- package/dist/{src → _cjs/src}/contract/contract.js +1 -0
- package/dist/_cjs/src/contract/contract.js.map +1 -0
- package/dist/{src → _cjs/src}/contract/events.js +1 -0
- package/dist/_cjs/src/contract/events.js.map +1 -0
- package/dist/{src → _cjs/src}/contract/index.js +1 -0
- package/dist/_cjs/src/contract/index.js.map +1 -0
- package/dist/{src → _cjs/src}/contract/ralph.js +1 -0
- package/dist/_cjs/src/contract/ralph.js.map +1 -0
- package/dist/{src → _cjs/src}/contract/script-simulator.js +1 -0
- package/dist/_cjs/src/contract/script-simulator.js.map +1 -0
- package/dist/{src → _cjs/src}/debug.js +1 -0
- package/dist/_cjs/src/debug.js.map +1 -0
- package/dist/{src → _cjs/src}/error.js +1 -0
- package/dist/_cjs/src/error.js.map +1 -0
- package/dist/{src → _cjs/src}/exchange/exchange.js +1 -0
- package/dist/_cjs/src/exchange/exchange.js.map +1 -0
- package/dist/{src → _cjs/src}/exchange/index.js +1 -0
- package/dist/_cjs/src/exchange/index.js.map +1 -0
- package/dist/{src → _cjs/src}/global.js +1 -0
- package/dist/_cjs/src/global.js.map +1 -0
- package/dist/{src → _cjs/src}/index.js +1 -0
- package/dist/_cjs/src/index.js.map +1 -0
- package/dist/{src → _cjs/src}/signer/index.js +1 -0
- package/dist/_cjs/src/signer/index.js.map +1 -0
- package/dist/{src → _cjs/src}/signer/signer.js +1 -0
- package/dist/_cjs/src/signer/signer.js.map +1 -0
- package/dist/{src → _cjs/src}/signer/tx-builder.js +1 -0
- package/dist/_cjs/src/signer/tx-builder.js.map +1 -0
- package/dist/{src → _cjs/src}/signer/types.js +1 -0
- package/dist/_cjs/src/signer/types.js.map +1 -0
- package/dist/{src → _cjs/src}/token/index.js +1 -0
- package/dist/_cjs/src/token/index.js.map +1 -0
- package/dist/{src → _cjs/src}/token/nft.js +1 -0
- package/dist/_cjs/src/token/nft.js.map +1 -0
- package/dist/{src → _cjs/src}/transaction/index.js +1 -0
- package/dist/_cjs/src/transaction/index.js.map +1 -0
- package/dist/{src → _cjs/src}/transaction/sign-verify.js +1 -0
- package/dist/_cjs/src/transaction/sign-verify.js.map +1 -0
- package/dist/{src → _cjs/src}/transaction/status.js +1 -0
- package/dist/_cjs/src/transaction/status.js.map +1 -0
- package/dist/{src → _cjs/src}/transaction/utils.js +1 -0
- package/dist/_cjs/src/transaction/utils.js.map +1 -0
- package/dist/{src → _cjs/src}/utils/bs58.js +1 -0
- package/dist/_cjs/src/utils/bs58.js.map +1 -0
- package/dist/{src → _cjs/src}/utils/djb2.js +1 -0
- package/dist/_cjs/src/utils/djb2.js.map +1 -0
- package/dist/{src → _cjs/src}/utils/index.js +1 -0
- package/dist/_cjs/src/utils/index.js.map +1 -0
- package/dist/{src → _cjs/src}/utils/number.fixture.js +1 -0
- package/dist/_cjs/src/utils/number.fixture.js.map +1 -0
- package/dist/{src → _cjs/src}/utils/number.js +1 -0
- package/dist/_cjs/src/utils/number.js.map +1 -0
- package/dist/{src → _cjs/src}/utils/sign.js +1 -0
- package/dist/_cjs/src/utils/sign.js.map +1 -0
- package/dist/{src → _cjs/src}/utils/subscription.js +1 -0
- package/dist/_cjs/src/utils/subscription.js.map +1 -0
- package/dist/{src → _cjs/src}/utils/utils.js +1 -0
- package/dist/_cjs/src/utils/utils.js.map +1 -0
- package/dist/{src → _cjs/src}/utils/webcrypto.js +1 -0
- package/dist/_cjs/src/utils/webcrypto.js.map +1 -0
- package/dist/_esm/scripts/check-versions.js +40 -0
- package/dist/_esm/scripts/check-versions.js.map +1 -0
- package/dist/_esm/scripts/header.js +19 -0
- package/dist/_esm/scripts/header.js.map +1 -0
- package/dist/_esm/src/address/address.js +220 -0
- package/dist/_esm/src/address/address.js.map +1 -0
- package/dist/_esm/src/address/index.js +19 -0
- package/dist/_esm/src/address/index.js.map +1 -0
- package/dist/_esm/src/api/api-alephium.js +1519 -0
- package/dist/_esm/src/api/api-alephium.js.map +1 -0
- package/dist/_esm/src/api/api-explorer.js +964 -0
- package/dist/_esm/src/api/api-explorer.js.map +1 -0
- package/dist/_esm/src/api/explorer-provider.js +66 -0
- package/dist/_esm/src/api/explorer-provider.js.map +1 -0
- package/dist/_esm/src/api/index.js +24 -0
- package/dist/_esm/src/api/index.js.map +1 -0
- package/dist/_esm/src/api/node-provider.js +201 -0
- package/dist/_esm/src/api/node-provider.js.map +1 -0
- package/dist/_esm/src/api/types.js +211 -0
- package/dist/_esm/src/api/types.js.map +1 -0
- package/dist/_esm/src/api/utils.js +51 -0
- package/dist/_esm/src/api/utils.js.map +1 -0
- package/dist/_esm/src/block/block.js +145 -0
- package/dist/_esm/src/block/block.js.map +1 -0
- package/dist/_esm/src/block/index.js +19 -0
- package/dist/_esm/src/block/index.js.map +1 -0
- package/dist/_esm/src/codec/array-codec.js +42 -0
- package/dist/_esm/src/codec/array-codec.js.map +1 -0
- package/dist/_esm/src/codec/asset-output-codec.js +91 -0
- package/dist/_esm/src/codec/asset-output-codec.js.map +1 -0
- package/dist/_esm/src/codec/bigint-codec.js +94 -0
- package/dist/_esm/src/codec/bigint-codec.js.map +1 -0
- package/dist/_esm/src/codec/bytestring-codec.js +33 -0
- package/dist/_esm/src/codec/bytestring-codec.js.map +1 -0
- package/dist/_esm/src/codec/codec.js +131 -0
- package/dist/_esm/src/codec/codec.js.map +1 -0
- package/dist/_esm/src/codec/compact-int-codec.js +304 -0
- package/dist/_esm/src/codec/compact-int-codec.js.map +1 -0
- package/dist/_esm/src/codec/contract-codec.js +64 -0
- package/dist/_esm/src/codec/contract-codec.js.map +1 -0
- package/dist/_esm/src/codec/contract-output-codec.js +57 -0
- package/dist/_esm/src/codec/contract-output-codec.js.map +1 -0
- package/dist/_esm/src/codec/contract-output-ref-codec.js +26 -0
- package/dist/_esm/src/codec/contract-output-ref-codec.js.map +1 -0
- package/dist/_esm/src/codec/either-codec.js +22 -0
- package/dist/_esm/src/codec/either-codec.js.map +1 -0
- package/dist/_esm/src/codec/hash.js +32 -0
- package/dist/_esm/src/codec/hash.js.map +1 -0
- package/dist/_esm/src/codec/index.js +42 -0
- package/dist/_esm/src/codec/index.js.map +1 -0
- package/dist/_esm/src/codec/input-codec.js +33 -0
- package/dist/_esm/src/codec/input-codec.js.map +1 -0
- package/dist/_esm/src/codec/instr-codec.js +1067 -0
- package/dist/_esm/src/codec/instr-codec.js.map +1 -0
- package/dist/_esm/src/codec/int-as-4bytes-codec.js +29 -0
- package/dist/_esm/src/codec/int-as-4bytes-codec.js.map +1 -0
- package/dist/_esm/src/codec/lockup-script-codec.js +32 -0
- package/dist/_esm/src/codec/lockup-script-codec.js.map +1 -0
- package/dist/_esm/src/codec/method-codec.js +71 -0
- package/dist/_esm/src/codec/method-codec.js.map +1 -0
- package/dist/_esm/src/codec/option-codec.js +33 -0
- package/dist/_esm/src/codec/option-codec.js.map +1 -0
- package/dist/_esm/src/codec/output-codec.js +24 -0
- package/dist/_esm/src/codec/output-codec.js.map +1 -0
- package/dist/_esm/src/codec/reader.js +45 -0
- package/dist/_esm/src/codec/reader.js.map +1 -0
- package/dist/_esm/src/codec/script-codec.js +31 -0
- package/dist/_esm/src/codec/script-codec.js.map +1 -0
- package/dist/_esm/src/codec/signature-codec.js +22 -0
- package/dist/_esm/src/codec/signature-codec.js.map +1 -0
- package/dist/_esm/src/codec/timestamp-codec.js +36 -0
- package/dist/_esm/src/codec/timestamp-codec.js.map +1 -0
- package/dist/_esm/src/codec/token-codec.js +26 -0
- package/dist/_esm/src/codec/token-codec.js.map +1 -0
- package/dist/_esm/src/codec/transaction-codec.js +99 -0
- package/dist/_esm/src/codec/transaction-codec.js.map +1 -0
- package/dist/_esm/src/codec/unlock-script-codec.js +47 -0
- package/dist/_esm/src/codec/unlock-script-codec.js.map +1 -0
- package/dist/_esm/src/codec/unsigned-tx-codec.js +57 -0
- package/dist/_esm/src/codec/unsigned-tx-codec.js.map +1 -0
- package/dist/_esm/src/codec/val.js +31 -0
- package/dist/_esm/src/codec/val.js.map +1 -0
- package/dist/_esm/src/constants.js +31 -0
- package/dist/_esm/src/constants.js.map +1 -0
- package/dist/_esm/src/contract/contract.js +1361 -0
- package/dist/_esm/src/contract/contract.js.map +1 -0
- package/dist/_esm/src/contract/events.js +56 -0
- package/dist/_esm/src/contract/events.js.map +1 -0
- package/dist/_esm/src/contract/index.js +22 -0
- package/dist/_esm/src/contract/index.js.map +1 -0
- package/dist/_esm/src/contract/ralph.js +415 -0
- package/dist/_esm/src/contract/ralph.js.map +1 -0
- package/dist/_esm/src/contract/script-simulator.js +754 -0
- package/dist/_esm/src/contract/script-simulator.js.map +1 -0
- package/dist/_esm/src/debug.js +38 -0
- package/dist/_esm/src/debug.js.map +1 -0
- package/dist/_esm/src/error.js +33 -0
- package/dist/_esm/src/error.js.map +1 -0
- package/dist/_esm/src/exchange/exchange.js +119 -0
- package/dist/_esm/src/exchange/exchange.js.map +1 -0
- package/dist/_esm/src/exchange/index.js +19 -0
- package/dist/_esm/src/exchange/index.js.map +1 -0
- package/dist/_esm/src/global.js +48 -0
- package/dist/_esm/src/global.js.map +1 -0
- package/dist/_esm/src/index.js +36 -0
- package/dist/_esm/src/index.js.map +1 -0
- package/dist/_esm/src/signer/index.js +21 -0
- package/dist/_esm/src/signer/index.js.map +1 -0
- package/dist/_esm/src/signer/signer.js +206 -0
- package/dist/_esm/src/signer/signer.js.map +1 -0
- package/dist/_esm/src/signer/tx-builder.js +182 -0
- package/dist/_esm/src/signer/tx-builder.js.map +1 -0
- package/dist/_esm/src/signer/types.js +29 -0
- package/dist/_esm/src/signer/types.js.map +1 -0
- package/dist/_esm/src/token/index.js +19 -0
- package/dist/_esm/src/token/index.js.map +1 -0
- package/dist/_esm/src/token/nft.js +115 -0
- package/dist/_esm/src/token/nft.js.map +1 -0
- package/dist/_esm/src/transaction/index.js +21 -0
- package/dist/_esm/src/transaction/index.js.map +1 -0
- package/dist/_esm/src/transaction/sign-verify.js +25 -0
- package/dist/_esm/src/transaction/sign-verify.js.map +1 -0
- package/dist/_esm/src/transaction/status.js +50 -0
- package/dist/_esm/src/transaction/status.js.map +1 -0
- package/dist/_esm/src/transaction/utils.js +52 -0
- package/dist/_esm/src/transaction/utils.js.map +1 -0
- package/dist/_esm/src/utils/bs58.js +43 -0
- package/dist/_esm/src/utils/bs58.js.map +1 -0
- package/dist/_esm/src/utils/djb2.js +25 -0
- package/dist/_esm/src/utils/djb2.js.map +1 -0
- package/dist/_esm/src/utils/index.js +25 -0
- package/dist/_esm/src/utils/index.js.map +1 -0
- package/dist/_esm/src/utils/number.fixture.js +187 -0
- package/dist/_esm/src/utils/number.fixture.js.map +1 -0
- package/dist/_esm/src/utils/number.js +139 -0
- package/dist/_esm/src/utils/number.js.map +1 -0
- package/dist/_esm/src/utils/sign.js +62 -0
- package/dist/_esm/src/utils/sign.js.map +1 -0
- package/dist/_esm/src/utils/subscription.js +48 -0
- package/dist/_esm/src/utils/subscription.js.map +1 -0
- package/dist/_esm/src/utils/utils.js +144 -0
- package/dist/_esm/src/utils/utils.js.map +1 -0
- package/dist/_esm/src/utils/webcrypto.js +38 -0
- package/dist/_esm/src/utils/webcrypto.js.map +1 -0
- package/dist/_types/scripts/check-versions.d.ts +2 -0
- package/dist/_types/scripts/check-versions.d.ts.map +1 -0
- package/dist/_types/scripts/header.d.ts +1 -0
- package/dist/_types/scripts/header.d.ts.map +1 -0
- package/dist/{src → _types/src}/address/address.d.ts +1 -0
- package/dist/_types/src/address/address.d.ts.map +1 -0
- package/dist/_types/src/address/index.d.ts +2 -0
- package/dist/_types/src/address/index.d.ts.map +1 -0
- package/dist/{src → _types/src}/api/api-alephium.d.ts +1 -0
- package/dist/_types/src/api/api-alephium.d.ts.map +1 -0
- package/dist/{src → _types/src}/api/api-explorer.d.ts +1 -0
- package/dist/_types/src/api/api-explorer.d.ts.map +1 -0
- package/dist/{src → _types/src}/api/explorer-provider.d.ts +1 -0
- package/dist/_types/src/api/explorer-provider.d.ts.map +1 -0
- package/dist/{src → _types/src}/api/index.d.ts +1 -0
- package/dist/_types/src/api/index.d.ts.map +1 -0
- package/dist/{src → _types/src}/api/node-provider.d.ts +1 -0
- package/dist/_types/src/api/node-provider.d.ts.map +1 -0
- package/dist/{src → _types/src}/api/types.d.ts +1 -0
- package/dist/_types/src/api/types.d.ts.map +1 -0
- package/dist/{src → _types/src}/api/utils.d.ts +1 -0
- package/dist/_types/src/api/utils.d.ts.map +1 -0
- package/dist/{src → _types/src}/block/block.d.ts +1 -0
- package/dist/_types/src/block/block.d.ts.map +1 -0
- package/dist/{src → _types/src}/block/index.d.ts +1 -0
- package/dist/_types/src/block/index.d.ts.map +1 -0
- package/dist/{src → _types/src}/codec/array-codec.d.ts +1 -0
- package/dist/_types/src/codec/array-codec.d.ts.map +1 -0
- package/dist/{src → _types/src}/codec/asset-output-codec.d.ts +1 -0
- package/dist/_types/src/codec/asset-output-codec.d.ts.map +1 -0
- package/dist/{src → _types/src}/codec/bigint-codec.d.ts +1 -0
- package/dist/_types/src/codec/bigint-codec.d.ts.map +1 -0
- package/dist/{src → _types/src}/codec/bytestring-codec.d.ts +1 -0
- package/dist/_types/src/codec/bytestring-codec.d.ts.map +1 -0
- package/dist/{src → _types/src}/codec/codec.d.ts +1 -0
- package/dist/_types/src/codec/codec.d.ts.map +1 -0
- package/dist/{src → _types/src}/codec/compact-int-codec.d.ts +1 -0
- package/dist/_types/src/codec/compact-int-codec.d.ts.map +1 -0
- package/dist/{src → _types/src}/codec/contract-codec.d.ts +1 -0
- package/dist/_types/src/codec/contract-codec.d.ts.map +1 -0
- package/dist/{src → _types/src}/codec/contract-output-codec.d.ts +1 -0
- package/dist/_types/src/codec/contract-output-codec.d.ts.map +1 -0
- package/dist/{src → _types/src}/codec/contract-output-ref-codec.d.ts +1 -0
- package/dist/_types/src/codec/contract-output-ref-codec.d.ts.map +1 -0
- package/dist/{src → _types/src}/codec/either-codec.d.ts +1 -0
- package/dist/_types/src/codec/either-codec.d.ts.map +1 -0
- package/dist/{src → _types/src}/codec/hash.d.ts +1 -0
- package/dist/_types/src/codec/hash.d.ts.map +1 -0
- package/dist/{src → _types/src}/codec/index.d.ts +1 -0
- package/dist/_types/src/codec/index.d.ts.map +1 -0
- package/dist/{src → _types/src}/codec/input-codec.d.ts +1 -0
- package/dist/_types/src/codec/input-codec.d.ts.map +1 -0
- package/dist/{src → _types/src}/codec/instr-codec.d.ts +1 -0
- package/dist/_types/src/codec/instr-codec.d.ts.map +1 -0
- package/dist/{src → _types/src}/codec/int-as-4bytes-codec.d.ts +1 -0
- package/dist/_types/src/codec/int-as-4bytes-codec.d.ts.map +1 -0
- package/dist/{src → _types/src}/codec/lockup-script-codec.d.ts +1 -0
- package/dist/_types/src/codec/lockup-script-codec.d.ts.map +1 -0
- package/dist/{src → _types/src}/codec/method-codec.d.ts +1 -0
- package/dist/_types/src/codec/method-codec.d.ts.map +1 -0
- package/dist/{src → _types/src}/codec/option-codec.d.ts +1 -0
- package/dist/_types/src/codec/option-codec.d.ts.map +1 -0
- package/dist/{src → _types/src}/codec/output-codec.d.ts +1 -0
- package/dist/_types/src/codec/output-codec.d.ts.map +1 -0
- package/dist/{src → _types/src}/codec/reader.d.ts +1 -0
- package/dist/_types/src/codec/reader.d.ts.map +1 -0
- package/dist/{src → _types/src}/codec/script-codec.d.ts +1 -0
- package/dist/_types/src/codec/script-codec.d.ts.map +1 -0
- package/dist/{src → _types/src}/codec/signature-codec.d.ts +1 -0
- package/dist/_types/src/codec/signature-codec.d.ts.map +1 -0
- package/dist/{src → _types/src}/codec/timestamp-codec.d.ts +1 -0
- package/dist/_types/src/codec/timestamp-codec.d.ts.map +1 -0
- package/dist/{src → _types/src}/codec/token-codec.d.ts +1 -0
- package/dist/_types/src/codec/token-codec.d.ts.map +1 -0
- package/dist/{src → _types/src}/codec/transaction-codec.d.ts +1 -0
- package/dist/_types/src/codec/transaction-codec.d.ts.map +1 -0
- package/dist/{src → _types/src}/codec/unlock-script-codec.d.ts +1 -0
- package/dist/_types/src/codec/unlock-script-codec.d.ts.map +1 -0
- package/dist/{src → _types/src}/codec/unsigned-tx-codec.d.ts +1 -0
- package/dist/_types/src/codec/unsigned-tx-codec.d.ts.map +1 -0
- package/dist/{src → _types/src}/codec/val.d.ts +1 -0
- package/dist/_types/src/codec/val.d.ts.map +1 -0
- package/dist/{src → _types/src}/constants.d.ts +1 -0
- package/dist/_types/src/constants.d.ts.map +1 -0
- package/dist/{src → _types/src}/contract/contract.d.ts +1 -0
- package/dist/_types/src/contract/contract.d.ts.map +1 -0
- package/dist/{src → _types/src}/contract/events.d.ts +1 -0
- package/dist/_types/src/contract/events.d.ts.map +1 -0
- package/dist/{src → _types/src}/contract/index.d.ts +1 -0
- package/dist/_types/src/contract/index.d.ts.map +1 -0
- package/dist/{src → _types/src}/contract/ralph.d.ts +1 -0
- package/dist/_types/src/contract/ralph.d.ts.map +1 -0
- package/dist/{src → _types/src}/contract/script-simulator.d.ts +1 -0
- package/dist/_types/src/contract/script-simulator.d.ts.map +1 -0
- package/dist/{src → _types/src}/debug.d.ts +1 -0
- package/dist/_types/src/debug.d.ts.map +1 -0
- package/dist/{src → _types/src}/error.d.ts +1 -0
- package/dist/_types/src/error.d.ts.map +1 -0
- package/dist/{src → _types/src}/exchange/exchange.d.ts +1 -0
- package/dist/_types/src/exchange/exchange.d.ts.map +1 -0
- package/dist/{src → _types/src}/exchange/index.d.ts +1 -0
- package/dist/_types/src/exchange/index.d.ts.map +1 -0
- package/dist/{src → _types/src}/global.d.ts +1 -0
- package/dist/_types/src/global.d.ts.map +1 -0
- package/dist/{src → _types/src}/index.d.ts +1 -0
- package/dist/_types/src/index.d.ts.map +1 -0
- package/dist/{src → _types/src}/signer/index.d.ts +1 -0
- package/dist/_types/src/signer/index.d.ts.map +1 -0
- package/dist/{src → _types/src}/signer/signer.d.ts +1 -0
- package/dist/_types/src/signer/signer.d.ts.map +1 -0
- package/dist/{src → _types/src}/signer/tx-builder.d.ts +1 -0
- package/dist/_types/src/signer/tx-builder.d.ts.map +1 -0
- package/dist/{src → _types/src}/signer/types.d.ts +1 -0
- package/dist/_types/src/signer/types.d.ts.map +1 -0
- package/dist/_types/src/token/index.d.ts +2 -0
- package/dist/_types/src/token/index.d.ts.map +1 -0
- package/dist/{src → _types/src}/token/nft.d.ts +1 -0
- package/dist/_types/src/token/nft.d.ts.map +1 -0
- package/dist/{src → _types/src}/transaction/index.d.ts +1 -0
- package/dist/_types/src/transaction/index.d.ts.map +1 -0
- package/dist/{src → _types/src}/transaction/sign-verify.d.ts +1 -0
- package/dist/_types/src/transaction/sign-verify.d.ts.map +1 -0
- package/dist/{src → _types/src}/transaction/status.d.ts +1 -0
- package/dist/_types/src/transaction/status.d.ts.map +1 -0
- package/dist/{src → _types/src}/transaction/utils.d.ts +1 -0
- package/dist/_types/src/transaction/utils.d.ts.map +1 -0
- package/dist/{src → _types/src}/utils/bs58.d.ts +1 -0
- package/dist/_types/src/utils/bs58.d.ts.map +1 -0
- package/dist/{src → _types/src}/utils/djb2.d.ts +1 -0
- package/dist/_types/src/utils/djb2.d.ts.map +1 -0
- package/dist/{src → _types/src}/utils/index.d.ts +1 -0
- package/dist/_types/src/utils/index.d.ts.map +1 -0
- package/dist/{src → _types/src}/utils/number.d.ts +1 -0
- package/dist/_types/src/utils/number.d.ts.map +1 -0
- package/dist/{src → _types/src}/utils/number.fixture.d.ts +1 -0
- package/dist/_types/src/utils/number.fixture.d.ts.map +1 -0
- package/dist/{src → _types/src}/utils/sign.d.ts +1 -0
- package/dist/_types/src/utils/sign.d.ts.map +1 -0
- package/dist/{src → _types/src}/utils/subscription.d.ts +1 -0
- package/dist/_types/src/utils/subscription.d.ts.map +1 -0
- package/dist/{src → _types/src}/utils/utils.d.ts +1 -0
- package/dist/_types/src/utils/utils.d.ts.map +1 -0
- package/dist/{src → _types/src}/utils/webcrypto.d.ts +1 -0
- package/dist/_types/src/utils/webcrypto.d.ts.map +1 -0
- package/dist/_umd/alephium-web3.min.js +2 -0
- package/dist/_umd/alephium-web3.min.js.map +1 -0
- package/package.json +21 -23
- package/{webpack.config.js → webpack.config.cjs} +2 -2
- package/dist/alephium-web3.min.js +0 -3
- package/dist/alephium-web3.min.js.LICENSE.txt +0 -12
- package/dist/alephium-web3.min.js.map +0 -1
- package/dist/scripts/check-versions.d.ts +0 -1
- package/dist/scripts/header.d.ts +0 -0
- package/dist/src/address/index.d.ts +0 -1
- package/dist/src/token/index.d.ts +0 -1
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright 2018 - 2022 The Alephium Authors
|
|
3
|
+
This file is part of the alephium project.
|
|
4
|
+
|
|
5
|
+
The library is free software: you can redistribute it and/or modify
|
|
6
|
+
it under the terms of the GNU Lesser General Public License as published by
|
|
7
|
+
the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
(at your option) any later version.
|
|
9
|
+
|
|
10
|
+
The library is distributed in the hope that it will be useful,
|
|
11
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
GNU Lesser General Public License for more details.
|
|
14
|
+
|
|
15
|
+
You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
along with the library. If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
+
*/
|
|
18
|
+
import { Subscription } from '../utils/subscription';
|
|
19
|
+
import * as web3 from '../global';
|
|
20
|
+
import { TOTAL_NUMBER_OF_CHAINS } from '../constants';
|
|
21
|
+
const DEFAULT_INTERVAL = 60 * 1000; // 60 seconds
|
|
22
|
+
const EXPIRE_DURATION = 20 * 1000; // 20 seconds
|
|
23
|
+
export class BlockSubscriptionBase extends Subscription {
|
|
24
|
+
getParentHash(block) {
|
|
25
|
+
const index = Math.floor(block.deps.length / 2) + block.chainTo;
|
|
26
|
+
return block.deps[index];
|
|
27
|
+
}
|
|
28
|
+
async handleReorg(fromGroup, toGroup, orphanBlockHash, newBlockHash) {
|
|
29
|
+
console.info(`reorg occur in chain ${fromGroup} -> ${toGroup}, orphan hash: ${orphanBlockHash}, new hash: ${newBlockHash}`);
|
|
30
|
+
if (this.reorgCallback === undefined)
|
|
31
|
+
return;
|
|
32
|
+
const orphanBlocks = [];
|
|
33
|
+
let fromHash = orphanBlockHash;
|
|
34
|
+
let canonicalHash = undefined;
|
|
35
|
+
while (true) {
|
|
36
|
+
const orphanBlock = await this.getBlockByHash(fromHash);
|
|
37
|
+
orphanBlocks.push(orphanBlock);
|
|
38
|
+
const hashes = await this.getHashesAtHeight(fromGroup, toGroup, orphanBlock.height - 1);
|
|
39
|
+
const parentHash = this.getParentHash(orphanBlock);
|
|
40
|
+
if (hashes[0] === parentHash) {
|
|
41
|
+
canonicalHash = hashes[0];
|
|
42
|
+
break;
|
|
43
|
+
}
|
|
44
|
+
fromHash = parentHash;
|
|
45
|
+
}
|
|
46
|
+
const newBlocks = [];
|
|
47
|
+
fromHash = newBlockHash;
|
|
48
|
+
while (fromHash !== canonicalHash) {
|
|
49
|
+
const newBlock = await this.getBlockByHash(fromHash);
|
|
50
|
+
newBlocks.push(newBlock);
|
|
51
|
+
fromHash = this.getParentHash(newBlock);
|
|
52
|
+
}
|
|
53
|
+
const orphans = orphanBlocks.reverse();
|
|
54
|
+
const news = newBlocks.reverse();
|
|
55
|
+
console.info(`orphan hashes: ${orphans.map((b) => b.hash)}, new hashes: ${news.map((b) => b.hash)}`);
|
|
56
|
+
await this.reorgCallback(fromGroup, toGroup, orphans, news);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
export class BlockSubscription extends BlockSubscriptionBase {
|
|
60
|
+
constructor(options, fromTimeStamp, nodeProvider = undefined) {
|
|
61
|
+
super(options);
|
|
62
|
+
this.nodeProvider = nodeProvider ?? web3.getCurrentNodeProvider();
|
|
63
|
+
this.reorgCallback = options.reorgCallback;
|
|
64
|
+
this.fromTimeStamp = fromTimeStamp;
|
|
65
|
+
this.parents = new Array(TOTAL_NUMBER_OF_CHAINS).fill(undefined);
|
|
66
|
+
this.cache = new Map();
|
|
67
|
+
}
|
|
68
|
+
async getHashesAtHeight(fromGroup, toGroup, height) {
|
|
69
|
+
const result = await this.nodeProvider.blockflow.getBlockflowHashes({ fromGroup, toGroup, height });
|
|
70
|
+
return result.headers;
|
|
71
|
+
}
|
|
72
|
+
async getBlockByHash(hash) {
|
|
73
|
+
return await this.nodeProvider.blockflow.getBlockflowBlocksBlockHash(hash);
|
|
74
|
+
}
|
|
75
|
+
async getMissingBlocksAndHandleReorg(fromHash, fromHeight, toBlock) {
|
|
76
|
+
const blocks = [];
|
|
77
|
+
let lastBlock = toBlock;
|
|
78
|
+
while (lastBlock.height - 1 > fromHeight) {
|
|
79
|
+
const parentHash = this.getParentHash(lastBlock);
|
|
80
|
+
const block = await this.getBlockByHash(parentHash);
|
|
81
|
+
blocks.push(block);
|
|
82
|
+
lastBlock = block;
|
|
83
|
+
}
|
|
84
|
+
const parentHash = this.getParentHash(lastBlock);
|
|
85
|
+
if (parentHash !== fromHash) {
|
|
86
|
+
await this.handleReorg(toBlock.chainFrom, toBlock.chainTo, fromHash, parentHash);
|
|
87
|
+
}
|
|
88
|
+
return blocks.reverse();
|
|
89
|
+
}
|
|
90
|
+
async handleBlocks(blocks, now) {
|
|
91
|
+
const allBlocks = [];
|
|
92
|
+
for (let index = 0; index < blocks.length; index += 1) {
|
|
93
|
+
const blocksPerChain = blocks[index].filter((b) => !this.cache.has(b.hash));
|
|
94
|
+
if (blocksPerChain.length === 0)
|
|
95
|
+
continue;
|
|
96
|
+
allBlocks.push(...blocksPerChain);
|
|
97
|
+
const parent = this.parents[index];
|
|
98
|
+
if (parent !== undefined) {
|
|
99
|
+
const missingBlocks = await this.getMissingBlocksAndHandleReorg(parent.hash, parent.height, blocksPerChain[0]);
|
|
100
|
+
allBlocks.push(...missingBlocks);
|
|
101
|
+
}
|
|
102
|
+
const latestBlock = blocksPerChain[blocksPerChain.length - 1];
|
|
103
|
+
this.parents[index] = { hash: latestBlock.hash, height: latestBlock.height };
|
|
104
|
+
}
|
|
105
|
+
const sortedBlocks = allBlocks.sort((a, b) => a.timestamp - b.timestamp);
|
|
106
|
+
try {
|
|
107
|
+
await this.messageCallback(sortedBlocks);
|
|
108
|
+
}
|
|
109
|
+
finally {
|
|
110
|
+
const threshold = now - EXPIRE_DURATION;
|
|
111
|
+
Array.from(this.cache.entries()).forEach(([hash, ts]) => {
|
|
112
|
+
if (ts < threshold)
|
|
113
|
+
this.cache.delete(hash);
|
|
114
|
+
});
|
|
115
|
+
const index = sortedBlocks.findIndex((b) => b.timestamp >= threshold);
|
|
116
|
+
if (index !== -1) {
|
|
117
|
+
sortedBlocks.slice(index).forEach((b) => this.cache.set(b.hash, b.timestamp));
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
async polling() {
|
|
122
|
+
const now = Date.now();
|
|
123
|
+
if (this.fromTimeStamp >= now)
|
|
124
|
+
return;
|
|
125
|
+
while (this.fromTimeStamp < now) {
|
|
126
|
+
if (this.isCancelled())
|
|
127
|
+
return;
|
|
128
|
+
const toTs = Math.min(this.fromTimeStamp + DEFAULT_INTERVAL, now);
|
|
129
|
+
try {
|
|
130
|
+
const result = await this.nodeProvider.blockflow.getBlockflowBlocks({ fromTs: this.fromTimeStamp, toTs });
|
|
131
|
+
await this.handleBlocks(result.blocks, now);
|
|
132
|
+
}
|
|
133
|
+
catch (err) {
|
|
134
|
+
await this.errorCallback(err, this);
|
|
135
|
+
}
|
|
136
|
+
if (this.fromTimeStamp + EXPIRE_DURATION < now) {
|
|
137
|
+
this.fromTimeStamp = Math.min(toTs + 1, now - EXPIRE_DURATION);
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=block.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"block.js","sourceRoot":"","sources":["../../../../src/block/block.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright 2018 - 2022 The Alephium Authors
|
|
3
|
+
This file is part of the alephium project.
|
|
4
|
+
|
|
5
|
+
The library is free software: you can redistribute it and/or modify
|
|
6
|
+
it under the terms of the GNU Lesser General Public License as published by
|
|
7
|
+
the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
(at your option) any later version.
|
|
9
|
+
|
|
10
|
+
The library is distributed in the hope that it will be useful,
|
|
11
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
GNU Lesser General Public License for more details.
|
|
14
|
+
|
|
15
|
+
You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
along with the library. If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
+
*/
|
|
18
|
+
export { BlockSubscription } from './block';
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/block/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;EAgBE;AAEF,OAAO,EAAwC,iBAAiB,EAAE,MAAM,SAAS,CAAA"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright 2018 - 2022 The Alephium Authors
|
|
3
|
+
This file is part of the alephium project.
|
|
4
|
+
|
|
5
|
+
The library is free software: you can redistribute it and/or modify
|
|
6
|
+
it under the terms of the GNU Lesser General Public License as published by
|
|
7
|
+
the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
(at your option) any later version.
|
|
9
|
+
|
|
10
|
+
The library is distributed in the hope that it will be useful,
|
|
11
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
GNU Lesser General Public License for more details.
|
|
14
|
+
|
|
15
|
+
You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
along with the library. If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
+
*/
|
|
18
|
+
import { i32Codec } from './compact-int-codec';
|
|
19
|
+
import { Codec } from './codec';
|
|
20
|
+
import { concatBytes } from '../utils';
|
|
21
|
+
export class ArrayCodec extends Codec {
|
|
22
|
+
constructor(childCodec) {
|
|
23
|
+
super();
|
|
24
|
+
this.childCodec = childCodec;
|
|
25
|
+
}
|
|
26
|
+
encode(input) {
|
|
27
|
+
const bytes = [i32Codec.encode(input.length)];
|
|
28
|
+
for (const element of input) {
|
|
29
|
+
bytes.push(this.childCodec.encode(element));
|
|
30
|
+
}
|
|
31
|
+
return concatBytes(bytes);
|
|
32
|
+
}
|
|
33
|
+
_decode(input) {
|
|
34
|
+
const length = i32Codec._decode(input);
|
|
35
|
+
const array = [];
|
|
36
|
+
for (let index = 0; index < length; index += 1) {
|
|
37
|
+
array.push(this.childCodec._decode(input));
|
|
38
|
+
}
|
|
39
|
+
return array;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=array-codec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"array-codec.js","sourceRoot":"","sources":["../../../../src/codec/array-codec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;EAgBE;AACF,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAE/B,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAEtC,MAAM,OAAO,UAAc,SAAQ,KAAU;IAC3C,YAAoB,UAAoB;QACtC,KAAK,EAAE,CAAA;QADW,eAAU,GAAV,UAAU,CAAU;IAExC,CAAC;IAED,MAAM,CAAC,KAAU;QACf,MAAM,KAAK,GAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;QAC3D,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE;YAC3B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;SAC5C;QACD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAA;IAC3B,CAAC;IAED,OAAO,CAAC,KAAa;QACnB,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACtC,MAAM,KAAK,GAAQ,EAAE,CAAA;QACrB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE;YAC9C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;SAC3C;QACD,OAAO,KAAK,CAAA;IACd,CAAC;CACF"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright 2018 - 2022 The Alephium Authors
|
|
3
|
+
This file is part of the alephium project.
|
|
4
|
+
|
|
5
|
+
The library is free software: you can redistribute it and/or modify
|
|
6
|
+
it under the terms of the GNU Lesser General Public License as published by
|
|
7
|
+
the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
(at your option) any later version.
|
|
9
|
+
|
|
10
|
+
The library is distributed in the hope that it will be useful,
|
|
11
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
GNU Lesser General Public License for more details.
|
|
14
|
+
|
|
15
|
+
You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
along with the library. If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
+
*/
|
|
18
|
+
import { ArrayCodec } from './array-codec';
|
|
19
|
+
import { u256Codec } from './compact-int-codec';
|
|
20
|
+
import { intAs4BytesCodec } from './int-as-4bytes-codec';
|
|
21
|
+
import { timestampCodec } from './timestamp-codec';
|
|
22
|
+
import { byteStringCodec } from './bytestring-codec';
|
|
23
|
+
import { lockupScriptCodec } from './lockup-script-codec';
|
|
24
|
+
import { blakeHash, createHint } from './hash';
|
|
25
|
+
import { bs58, binToHex, hexToBinUnsafe, concatBytes } from '../utils';
|
|
26
|
+
import { ObjectCodec } from './codec';
|
|
27
|
+
import { tokensCodec } from './token-codec';
|
|
28
|
+
export class AssetOutputCodec extends ObjectCodec {
|
|
29
|
+
static toFixedAssetOutputs(txIdBytes, outputs) {
|
|
30
|
+
return outputs.map((output, index) => AssetOutputCodec.toFixedAssetOutput(txIdBytes, output, index));
|
|
31
|
+
}
|
|
32
|
+
static toFixedAssetOutput(txIdBytes, output, index) {
|
|
33
|
+
const attoAlphAmount = output.amount.toString();
|
|
34
|
+
const lockTime = Number(output.lockTime);
|
|
35
|
+
const tokens = output.tokens.map((token) => {
|
|
36
|
+
return {
|
|
37
|
+
id: binToHex(token.tokenId),
|
|
38
|
+
amount: token.amount.toString()
|
|
39
|
+
};
|
|
40
|
+
});
|
|
41
|
+
const message = binToHex(output.additionalData);
|
|
42
|
+
const scriptType = output.lockupScript.kind;
|
|
43
|
+
const key = binToHex(blakeHash(concatBytes([txIdBytes, intAs4BytesCodec.encode(index)])));
|
|
44
|
+
const outputLockupScript = output.lockupScript.value;
|
|
45
|
+
const address = bs58.encode(lockupScriptCodec.encode(output.lockupScript));
|
|
46
|
+
let hint = undefined;
|
|
47
|
+
if (scriptType === 'P2PKH') {
|
|
48
|
+
hint = createHint(outputLockupScript);
|
|
49
|
+
}
|
|
50
|
+
else if (scriptType === 'P2MPKH') {
|
|
51
|
+
hint = createHint(outputLockupScript.publicKeyHashes[0]);
|
|
52
|
+
}
|
|
53
|
+
else if (scriptType === 'P2SH') {
|
|
54
|
+
hint = createHint(outputLockupScript);
|
|
55
|
+
}
|
|
56
|
+
else if (scriptType === 'P2C') {
|
|
57
|
+
throw new Error(`P2C script type not allowed for asset output`);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
throw new Error(`Unexpected output script type: ${scriptType}`);
|
|
61
|
+
}
|
|
62
|
+
return { hint, key, attoAlphAmount, lockTime, tokens, address, message };
|
|
63
|
+
}
|
|
64
|
+
static fromFixedAssetOutputs(fixedOutputs) {
|
|
65
|
+
return fixedOutputs.map((output) => {
|
|
66
|
+
return AssetOutputCodec.fromFixedAssetOutput(output);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
static fromFixedAssetOutput(fixedOutput) {
|
|
70
|
+
const amount = BigInt(fixedOutput.attoAlphAmount);
|
|
71
|
+
const lockTime = BigInt(fixedOutput.lockTime);
|
|
72
|
+
const lockupScript = lockupScriptCodec.decode(bs58.decode(fixedOutput.address));
|
|
73
|
+
const tokens = fixedOutput.tokens.map((token) => {
|
|
74
|
+
return {
|
|
75
|
+
tokenId: hexToBinUnsafe(token.id),
|
|
76
|
+
amount: BigInt(token.amount)
|
|
77
|
+
};
|
|
78
|
+
});
|
|
79
|
+
const additionalData = hexToBinUnsafe(fixedOutput.message);
|
|
80
|
+
return { amount, lockupScript, lockTime, tokens, additionalData };
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
export const assetOutputCodec = new AssetOutputCodec({
|
|
84
|
+
amount: u256Codec,
|
|
85
|
+
lockupScript: lockupScriptCodec,
|
|
86
|
+
lockTime: timestampCodec,
|
|
87
|
+
tokens: tokensCodec,
|
|
88
|
+
additionalData: byteStringCodec
|
|
89
|
+
});
|
|
90
|
+
export const assetOutputsCodec = new ArrayCodec(assetOutputCodec);
|
|
91
|
+
//# sourceMappingURL=asset-output-codec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asset-output-codec.js","sourceRoot":"","sources":["../../../../src/codec/asset-output-codec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright 2018 - 2022 The Alephium Authors
|
|
3
|
+
This file is part of the alephium project.
|
|
4
|
+
|
|
5
|
+
The library is free software: you can redistribute it and/or modify
|
|
6
|
+
it under the terms of the GNU Lesser General Public License as published by
|
|
7
|
+
the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
(at your option) any later version.
|
|
9
|
+
|
|
10
|
+
The library is distributed in the hope that it will be useful,
|
|
11
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
GNU Lesser General Public License for more details.
|
|
14
|
+
|
|
15
|
+
You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
along with the library. If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
+
*/
|
|
18
|
+
export class BigIntCodec {
|
|
19
|
+
static encode(value) {
|
|
20
|
+
// Special case for zero.
|
|
21
|
+
if (value === 0n) {
|
|
22
|
+
return new Uint8Array([0]);
|
|
23
|
+
}
|
|
24
|
+
const isNegative = value < 0n;
|
|
25
|
+
let absValue = isNegative ? -value : value;
|
|
26
|
+
const bytes = [];
|
|
27
|
+
// Extract bytes from absolute value.
|
|
28
|
+
while (absValue > 0n) {
|
|
29
|
+
bytes.push(Number(absValue & 0xffn));
|
|
30
|
+
absValue >>= 8n;
|
|
31
|
+
}
|
|
32
|
+
// If the bigint is positive and the most significant byte has its high bit set,
|
|
33
|
+
// prefix the byte array with a zero byte to signify positive value.
|
|
34
|
+
if (!isNegative && (bytes[bytes.length - 1] & 0x80) !== 0) {
|
|
35
|
+
bytes.push(0);
|
|
36
|
+
}
|
|
37
|
+
// If the bigint is negative, compute the two's complement of the byte array.
|
|
38
|
+
if (isNegative) {
|
|
39
|
+
let carry = true;
|
|
40
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
41
|
+
bytes[i] = ~bytes[i] & 0xff; // Invert the bits of the byte.
|
|
42
|
+
if (carry) {
|
|
43
|
+
if (bytes[i] === 0xff) {
|
|
44
|
+
bytes[i] = 0;
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
bytes[i] += 1;
|
|
48
|
+
carry = false;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// If there's still a carry, and the most significant byte is not 0xFF (to store the negative sign bit),
|
|
53
|
+
// or if no bytes were set (which means the value was -1), append a 0xFF byte to hold the carry.
|
|
54
|
+
if (carry || bytes.length === 0 || (bytes[bytes.length - 1] & 0x80) === 0) {
|
|
55
|
+
bytes.push(0xff);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// The byte array needs to be reversed since we've constructed it in little-endian order.
|
|
59
|
+
return new Uint8Array(bytes.reverse());
|
|
60
|
+
}
|
|
61
|
+
static decodeUnsigned(encoded) {
|
|
62
|
+
// Special case for zero.
|
|
63
|
+
if (encoded.length === 1 && encoded[0] === 0) {
|
|
64
|
+
return 0n;
|
|
65
|
+
}
|
|
66
|
+
// Convert the byte array to a bigint
|
|
67
|
+
let value = 0n;
|
|
68
|
+
for (const byte of encoded) {
|
|
69
|
+
value = (value << 8n) | BigInt(byte);
|
|
70
|
+
}
|
|
71
|
+
return value;
|
|
72
|
+
}
|
|
73
|
+
static decodeSigned(encoded) {
|
|
74
|
+
// Special case for zero.
|
|
75
|
+
if (encoded.length === 1 && encoded[0] === 0) {
|
|
76
|
+
return 0n;
|
|
77
|
+
}
|
|
78
|
+
// Determine if the number is negative by checking the most significant byte (MSB)
|
|
79
|
+
const isNegative = (encoded[0] & 0x80) !== 0;
|
|
80
|
+
// Convert the byte array to a bigint
|
|
81
|
+
let value = 0n;
|
|
82
|
+
for (const byte of encoded) {
|
|
83
|
+
value = (value << 8n) | BigInt(byte);
|
|
84
|
+
}
|
|
85
|
+
// If the number is negative, convert from two's complement
|
|
86
|
+
if (isNegative) {
|
|
87
|
+
// Create a mask for the value's bit length
|
|
88
|
+
const mask = (1n << (8n * BigInt(encoded.length))) - 1n;
|
|
89
|
+
value = -(~value & mask) - 1n;
|
|
90
|
+
}
|
|
91
|
+
return value;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=bigint-codec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bigint-codec.js","sourceRoot":"","sources":["../../../../src/codec/bigint-codec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright 2018 - 2022 The Alephium Authors
|
|
3
|
+
This file is part of the alephium project.
|
|
4
|
+
|
|
5
|
+
The library is free software: you can redistribute it and/or modify
|
|
6
|
+
it under the terms of the GNU Lesser General Public License as published by
|
|
7
|
+
the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
(at your option) any later version.
|
|
9
|
+
|
|
10
|
+
The library is distributed in the hope that it will be useful,
|
|
11
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
GNU Lesser General Public License for more details.
|
|
14
|
+
|
|
15
|
+
You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
along with the library. If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
+
*/
|
|
18
|
+
import { i32Codec } from './compact-int-codec';
|
|
19
|
+
import { Codec } from './codec';
|
|
20
|
+
import { concatBytes } from '../utils';
|
|
21
|
+
import { ArrayCodec } from './array-codec';
|
|
22
|
+
export class ByteStringCodec extends Codec {
|
|
23
|
+
encode(input) {
|
|
24
|
+
return concatBytes([i32Codec.encode(input.length), input]);
|
|
25
|
+
}
|
|
26
|
+
_decode(input) {
|
|
27
|
+
const length = i32Codec._decode(input);
|
|
28
|
+
return input.consumeBytes(length);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export const byteStringCodec = new ByteStringCodec();
|
|
32
|
+
export const byteStringsCodec = new ArrayCodec(byteStringCodec);
|
|
33
|
+
//# sourceMappingURL=bytestring-codec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bytestring-codec.js","sourceRoot":"","sources":["../../../../src/codec/bytestring-codec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;EAgBE;AACF,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAEtC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAI1C,MAAM,OAAO,eAAgB,SAAQ,KAAiB;IACpD,MAAM,CAAC,KAAiB;QACtB,OAAO,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,CAAA;IAC5D,CAAC;IAED,OAAO,CAAC,KAAa;QACnB,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACtC,OAAO,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;IACnC,CAAC;CACF;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAA;AACpD,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,UAAU,CAAC,eAAe,CAAC,CAAA"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright 2018 - 2022 The Alephium Authors
|
|
3
|
+
This file is part of the alephium project.
|
|
4
|
+
|
|
5
|
+
The library is free software: you can redistribute it and/or modify
|
|
6
|
+
it under the terms of the GNU Lesser General Public License as published by
|
|
7
|
+
the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
(at your option) any later version.
|
|
9
|
+
|
|
10
|
+
The library is distributed in the hope that it will be useful,
|
|
11
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
GNU Lesser General Public License for more details.
|
|
14
|
+
|
|
15
|
+
You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
along with the library. If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
+
*/
|
|
18
|
+
import { concatBytes } from '../utils';
|
|
19
|
+
import { Reader } from './reader';
|
|
20
|
+
export class Codec {
|
|
21
|
+
decode(input) {
|
|
22
|
+
const reader = new Reader(input);
|
|
23
|
+
return this._decode(reader);
|
|
24
|
+
}
|
|
25
|
+
bimap(from, to) {
|
|
26
|
+
return new (class extends Codec {
|
|
27
|
+
constructor(codecT) {
|
|
28
|
+
super();
|
|
29
|
+
this.codecT = codecT;
|
|
30
|
+
}
|
|
31
|
+
encode(input) {
|
|
32
|
+
return this.codecT.encode(to(input));
|
|
33
|
+
}
|
|
34
|
+
_decode(input) {
|
|
35
|
+
return from(this.codecT._decode(input));
|
|
36
|
+
}
|
|
37
|
+
})(this);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
export function assert(value, message) {
|
|
41
|
+
if (!value) {
|
|
42
|
+
throw new Error(message);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export class FixedSizeCodec extends Codec {
|
|
46
|
+
constructor(size) {
|
|
47
|
+
super();
|
|
48
|
+
this.size = size;
|
|
49
|
+
}
|
|
50
|
+
encode(input) {
|
|
51
|
+
assert(input.length === this.size, `Invalid length, expected ${this.size}, got ${input.length}`);
|
|
52
|
+
return input;
|
|
53
|
+
}
|
|
54
|
+
_decode(input) {
|
|
55
|
+
return input.consumeBytes(this.size);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
export class ObjectCodec extends Codec {
|
|
59
|
+
constructor(codecs) {
|
|
60
|
+
super();
|
|
61
|
+
this.codecs = codecs;
|
|
62
|
+
this.keys = Object.keys(codecs);
|
|
63
|
+
}
|
|
64
|
+
encode(value) {
|
|
65
|
+
const bytes = [];
|
|
66
|
+
for (const key of this.keys) {
|
|
67
|
+
bytes.push(this.codecs[key].encode(value[key]));
|
|
68
|
+
}
|
|
69
|
+
return concatBytes(bytes);
|
|
70
|
+
}
|
|
71
|
+
_decode(input) {
|
|
72
|
+
const result = {};
|
|
73
|
+
for (const key of this.keys) {
|
|
74
|
+
result[key] = this.codecs[key]._decode(input);
|
|
75
|
+
}
|
|
76
|
+
return result;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
export class EnumCodec extends Codec {
|
|
80
|
+
constructor(name, codecs) {
|
|
81
|
+
super();
|
|
82
|
+
this.name = name;
|
|
83
|
+
this.codecs = codecs;
|
|
84
|
+
this.kinds = Object.keys(codecs);
|
|
85
|
+
}
|
|
86
|
+
encode(value) {
|
|
87
|
+
const index = this.kinds.findIndex((t) => t === value.kind);
|
|
88
|
+
if (index === -1) {
|
|
89
|
+
throw new Error(`Invalid ${this.name} kind ${value.kind}, expected one of ${this.kinds}`);
|
|
90
|
+
}
|
|
91
|
+
const codec = this.codecs[value.kind];
|
|
92
|
+
return new Uint8Array([index, ...codec.encode(value.value)]);
|
|
93
|
+
}
|
|
94
|
+
_decode(input) {
|
|
95
|
+
const index = input.consumeByte();
|
|
96
|
+
if (index >= 0 && index < this.kinds.length) {
|
|
97
|
+
const kind = this.kinds[`${index}`];
|
|
98
|
+
const codec = this.codecs[kind];
|
|
99
|
+
return { kind, value: codec._decode(input) };
|
|
100
|
+
}
|
|
101
|
+
throw new Error(`Invalid encoded ${this.name} kind: ${index}`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
export const byte32Codec = new FixedSizeCodec(32);
|
|
105
|
+
export const byteCodec = new (class extends Codec {
|
|
106
|
+
encode(input) {
|
|
107
|
+
assert(input >= 0 && input < 256, `Invalid byte: ${input}`);
|
|
108
|
+
return new Uint8Array([input]);
|
|
109
|
+
}
|
|
110
|
+
_decode(input) {
|
|
111
|
+
return input.consumeByte();
|
|
112
|
+
}
|
|
113
|
+
})();
|
|
114
|
+
export const boolCodec = new (class extends Codec {
|
|
115
|
+
encode(input) {
|
|
116
|
+
return new Uint8Array([input ? 1 : 0]);
|
|
117
|
+
}
|
|
118
|
+
_decode(input) {
|
|
119
|
+
const byte = input.consumeByte();
|
|
120
|
+
if (byte === 1) {
|
|
121
|
+
return true;
|
|
122
|
+
}
|
|
123
|
+
else if (byte === 0) {
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
throw new Error(`Invalid encoded bool value ${byte}, expected 0 or 1`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
})();
|
|
131
|
+
//# sourceMappingURL=codec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec.js","sourceRoot":"","sources":["../../../../src/codec/codec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;EAgBE;AAEF,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,MAAM,OAAgB,KAAK;IAEzB,MAAM,CAAC,KAAiB;QACtB,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,CAAA;QAChC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IAC7B,CAAC;IAID,KAAK,CAAI,IAAiB,EAAE,EAAe;QACzC,OAAO,IAAI,CAAC,KAAM,SAAQ,KAAQ;YAChC,YAA6B,MAAgB;gBAC3C,KAAK,EAAE,CAAA;gBADoB,WAAM,GAAN,MAAM,CAAU;YAE7C,CAAC;YAED,MAAM,CAAC,KAAQ;gBACb,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;YACtC,CAAC;YACD,OAAO,CAAC,KAAa;gBACnB,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;YACzC,CAAC;SACF,CAAC,CAAC,IAAI,CAAC,CAAA;IACV,CAAC;CACF;AAED,MAAM,UAAU,MAAM,CAAC,KAAc,EAAE,OAAe;IACpD,IAAI,CAAC,KAAK,EAAE;QACV,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAA;KACzB;AACH,CAAC;AAED,MAAM,OAAO,cAAe,SAAQ,KAAiB;IACnD,YAA6B,IAAY;QACvC,KAAK,EAAE,CAAA;QADoB,SAAI,GAAJ,IAAI,CAAQ;IAEzC,CAAC;IAED,MAAM,CAAC,KAAiB;QACtB,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,EAAE,4BAA4B,IAAI,CAAC,IAAI,SAAS,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;QAChG,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,CAAC,KAAa;QACnB,OAAO,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACtC,CAAC;CACF;AAED,MAAM,OAAO,WAAe,SAAQ,KAAQ;IAG1C,YAAoB,MAAuC;QACzD,KAAK,EAAE,CAAA;QADW,WAAM,GAAN,MAAM,CAAiC;QAEzD,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAgB,CAAA;IAChD,CAAC;IAED,MAAM,CAAC,KAAQ;QACb,MAAM,KAAK,GAAiB,EAAE,CAAA;QAC9B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE;YAC3B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;SAChD;QACD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAA;IAC3B,CAAC;IAED,OAAO,CAAC,KAAa;QACnB,MAAM,MAAM,GAAM,EAAO,CAAA;QACzB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE;YAC3B,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;SAC9C;QACD,OAAO,MAAW,CAAA;IACpB,CAAC;CACF;AAKD,MAAM,OAAO,SAAsF,SAAQ,KAAQ;IAGjH,YAAoB,IAAY,EAAU,MAA4D;QACpG,KAAK,EAAE,CAAA;QADW,SAAI,GAAJ,IAAI,CAAQ;QAAU,WAAM,GAAN,MAAM,CAAsD;QAEpG,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAqB,CAAA;IACtD,CAAC;IAED,MAAM,CAAC,KAAQ;QACb,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,CAAA;QAC3D,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;YAChB,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,CAAC,IAAI,SAAS,KAAK,CAAC,IAAI,qBAAqB,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;SAC1F;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACrC,OAAO,IAAI,UAAU,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAC9D,CAAC;IAED,OAAO,CAAC,KAAa;QACnB,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAA;QACjC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,EAAE,CAAC,CAAA;YACnC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAsB,CAAC,CAAA;YACjD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAO,CAAA;SAClD;QACD,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,CAAC,IAAI,UAAU,KAAK,EAAE,CAAC,CAAA;IAChE,CAAC;CACF;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,cAAc,CAAC,EAAE,CAAC,CAAA;AACjD,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAM,SAAQ,KAAa;IACvD,MAAM,CAAC,KAAa;QAClB,MAAM,CAAC,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,GAAG,EAAE,iBAAiB,KAAK,EAAE,CAAC,CAAA;QAC3D,OAAO,IAAI,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;IAChC,CAAC;IACD,OAAO,CAAC,KAAa;QACnB,OAAO,KAAK,CAAC,WAAW,EAAE,CAAA;IAC5B,CAAC;CACF,CAAC,EAAE,CAAA;AAEJ,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAM,SAAQ,KAAc;IACxD,MAAM,CAAC,KAAc;QACnB,OAAO,IAAI,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACxC,CAAC;IACD,OAAO,CAAC,KAAa;QACnB,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,EAAE,CAAA;QAChC,IAAI,IAAI,KAAK,CAAC,EAAE;YACd,OAAO,IAAI,CAAA;SACZ;aAAM,IAAI,IAAI,KAAK,CAAC,EAAE;YACrB,OAAO,KAAK,CAAA;SACb;aAAM;YACL,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,mBAAmB,CAAC,CAAA;SACvE;IACH,CAAC;CACF,CAAC,EAAE,CAAA"}
|