@laceio/sdk 0.1.0 → 0.1.1-canary.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/dist/{Ed25519PublicKey-lvu1s54U.cjs → Address-AMKTo-dA.cjs} +17150 -61
- package/dist/{Ed25519PublicKey-CjnuAYRR.js → Address-_c_-9hLC.js} +16955 -264
- package/dist/{Bip32Account-r3KAhCgU.js → Bip32Account-CaW1zC9Y.js} +4 -5
- package/dist/{Bip32Account-Cz3h0ZUa.cjs → Bip32Account-DOaGmKpv.cjs} +4 -5
- package/dist/Cardano-B-gyqBBD.js +311 -0
- package/dist/Cardano-BQ_af0Y3.cjs +322 -0
- package/dist/Ed25519PublicKey-B3QcR0J2.cjs +88 -0
- package/dist/Ed25519PublicKey-DIE19xHg.js +83 -0
- package/dist/InMemoryKeyAgent-Bc_xZY-v.cjs +652 -0
- package/dist/InMemoryKeyAgent-D8T3vtXy.js +631 -0
- package/dist/{PaymentAddress-DhbtuYb7.cjs → PaymentAddress-B4n1KZMx.cjs} +1 -2
- package/dist/{PaymentAddress-xSmGUQ-8.js → PaymentAddress-Cml3EA1n.js} +1 -2
- package/dist/Percent-Cfuw5YyL.cjs +11 -0
- package/dist/Percent-DpvyJ_93.js +5 -0
- package/dist/SodiumBip32Ed25519-BaD-kjyx.cjs +380 -0
- package/dist/SodiumBip32Ed25519-DCikAMsl.js +363 -0
- package/dist/{TransactionBuilder-CeJTNzm-.cjs → TransactionBuilder-BakTJvsJ.cjs} +59 -89
- package/dist/{TransactionBuilder-DGNDM4kt.js → TransactionBuilder-D2ErwVWv.js} +5 -71
- package/dist/_md-6zV2Cme0.cjs +684 -0
- package/dist/_md-gbUqlhqd.js +399 -0
- package/dist/_web-crypto-random-bytes-BvzwTYPG.js +197 -0
- package/dist/acc-module-NL_8mEHH.cjs +27654 -0
- package/dist/acc-module-ur8CkBd1.js +27624 -0
- package/dist/account-call-B7cF8ly4.cjs +293 -0
- package/dist/account-call-BF4rBcNw.js +3 -0
- package/dist/account-call-CoCq3V55.js +252 -0
- package/dist/account-call-DFcD257E.cjs +4 -0
- package/dist/account-guards-BeKbV9D1.cjs +41 -0
- package/dist/account-guards-qnFXuXSE.js +36 -0
- package/dist/{activity-type.stable-ClO9j_PH.cjs → activity-type-BPXxdHBP.cjs} +2 -1
- package/dist/{activity-type.stable-Ml0SOYv9.js → activity-type-C1geyPsH.js} +2 -1
- package/dist/address-OxwXIwbF.js +15502 -0
- package/dist/address-book-address-validator-BqYM0Uyp.cjs +41 -0
- package/dist/{address-book-address-validator-BhqRfmlL.cjs → address-book-address-validator-CGIcqn5W.cjs} +5 -4
- package/dist/{address-book-address-validator-VqIOB8PY.js → address-book-address-validator-FkkYim3z.js} +6 -4
- package/dist/address-book-address-validator-RSx2Jozy.js +39 -0
- package/dist/address-lECYBd9-.cjs +13043 -0
- package/dist/{apply-vkey-witnesses-Ctzk7eye.cjs → apply-vkey-witnesses-1jyczTkw.cjs} +1 -1
- package/dist/{apply-vkey-witnesses-Dfo7XfhL.js → apply-vkey-witnesses-Byb40-yJ.js} +1 -1
- package/dist/artefact-loader-Cqc9eSkL.cjs +182 -0
- package/dist/artefact-loader-D0T2f6F7.js +159 -0
- package/dist/auto-dismiss-failure-on-success-BWJceNXd.cjs +37 -0
- package/dist/auto-dismiss-failure-on-success-Bpod-v4r.js +31 -0
- package/dist/bip32-EPpcFrpH.cjs +3851 -0
- package/dist/{bip32ed25519-D2In8WzR.cjs → bip32ed25519-CRiG-Kjg.cjs} +5 -4
- package/dist/{bip32ed25519-qsLH_eWO.js → bip32ed25519-E-fCUZNv.js} +6 -4
- package/dist/bip39-DZomfqeY.js +9 -0
- package/dist/bip39-MAck9iod.cjs +26 -0
- package/dist/bitcoin-data-provider-D0OT_Uiu.cjs +26 -0
- package/dist/bitcoin-data-provider-LN_8oamW.js +21 -0
- package/dist/bitcoin.cjs +48 -0
- package/dist/bitcoin.d.ts +29805 -1
- package/dist/bitcoin.js +22 -0
- package/dist/{blake2b-BGHUWMsV.js → blake2b-BL-eR5G2.js} +6 -4
- package/dist/{blake2b-DspUqw68.cjs → blake2b-Iy324FwH.cjs} +5 -4
- package/dist/{blockfrost-tx-submit-provider-BUEOmdvc.js → blockfrost-tx-submit-provider-BHDLgOIE.js} +9 -162
- package/dist/{blockfrost-tx-submit-provider-B5dWbdrZ.cjs → blockfrost-tx-submit-provider-BxC19smv.cjs} +7 -171
- package/dist/{blockingWithLatestFrom-BhaE7pnA.js → blockingWithLatestFrom-FUfZFEUG.js} +1 -1
- package/dist/{blockingWithLatestFrom-DkuT3G2a.cjs → blockingWithLatestFrom-bmCPgA3c.cjs} +1 -1
- package/dist/bn-BFq5a4dk.cjs +2553 -0
- package/dist/{SodiumBip32Ed25519-BEfo1Q9m.js → browser-D5jRKv_L.js} +4 -401
- package/dist/bytes.vo-CziaOsba.js +24 -0
- package/dist/bytes.vo-hecRu3YZ.cjs +35 -0
- package/dist/{cardano-network-id-to-network-type-PXvn1ycQ.cjs → cardano-network-id-to-network-type-BwG_d6QP.cjs} +1 -1
- package/dist/{cardano-network-id-to-network-type-DHgKhDAK.js → cardano-network-id-to-network-type-CYJheetp.js} +1 -1
- package/dist/{cardano-network-id.vo-CbNNKd-k.cjs → cardano-network-id.vo-C5VuBXT3.cjs} +2 -2
- package/dist/{cardano-network-id.vo-CTYe-Oix.js → cardano-network-id.vo-CeLJqmb_.js} +2 -2
- package/dist/{cardano-tx-id.vo-BMwemq5x.js → cardano-tx-id.vo-DJ70NC0-.js} +1 -1
- package/dist/{cardano-tx-id.vo-NY-gCOWJ.cjs → cardano-tx-id.vo-lnyO9XaW.cjs} +1 -1
- package/dist/cardano.cjs +31 -24
- package/dist/cardano.d.ts +27602 -8121
- package/dist/cardano.js +21 -13
- package/dist/client-Bw2foG5E.cjs +808 -0
- package/dist/const-BB3MccLt.js +153 -0
- package/dist/{const-BErUlcZw.cjs → const-BWBAzOmN.cjs} +1 -1
- package/dist/const-CSWmOyzn.cjs +42 -0
- package/dist/{const-Dy8Ctnpd.cjs → const-D3mCkwrM.cjs} +5 -5
- package/dist/const-DW7z3R5k.js +13 -0
- package/dist/{const-DeUA7zYl.js → const-DbuUHSzR.js} +5 -5
- package/dist/const-DgBzKfz6.cjs +31995 -0
- package/dist/{const-DVW6DGkZ.js → const-xGSNCtwQ.js} +1 -1
- package/dist/contract-BsIGhsYa.js +171 -0
- package/dist/contract-DD6CGnpB.cjs +189 -0
- package/dist/create-add-accounts-2mQA0ST2.js +102 -0
- package/dist/create-add-accounts-B6mR2NMn.cjs +114 -0
- package/dist/{delegation-tx-builder-CF0VunDW.cjs → delegation-tx-builder-Cp30jtj9.cjs} +9 -8
- package/dist/{delegation-tx-builder-C8LQxU2R.js → delegation-tx-builder-DUMikSTg.js} +9 -7
- package/dist/{deregistration-tx-builder-DcUXA3Ls.cjs → deregistration-tx-builder-B-ZeY-dR.cjs} +10 -9
- package/dist/{deregistration-tx-builder-BOBPP8m_.js → deregistration-tx-builder-CRLrK99U.js} +10 -8
- package/dist/device-commitment-hex.vo-BIUYUNz1.cjs +31 -0
- package/dist/device-commitment-hex.vo-D9FsYLn7.js +26 -0
- package/dist/device-key-BToCoS4D.js +2394 -0
- package/dist/device-key-D6euvxFi.cjs +2489 -0
- package/dist/device-readers-BHJeNR8I.js +3 -0
- package/dist/device-readers-Dw7uTNM5.cjs +167 -0
- package/dist/device-readers-b4g2j3QL.js +144 -0
- package/dist/device-readers-cxcJcWq5.cjs +7 -0
- package/dist/dist-B00GN41m.js +141 -0
- package/dist/dist-BA1xnF9O.cjs +4413 -0
- package/dist/dist-BmHOXLe8.cjs +3814 -0
- package/dist/dist-Br0OVXKt.cjs +535 -0
- package/dist/dist-C1JK9C1I.cjs +3452 -0
- package/dist/dist-DKEViNEI.cjs +1306 -0
- package/dist/dist-Dwqx184a.cjs +43175 -0
- package/dist/dist-MJof_Ky1.cjs +145 -0
- package/dist/dist-p84sVVJ9.cjs +1394 -0
- package/dist/{earn-rewards-tx-builder-BRlTueHS.js → earn-rewards-tx-builder-8G_rouIk.js} +9 -7
- package/dist/{earn-rewards-tx-builder-RgO0QUY8.cjs → earn-rewards-tx-builder-cOUNV58E.cjs} +9 -8
- package/dist/enc-key-circuits-0Dud78IB.js +13 -0
- package/dist/enc-key-circuits-yjPHbuo_.cjs +24 -0
- package/dist/english-BZ_ebp2-.cjs +2057 -0
- package/dist/envelopes-B3QCzo5p.js +2658 -0
- package/dist/envelopes-BdE1xlgz.cjs +2777 -0
- package/dist/errors-BA3b8aVu.cjs +584 -0
- package/dist/errors-pkQdxW-7.js +392 -0
- package/dist/experimental.cjs +6820 -0
- package/dist/experimental.d.ts +63552 -0
- package/dist/experimental.js +6670 -0
- package/dist/fees-6C2uEWFK.js +653 -0
- package/dist/fees-DtC71fOx.cjs +820 -0
- package/dist/gated-call-BrPjKolT.js +3 -0
- package/dist/gated-call-CcsuW9L5.js +691 -0
- package/dist/gated-call-DdDrxEq5.cjs +732 -0
- package/dist/gated-call-Dk7PazhG.cjs +4 -0
- package/dist/grant-rules-B7eDuD5G.cjs +5468 -0
- package/dist/grant-rules-qLrKUIR3.js +5217 -0
- package/dist/grant-status-CDmZpx32.js +296 -0
- package/dist/grant-status-CQtwjLsA.cjs +337 -0
- package/dist/grants-Bnb-3Hkv.cjs +16 -0
- package/dist/grants-CIb6nOV7.cjs +273 -0
- package/dist/grants-CYY0AquW.js +202 -0
- package/dist/grants-DOsFSotP.js +4 -0
- package/dist/{group-cardano-addresses-by-account-C-1GHUu8.cjs → group-cardano-addresses-by-account-BGOtPV-Y.cjs} +4 -40
- package/dist/{group-cardano-addresses-by-account-p4dXmCoj.js → group-cardano-addresses-by-account-TqvESg9x.js} +6 -37
- package/dist/{guarded-transaction-signer-DZSGHp1K.js → guarded-transaction-signer-BbVDE9Nn.js} +12 -18
- package/dist/{guarded-transaction-signer-BLSezbfV.cjs → guarded-transaction-signer-DTLjAkif.cjs} +26 -26
- package/dist/hex-BVtOKJki.cjs +263 -0
- package/dist/hex-CGYJPK_Z.js +192 -0
- package/dist/http-client-B7_kBTYn.js +155 -0
- package/dist/http-client-DYQ_7Rdf.cjs +167 -0
- package/dist/identity-DxPhxkZs.js +239 -0
- package/dist/identity-y41Yle03.cjs +274 -0
- package/dist/in-memory-wallet-integration-5BKiAvPT.js +20861 -0
- package/dist/{in-memory-wallet-integration-CUTa68ET.js → in-memory-wallet-integration-BCOqDgbt.js} +10 -107
- package/dist/in-memory-wallet-integration-Bi8I9Dso.js +128 -0
- package/dist/in-memory-wallet-integration-Bsl2ONua.cjs +239 -0
- package/dist/in-memory-wallet-integration-DZ0CAyvY.cjs +20865 -0
- package/dist/{in-memory-wallet-integration-Dw_S7amX.cjs → in-memory-wallet-integration-DsFm8gLk.cjs} +21 -112
- package/dist/{in-memory-wallet-integration-Z4Bp_DTv.cjs → in-memory-wallet-integration-aW_SF-go.cjs} +8 -5
- package/dist/{in-memory-wallet-integration-B6cbAlvD.js → in-memory-wallet-integration-mIEc8EfR.js} +9 -5
- package/dist/index.cjs +95 -58
- package/dist/index.d.ts +45152 -13448
- package/dist/index.js +55 -28
- package/dist/{init-CVi8J0zk.cjs → init-5SfWgCYD.cjs} +3 -3
- package/dist/{init-Ci7aqWCf2.cjs → init-8NVWbo302.cjs} +2 -2
- package/dist/init-B-C7n6u6.js +5 -0
- package/dist/{init-BFMWRf-L.js → init-B-ppfGO-.js} +1 -1
- package/dist/{init-IiR093Jw.cjs → init-B2OUhY5T.cjs} +2 -2
- package/dist/{init-DXnus199.cjs → init-B6Eg_o6G.cjs} +5 -5
- package/dist/{init-4hDl5bpr.js → init-BAWMHL1k.js} +2 -2
- package/dist/init-BC2CZZOu2.cjs +2002 -0
- package/dist/{init-a228hXnS.cjs → init-BF-a2p6E.cjs} +65 -73
- package/dist/{init-fFirX8OY.cjs → init-BFxlQAD8.cjs} +1 -1
- package/dist/init-BJE1ry0O.js +17 -0
- package/dist/{init-BVnI4z2J.js → init-BPKBVOHU.js} +2 -2
- package/dist/{init-bdqZBd-o.js → init-BSP_xcpB.js} +2 -2
- package/dist/{init-CFNOn3lo.js → init-BSd7mznK.js} +3 -3
- package/dist/{init-MjR4swi6.js → init-BUJTT0MN.js} +36 -43
- package/dist/init-BUpFzYsD.cjs +143 -0
- package/dist/{init-BvpYHyLH.cjs → init-BZ-WyAIL.cjs} +3 -3
- package/dist/init-BZdfdLX7.js +422 -0
- package/dist/{init-CJeOys1w.cjs → init-B_HWNXMD.cjs} +2 -2
- package/dist/init-BbIMt6xU.cjs +6 -0
- package/dist/{init-BYdN1aqE.cjs → init-BewG6swt.cjs} +2 -2
- package/dist/{init-BX0AZAVH2.js → init-Bilqsbng.js} +2 -2
- package/dist/{init-Tpn9VkFu.cjs → init-BpwlQ6wF.cjs} +1 -1
- package/dist/{init-D5-P0HXK.js → init-BtQOzUjX.js} +1 -1
- package/dist/{init-BvGz3qUd2.js → init-CCTscPaY2.js} +2 -2
- package/dist/{init-D4hPipCD.cjs → init-CH0yyBof.cjs} +1 -1
- package/dist/init-CaIkrXal.cjs +121 -0
- package/dist/init-CkZy4IMf.cjs +107 -0
- package/dist/{init-Drr2f_Pr.js → init-CmfcY7SV.js} +1 -1
- package/dist/{init-Kf3_OLv6.js → init-CnJAlks_.js} +1 -1
- package/dist/{init-Cdjt_z-b.cjs → init-CqqmtAIK.cjs} +4 -4
- package/dist/{init-Bb0avZeZ.js → init-Cu2znmIc.js} +5 -5
- package/dist/init-Cz5LAizN.js +2001 -0
- package/dist/init-D4WM3-Mn.cjs +18 -0
- package/dist/init-DMi2FGpf.cjs +424 -0
- package/dist/{init-lcaUSOOG.js → init-DPTJohPd.js} +1 -1
- package/dist/{init-BTYLMF9F2.cjs → init-DexLSprL2.cjs} +258 -61
- package/dist/init-DfKPgD21.js +106 -0
- package/dist/init-DgzRsI-C.js +141 -0
- package/dist/init-Dj4Cn7-P.js +4789 -0
- package/dist/init-DktAnYI0.cjs +2354 -0
- package/dist/{init-DFwhgert.cjs → init-DmyuM9Lo.cjs} +1 -1
- package/dist/{init-CX_zLXc6.js → init-IBnizp1U.js} +5 -5
- package/dist/init-MDKB6tGI2.cjs +4790 -0
- package/dist/{init-DbZ5byj42.js → init-TbB38KNt2.js} +258 -60
- package/dist/init-X6m_cqDy.js +2353 -0
- package/dist/{init-DvVgKCaP2.cjs → init-bzvl1JhF.cjs} +2 -2
- package/dist/{init-BgrY29gW.js → init-dsYkC_0B.js} +4 -4
- package/dist/{init-B5BsI3DR.cjs → init-kvn5FlPS.cjs} +7 -7
- package/dist/init-vfy9DW_E.js +119 -0
- package/dist/{init-BE_6Jyc4.js → init-w7xl6LsP.js} +3 -3
- package/dist/{init-DEsWVyn5.cjs → init-wgiBUmyW.cjs} +1 -1
- package/dist/{is-retriable-error-DWv_ob-f.js → is-retriable-error-CmFR20pe.js} +1 -1
- package/dist/{is-retriable-error-Dtb4JGjd.cjs → is-retriable-error-D2yo0_lS.cjs} +1 -1
- package/dist/jubjub-authoriser-A2c8vmkN.js +84 -0
- package/dist/jubjub-authoriser-D3ZDgzcF.cjs +85 -0
- package/dist/key-source-CcLTx8HK.js +2761 -0
- package/dist/key-source-D2tTAag-.cjs +806 -0
- package/dist/{key-value-store-DTX1quRS.js → key-value-store-DZcNDB3n.js} +1 -1
- package/dist/{key-value-store-B-XRIwaM.cjs → key-value-store-Htj4RgMe.cjs} +1 -1
- package/dist/keyDerivation-DcKRUCVh.cjs +274 -0
- package/dist/keyDerivation-QGesIMbS.js +4077 -0
- package/dist/{lace-context-FpU3iG3f.cjs → lace-context-BN0b_ury.cjs} +4 -4
- package/dist/{lace-context-BQvvxVLm.js → lace-context-DMRJ87Vg.js} +4 -4
- package/dist/lib-BC-62Byh.cjs +2359 -0
- package/dist/lib-JYqcAX0c.js +2354 -0
- package/dist/midnight-account-id.vo--Vcx34Xk.cjs +10 -0
- package/dist/midnight-account-id.vo-BuB8fiVO.js +5 -0
- package/dist/midnight-engine-B7D2hbHo.js +5 -0
- package/dist/midnight-engine-D5ikN_5F.cjs +6 -0
- package/dist/midnight-wallet-BOdFD6SX.cjs +24 -0
- package/dist/midnight-wallet-CAqZrNVe.js +18 -0
- package/dist/midnight.cjs +1412 -0
- package/dist/midnight.d.ts +28609 -0
- package/dist/midnight.js +1355 -0
- package/dist/modules-cardano-BiL9hoM3.js +996 -0
- package/dist/modules-cardano-UeXks3sd.cjs +1109 -0
- package/dist/node-relay-BOuvdZvC.cjs +49 -0
- package/dist/node-relay-CLtc5n1v.js +48 -0
- package/dist/outputs-5qdW8s-f.js +196 -0
- package/dist/outputs-BEM1GPMf.cjs +339 -0
- package/dist/{SodiumBip32Ed25519-BQUcrQWX.cjs → pbkdf2-B1veireP.cjs} +6 -411
- package/dist/pending-operation-CfTUNQVD.cjs +26 -0
- package/dist/pending-operation-Ljijb1Uh.js +21 -0
- package/dist/providers-1on_fwJO.cjs +364 -0
- package/dist/providers-C1MsxfMA.js +341 -0
- package/dist/redacted-4SJPqt-G.js +81 -0
- package/dist/redacted-DwxIDdIF.cjs +86 -0
- package/dist/{reselect-DPML1uFN.cjs → reselect-kP4DaAII.cjs} +1 -1
- package/dist/{retry-config-oNtfdyrG.cjs → retry-config-BGv5q5QM.cjs} +1 -1
- package/dist/{retry-config-VdbuqBsI.js → retry-config-Bu5Yn5ua.js} +1 -1
- package/dist/safe-buffer-CqGpSFCQ.js +43 -0
- package/dist/safe-buffer-DbXbwhUQ.cjs +48 -0
- package/dist/sdk-1SRu8Ype.cjs +1445 -0
- package/dist/sdk-BneJm7ey.js +1249 -0
- package/dist/sdk-init-9TG1ZvHF.cjs +3795 -0
- package/dist/sdk-init-Ce3mD-8F.js +1047 -0
- package/dist/secret-box-CSmRp6Tt.js +3777 -0
- package/dist/secret-box-ZfbYwBgS.cjs +6970 -0
- package/dist/send-proof-progress-DtAcrMP6.cjs +33 -0
- package/dist/send-proof-progress-Dx2cUz1B.js +22 -0
- package/dist/sha2-DaRJZOjk.cjs +390 -0
- package/dist/sha2-c4sB6peD.js +378 -0
- package/dist/side-effects-C3BhLrdP.js +768 -0
- package/dist/side-effects-DG0R-KFc.cjs +804 -0
- package/dist/sign-bitcoin-transaction-with-seed-C7vq9om8.js +147 -0
- package/dist/sign-bitcoin-transaction-with-seed-Ds1dwzan.cjs +158 -0
- package/dist/signer--2I6poMD.js +2 -0
- package/dist/signer-CX21Ups_.cjs +121 -0
- package/dist/signer-Cnn9q9oY.js +92 -0
- package/dist/signer-DbSxjk0F.cjs +7 -0
- package/dist/signer-factory-B5oFuUZ-.cjs +130 -0
- package/dist/signer-factory-BAt8FPNc.cjs +281 -0
- package/dist/signer-factory-BGE4nL4k.js +129 -0
- package/dist/signer-factory-C4pgsiJi.js +281 -0
- package/dist/{signer-factory-DySc1wRX.cjs → signer-factory-D95jQIPV.cjs} +9 -6
- package/dist/{signer-factory-D4HrwFPl.js → signer-factory-PrpsGX-8.js} +10 -6
- package/dist/{slice-BZTQgYSs.js → slice-B-xJcuT1.js} +4 -4
- package/dist/slice-B4QOYaOG.cjs +105 -0
- package/dist/{slice-CtIMw2YT.cjs → slice-B9QKuhi0.cjs} +3 -3
- package/dist/slice-BKnGkAkd.cjs +9031 -0
- package/dist/{slice-Bhwmqn1p.cjs → slice-Bf4enJKZ.cjs} +8 -8
- package/dist/{slice-DaNVz7_l.js → slice-ByNWnxKS.js} +8 -8
- package/dist/{slice-C2UDQrdt.js → slice-C1zOeseG.js} +449 -355
- package/dist/{slice-DFLyKRm5.cjs → slice-C4toRM6A.cjs} +2 -2
- package/dist/{slice-Cx4dULDA.cjs → slice-C8YVv4Qn.cjs} +1 -1
- package/dist/{slice-jnpOgiSZ.cjs → slice-CaMfviYu.cjs} +3 -3
- package/dist/{slice-DFvrwUur.js → slice-CgeRsYRg.js} +6 -6
- package/dist/slice-Cwt8jShq.js +9013 -0
- package/dist/{slice-zNEspZND.js → slice-D0VzpMbY.js} +2 -2
- package/dist/slice-D14F78Ca.js +87 -0
- package/dist/{slice-F6A1YKOF.cjs → slice-DLflttAu.cjs} +479 -366
- package/dist/{slice-C96EdeY1.js → slice-DcO-iNz2.js} +1 -1
- package/dist/{slice-C19quNWM.cjs → slice-DimtxfAT.cjs} +2 -2
- package/dist/{slice-KiNoGwD9.js → slice-DlTEqIoI.js} +1 -1
- package/dist/{slice-ws8PccRX.js → slice-Dn0WojD7.js} +3 -3
- package/dist/{slice-BLSxLmie.cjs → slice-Dongunf7.cjs} +4 -4
- package/dist/{slice-B6vPum19.js → slice-DpufJAjJ.js} +2 -2
- package/dist/{slice-exhhmucR.cjs → slice-DtitVc9L.cjs} +7 -7
- package/dist/{slice-Bjj2t2ut.cjs → slice-WMMMc1Xv.cjs} +2 -2
- package/dist/slice-a8VuIqzS.cjs +378 -0
- package/dist/slice-bRASyM-m.js +354 -0
- package/dist/{slice-CBFrgHSH.js → slice-hNyKbDry.js} +3 -3
- package/dist/{InMemoryKeyAgent-pyB2gA-N.cjs → src-BayYMIjw.cjs} +20 -8228
- package/dist/{InMemoryKeyAgent-D-3HejxN.js → src-CgINPlSx.js} +29 -4811
- package/dist/store-AUlTfcI_.js +37 -0
- package/dist/store-C7AneHEY.cjs +66 -0
- package/dist/submit-BuBCVi-l.cjs +87 -0
- package/dist/submit-D37lxFrK.js +70 -0
- package/dist/submit-bitcoin-tx-DFLnhidO.js +983 -0
- package/dist/submit-bitcoin-tx-sih2hSfb.cjs +1049 -0
- package/dist/{subtractValueQuantities-DfZg6oiG.js → subtractValueQuantities-BuDJVxq6.js} +3 -22
- package/dist/{subtractValueQuantities-C8qDTtgH.cjs → subtractValueQuantities-CqR606HV.cjs} +2 -32
- package/dist/{sync-operation-utils-BrQyWFS_.cjs → sync-operation-utils--Z_IQfyW.cjs} +0 -66
- package/dist/{sync-operation-utils-CAaCGvEN.js → sync-operation-utils-BimBpvI3.js} +1 -37
- package/dist/token-color.vo-CItgoOjw.js +26 -0
- package/dist/token-color.vo-Ca4hUXfh.cjs +37 -0
- package/dist/token-id-mapper-BVau2RXa.js +16 -0
- package/dist/token-id-mapper-CSeLzM4o.cjs +18 -0
- package/dist/{token-id-mapper-pDaTxpw2.js → token-id-mapper-ClBeIdJR.js} +2 -2
- package/dist/{token-id-mapper-DYcd8hhQ.cjs → token-id-mapper-D0wFdbOy.cjs} +2 -2
- package/dist/types-BhzypKMS.cjs +15 -0
- package/dist/types-DTE1ctDB.js +10 -0
- package/dist/types-DXSxXGz0.js +12 -0
- package/dist/types-Dls6Z5gV.cjs +23 -0
- package/dist/{util-P4PX2muj.cjs → util-D1YlKzrc.cjs} +2 -2
- package/dist/{util-CQSJU0wT.js → util-DHxtzUzY.js} +2 -2
- package/dist/{utils-Bv4OHT4S.cjs → utils-DYf4iZKX.cjs} +7 -1
- package/dist/{utils-DrtzChYN.js → utils-DcnoETEP.js} +2 -2
- package/dist/utils-Du0YXRcU.cjs +112 -0
- package/dist/utils-fF_rnZe3.js +65 -0
- package/dist/v8Signatures-ClGpA8mS.cjs +71 -0
- package/dist/{vote-delegation-tx-builder-69gOEkCB.cjs → vote-delegation-tx-builder-BjZxCOd3.cjs} +9 -8
- package/dist/{vote-delegation-tx-builder-BRJ_pf-c.js → vote-delegation-tx-builder-DRJwPXkD.js} +9 -7
- package/dist/watch-FGE4B_Ge.js +13056 -0
- package/dist/watch-imlsRZDp.cjs +52207 -0
- package/package.json +95 -3
- package/dist/Address-4KjeDt_x.cjs +0 -17269
- package/dist/Address-_VPkf7Xh.js +0 -17101
- package/dist/account-guards.stable-BKyYPj4z.cjs +0 -10
- package/dist/account-guards.stable-BdmQ43vC.js +0 -5
- package/dist/init-BR9ZIbED.cjs +0 -378
- package/dist/init-B_k1RUN_.cjs +0 -21
- package/dist/init-Bs3b5ZQH.js +0 -378
- package/dist/init-ChfcrHgG2.cjs +0 -4354
- package/dist/init-D1uUMMpG.js +0 -19
- package/dist/init-DV1OSZiK.js +0 -4352
- package/dist/modules-cardano-BINzpXpk.js +0 -5454
- package/dist/modules-cardano-Dt8OwoQb.cjs +0 -5640
- package/dist/slice-Caf98m0d2.js +0 -107
- package/dist/slice-PM6llajQ2.cjs +0 -125
- /package/dist/{BigIntMath-CoJWXt1h.cjs → BigIntMath-CBciEQn2.cjs} +0 -0
- /package/dist/{BigIntMath-BWUJOsOW.js → BigIntMath-X3EniYDo.js} +0 -0
- /package/dist/{ChainId-sdLmlIRk.cjs → ChainId-CNPSU9nn.cjs} +0 -0
- /package/dist/{ChainId-CKbm87yQ.js → ChainId-CeoG8Sov.js} +0 -0
- /package/dist/{_polyfill-node.process-4fnlkbBi.cjs → _polyfill-node.process-5UxyjoHG.cjs} +0 -0
- /package/dist/{account-id.vo-Xpgnu-av.cjs → account-id.vo-DYZBZQsz.cjs} +0 -0
- /package/dist/{account-id.vo-DP0BtOoF.js → account-id.vo-KDTWJ-W5.js} +0 -0
- /package/dist/{actions-BNagEO6m.cjs → actions-BnHFVSr_.cjs} +0 -0
- /package/dist/{actions-BWTyAr7B.js → actions-Cwj0ApZf.js} +0 -0
- /package/dist/{asyncoption-po7-RiA5.cjs → asyncoption-CYcZNBRM.cjs} +0 -0
- /package/dist/{asyncoption-CzIVH5Y1.js → asyncoption-DZQGfznq.js} +0 -0
- /package/dist/{bignum.vo-DhhZ9HP1.js → bignum.vo-Co6tMH2q.js} +0 -0
- /package/dist/{bignum.vo-CpkrIXjH.cjs → bignum.vo-Du-bpvar.cjs} +0 -0
- /package/dist/{blockchain-network-id.vo-CbgrAY_K.js → blockchain-network-id.vo-C6Jowh8t.js} +0 -0
- /package/dist/{blockchain-network-id.vo-5iC6Kffo.cjs → blockchain-network-id.vo-DEQ14dYj.cjs} +0 -0
- /package/dist/{composite-signer-factory-DABpCe1_.js → composite-signer-factory-D9RWY-1V.js} +0 -0
- /package/dist/{composite-signer-factory-BizuNPP7.cjs → composite-signer-factory-v4Pxn8bA.cjs} +0 -0
- /package/dist/{error-ggOihIfv.cjs → error-B6wj9nPv.cjs} +0 -0
- /package/dist/{error-DHKO2iS4.js → error-CvEYL98P.js} +0 -0
- /package/dist/{esm-browser-DnXNvpcn.cjs → esm-browser-CZbMeVod.cjs} +0 -0
- /package/dist/{esm-browser-BBVQuyQv.js → esm-browser-DpAD_RKv.js} +0 -0
- /package/dist/{feature-flag-key.vo-DoGK5Bfh.js → feature-flag-key.vo-9reURsOQ.js} +0 -0
- /package/dist/{feature-flag-key.vo-CP1Z9s8e.cjs → feature-flag-key.vo-KTIdnzYX.cjs} +0 -0
- /package/dist/{first-state-of-status-Bx4-QQ5m.cjs → first-state-of-status-9ICeDNSa.cjs} +0 -0
- /package/dist/{first-state-of-status-D7XzEuSa.js → first-state-of-status-BscbKj_t.js} +0 -0
- /package/dist/{init-4319psUJ.cjs → init-BT67pd9x.cjs} +0 -0
- /package/dist/{init-AFUM1TSg.js → init-CHk1fvJ2.js} +0 -0
- /package/dist/{init-ZX90nEJe2.js → init-DIyNx6DZ.js} +0 -0
- /package/dist/{init-CTQ2g6Xt.js → init-DtxxFaCx.js} +0 -0
- /package/dist/{init-Dt1Xifg_2.cjs → init-J8QobR93.cjs} +0 -0
- /package/dist/{init-BNewLCqw.cjs → init-xzZPlQwB.cjs} +0 -0
- /package/dist/{is-redux-persist-state-DxJSsvxB.cjs → is-redux-persist-state-C5luvPEH.cjs} +0 -0
- /package/dist/{is-redux-persist-state-Bl2n4VMr.js → is-redux-persist-state-CjcqyCoh.js} +0 -0
- /package/dist/{isNotNil-CZxBMfL5.js → isNotNil-Be7gCY0m.js} +0 -0
- /package/dist/{isNotNil-C_SO1tcC.cjs → isNotNil-CrYIUFry.cjs} +0 -0
- /package/dist/{logging-BvMDKgl0.js → logging-BAMMfn5j.js} +0 -0
- /package/dist/{logging-Bh9ikph3.cjs → logging-CbxgIX9V.cjs} +0 -0
- /package/dist/{metadatum-B-sxBnSY.cjs → metadatum-BGvFqGPt.cjs} +0 -0
- /package/dist/{metadatum-Ego4jVas.js → metadatum-BVocMYy_.js} +0 -0
- /package/dist/{repo-slice-BzZQUTj8.cjs → repo-slice-BB_W-6OL.cjs} +0 -0
- /package/dist/{repo-slice-vCcQJotS.js → repo-slice-BQlssw9M.js} +0 -0
- /package/dist/{reselect-BPkMzw3k.js → reselect-JIgawvPe.js} +0 -0
- /package/dist/{serializable-BxFUShKY.js → serializable-F7OtYl8d.js} +0 -0
- /package/dist/{serializable-DWgkHhv_.cjs → serializable-n3UoxbZc.cjs} +0 -0
- /package/dist/{slice-DY-DNtSi.js → slice-5dGBAz6w.js} +0 -0
- /package/dist/{slice-BEFoeqgr.cjs → slice-BzJgg9FS.cjs} +0 -0
- /package/dist/{src-CPmX4KUh.cjs → src-CeBNkonz.cjs} +0 -0
- /package/dist/{src-XOZXPKxe.js → src-Cv1ifqbe.js} +0 -0
- /package/dist/{time-CQPt4FdU.js → time-ByoKevdZ.js} +0 -0
- /package/dist/{time-Blvoyh9G.cjs → time-qD7edGU0.cjs} +0 -0
- /package/dist/{time.vo-Xln4yGBU.js → time.vo-C17-tYq3.js} +0 -0
- /package/dist/{time.vo-rwWwJzmP.cjs → time.vo-TmYE-_Y2.cjs} +0 -0
- /package/dist/{toEmpty-CzmoZVLN.cjs → toEmpty-Db6V94Mf.cjs} +0 -0
- /package/dist/{toEmpty-DzLd-ZCi.js → toEmpty-Djj-QbpI.js} +0 -0
- /package/dist/{token-id.vo-l8fuSpem.cjs → token-id.vo-CZ622zcZ.cjs} +0 -0
- /package/dist/{token-id.vo-DMKSaMlc.js → token-id.vo-IDI9C_Qm.js} +0 -0
- /package/dist/{types-B61DQoFW.js → types-By-XeXWg.js} +0 -0
- /package/dist/{types-CUC-Kcqh.cjs → types-Cn6WlQV6.cjs} +0 -0
- /package/dist/{util-BV3iGOrz.cjs → util-Cp1h58uD.cjs} +0 -0
- /package/dist/{util-BsQKLorV.js → util-DHppXj7U.js} +0 -0
- /package/dist/{util-selector-CKIyoAOz.js → util-selector-BWmHpo92.js} +0 -0
- /package/dist/{util-selector-C9H5RsNw.cjs → util-selector-glXkO-jR.cjs} +0 -0
- /package/dist/{while-active-CNXeLxre.js → while-active-CDBnUlQA.js} +0 -0
- /package/dist/{while-active-BsDWSNrO.cjs → while-active-I2TlHtm7.cjs} +0 -0
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
import { Bt as AssetName, Vt as PolicyId, Zt as Hash28ByteBase16, c as EnterpriseAddress, nt as PlutusData, r as CredentialType, zt as AssetId } from "./Address-_c_-9hLC.js";
|
|
2
|
+
import { b as custodyRecipientToAddress, c as isCustodyLovelaceAsset, d as parseCustodyAccountTokenName, f as decodeCustodyAccountState, h as decodeCustodyStateLogic, o as isCustodyGrantCurrent, p as decodeCustodyGrant, s as isCustodyGrantExpired, t as minAdaRequired } from "./fees-6C2uEWFK.js";
|
|
3
|
+
import { l as findCustodyContractVersion, u as findCustodyLogic } from "./hex-CGYJPK_Z.js";
|
|
4
|
+
//#region ../../packages/lib/cardano-custody/src/codecs/reserve.ts
|
|
5
|
+
/** The datum the upstream library writes on a reserve: constructor 0 with no fields. */
|
|
6
|
+
const RESERVE_DATUM_CBOR = "d87980";
|
|
7
|
+
/**
|
|
8
|
+
* Whether an inline datum is, byte for byte, the reserve datum `d87980`.
|
|
9
|
+
* Any datum makes a deposit an owner-only reserve; only this one has a known
|
|
10
|
+
* size, so a builder can spend such a reserve without a surprise in fee or
|
|
11
|
+
* minimum lovelace.
|
|
12
|
+
*/
|
|
13
|
+
const isCustodyReserveDatum = (datum) => PlutusData.fromCore(datum).toCbor() === RESERVE_DATUM_CBOR;
|
|
14
|
+
//#endregion
|
|
15
|
+
//#region ../../packages/lib/cardano-custody/src/classify.ts
|
|
16
|
+
/** The tokens of a value under a policy. */
|
|
17
|
+
const tokensUnder = (value, policyId) => [...value.assets?.entries() ?? []].filter(([assetId, quantity]) => quantity !== 0n && AssetId.getPolicyId(assetId) === policyId).map(([assetId]) => assetId);
|
|
18
|
+
/** Reads a UTxO that holds exactly one grant token of the account, in quantity one. */
|
|
19
|
+
const classifyGrant = (utxo, token, slot) => {
|
|
20
|
+
const [, output] = utxo;
|
|
21
|
+
if (output.value.assets?.size !== 1) return { anomaly: {
|
|
22
|
+
code: "grant-value-not-strict",
|
|
23
|
+
utxo,
|
|
24
|
+
slot
|
|
25
|
+
} };
|
|
26
|
+
if (output.datum === void 0) return { anomaly: {
|
|
27
|
+
code: "grant-datum-not-inline",
|
|
28
|
+
utxo,
|
|
29
|
+
slot
|
|
30
|
+
} };
|
|
31
|
+
const decoded = decodeCustodyGrant(output.datum);
|
|
32
|
+
if (!decoded.ok) return { anomaly: {
|
|
33
|
+
code: "grant-datum-malformed",
|
|
34
|
+
utxo,
|
|
35
|
+
slot,
|
|
36
|
+
error: decoded.error
|
|
37
|
+
} };
|
|
38
|
+
if (decoded.value.slot !== slot) return { anomaly: {
|
|
39
|
+
code: "grant-slot-mismatch",
|
|
40
|
+
utxo,
|
|
41
|
+
slot,
|
|
42
|
+
datumSlot: decoded.value.slot
|
|
43
|
+
} };
|
|
44
|
+
return { grant: {
|
|
45
|
+
utxo,
|
|
46
|
+
grant: decoded.value,
|
|
47
|
+
token
|
|
48
|
+
} };
|
|
49
|
+
};
|
|
50
|
+
/** The grant token and its slot, when the tokens are exactly one own grant token held once. */
|
|
51
|
+
const ownGrantToken = (account, value, tokens) => {
|
|
52
|
+
const [token] = tokens;
|
|
53
|
+
if (tokens.length !== 1 || value.assets?.get(token) !== 1n) return void 0;
|
|
54
|
+
const name = parseCustodyAccountTokenName(AssetId.getAssetName(token));
|
|
55
|
+
return name?.kind === "grant" && name.stakeScriptHash === account.stakeScriptHash ? {
|
|
56
|
+
token,
|
|
57
|
+
slot: name.slot
|
|
58
|
+
} : void 0;
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Sorts an account's UTxOs by kind. UTxOs not at the exact account address
|
|
62
|
+
* are ignored. It never throws: a UTxO that holds an account token in a
|
|
63
|
+
* shape the contract rules out is listed in `anomalies`.
|
|
64
|
+
*/
|
|
65
|
+
const classifyCustodyAccountUtxos = (account, utxos) => {
|
|
66
|
+
const policyId = PolicyId(account.accountValidatorHash);
|
|
67
|
+
const stateNft = AssetId.fromParts(policyId, AssetName(account.stakeScriptHash));
|
|
68
|
+
const controls = [];
|
|
69
|
+
const grants = [];
|
|
70
|
+
const own = [];
|
|
71
|
+
const foreign = [];
|
|
72
|
+
const funds = [];
|
|
73
|
+
const stranded = [];
|
|
74
|
+
const anomalies = [];
|
|
75
|
+
for (const utxo of utxos) {
|
|
76
|
+
const [, output] = utxo;
|
|
77
|
+
if (output.address !== account.address) continue;
|
|
78
|
+
const tokens = tokensUnder(output.value, policyId);
|
|
79
|
+
if (tokens.includes(stateNft)) controls.push(utxo);
|
|
80
|
+
else if (tokens.length > 0) {
|
|
81
|
+
const grantToken = ownGrantToken(account, output.value, tokens);
|
|
82
|
+
if (!grantToken) {
|
|
83
|
+
anomalies.push({
|
|
84
|
+
code: "unexpected-account-tokens",
|
|
85
|
+
utxo,
|
|
86
|
+
assetIds: tokens
|
|
87
|
+
});
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
const classified = classifyGrant(utxo, grantToken.token, grantToken.slot);
|
|
91
|
+
if ("grant" in classified) grants.push(classified.grant);
|
|
92
|
+
else anomalies.push(classified.anomaly);
|
|
93
|
+
} else if (output.datum !== void 0) (output.scriptReference === void 0 && isCustodyReserveDatum(output.datum) ? own : foreign).push(utxo);
|
|
94
|
+
else if (output.datumHash === void 0) funds.push(utxo);
|
|
95
|
+
else stranded.push(utxo);
|
|
96
|
+
}
|
|
97
|
+
grants.sort((a, b) => a.grant.slot < b.grant.slot ? -1 : a.grant.slot > b.grant.slot ? 1 : 0);
|
|
98
|
+
return {
|
|
99
|
+
controls,
|
|
100
|
+
grants,
|
|
101
|
+
reserves: {
|
|
102
|
+
own,
|
|
103
|
+
foreign
|
|
104
|
+
},
|
|
105
|
+
funds,
|
|
106
|
+
stranded,
|
|
107
|
+
anomalies
|
|
108
|
+
};
|
|
109
|
+
};
|
|
110
|
+
/**
|
|
111
|
+
* The liveness of a grant against a control state at `now`. A grant dead for
|
|
112
|
+
* several reasons takes the first of superseded, revoked and expired, so
|
|
113
|
+
* `expired` alone means a sweep needs a validity interval that starts after
|
|
114
|
+
* the expiry.
|
|
115
|
+
*
|
|
116
|
+
* @param now - POSIX milliseconds; a non-finite value counts as past every expiry
|
|
117
|
+
*/
|
|
118
|
+
const custodyGrantLiveness = (grant, state, now) => {
|
|
119
|
+
if (grant.generation < state.grantGeneration) return "superseded";
|
|
120
|
+
if (grant.generation > state.grantGeneration) return "future-generation";
|
|
121
|
+
if (!isCustodyGrantCurrent(grant, state)) return "revoked";
|
|
122
|
+
return isCustodyGrantExpired(grant, now) ? "expired" : "current";
|
|
123
|
+
};
|
|
124
|
+
//#endregion
|
|
125
|
+
//#region ../../packages/contract/cardano-context/src/custody/account-state.ts
|
|
126
|
+
/** Whether the account's contract version lists the logic in its catalogue. */
|
|
127
|
+
const isKnownLogic = (accountValidatorHash, logic) => {
|
|
128
|
+
const version = findCustodyContractVersion(accountValidatorHash);
|
|
129
|
+
return version.ok && findCustodyLogic(version.value, logic).ok;
|
|
130
|
+
};
|
|
131
|
+
/**
|
|
132
|
+
* Classifies a custody account's UTxOs by the rules of the custody contract
|
|
133
|
+
* and reads the control state.
|
|
134
|
+
*/
|
|
135
|
+
const classifyCardanoCustodyAccount = ({ account, utxos, withdrawableRewards, protocolParameters }) => {
|
|
136
|
+
const { controls, grants, reserves, funds, stranded, anomalies } = classifyCustodyAccountUtxos(account, utxos);
|
|
137
|
+
const holdings = {
|
|
138
|
+
funds,
|
|
139
|
+
reserves,
|
|
140
|
+
grants,
|
|
141
|
+
grantLockedLovelace: grants.reduce((total, { utxo: [, output] }) => total + output.value.coins, 0n),
|
|
142
|
+
stranded,
|
|
143
|
+
anomalies,
|
|
144
|
+
withdrawableRewards
|
|
145
|
+
};
|
|
146
|
+
if (controls.length === 0) return {
|
|
147
|
+
...holdings,
|
|
148
|
+
status: "notCreated"
|
|
149
|
+
};
|
|
150
|
+
const invalid = (reason) => ({
|
|
151
|
+
...holdings,
|
|
152
|
+
status: "invalid",
|
|
153
|
+
reason,
|
|
154
|
+
controlUtxos: controls
|
|
155
|
+
});
|
|
156
|
+
if (controls.length > 1) return invalid({ code: "multiple-control-utxos" });
|
|
157
|
+
const [controlUtxo] = controls;
|
|
158
|
+
const [, controlOutput] = controlUtxo;
|
|
159
|
+
if (controlOutput.datum === void 0) return invalid({ code: "missing-inline-datum" });
|
|
160
|
+
const logic = decodeCustodyStateLogic(controlOutput.datum);
|
|
161
|
+
if (!logic.ok) return invalid({
|
|
162
|
+
code: "undecodable-state",
|
|
163
|
+
error: logic.error
|
|
164
|
+
});
|
|
165
|
+
if (!isKnownLogic(account.accountValidatorHash, logic.value)) return invalid({
|
|
166
|
+
code: "unknown-logic",
|
|
167
|
+
logic: logic.value
|
|
168
|
+
});
|
|
169
|
+
const decoded = decodeCustodyAccountState(controlOutput.datum);
|
|
170
|
+
if (!decoded.ok) return invalid({
|
|
171
|
+
code: "undecodable-state",
|
|
172
|
+
error: decoded.error
|
|
173
|
+
});
|
|
174
|
+
const controlMinimumLovelace = minAdaRequired(controlOutput, BigInt(protocolParameters.coinsPerUtxoByte));
|
|
175
|
+
const controlLovelace = controlOutput.value.coins;
|
|
176
|
+
const deviceKeyHash = account.device?.keyHash;
|
|
177
|
+
return {
|
|
178
|
+
...holdings,
|
|
179
|
+
status: "live",
|
|
180
|
+
controlUtxo,
|
|
181
|
+
state: decoded.value,
|
|
182
|
+
controlMinimumLovelace,
|
|
183
|
+
controlHeadroomLovelace: controlLovelace > controlMinimumLovelace ? controlLovelace - controlMinimumLovelace : 0n,
|
|
184
|
+
...deviceKeyHash !== void 0 && { currentDeviceListed: decoded.value.devices.some((device) => device.toLowerCase() === deviceKeyHash.toLowerCase()) }
|
|
185
|
+
};
|
|
186
|
+
};
|
|
187
|
+
//#endregion
|
|
188
|
+
//#region ../../packages/contract/cardano-context/src/custody/build-transaction.ts
|
|
189
|
+
/**
|
|
190
|
+
* The most lovelace a grant spend's fee may take when the operation names
|
|
191
|
+
* no `feeBound`: 1,500,000 lovelace. The spend lowers the grant's remaining caps by its outputs
|
|
192
|
+
* and fee before the fee is final, so the bound is what the caps must leave
|
|
193
|
+
* room for.
|
|
194
|
+
*/
|
|
195
|
+
const CARDANO_CUSTODY_DEFAULT_GRANT_FEE_BOUND = 1500000n;
|
|
196
|
+
//#endregion
|
|
197
|
+
//#region ../../packages/contract/cardano-context/src/custody/grant-status.ts
|
|
198
|
+
/**
|
|
199
|
+
* Any key hash: an unrestricted grant pays out to any address, and an
|
|
200
|
+
* enterprise key address makes the smallest output.
|
|
201
|
+
*/
|
|
202
|
+
const ANY_KEY_HASH = Hash28ByteBase16("00".repeat(28));
|
|
203
|
+
/** The addresses a grant may pay out to, or one standing for any address. */
|
|
204
|
+
const payoutAddressesOf = ({ recipients }, networkId) => {
|
|
205
|
+
if (recipients.length === 0) return [EnterpriseAddress.fromCredentials(networkId, {
|
|
206
|
+
type: CredentialType.KeyHash,
|
|
207
|
+
hash: ANY_KEY_HASH
|
|
208
|
+
}).toAddress().toBech32()];
|
|
209
|
+
return recipients.flatMap((recipient) => {
|
|
210
|
+
const address = custodyRecipientToAddress(recipient, networkId);
|
|
211
|
+
return address.ok ? [address.value.toBech32()] : [];
|
|
212
|
+
});
|
|
213
|
+
};
|
|
214
|
+
/** The scope's token, or undefined when its policy id or name is malformed. */
|
|
215
|
+
const tokenOf = ({ asset }) => {
|
|
216
|
+
try {
|
|
217
|
+
return AssetId.fromParts(PolicyId(asset.policyId), AssetName(asset.assetName));
|
|
218
|
+
} catch {
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
};
|
|
222
|
+
const smallerOf = (a, b) => a < b ? a : b;
|
|
223
|
+
/**
|
|
224
|
+
* Whether a grant scope can no longer pay the smallest spend. That spend
|
|
225
|
+
* is one output to the cheapest address the grant allows, holding the
|
|
226
|
+
* ledger minimum lovelace, plus the fee bound. A lovelace grant draws both
|
|
227
|
+
* from its lovelace caps (`cap`, `perCallCap`). A token grant draws one
|
|
228
|
+
* token from its token caps and the lovelace from `lovelaceCap` and
|
|
229
|
+
* `lovelacePerCallCap`. A grant with no address it can pay is exhausted.
|
|
230
|
+
*/
|
|
231
|
+
const isCardanoCustodyGrantExhausted = (scope, { protocolParameters, networkId, feeBound = CARDANO_CUSTODY_DEFAULT_GRANT_FEE_BOUND }) => {
|
|
232
|
+
const isLovelace = isCustodyLovelaceAsset(scope.asset);
|
|
233
|
+
const token = isLovelace ? void 0 : tokenOf(scope);
|
|
234
|
+
if (!isLovelace && !token) return true;
|
|
235
|
+
const addresses = payoutAddressesOf(scope, networkId);
|
|
236
|
+
if (addresses.length === 0) return true;
|
|
237
|
+
const coinsPerUtxoByte = BigInt(protocolParameters.coinsPerUtxoByte);
|
|
238
|
+
const smallestLovelaceSpend = addresses.map((address) => minAdaRequired({
|
|
239
|
+
address,
|
|
240
|
+
value: {
|
|
241
|
+
coins: 0n,
|
|
242
|
+
...token && { assets: new Map([[token, 1n]]) }
|
|
243
|
+
}
|
|
244
|
+
}, coinsPerUtxoByte)).reduce(smallerOf) + feeBound;
|
|
245
|
+
if (isLovelace) return smallerOf(scope.cap, scope.perCallCap) < smallestLovelaceSpend;
|
|
246
|
+
return smallerOf(scope.cap, scope.perCallCap) < 1n || smallerOf(scope.lovelaceCap, scope.lovelacePerCallCap) < smallestLovelaceSpend;
|
|
247
|
+
};
|
|
248
|
+
const bySlot = ({ grant: a }, { grant: b }) => a.slot < b.slot ? -1 : a.slot > b.slot ? 1 : 0;
|
|
249
|
+
/**
|
|
250
|
+
* The status of a grant the confirmed view holds and the in-flight view
|
|
251
|
+
* keeps. `grant` is its in-flight version: an unsettled grant spend lowers
|
|
252
|
+
* its caps and changes nothing else.
|
|
253
|
+
*/
|
|
254
|
+
const confirmedGrantStatus = (grant, { confirmed, inFlight, now, ...pricing }) => {
|
|
255
|
+
const liveness = custodyGrantLiveness(grant, confirmed, now);
|
|
256
|
+
if (liveness === "revoked" || liveness === "superseded") return liveness;
|
|
257
|
+
if (liveness === "future-generation") return "pending";
|
|
258
|
+
const next = custodyGrantLiveness(grant, inFlight, now);
|
|
259
|
+
if (next === "revoked" || next === "superseded") return "revoking";
|
|
260
|
+
if (liveness === "expired") return "expired";
|
|
261
|
+
return isCardanoCustodyGrantExhausted(grant.scope, pricing) ? "exhausted" : "live";
|
|
262
|
+
};
|
|
263
|
+
/**
|
|
264
|
+
* The status of every grant UTxO of a custody account, in slot order.
|
|
265
|
+
* `inFlight` is the account after the submitted operations that have not
|
|
266
|
+
* settled; `confirmed` is the account on chain, absent while it has no
|
|
267
|
+
* confirmed control state. A grant is known by its slot, which no grant
|
|
268
|
+
* ever reuses. `now` is POSIX milliseconds: the time of the chain tip.
|
|
269
|
+
*
|
|
270
|
+
* A grant only the in-flight view holds is `pending`, and one only the
|
|
271
|
+
* confirmed view holds is `sweeping`. A grant both hold is judged against
|
|
272
|
+
* the confirmed state, and is `revoking` when the in-flight state kills it.
|
|
273
|
+
* Its listed version is the in-flight one, so an unsettled grant spend
|
|
274
|
+
* shows its lowered caps at once.
|
|
275
|
+
*/
|
|
276
|
+
const classifyCardanoCustodyGrants = ({ confirmed, inFlight, now, protocolParameters, networkId }) => {
|
|
277
|
+
const confirmedSlots = new Set(confirmed?.grants.map(({ grant }) => grant.slot));
|
|
278
|
+
const inFlightSlots = new Set(inFlight.grants.map(({ grant }) => grant.slot));
|
|
279
|
+
const kept = inFlight.grants.map((grantUtxo) => ({
|
|
280
|
+
...grantUtxo,
|
|
281
|
+
status: confirmed && confirmedSlots.has(grantUtxo.grant.slot) ? confirmedGrantStatus(grantUtxo.grant, {
|
|
282
|
+
confirmed: confirmed.state,
|
|
283
|
+
inFlight: inFlight.state,
|
|
284
|
+
now,
|
|
285
|
+
protocolParameters,
|
|
286
|
+
networkId
|
|
287
|
+
}) : "pending"
|
|
288
|
+
}));
|
|
289
|
+
const swept = (confirmed?.grants ?? []).filter(({ grant }) => !inFlightSlots.has(grant.slot)).map((grantUtxo) => ({
|
|
290
|
+
...grantUtxo,
|
|
291
|
+
status: "sweeping"
|
|
292
|
+
}));
|
|
293
|
+
return [...kept, ...swept].sort(bySlot);
|
|
294
|
+
};
|
|
295
|
+
//#endregion
|
|
296
|
+
export { classifyCustodyAccountUtxos as a, classifyCardanoCustodyAccount as i, isCardanoCustodyGrantExhausted as n, custodyGrantLiveness as o, CARDANO_CUSTODY_DEFAULT_GRANT_FEE_BOUND as r, isCustodyReserveDatum as s, classifyCardanoCustodyGrants as t };
|
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
const require_Address = require("./Address-AMKTo-dA.cjs");
|
|
2
|
+
const require_fees = require("./fees-DtC71fOx.cjs");
|
|
3
|
+
const require_hex = require("./hex-BVtOKJki.cjs");
|
|
4
|
+
//#region ../../packages/lib/cardano-custody/src/codecs/reserve.ts
|
|
5
|
+
/** The datum the upstream library writes on a reserve: constructor 0 with no fields. */
|
|
6
|
+
const RESERVE_DATUM_CBOR = "d87980";
|
|
7
|
+
/**
|
|
8
|
+
* Whether an inline datum is, byte for byte, the reserve datum `d87980`.
|
|
9
|
+
* Any datum makes a deposit an owner-only reserve; only this one has a known
|
|
10
|
+
* size, so a builder can spend such a reserve without a surprise in fee or
|
|
11
|
+
* minimum lovelace.
|
|
12
|
+
*/
|
|
13
|
+
const isCustodyReserveDatum = (datum) => require_Address.PlutusData.fromCore(datum).toCbor() === RESERVE_DATUM_CBOR;
|
|
14
|
+
//#endregion
|
|
15
|
+
//#region ../../packages/lib/cardano-custody/src/classify.ts
|
|
16
|
+
/** The tokens of a value under a policy. */
|
|
17
|
+
const tokensUnder = (value, policyId) => [...value.assets?.entries() ?? []].filter(([assetId, quantity]) => quantity !== 0n && require_Address.AssetId.getPolicyId(assetId) === policyId).map(([assetId]) => assetId);
|
|
18
|
+
/** Reads a UTxO that holds exactly one grant token of the account, in quantity one. */
|
|
19
|
+
const classifyGrant = (utxo, token, slot) => {
|
|
20
|
+
const [, output] = utxo;
|
|
21
|
+
if (output.value.assets?.size !== 1) return { anomaly: {
|
|
22
|
+
code: "grant-value-not-strict",
|
|
23
|
+
utxo,
|
|
24
|
+
slot
|
|
25
|
+
} };
|
|
26
|
+
if (output.datum === void 0) return { anomaly: {
|
|
27
|
+
code: "grant-datum-not-inline",
|
|
28
|
+
utxo,
|
|
29
|
+
slot
|
|
30
|
+
} };
|
|
31
|
+
const decoded = require_fees.decodeCustodyGrant(output.datum);
|
|
32
|
+
if (!decoded.ok) return { anomaly: {
|
|
33
|
+
code: "grant-datum-malformed",
|
|
34
|
+
utxo,
|
|
35
|
+
slot,
|
|
36
|
+
error: decoded.error
|
|
37
|
+
} };
|
|
38
|
+
if (decoded.value.slot !== slot) return { anomaly: {
|
|
39
|
+
code: "grant-slot-mismatch",
|
|
40
|
+
utxo,
|
|
41
|
+
slot,
|
|
42
|
+
datumSlot: decoded.value.slot
|
|
43
|
+
} };
|
|
44
|
+
return { grant: {
|
|
45
|
+
utxo,
|
|
46
|
+
grant: decoded.value,
|
|
47
|
+
token
|
|
48
|
+
} };
|
|
49
|
+
};
|
|
50
|
+
/** The grant token and its slot, when the tokens are exactly one own grant token held once. */
|
|
51
|
+
const ownGrantToken = (account, value, tokens) => {
|
|
52
|
+
const [token] = tokens;
|
|
53
|
+
if (tokens.length !== 1 || value.assets?.get(token) !== 1n) return void 0;
|
|
54
|
+
const name = require_fees.parseCustodyAccountTokenName(require_Address.AssetId.getAssetName(token));
|
|
55
|
+
return name?.kind === "grant" && name.stakeScriptHash === account.stakeScriptHash ? {
|
|
56
|
+
token,
|
|
57
|
+
slot: name.slot
|
|
58
|
+
} : void 0;
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Sorts an account's UTxOs by kind. UTxOs not at the exact account address
|
|
62
|
+
* are ignored. It never throws: a UTxO that holds an account token in a
|
|
63
|
+
* shape the contract rules out is listed in `anomalies`.
|
|
64
|
+
*/
|
|
65
|
+
const classifyCustodyAccountUtxos = (account, utxos) => {
|
|
66
|
+
const policyId = require_Address.PolicyId(account.accountValidatorHash);
|
|
67
|
+
const stateNft = require_Address.AssetId.fromParts(policyId, require_Address.AssetName(account.stakeScriptHash));
|
|
68
|
+
const controls = [];
|
|
69
|
+
const grants = [];
|
|
70
|
+
const own = [];
|
|
71
|
+
const foreign = [];
|
|
72
|
+
const funds = [];
|
|
73
|
+
const stranded = [];
|
|
74
|
+
const anomalies = [];
|
|
75
|
+
for (const utxo of utxos) {
|
|
76
|
+
const [, output] = utxo;
|
|
77
|
+
if (output.address !== account.address) continue;
|
|
78
|
+
const tokens = tokensUnder(output.value, policyId);
|
|
79
|
+
if (tokens.includes(stateNft)) controls.push(utxo);
|
|
80
|
+
else if (tokens.length > 0) {
|
|
81
|
+
const grantToken = ownGrantToken(account, output.value, tokens);
|
|
82
|
+
if (!grantToken) {
|
|
83
|
+
anomalies.push({
|
|
84
|
+
code: "unexpected-account-tokens",
|
|
85
|
+
utxo,
|
|
86
|
+
assetIds: tokens
|
|
87
|
+
});
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
const classified = classifyGrant(utxo, grantToken.token, grantToken.slot);
|
|
91
|
+
if ("grant" in classified) grants.push(classified.grant);
|
|
92
|
+
else anomalies.push(classified.anomaly);
|
|
93
|
+
} else if (output.datum !== void 0) (output.scriptReference === void 0 && isCustodyReserveDatum(output.datum) ? own : foreign).push(utxo);
|
|
94
|
+
else if (output.datumHash === void 0) funds.push(utxo);
|
|
95
|
+
else stranded.push(utxo);
|
|
96
|
+
}
|
|
97
|
+
grants.sort((a, b) => a.grant.slot < b.grant.slot ? -1 : a.grant.slot > b.grant.slot ? 1 : 0);
|
|
98
|
+
return {
|
|
99
|
+
controls,
|
|
100
|
+
grants,
|
|
101
|
+
reserves: {
|
|
102
|
+
own,
|
|
103
|
+
foreign
|
|
104
|
+
},
|
|
105
|
+
funds,
|
|
106
|
+
stranded,
|
|
107
|
+
anomalies
|
|
108
|
+
};
|
|
109
|
+
};
|
|
110
|
+
/**
|
|
111
|
+
* The liveness of a grant against a control state at `now`. A grant dead for
|
|
112
|
+
* several reasons takes the first of superseded, revoked and expired, so
|
|
113
|
+
* `expired` alone means a sweep needs a validity interval that starts after
|
|
114
|
+
* the expiry.
|
|
115
|
+
*
|
|
116
|
+
* @param now - POSIX milliseconds; a non-finite value counts as past every expiry
|
|
117
|
+
*/
|
|
118
|
+
const custodyGrantLiveness = (grant, state, now) => {
|
|
119
|
+
if (grant.generation < state.grantGeneration) return "superseded";
|
|
120
|
+
if (grant.generation > state.grantGeneration) return "future-generation";
|
|
121
|
+
if (!require_fees.isCustodyGrantCurrent(grant, state)) return "revoked";
|
|
122
|
+
return require_fees.isCustodyGrantExpired(grant, now) ? "expired" : "current";
|
|
123
|
+
};
|
|
124
|
+
//#endregion
|
|
125
|
+
//#region ../../packages/contract/cardano-context/src/custody/account-state.ts
|
|
126
|
+
/** Whether the account's contract version lists the logic in its catalogue. */
|
|
127
|
+
const isKnownLogic = (accountValidatorHash, logic) => {
|
|
128
|
+
const version = require_hex.findCustodyContractVersion(accountValidatorHash);
|
|
129
|
+
return version.ok && require_hex.findCustodyLogic(version.value, logic).ok;
|
|
130
|
+
};
|
|
131
|
+
/**
|
|
132
|
+
* Classifies a custody account's UTxOs by the rules of the custody contract
|
|
133
|
+
* and reads the control state.
|
|
134
|
+
*/
|
|
135
|
+
const classifyCardanoCustodyAccount = ({ account, utxos, withdrawableRewards, protocolParameters }) => {
|
|
136
|
+
const { controls, grants, reserves, funds, stranded, anomalies } = classifyCustodyAccountUtxos(account, utxos);
|
|
137
|
+
const holdings = {
|
|
138
|
+
funds,
|
|
139
|
+
reserves,
|
|
140
|
+
grants,
|
|
141
|
+
grantLockedLovelace: grants.reduce((total, { utxo: [, output] }) => total + output.value.coins, 0n),
|
|
142
|
+
stranded,
|
|
143
|
+
anomalies,
|
|
144
|
+
withdrawableRewards
|
|
145
|
+
};
|
|
146
|
+
if (controls.length === 0) return {
|
|
147
|
+
...holdings,
|
|
148
|
+
status: "notCreated"
|
|
149
|
+
};
|
|
150
|
+
const invalid = (reason) => ({
|
|
151
|
+
...holdings,
|
|
152
|
+
status: "invalid",
|
|
153
|
+
reason,
|
|
154
|
+
controlUtxos: controls
|
|
155
|
+
});
|
|
156
|
+
if (controls.length > 1) return invalid({ code: "multiple-control-utxos" });
|
|
157
|
+
const [controlUtxo] = controls;
|
|
158
|
+
const [, controlOutput] = controlUtxo;
|
|
159
|
+
if (controlOutput.datum === void 0) return invalid({ code: "missing-inline-datum" });
|
|
160
|
+
const logic = require_fees.decodeCustodyStateLogic(controlOutput.datum);
|
|
161
|
+
if (!logic.ok) return invalid({
|
|
162
|
+
code: "undecodable-state",
|
|
163
|
+
error: logic.error
|
|
164
|
+
});
|
|
165
|
+
if (!isKnownLogic(account.accountValidatorHash, logic.value)) return invalid({
|
|
166
|
+
code: "unknown-logic",
|
|
167
|
+
logic: logic.value
|
|
168
|
+
});
|
|
169
|
+
const decoded = require_fees.decodeCustodyAccountState(controlOutput.datum);
|
|
170
|
+
if (!decoded.ok) return invalid({
|
|
171
|
+
code: "undecodable-state",
|
|
172
|
+
error: decoded.error
|
|
173
|
+
});
|
|
174
|
+
const controlMinimumLovelace = require_fees.minAdaRequired(controlOutput, BigInt(protocolParameters.coinsPerUtxoByte));
|
|
175
|
+
const controlLovelace = controlOutput.value.coins;
|
|
176
|
+
const deviceKeyHash = account.device?.keyHash;
|
|
177
|
+
return {
|
|
178
|
+
...holdings,
|
|
179
|
+
status: "live",
|
|
180
|
+
controlUtxo,
|
|
181
|
+
state: decoded.value,
|
|
182
|
+
controlMinimumLovelace,
|
|
183
|
+
controlHeadroomLovelace: controlLovelace > controlMinimumLovelace ? controlLovelace - controlMinimumLovelace : 0n,
|
|
184
|
+
...deviceKeyHash !== void 0 && { currentDeviceListed: decoded.value.devices.some((device) => device.toLowerCase() === deviceKeyHash.toLowerCase()) }
|
|
185
|
+
};
|
|
186
|
+
};
|
|
187
|
+
//#endregion
|
|
188
|
+
//#region ../../packages/contract/cardano-context/src/custody/build-transaction.ts
|
|
189
|
+
/**
|
|
190
|
+
* The most lovelace a grant spend's fee may take when the operation names
|
|
191
|
+
* no `feeBound`: 1,500,000 lovelace. The spend lowers the grant's remaining caps by its outputs
|
|
192
|
+
* and fee before the fee is final, so the bound is what the caps must leave
|
|
193
|
+
* room for.
|
|
194
|
+
*/
|
|
195
|
+
const CARDANO_CUSTODY_DEFAULT_GRANT_FEE_BOUND = 1500000n;
|
|
196
|
+
//#endregion
|
|
197
|
+
//#region ../../packages/contract/cardano-context/src/custody/grant-status.ts
|
|
198
|
+
/**
|
|
199
|
+
* Any key hash: an unrestricted grant pays out to any address, and an
|
|
200
|
+
* enterprise key address makes the smallest output.
|
|
201
|
+
*/
|
|
202
|
+
const ANY_KEY_HASH = require_Address.Hash28ByteBase16("00".repeat(28));
|
|
203
|
+
/** The addresses a grant may pay out to, or one standing for any address. */
|
|
204
|
+
const payoutAddressesOf = ({ recipients }, networkId) => {
|
|
205
|
+
if (recipients.length === 0) return [require_Address.EnterpriseAddress.fromCredentials(networkId, {
|
|
206
|
+
type: require_Address.CredentialType.KeyHash,
|
|
207
|
+
hash: ANY_KEY_HASH
|
|
208
|
+
}).toAddress().toBech32()];
|
|
209
|
+
return recipients.flatMap((recipient) => {
|
|
210
|
+
const address = require_fees.custodyRecipientToAddress(recipient, networkId);
|
|
211
|
+
return address.ok ? [address.value.toBech32()] : [];
|
|
212
|
+
});
|
|
213
|
+
};
|
|
214
|
+
/** The scope's token, or undefined when its policy id or name is malformed. */
|
|
215
|
+
const tokenOf = ({ asset }) => {
|
|
216
|
+
try {
|
|
217
|
+
return require_Address.AssetId.fromParts(require_Address.PolicyId(asset.policyId), require_Address.AssetName(asset.assetName));
|
|
218
|
+
} catch {
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
};
|
|
222
|
+
const smallerOf = (a, b) => a < b ? a : b;
|
|
223
|
+
/**
|
|
224
|
+
* Whether a grant scope can no longer pay the smallest spend. That spend
|
|
225
|
+
* is one output to the cheapest address the grant allows, holding the
|
|
226
|
+
* ledger minimum lovelace, plus the fee bound. A lovelace grant draws both
|
|
227
|
+
* from its lovelace caps (`cap`, `perCallCap`). A token grant draws one
|
|
228
|
+
* token from its token caps and the lovelace from `lovelaceCap` and
|
|
229
|
+
* `lovelacePerCallCap`. A grant with no address it can pay is exhausted.
|
|
230
|
+
*/
|
|
231
|
+
const isCardanoCustodyGrantExhausted = (scope, { protocolParameters, networkId, feeBound = CARDANO_CUSTODY_DEFAULT_GRANT_FEE_BOUND }) => {
|
|
232
|
+
const isLovelace = require_fees.isCustodyLovelaceAsset(scope.asset);
|
|
233
|
+
const token = isLovelace ? void 0 : tokenOf(scope);
|
|
234
|
+
if (!isLovelace && !token) return true;
|
|
235
|
+
const addresses = payoutAddressesOf(scope, networkId);
|
|
236
|
+
if (addresses.length === 0) return true;
|
|
237
|
+
const coinsPerUtxoByte = BigInt(protocolParameters.coinsPerUtxoByte);
|
|
238
|
+
const smallestLovelaceSpend = addresses.map((address) => require_fees.minAdaRequired({
|
|
239
|
+
address,
|
|
240
|
+
value: {
|
|
241
|
+
coins: 0n,
|
|
242
|
+
...token && { assets: new Map([[token, 1n]]) }
|
|
243
|
+
}
|
|
244
|
+
}, coinsPerUtxoByte)).reduce(smallerOf) + feeBound;
|
|
245
|
+
if (isLovelace) return smallerOf(scope.cap, scope.perCallCap) < smallestLovelaceSpend;
|
|
246
|
+
return smallerOf(scope.cap, scope.perCallCap) < 1n || smallerOf(scope.lovelaceCap, scope.lovelacePerCallCap) < smallestLovelaceSpend;
|
|
247
|
+
};
|
|
248
|
+
const bySlot = ({ grant: a }, { grant: b }) => a.slot < b.slot ? -1 : a.slot > b.slot ? 1 : 0;
|
|
249
|
+
/**
|
|
250
|
+
* The status of a grant the confirmed view holds and the in-flight view
|
|
251
|
+
* keeps. `grant` is its in-flight version: an unsettled grant spend lowers
|
|
252
|
+
* its caps and changes nothing else.
|
|
253
|
+
*/
|
|
254
|
+
const confirmedGrantStatus = (grant, { confirmed, inFlight, now, ...pricing }) => {
|
|
255
|
+
const liveness = custodyGrantLiveness(grant, confirmed, now);
|
|
256
|
+
if (liveness === "revoked" || liveness === "superseded") return liveness;
|
|
257
|
+
if (liveness === "future-generation") return "pending";
|
|
258
|
+
const next = custodyGrantLiveness(grant, inFlight, now);
|
|
259
|
+
if (next === "revoked" || next === "superseded") return "revoking";
|
|
260
|
+
if (liveness === "expired") return "expired";
|
|
261
|
+
return isCardanoCustodyGrantExhausted(grant.scope, pricing) ? "exhausted" : "live";
|
|
262
|
+
};
|
|
263
|
+
/**
|
|
264
|
+
* The status of every grant UTxO of a custody account, in slot order.
|
|
265
|
+
* `inFlight` is the account after the submitted operations that have not
|
|
266
|
+
* settled; `confirmed` is the account on chain, absent while it has no
|
|
267
|
+
* confirmed control state. A grant is known by its slot, which no grant
|
|
268
|
+
* ever reuses. `now` is POSIX milliseconds: the time of the chain tip.
|
|
269
|
+
*
|
|
270
|
+
* A grant only the in-flight view holds is `pending`, and one only the
|
|
271
|
+
* confirmed view holds is `sweeping`. A grant both hold is judged against
|
|
272
|
+
* the confirmed state, and is `revoking` when the in-flight state kills it.
|
|
273
|
+
* Its listed version is the in-flight one, so an unsettled grant spend
|
|
274
|
+
* shows its lowered caps at once.
|
|
275
|
+
*/
|
|
276
|
+
const classifyCardanoCustodyGrants = ({ confirmed, inFlight, now, protocolParameters, networkId }) => {
|
|
277
|
+
const confirmedSlots = new Set(confirmed?.grants.map(({ grant }) => grant.slot));
|
|
278
|
+
const inFlightSlots = new Set(inFlight.grants.map(({ grant }) => grant.slot));
|
|
279
|
+
const kept = inFlight.grants.map((grantUtxo) => ({
|
|
280
|
+
...grantUtxo,
|
|
281
|
+
status: confirmed && confirmedSlots.has(grantUtxo.grant.slot) ? confirmedGrantStatus(grantUtxo.grant, {
|
|
282
|
+
confirmed: confirmed.state,
|
|
283
|
+
inFlight: inFlight.state,
|
|
284
|
+
now,
|
|
285
|
+
protocolParameters,
|
|
286
|
+
networkId
|
|
287
|
+
}) : "pending"
|
|
288
|
+
}));
|
|
289
|
+
const swept = (confirmed?.grants ?? []).filter(({ grant }) => !inFlightSlots.has(grant.slot)).map((grantUtxo) => ({
|
|
290
|
+
...grantUtxo,
|
|
291
|
+
status: "sweeping"
|
|
292
|
+
}));
|
|
293
|
+
return [...kept, ...swept].sort(bySlot);
|
|
294
|
+
};
|
|
295
|
+
//#endregion
|
|
296
|
+
Object.defineProperty(exports, "CARDANO_CUSTODY_DEFAULT_GRANT_FEE_BOUND", {
|
|
297
|
+
enumerable: true,
|
|
298
|
+
get: function() {
|
|
299
|
+
return CARDANO_CUSTODY_DEFAULT_GRANT_FEE_BOUND;
|
|
300
|
+
}
|
|
301
|
+
});
|
|
302
|
+
Object.defineProperty(exports, "classifyCardanoCustodyAccount", {
|
|
303
|
+
enumerable: true,
|
|
304
|
+
get: function() {
|
|
305
|
+
return classifyCardanoCustodyAccount;
|
|
306
|
+
}
|
|
307
|
+
});
|
|
308
|
+
Object.defineProperty(exports, "classifyCardanoCustodyGrants", {
|
|
309
|
+
enumerable: true,
|
|
310
|
+
get: function() {
|
|
311
|
+
return classifyCardanoCustodyGrants;
|
|
312
|
+
}
|
|
313
|
+
});
|
|
314
|
+
Object.defineProperty(exports, "classifyCustodyAccountUtxos", {
|
|
315
|
+
enumerable: true,
|
|
316
|
+
get: function() {
|
|
317
|
+
return classifyCustodyAccountUtxos;
|
|
318
|
+
}
|
|
319
|
+
});
|
|
320
|
+
Object.defineProperty(exports, "custodyGrantLiveness", {
|
|
321
|
+
enumerable: true,
|
|
322
|
+
get: function() {
|
|
323
|
+
return custodyGrantLiveness;
|
|
324
|
+
}
|
|
325
|
+
});
|
|
326
|
+
Object.defineProperty(exports, "isCardanoCustodyGrantExhausted", {
|
|
327
|
+
enumerable: true,
|
|
328
|
+
get: function() {
|
|
329
|
+
return isCardanoCustodyGrantExhausted;
|
|
330
|
+
}
|
|
331
|
+
});
|
|
332
|
+
Object.defineProperty(exports, "isCustodyReserveDatum", {
|
|
333
|
+
enumerable: true,
|
|
334
|
+
get: function() {
|
|
335
|
+
return isCustodyReserveDatum;
|
|
336
|
+
}
|
|
337
|
+
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
require("./chunk-9hOWP6kD.cjs");
|
|
2
|
+
require("./_polyfill-buffer-patch-BycQkEkK.cjs");
|
|
3
|
+
const require_grant_rules = require("./grant-rules-B7eDuD5G.cjs");
|
|
4
|
+
const require_grants = require("./grants-CIb6nOV7.cjs");
|
|
5
|
+
exports.assertIssueRules = require_grant_rules.assertIssueRules;
|
|
6
|
+
exports.circuitScope = require_grant_rules.circuitScope;
|
|
7
|
+
exports.deriveGrantId = require_grants.deriveGrantId;
|
|
8
|
+
exports.grantObjectCommit = require_grants.grantObjectCommit;
|
|
9
|
+
exports.granteePoint = require_grant_rules.granteePoint;
|
|
10
|
+
exports.issueGrantBinding = require_grants.issueGrantBinding;
|
|
11
|
+
exports.originHash = require_grants.originHash;
|
|
12
|
+
exports.prepareIssueGrant = require_grants.prepareIssueGrant;
|
|
13
|
+
exports.prepareRevokeAllGrants = require_grants.prepareRevokeAllGrants;
|
|
14
|
+
exports.prepareRevokeGrant = require_grants.prepareRevokeGrant;
|
|
15
|
+
exports.scopeArgs = require_grants.scopeArgs;
|
|
16
|
+
exports.scopeDigest = require_grants.scopeDigest;
|