@laceio/sdk 0.1.1 → 0.1.2-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/{TransactionBuilder-DrB3NVTi.cjs → TransactionBuilder-CCjOn7NA.cjs} +42 -0
- package/dist/{TransactionBuilder-V6aLx4SV.js → TransactionBuilder-CIzdw18M.js} +1 -1
- package/dist/{_polyfill-buffer-patch-BnPVerlG.cjs → _polyfill-buffer-patch-CM8X7JiY.cjs} +21 -2
- package/dist/_polyfill-buffer-patch-yNxN4d5E.js +1467 -0
- package/dist/_web-crypto-random-bytes-Bo-GTcRS.js +197 -0
- package/dist/acc-module-4iIUv6My.cjs +27654 -0
- package/dist/acc-module-Cmj8EsIb.js +27624 -0
- package/dist/account-BOQruszJ.js +6 -0
- package/dist/account-BUOj4pYJ.cjs +11 -0
- package/dist/account-call-7wnopBq0.cjs +5 -0
- package/dist/account-call-B9d_2Xwi.js +4 -0
- package/dist/account-call-Bd4Rpbvt.cjs +323 -0
- package/dist/account-call-C3CkDqEC.js +276 -0
- package/dist/account-guards-BtjTGxDZ.cjs +42 -0
- package/dist/account-guards-D9Lu5T3W.js +36 -0
- package/dist/account-tokens-DvkOFVON.js +16 -0
- package/dist/account-tokens-nwcvwLu4.cjs +21 -0
- package/dist/{activity-type.stable-BJEfeLxL.cjs → activity-type-Ch6ljxBy.cjs} +2 -1
- package/dist/{activity-type.stable-C76_hWd7.js → activity-type-GsJGWs-3.js} +2 -1
- package/dist/address-B9ntKL8K.js +13761 -0
- package/dist/address-BXp-mY8H.cjs +11270 -0
- package/dist/{address-book-address-validator-DIUolI-s.js → address-book-address-validator-0J9XAADH.js} +2 -2
- package/dist/address-book-address-validator-DK0dnsRS.cjs +41 -0
- package/dist/address-book-address-validator-Di_ywo8M.js +39 -0
- package/dist/{address-book-address-validator-DNwQGlOB.cjs → address-book-address-validator-Dte_YQ2L.cjs} +2 -2
- package/dist/artefact-loader-BWWYAD7E.cjs +183 -0
- package/dist/artefact-loader-Dik4HIfv.js +160 -0
- package/dist/auto-dismiss-failure-on-success-C-qoJuid.cjs +37 -0
- package/dist/auto-dismiss-failure-on-success-s8MGDEIu.js +31 -0
- package/dist/bip32-D6wd_QMn.cjs +3851 -0
- package/dist/bitcoin-data-provider-BYPSmuZS.js +21 -0
- package/dist/bitcoin-data-provider-w1oEDSU3.cjs +26 -0
- package/dist/bitcoin.cjs +45 -0
- package/dist/bitcoin.d.ts +29906 -1
- package/dist/bitcoin.js +20 -0
- package/dist/{blockfrost-tx-submit-provider-DPTrapz-.js → blockfrost-tx-submit-provider-CBWQ0wK9.js} +5 -157
- package/dist/{blockfrost-tx-submit-provider-BAIzV5o3.cjs → blockfrost-tx-submit-provider-CLNQ5ycR.cjs} +3 -167
- package/dist/bn-d3nSOIf7.cjs +2553 -0
- package/dist/browser-B1eMbDwh.js +7468 -0
- package/dist/bytes.vo-BB7_4JK6.js +23 -0
- package/dist/bytes.vo-BNRquqaO.cjs +34 -0
- package/dist/cardano-DfPwhwm-.js +3 -0
- package/dist/{cardano-network-id.vo-DSxrFk9S.cjs → cardano-network-id.vo-BEDPn6Li.cjs} +1 -1
- package/dist/{cardano-network-id.vo-CK1tNQDg.js → cardano-network-id.vo-Cfpvbod9.js} +1 -1
- package/dist/cardano.cjs +22 -18
- package/dist/cardano.d.ts +16956 -1716
- package/dist/cardano.js +16 -11
- package/dist/client-DXBLHk7K.cjs +808 -0
- package/dist/codecs-Cswkg7Tm.cjs +4051 -0
- package/dist/codecs-Dc1Krpbt.js +3903 -0
- package/dist/{const-C84qHkjp.js → const-BJfIK_G-.js} +4 -4
- package/dist/const-BhYOdznB.cjs +42 -0
- package/dist/const-BsnjG2_Q.cjs +32071 -0
- package/dist/const-CUnCl5U0.js +13 -0
- package/dist/{const-DXk2tFyv.js → const-CjmfjBP3.js} +1 -1
- package/dist/{const-BDEg2Trq.cjs → const-D-eZIS4n.cjs} +4 -4
- package/dist/const-D0CbQlo4.js +154 -0
- package/dist/{const-BY8B3_0_.cjs → const-iwzZEE_w.cjs} +1 -1
- package/dist/contract-1R86jhSw.js +171 -0
- package/dist/contract-MKLzYVkW.cjs +189 -0
- package/dist/create-add-accounts-Brqk84vF.js +102 -0
- package/dist/create-add-accounts-DzXIh7Ot.cjs +114 -0
- package/dist/{delegation-tx-builder-CRpLP6jH.cjs → delegation-tx-builder-CCjiakoy.cjs} +6 -6
- package/dist/{delegation-tx-builder-CGVqlaFE.js → delegation-tx-builder-DZFjHDS8.js} +5 -5
- package/dist/{deregistration-tx-builder-B-CrUyX6.js → deregistration-tx-builder-Bf6xAYp4.js} +5 -5
- package/dist/{deregistration-tx-builder-DZGwB4cz.cjs → deregistration-tx-builder-CQP35yex.cjs} +6 -6
- package/dist/device-commitment-hex.vo-5wFtQvDS.js +26 -0
- package/dist/device-commitment-hex.vo-CT3RmAug.cjs +31 -0
- package/dist/device-readers-CUHYoYOH.js +145 -0
- package/dist/device-readers-CdxS2btd.cjs +168 -0
- package/dist/device-readers-D_JZeNL2.cjs +8 -0
- package/dist/device-readers-DwSNCGPP.js +4 -0
- package/dist/dist-BMi5ZjEq.cjs +43175 -0
- package/dist/dist-BtIq4XFn.cjs +535 -0
- package/dist/dist-C3SHC_Ho.cjs +1394 -0
- package/dist/dist-CykEjYEX.cjs +3814 -0
- package/dist/dist-Dcsxh3be.cjs +3452 -0
- package/dist/dist-DqJfSlTd.cjs +4413 -0
- package/dist/dist-nTZ70qj7.cjs +1306 -0
- package/dist/{earn-rewards-tx-builder-BDbTDZmD.js → earn-rewards-tx-builder-Bsga3yFb.js} +5 -5
- package/dist/{earn-rewards-tx-builder-D5sUT5v8.cjs → earn-rewards-tx-builder-GuxofYns.cjs} +6 -6
- package/dist/enc-key-circuits-B7BjgUL9.js +13 -0
- package/dist/enc-key-circuits-BLrZrBVI.cjs +24 -0
- package/dist/english-Byb9M0E_.cjs +2057 -0
- package/dist/envelopes-BGoO_v8m.js +1621 -0
- package/dist/envelopes-CH25R-DN.cjs +1722 -0
- package/dist/errors-BIftM8ZN.cjs +688 -0
- package/dist/errors-DSq5wUwt.js +466 -0
- package/dist/esm-HBSUQw3w.js +384 -0
- package/dist/esm-LZuaZjMf.cjs +389 -0
- package/dist/experimental.cjs +7349 -0
- package/dist/experimental.d.ts +86273 -0
- package/dist/experimental.js +7184 -0
- package/dist/gated-call-CDCVZIK-.cjs +5 -0
- package/dist/gated-call-D-tT7P_t.js +722 -0
- package/dist/gated-call-D_VT2quk.js +4 -0
- package/dist/gated-call-DgJm1Mi_.cjs +787 -0
- package/dist/grant-circuits-DswmW3nI.cjs +71 -0
- package/dist/grant-circuits-Jxb5y1HW.js +42 -0
- package/dist/grant-rules-By07_eDi.js +6824 -0
- package/dist/grant-rules-BzVTWXS7.cjs +7099 -0
- package/dist/grant-spend-B3Md9L0n.js +215 -0
- package/dist/grant-spend-oWmzRsjH.cjs +217 -0
- package/dist/grant-status-B2y49iIu.js +2688 -0
- package/dist/grant-status-DOr3t_u8.cjs +2820 -0
- package/dist/grants-2BZ-qEVQ.js +5 -0
- package/dist/grants-BPoLSiMt.cjs +18 -0
- package/dist/grants-BoI5uwSF.cjs +272 -0
- package/dist/grants-CtofFu-e.js +213 -0
- package/dist/{group-cardano-addresses-by-account-B533oVXR.cjs → group-cardano-addresses-by-account-Bp0g4wEY.cjs} +3 -39
- package/dist/{group-cardano-addresses-by-account-RHKoEskR.js → group-cardano-addresses-by-account-SR8MMrZf.js} +5 -35
- package/dist/{guarded-transaction-signer-Bxl6_XNd.cjs → guarded-transaction-signer-MFpPg98D.cjs} +17 -18
- package/dist/{guarded-transaction-signer-CpKLj8Kp.js → guarded-transaction-signer-P6Rp1faj.js} +8 -15
- package/dist/hex-D9ITYbwt.cjs +263 -0
- package/dist/hex-mkXcV3pN.js +191 -0
- package/dist/http-client-B3N-TMxu.cjs +167 -0
- package/dist/http-client-TRlhDZGh.js +155 -0
- package/dist/identity-BMLuufva.cjs +263 -0
- package/dist/identity-DII6f-h7.js +233 -0
- package/dist/in-memory-wallet-integration-B2xzxORj.cjs +20741 -0
- package/dist/in-memory-wallet-integration-CBRiPjLO.js +130 -0
- package/dist/in-memory-wallet-integration-CULUB5Tf.cjs +240 -0
- package/dist/{in-memory-wallet-integration-D-qn65Kx.js → in-memory-wallet-integration-ChIOirMW.js} +5 -2
- package/dist/{in-memory-wallet-integration-Croiuopx.js → in-memory-wallet-integration-CljprQQV.js} +7 -104
- package/dist/{in-memory-wallet-integration-DVh9sRXa.cjs → in-memory-wallet-integration-Cm6P8sk6.cjs} +3 -2
- package/dist/in-memory-wallet-integration-TM9bBphA.js +20738 -0
- package/dist/{in-memory-wallet-integration-CnLYeX4-.cjs → in-memory-wallet-integration-t9I00R_V.cjs} +17 -108
- package/dist/index.cjs +84 -47
- package/dist/index.d.ts +37496 -10033
- package/dist/index.js +52 -24
- package/dist/{init-CLHuAMB-.js → init-0zzs9aqU.js} +4 -4
- package/dist/{init-U8c9yHYx.cjs → init-5KcGcBb5.cjs} +1 -1
- package/dist/init-8v_n8boO.js +1177 -0
- package/dist/{init-CigestoM.js → init-B3-1ghyx.js} +2 -2
- package/dist/init-B8U3ABhS.cjs +107 -0
- package/dist/init-BJn-8_hf.js +141 -0
- package/dist/init-BPU3j8sT.cjs +6 -0
- package/dist/init-BRzH6xu-2.cjs +2797 -0
- package/dist/init-BmzfDaKL.js +1142 -0
- package/dist/{init-C-jErzp5.cjs → init-BopV9ed4.cjs} +2 -2
- package/dist/init-BpHTq2R5.js +105 -0
- package/dist/init-BpSITBfF.js +39 -0
- package/dist/{init-DX4WyB0R.cjs → init-BrdVzxei.cjs} +3 -3
- package/dist/{init-LfyMo-sS.cjs → init-BwkU0ruo.cjs} +2 -2
- package/dist/{init-CB__aLD7.cjs → init-C-G32J12.cjs} +2 -2
- package/dist/init-C00gw1zi.js +422 -0
- package/dist/{init-TkPq_Ny_.js → init-C2RgrfZe.js} +1 -1
- package/dist/{init-DcYY6zMD.js → init-C8URA2OX.js} +1 -1
- package/dist/init-CDkRynJa.js +2796 -0
- package/dist/{init-Cg9XdAru.js → init-CNM5m7M2.js} +4 -4
- package/dist/init-CR7BfztQ.cjs +18 -0
- package/dist/{init-CSHwHnfg.cjs → init-CSDpdu0Q.cjs} +2 -2
- package/dist/{init-aJHl-7AO.js → init-CX0AMQUn.js} +2 -2
- package/dist/{init-FMGDET-9.js → init-CfTbSEKy.js} +259 -60
- package/dist/{init-CR6tpw1B.js → init-Cigr_tKx.js} +47 -43
- package/dist/init-CuW7rHNA.js +3584 -0
- package/dist/{init-CFYsq82V.js → init-CyAY4Lzl.js} +1 -1
- package/dist/init-Cz0rz5fU.cjs +3585 -0
- package/dist/{init-BKhH6mVR.cjs → init-D6BxBs7e.cjs} +1 -1
- package/dist/init-D8OeObDF.cjs +1141 -0
- package/dist/init-D9g1HXYf.cjs +40 -0
- package/dist/{init-CNLGJJRx.js → init-DA7zmptx.js} +1 -1
- package/dist/{init-DkIc5nqF.cjs → init-DFMiP2ZH.cjs} +1 -1
- package/dist/{init-zSzCjoor.js → init-DFjT8YvT.js} +4 -4
- package/dist/init-DGjXwWs2.cjs +143 -0
- package/dist/init-DHrCbpkW.cjs +121 -0
- package/dist/{init-B64zCLxG.cjs → init-DUF4ar8P.cjs} +4 -4
- package/dist/init-DlqJuHhl.js +119 -0
- package/dist/{init-y2Ra0vZP.js → init-Dnsv155v.js} +3 -3
- package/dist/init-DrRdf5sZ.cjs +1176 -0
- package/dist/init-DuYENxci.js +17 -0
- package/dist/{init-D6DBUsD3.cjs → init-Dv3zKj0r.cjs} +4 -4
- package/dist/{init-BtzMZ7Pk.cjs → init-Dy-05ktr.cjs} +1 -1
- package/dist/{init-BsCBAGWf.cjs → init-EP0CUWNK.cjs} +2 -2
- package/dist/{init-BJVU54pI.cjs → init-EhzD7a8i.cjs} +1 -1
- package/dist/{init-w9GEs73W.js → init-Fw89ZmrR.js} +2 -2
- package/dist/init-GsT2AEa4.cjs +424 -0
- package/dist/{init-Rxohwpmu.js → init-NCjgwCZy.js} +2 -2
- package/dist/{init-DxUHsN53.cjs → init-NdhG_VrF.cjs} +6 -6
- package/dist/{init-DDdhguVC.js → init-SZ01tARX2.js} +2 -2
- package/dist/{init-BAJJzBza.js → init-Y3mkB4XS.js} +2 -2
- package/dist/init-c4l6r-o-.js +5 -0
- package/dist/{init-Dku4b2lG.js → init-kEfUTuG2.js} +1 -1
- package/dist/{init-C7IeJwQR.cjs → init-lzHt4Cli.cjs} +256 -59
- package/dist/{init-anYu6XB7.cjs → init-rmt7-fQE.cjs} +2 -2
- package/dist/{init-C4Bkib9u.cjs → init-zU-_9Gsp.cjs} +67 -65
- package/dist/{is-retriable-error-BU0e3hVI.js → is-retriable-error-BUiVJDwH.js} +1 -1
- package/dist/{is-retriable-error-CeeuHqDa.cjs → is-retriable-error-Dpt860if.cjs} +1 -1
- package/dist/jubjub-authoriser-D7zDXu3V.js +86 -0
- package/dist/jubjub-authoriser-Dgu6o3Sv.cjs +87 -0
- package/dist/key-source-5oUBFiC7.cjs +583 -0
- package/dist/key-source-B08HukZg.js +2550 -0
- package/dist/keyDerivation-D3k9XyHg.js +4077 -0
- package/dist/keyDerivation-u0nBA93T.cjs +274 -0
- package/dist/{lace-context-CZcNHr4M.js → lace-context-BZciB9c7.js} +4 -4
- package/dist/{lace-context-fJTDghdp.cjs → lace-context-DgR6vLli.cjs} +4 -4
- package/dist/lib--iqvW4O_.js +2354 -0
- package/dist/lib-Yk6Upl5D.cjs +2359 -0
- package/dist/{libsodium-wrappers-UH0LaOUE.js → libsodium-wrappers-BhbOA8dQ.js} +3 -1647
- package/dist/midnight-account-id.vo-0x9X-r3l.cjs +10 -0
- package/dist/midnight-account-id.vo-DjCAGcqc.js +5 -0
- package/dist/midnight-engine-DpemplKO.js +5 -0
- package/dist/midnight-engine-xU1wotne.cjs +6 -0
- package/dist/midnight-wallet-DIsAlSn6.js +18 -0
- package/dist/midnight-wallet-XTZc2li7.cjs +24 -0
- package/dist/midnight.cjs +1408 -0
- package/dist/midnight.d.ts +28934 -0
- package/dist/midnight.js +1352 -0
- package/dist/modules-cardano-B1nDUWqy.js +995 -0
- package/dist/modules-cardano-BYeYHrRm.cjs +1108 -0
- package/dist/node-relay-DWe1U0w2.cjs +49 -0
- package/dist/node-relay-h4i5IlAQ.js +48 -0
- package/dist/outputs-Bd2yZVjx.js +720 -0
- package/dist/outputs-CJoQBIA2.cjs +990 -0
- package/dist/pbkdf2-CIW-oWrm.cjs +1337 -0
- package/dist/pending-operation-B0_P78Jo.cjs +26 -0
- package/dist/pending-operation-BIS6mpjB.js +21 -0
- package/dist/providers-FjhM47BH.cjs +388 -0
- package/dist/providers-WtiSuxFu.js +365 -0
- package/dist/redacted-BmE2aXqr.js +81 -0
- package/dist/redacted-CRZJLS3w.cjs +86 -0
- package/dist/{retry-config-DC5IMaH7.cjs → retry-config-BaCfVC1H.cjs} +1 -1
- package/dist/{retry-config-BcUmMS--.js → retry-config-Dmgt28wM.js} +1 -1
- package/dist/safe-buffer-B_vMqJWU.js +43 -0
- package/dist/safe-buffer-DYOwEfHB.cjs +48 -0
- package/dist/sdk-Cb-gZnS9.js +1241 -0
- package/dist/sdk-DffwmX8b.cjs +1439 -0
- package/dist/sdk-init-Bln9rFtn.js +4138 -0
- package/dist/sdk-init-CYViTJY_.cjs +3841 -0
- package/dist/{seam-cardano-CATqBEyK.js → seam-cardano-B_etH4F4.js} +1 -1
- package/dist/{bytes.vo-TgiwogWF.js → secret-box-DUR0ACYz.js} +3 -25
- package/dist/{bytes.vo-Ck5u40RA.cjs → secret-box-DrjLZuS1.cjs} +1 -35
- package/dist/send-proof-progress-C-ljq1x5.js +30 -0
- package/dist/send-proof-progress-vmsaSfbz.cjs +47 -0
- package/dist/side-effects-BnqYz7Nl.js +768 -0
- package/dist/side-effects-CngaeXi0.cjs +804 -0
- package/dist/sign-bitcoin-transaction-with-seed-D4z62-jV.js +147 -0
- package/dist/sign-bitcoin-transaction-with-seed-DsLYXnCY.cjs +158 -0
- package/dist/signer-3fk8lZtE.cjs +7 -0
- package/dist/signer-CsL28DrK.cjs +121 -0
- package/dist/signer-DGluibtn.js +92 -0
- package/dist/signer-RqB5pu3K.js +2 -0
- package/dist/signer-factory-BA7WFJVZ.js +282 -0
- package/dist/signer-factory-Cwd6o-lG.cjs +281 -0
- package/dist/{signer-factory-9URFliA5.js → signer-factory-DObB55D4.js} +6 -3
- package/dist/signer-factory-DhZiE03y.cjs +149 -0
- package/dist/{signer-factory-BWGUmnvm.cjs → signer-factory-Ds6G2AZk.cjs} +4 -3
- package/dist/signer-factory-hzSRaIw2.js +148 -0
- package/dist/{slice-CuHUaPZx.cjs → slice-7G2xxYKJ.cjs} +3 -3
- package/dist/{slice-DZmQJNV8.cjs → slice-B4CdYoPu.cjs} +2 -2
- package/dist/slice-BPNuHKfw.js +9091 -0
- package/dist/{slice-DGcNrbPR.cjs → slice-Bg6HEr3K.cjs} +4 -4
- package/dist/{slice-DtaO72qY.cjs → slice-Bs2aMERu.cjs} +3 -3
- package/dist/{slice-HeHCv3bl.cjs → slice-C34iOOUH.cjs} +7 -7
- package/dist/{slice-Do2R2CYW.cjs → slice-C9TT5KhY.cjs} +6 -6
- package/dist/{slice-eIwcwKHI.js → slice-CK07EBCo.js} +4 -4
- package/dist/{slice-CnyWevM9.js → slice-CU80pbiu.js} +3 -3
- package/dist/{slice-CobanYgn.js → slice-CwyYrh1H.js} +2 -2
- package/dist/slice-Czfp6t84.cjs +436 -0
- package/dist/{slice-d0p6-xj5.js → slice-D-9aPKG-.js} +6 -6
- package/dist/{slice-maaskdUn.js → slice-DBpJ2QGf.js} +6 -6
- package/dist/{slice-mxLQ_FeY.cjs → slice-DTZTiJle.cjs} +352 -39
- package/dist/{slice-zJ9XVYjZ.js → slice-Da426sf9.js} +1 -1
- package/dist/{slice-D11m2EKl.cjs → slice-DayJvMRD.cjs} +1 -1
- package/dist/slice-DnBWfA-k.cjs +9109 -0
- package/dist/{slice-oqm_r1cS.cjs → slice-DnG-yvpI.cjs} +2 -2
- package/dist/{slice-BNu73oBa.js → slice-DyNs7oWp.js} +2 -2
- package/dist/{slice-CB4SnzMm.js → slice-GwiiJRoq.js} +3 -3
- package/dist/slice-oWnc7YVD.js +412 -0
- package/dist/{slice-B2PhoWAg.js → slice-qt0uBExh.js} +325 -37
- package/dist/slice-t8Gzj55G2.cjs +106 -0
- package/dist/slice-t8Q1cHm-.js +88 -0
- package/dist/src-BDzYIksE.cjs +20637 -0
- package/dist/src-BFoefPv_.js +20755 -0
- package/dist/store-B1Lq3cEf.cjs +66 -0
- package/dist/store-DuBG8qh5.js +37 -0
- package/dist/submit-Bs77dPn_.cjs +413 -0
- package/dist/submit-DOv8Z0Vf.js +336 -0
- package/dist/submit-bitcoin-tx-D6oYgH5S.js +983 -0
- package/dist/submit-bitcoin-tx-goFuRL7K.cjs +1049 -0
- package/dist/{sync-operation-utils-BYXLO80m.js → sync-operation-utils-31iFLExW.js} +2 -38
- package/dist/{sync-operation-utils-SdPbwFoD.cjs → sync-operation-utils-COIZ66-I.cjs} +1 -67
- package/dist/token-id-mapper-Bnds3xKH.cjs +18 -0
- package/dist/{token-id-mapper-DsPAL6Nh.cjs → token-id-mapper-CVyQJUKY.cjs} +2 -2
- package/dist/token-id-mapper-CnKHQ8DV.js +16 -0
- package/dist/{token-id-mapper-B2ivlLv3.js → token-id-mapper-D29Ggv8h.js} +2 -2
- package/dist/tokens-Cevp7rdU.cjs +62 -0
- package/dist/tokens-Diw4MLRM.js +44 -0
- package/dist/types-B8uiJn-X.js +12 -0
- package/dist/types-BHC12eSa.js +33 -0
- package/dist/types-CJT6XF2c.js +10 -0
- package/dist/types-CLRUYpfe.cjs +23 -0
- package/dist/types-Cc3mC8u0.cjs +50 -0
- package/dist/types-DWbVZpnF.cjs +15 -0
- package/dist/unwrap-provider-result-BZSiwabU.js +32 -0
- package/dist/unwrap-provider-result-ZqfBsTkk.cjs +39 -0
- package/dist/{util-CGzqQ8IV.cjs → util-Bu4W5lF4.cjs} +1 -1
- package/dist/{util-BaLzwa32.js → util-Cp5cZkfK.js} +1 -1
- package/dist/{utils-o8aMjfln.js → utils-BfBEUvWA.js} +2 -2
- package/dist/utils-DFwzEvbv.js +65 -0
- package/dist/{utils-5JvjbqH3.cjs → utils-DsElZgCI.cjs} +7 -1
- package/dist/utils-IXxR-Djh.cjs +112 -0
- package/dist/v8Signatures-CO_Uloy7.cjs +71 -0
- package/dist/{vote-delegation-tx-builder-BpEMSti4.cjs → vote-delegation-tx-builder-BUg1S2Ep.cjs} +6 -6
- package/dist/{vote-delegation-tx-builder-CmKv6GoG.js → vote-delegation-tx-builder-C6FiS7zI.js} +5 -5
- package/dist/watch-CUEvcP-V.js +21997 -0
- package/dist/watch-DMF2s-II.cjs +52281 -0
- package/package.json +96 -4
- package/dist/account-guards.stable-B1DSSh9D.cjs +0 -10
- package/dist/account-guards.stable-JRQ5qx2V.js +0 -5
- package/dist/codecs-B7X9pAsK.cjs +0 -1945
- package/dist/codecs-CC1Xjntz.js +0 -1882
- package/dist/init-Bv53hpLM.js +0 -19
- package/dist/init-CRbjI7p1.js +0 -3494
- package/dist/init-DAna1KCg.cjs +0 -3495
- package/dist/init-DGe47B22.cjs +0 -364
- package/dist/init-DMtyvYfC.cjs +0 -21
- package/dist/init-TkPDD750.js +0 -363
- package/dist/modules-cardano-BDvuL4Xx.js +0 -5248
- package/dist/modules-cardano-D2G3De2P.cjs +0 -5432
- package/dist/slice-CGVHXHDt.cjs +0 -125
- package/dist/slice-DhvF7L6X.js +0 -107
- /package/dist/{account-id.vo-LvCBVn5r.cjs → account-id.vo-DwqFjK5u.cjs} +0 -0
- /package/dist/{account-id.vo-MYSI7YFm.js → account-id.vo-OPz2v-JZ.js} +0 -0
- /package/dist/{actions-DdGbj7c7.cjs → actions-B2BJ4RTy.cjs} +0 -0
- /package/dist/{actions-9QSQR-GB.js → actions-iLXdgL5Y.js} +0 -0
- /package/dist/{apply-vkey-witnesses-ClZbpk5w.js → apply-vkey-witnesses-BKx3lcs0.js} +0 -0
- /package/dist/{apply-vkey-witnesses-CLzVSWxl.cjs → apply-vkey-witnesses-ZnFS0jnJ.cjs} +0 -0
- /package/dist/{asyncoption-Cw07zPH7.js → asyncoption-CruEYOBI.js} +0 -0
- /package/dist/{asyncoption-DYoGuQfP.cjs → asyncoption-i0VbqVTq.cjs} +0 -0
- /package/dist/{bignum.vo-B0rK_PQ1.js → bignum.vo-CEXOIew0.js} +0 -0
- /package/dist/{bignum.vo-DsG3kNiZ.cjs → bignum.vo-hx2kuqlA.cjs} +0 -0
- /package/dist/{bip32ed25519-1ApqeAZk.cjs → bip32ed25519-B7Yat217.cjs} +0 -0
- /package/dist/{bip32ed25519-DetAdGwD.js → bip32ed25519-FQ8qvdcq.js} +0 -0
- /package/dist/{blake2b-DOEVc57D.js → blake2b-BiQTw3GC.js} +0 -0
- /package/dist/{blake2b-B9tftbvG.cjs → blake2b-DEeVUdKR.cjs} +0 -0
- /package/dist/{blockchain-network-id.vo-BXpZhvvQ.cjs → blockchain-network-id.vo-BAKEwGjG.cjs} +0 -0
- /package/dist/{blockchain-network-id.vo-DNRkuT5B.js → blockchain-network-id.vo-CiVykuqG.js} +0 -0
- /package/dist/{blockingWithLatestFrom-C5wp_uA-.js → blockingWithLatestFrom-Cd8c8EPG.js} +0 -0
- /package/dist/{blockingWithLatestFrom-DY8OPg0w.cjs → blockingWithLatestFrom-D8kBPBMX.cjs} +0 -0
- /package/dist/{cardano-network-id-to-network-type-CrZfUcyP.js → cardano-network-id-to-network-type-BWwzeEtM.js} +0 -0
- /package/dist/{cardano-network-id-to-network-type-BDTF-HmK.cjs → cardano-network-id-to-network-type-C0ufJOyE.cjs} +0 -0
- /package/dist/{cardano-tx-id.vo-BPhV-AmZ.cjs → cardano-tx-id.vo-TLjJZHCI.cjs} +0 -0
- /package/dist/{cardano-tx-id.vo-DF9NzZXk.js → cardano-tx-id.vo-eVnKuzlm.js} +0 -0
- /package/dist/{composite-signer-factory-_46QsNBz.js → composite-signer-factory-CR8YHA1y.js} +0 -0
- /package/dist/{composite-signer-factory-BpF1mIYA.cjs → composite-signer-factory-m5cVs9h_.cjs} +0 -0
- /package/dist/{error-CNIquqT5.cjs → error-Cb3EnD0u.cjs} +0 -0
- /package/dist/{error-BCp9NkPi.js → error-DIZOY2Lw.js} +0 -0
- /package/dist/{esm-browser-C93Q-EOI.js → esm-browser-MG97cre9.js} +0 -0
- /package/dist/{esm-browser-DTc9IK3D.cjs → esm-browser-bweqfBlL.cjs} +0 -0
- /package/dist/{feature-flag-key.vo-ofrB6ZVQ.js → feature-flag-key.vo-DN_-4-sG.js} +0 -0
- /package/dist/{feature-flag-key.vo-BPz-ZAp6.cjs → feature-flag-key.vo-RlfHL3hq.cjs} +0 -0
- /package/dist/{first-state-of-status-OROkXcRv.cjs → first-state-of-status-CbT7hPa4.cjs} +0 -0
- /package/dist/{first-state-of-status-DQnMT3ya.js → first-state-of-status-unPynOuM.js} +0 -0
- /package/dist/{init-Es3wHW7D.js → init-829HRYcz.js} +0 -0
- /package/dist/{init-CKipPE_c.js → init-A-VyGSNW2.js} +0 -0
- /package/dist/{init-DFQQ9dTW.cjs → init-Atisw4x2.cjs} +0 -0
- /package/dist/{init-C5CEZ1m0.cjs → init-BFcvPHL-.cjs} +0 -0
- /package/dist/{init-IAk_CkGa.cjs → init-BgNobbNq.cjs} +0 -0
- /package/dist/{init-cqN3uX2j.js → init-atCFur0v.js} +0 -0
- /package/dist/{is-redux-persist-state-CTn3WZVh.cjs → is-redux-persist-state-BCFnSm36.cjs} +0 -0
- /package/dist/{is-redux-persist-state-Cxcd0_bM.js → is-redux-persist-state-yBfq0h_E.js} +0 -0
- /package/dist/{key-value-store-8cMzeNyG.js → key-value-store--W3SrMaw.js} +0 -0
- /package/dist/{key-value-store-DUAepXQf.cjs → key-value-store-C2Xt5Emp.cjs} +0 -0
- /package/dist/{repo-slice-WxetRhMY.cjs → repo-slice-7X4AYYVm.cjs} +0 -0
- /package/dist/{repo-slice-DwyMhCR1.js → repo-slice-RxFm0zDZ.js} +0 -0
- /package/dist/{reselect-CRDqmQY9.cjs → reselect-Bd94u0K-.cjs} +0 -0
- /package/dist/{reselect-C06X06oX.js → reselect-CGoLzEPv.js} +0 -0
- /package/dist/{serializable-B8GahgE1.js → serializable-BHdKIgk3.js} +0 -0
- /package/dist/{serializable-CRdnFaLZ.cjs → serializable-BxHkoPdk.cjs} +0 -0
- /package/dist/{slice-D11FHQuQ.cjs → slice-BiRsDKOK.cjs} +0 -0
- /package/dist/{slice-Be7hj4Iy.js → slice-Bk0Sv05J.js} +0 -0
- /package/dist/{slice-FioKeHtA.cjs → slice-Dqw1ecum.cjs} +0 -0
- /package/dist/{slice-B87b52iM.js → slice-obCSLm1x.js} +0 -0
- /package/dist/{src-vq1wS9sZ.js → src-BlxEp6Mm.js} +0 -0
- /package/dist/{src-BTPIvlDI.cjs → src-Cqp0B2M_.cjs} +0 -0
- /package/dist/{time.vo-CQ8pSXz2.cjs → time.vo-D3wWRw9L.cjs} +0 -0
- /package/dist/{time.vo-DkYYGYp6.js → time.vo-tNheinXm.js} +0 -0
- /package/dist/{toEmpty-CgAl3097.js → toEmpty-8Zax1MPd.js} +0 -0
- /package/dist/{toEmpty-DAMmNB5r.cjs → toEmpty-CYAbupM4.cjs} +0 -0
- /package/dist/{token-id.vo-ClsroxHO.js → token-id.vo-Bvwhr3ZE.js} +0 -0
- /package/dist/{token-id.vo-BxG9TG0O.cjs → token-id.vo-DXv5uS9n.cjs} +0 -0
- /package/dist/{util-DxzlYNS5.js → util-C8a4fA9p.js} +0 -0
- /package/dist/{util-CmdAhheh.cjs → util-CzeB3hfa.cjs} +0 -0
- /package/dist/{util-selector-CcK-GAdE.js → util-selector-BSTsxgne.js} +0 -0
- /package/dist/{util-selector-BcAncU4L.cjs → util-selector-BWPH68_l.cjs} +0 -0
- /package/dist/{while-active-BpppWuCs.js → while-active-B0lWy_6l.js} +0 -0
- /package/dist/{while-active-Dhc2LwOm.cjs → while-active-Dsowp0Fi.cjs} +0 -0
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
import { n as HexBytes } from "./bytes.vo-BB7_4JK6.js";
|
|
2
|
+
import { D as MaintenanceUpdateRefusedError, E as MaintenanceAuthorityMismatchError, L as sha256 } from "./errors-DSq5wUwt.js";
|
|
3
|
+
import { t as GRANTEE_WITHDRAWAL_CIRCUITS } from "./grant-circuits-Jxb5y1HW.js";
|
|
4
|
+
//#region ../../packages/module/passport-account/src/acc/deployed-operations.ts
|
|
5
|
+
/** Every impure circuit of the jubjub arm, activation included. */
|
|
6
|
+
const JUBJUB_ARM_CIRCUITS = ["activate_initial_device", ...[
|
|
7
|
+
"withdraw_unshielded",
|
|
8
|
+
"append_inbox",
|
|
9
|
+
"withdraw_shielded",
|
|
10
|
+
"withdraw_shielded_to_contract",
|
|
11
|
+
"rotate_enc_key",
|
|
12
|
+
"add_device",
|
|
13
|
+
"remove_device"
|
|
14
|
+
]].map((base) => `${base}_with_jubjub`);
|
|
15
|
+
/** Permissionless deposit circuits shared by all arms. */
|
|
16
|
+
const SHARED_CIRCUITS = ["deposit_unshielded", "deposit_shielded"];
|
|
17
|
+
/**
|
|
18
|
+
* The scoped grant circuits: the lifecycle a jubjub device authorises,
|
|
19
|
+
* then the withdrawals of a jubjub grantee and of a secp256k1 grantee.
|
|
20
|
+
*/
|
|
21
|
+
const GRANT_CIRCUITS = [
|
|
22
|
+
...[
|
|
23
|
+
"issue_grant",
|
|
24
|
+
"revoke_grant",
|
|
25
|
+
"revoke_all_grants"
|
|
26
|
+
].map((base) => `${base}_with_jubjub`),
|
|
27
|
+
...GRANTEE_WITHDRAWAL_CIRCUITS["jubjub-schnorr"],
|
|
28
|
+
...GRANTEE_WITHDRAWAL_CIRCUITS["secp256k1-ecdsa"]
|
|
29
|
+
];
|
|
30
|
+
/**
|
|
31
|
+
* The complete operation set this module deploys, in installation order:
|
|
32
|
+
* the deposits, the jubjub device arm and the grant circuits. The device
|
|
33
|
+
* arm is jubjub only: the compiled contract also carries k256 and P-256
|
|
34
|
+
* device arms, their grant lifecycles and the recovery circuits, and none
|
|
35
|
+
* of their verifier keys are installed, so on an account deployed here
|
|
36
|
+
* only jubjub devices can ever authorise. A grant may name a jubjub or a
|
|
37
|
+
* secp256k1 grantee, so the withdrawals of both grantee arms are
|
|
38
|
+
* installed.
|
|
39
|
+
*/
|
|
40
|
+
const DEPLOYED_OPERATIONS = [
|
|
41
|
+
...SHARED_CIRCUITS,
|
|
42
|
+
...JUBJUB_ARM_CIRCUITS,
|
|
43
|
+
...GRANT_CIRCUITS
|
|
44
|
+
];
|
|
45
|
+
//#endregion
|
|
46
|
+
//#region ../../packages/module/passport-account/src/acc/verifier-key-insert.ts
|
|
47
|
+
/**
|
|
48
|
+
* The operation version the vendored contract's verifier keys belong to.
|
|
49
|
+
* The compiler this module pins emits keys under the v7 header, which the
|
|
50
|
+
* ledger files under operation version 'v4'; the midnight-js maintenance
|
|
51
|
+
* helpers still assume 'v3' and refuse these keys before a transaction
|
|
52
|
+
* exists, so the insert is built against the ledger directly.
|
|
53
|
+
*/
|
|
54
|
+
const VERIFIER_KEY_OPERATION_VERSION = "v4";
|
|
55
|
+
/** The header every verifier key of the pinned compiler starts with. */
|
|
56
|
+
const VERIFIER_KEY_HEADER = "midnight:verifier-key[v7]:";
|
|
57
|
+
const headerOf = (verifierKey) => new TextDecoder().decode(verifierKey.subarray(0, 26));
|
|
58
|
+
/**
|
|
59
|
+
* Refuses a verifier key under any other header, naming the operation.
|
|
60
|
+
* The ledger would refuse it too, but only once a transaction is being
|
|
61
|
+
* built, after the key has been downloaded and a wave planned around it.
|
|
62
|
+
*/
|
|
63
|
+
const assertVerifierKeyHeader = (operation, verifierKey) => {
|
|
64
|
+
const header = headerOf(verifierKey);
|
|
65
|
+
if (header !== VERIFIER_KEY_HEADER) throw new Error(`The verifier key of '${operation}' is not a ${VERIFIER_KEY_HEADER} key, got '${header}'`);
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* The maintenance update entry that installs one operation's verifier
|
|
69
|
+
* key under the operation version the pinned compiler's keys belong to.
|
|
70
|
+
*/
|
|
71
|
+
const verifierKeyInsert = (ledger, operation, verifierKey) => {
|
|
72
|
+
assertVerifierKeyHeader(operation, verifierKey);
|
|
73
|
+
return new ledger.VerifierKeyInsert(operation, new ledger.ContractOperationVersionedVerifierKey(VERIFIER_KEY_OPERATION_VERSION, verifierKey));
|
|
74
|
+
};
|
|
75
|
+
//#endregion
|
|
76
|
+
//#region ../../packages/module/passport-account/src/acc/maintenance-authority.ts
|
|
77
|
+
/**
|
|
78
|
+
* HKDF info of the maintenance authority secret a roster key derives. No
|
|
79
|
+
* account address enters the derivation: the roster key is already
|
|
80
|
+
* unique per account and is drawn before the address exists.
|
|
81
|
+
*/
|
|
82
|
+
const AUTHORITY_SECRET_INFO = new TextEncoder().encode("lace-passport:cma:v1");
|
|
83
|
+
/** Byte length of a BIP-340 secret key. */
|
|
84
|
+
const AUTHORITY_SECRET_LENGTH = 32;
|
|
85
|
+
/** Loads the ledger on first use, so a host that never signs an update never loads it. */
|
|
86
|
+
const loadMaintenanceLedger = async () => import("@midnightntwrk/ledger-v9");
|
|
87
|
+
/**
|
|
88
|
+
* The 32-byte authority secret HKDF-SHA256 derives from a roster key with
|
|
89
|
+
* an empty salt. The caller owns the bytes and zeroes them.
|
|
90
|
+
*/
|
|
91
|
+
const deriveAuthoritySecret = async (rosterKey) => {
|
|
92
|
+
const material = await crypto.subtle.importKey("raw", rosterKey, "HKDF", false, ["deriveBits"]);
|
|
93
|
+
return new Uint8Array(await crypto.subtle.deriveBits({
|
|
94
|
+
name: "HKDF",
|
|
95
|
+
hash: "SHA-256",
|
|
96
|
+
salt: new Uint8Array(0),
|
|
97
|
+
info: AUTHORITY_SECRET_INFO
|
|
98
|
+
}, material, AUTHORITY_SECRET_LENGTH * 8));
|
|
99
|
+
};
|
|
100
|
+
/**
|
|
101
|
+
* The ledger signing key over an authority secret.
|
|
102
|
+
*
|
|
103
|
+
* @throws when the secret is not a valid BIP-340 secret key, which a
|
|
104
|
+
* uniform 32-byte secret is only with negligible probability.
|
|
105
|
+
*/
|
|
106
|
+
const signingKeyOf = (ledger, secret) => {
|
|
107
|
+
try {
|
|
108
|
+
return ledger.signingKeyFromBip340(secret);
|
|
109
|
+
} catch {
|
|
110
|
+
throw new Error("The maintenance authority secret a roster key derives is not a valid BIP-340 secret key.");
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
/**
|
|
114
|
+
* Calls `run` with the Schnorr signing key of the maintenance authority a
|
|
115
|
+
* roster key derives. The derived secret is zeroed before this settles,
|
|
116
|
+
* on success and failure alike; the ledger signing key holds it as a hex
|
|
117
|
+
* string and in wasm memory, which the ledger API cannot zero. `run` must
|
|
118
|
+
* not retain the key.
|
|
119
|
+
*/
|
|
120
|
+
const withAuthorityKey = async (ledger, rosterKey, run) => {
|
|
121
|
+
const secret = await deriveAuthoritySecret(rosterKey);
|
|
122
|
+
try {
|
|
123
|
+
return run(signingKeyOf(ledger, secret));
|
|
124
|
+
} finally {
|
|
125
|
+
secret.fill(0);
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
/** The verifying key of the maintenance authority a roster key derives. */
|
|
129
|
+
const authorityOf = async (ledger, rosterKey) => withAuthorityKey(ledger, rosterKey, (key) => {
|
|
130
|
+
const { tag, value } = ledger.signatureVerifyingKey(key);
|
|
131
|
+
return {
|
|
132
|
+
tag,
|
|
133
|
+
value
|
|
134
|
+
};
|
|
135
|
+
});
|
|
136
|
+
/** Whether two verifying keys are the same key of the same kind. */
|
|
137
|
+
const isSameAuthority = (left, right) => left.tag === right.tag && left.value === right.value;
|
|
138
|
+
/**
|
|
139
|
+
* Holds one verifier key to the one the module pins for its operation:
|
|
140
|
+
* the operation must be in the deployed roster, the key's sha256 must be
|
|
141
|
+
* its pin and the key must carry the pinned compiler's header. The pins
|
|
142
|
+
* cover every compiled circuit, recovery and other device arms included,
|
|
143
|
+
* so the roster is what keeps an install to the operations this module
|
|
144
|
+
* deploys.
|
|
145
|
+
*
|
|
146
|
+
* @throws {@link MaintenanceUpdateRefusedError} for an operation outside
|
|
147
|
+
* the roster or without a pin, a key whose digest is not the pin, or a key
|
|
148
|
+
* under another header.
|
|
149
|
+
*/
|
|
150
|
+
const assertPinnedVerifierKey = (pins, { operation, verifierKey }) => {
|
|
151
|
+
if (!DEPLOYED_OPERATIONS.includes(operation)) throw new MaintenanceUpdateRefusedError(`'${operation}' is not an operation this module deploys.`);
|
|
152
|
+
const pin = pins[operation];
|
|
153
|
+
if (!pin) throw new MaintenanceUpdateRefusedError(`No verifier key is pinned for '${operation}'.`);
|
|
154
|
+
if (HexBytes.fromByteArray(sha256(verifierKey)) !== pin) throw new MaintenanceUpdateRefusedError(`The verifier key of '${operation}' is not the pinned one.`);
|
|
155
|
+
try {
|
|
156
|
+
assertVerifierKeyHeader(operation, verifierKey);
|
|
157
|
+
} catch (error) {
|
|
158
|
+
throw new MaintenanceUpdateRefusedError(error.message);
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
/**
|
|
162
|
+
* A copy of `changes` the caller no longer owns, so the values checked
|
|
163
|
+
* are exactly the values signed.
|
|
164
|
+
*/
|
|
165
|
+
const copyOfChanges = (changes) => changes.kind === "replace-authority" ? {
|
|
166
|
+
kind: "replace-authority",
|
|
167
|
+
authority: {
|
|
168
|
+
tag: changes.authority.tag,
|
|
169
|
+
value: changes.authority.value
|
|
170
|
+
}
|
|
171
|
+
} : {
|
|
172
|
+
kind: "insert-verifier-keys",
|
|
173
|
+
inserts: changes.inserts.map(({ operation, verifierKey }) => ({
|
|
174
|
+
operation,
|
|
175
|
+
verifierKey: verifierKey.slice()
|
|
176
|
+
}))
|
|
177
|
+
};
|
|
178
|
+
/**
|
|
179
|
+
* Copies the changes of a maintenance update and holds the copy to what
|
|
180
|
+
* the encryption key signs before any key is opened: a verifier key
|
|
181
|
+
* install names at least one key and every key is the pinned one for an
|
|
182
|
+
* operation of the deployed roster. A replace is held to the live roster
|
|
183
|
+
* key once the keyring is open. The copy is what must be signed.
|
|
184
|
+
*
|
|
185
|
+
* @throws {@link MaintenanceUpdateRefusedError} when the changes are not
|
|
186
|
+
* signable.
|
|
187
|
+
*/
|
|
188
|
+
const signableChanges = async (changes) => {
|
|
189
|
+
const copy = copyOfChanges(changes);
|
|
190
|
+
if (copy.kind === "replace-authority") return copy;
|
|
191
|
+
if (copy.inserts.length === 0) throw new MaintenanceUpdateRefusedError("A maintenance update must install at least one verifier key.");
|
|
192
|
+
const { expectedVk } = await import("./acc-module-Cmj8EsIb.js").then((n) => n.n);
|
|
193
|
+
for (const insert of copy.inserts) assertPinnedVerifierKey(expectedVk, insert);
|
|
194
|
+
return copy;
|
|
195
|
+
};
|
|
196
|
+
/**
|
|
197
|
+
* The ledger maintenance update `changes` describes against the account
|
|
198
|
+
* at `address` and the on-chain `counter`. A replace installs its
|
|
199
|
+
* authority as the sole member of a one-of-one committee under the next
|
|
200
|
+
* counter. Every flow that submits a signed update rebuilds it here, so
|
|
201
|
+
* it submits exactly the update that was signed.
|
|
202
|
+
*/
|
|
203
|
+
const maintenanceUpdateOf = (ledger, { address, counter, changes }) => new ledger.MaintenanceUpdate(address, changes.kind === "insert-verifier-keys" ? changes.inserts.map(({ operation, verifierKey }) => verifierKeyInsert(ledger, operation, verifierKey)) : [new ledger.ReplaceAuthority(new ledger.ContractMaintenanceAuthority([changes.authority], 1, counter + 1n))], counter);
|
|
204
|
+
/** The first of `rosterKeys` whose derived authority is `authority`, if any. */
|
|
205
|
+
const findRosterKey = async (ledger, rosterKeys, authority) => {
|
|
206
|
+
for (const rosterKey of rosterKeys) if (isSameAuthority(await authorityOf(ledger, rosterKey), authority)) return rosterKey;
|
|
207
|
+
};
|
|
208
|
+
/**
|
|
209
|
+
* The first of `rosterKeys` whose derived authority is `authority`.
|
|
210
|
+
*
|
|
211
|
+
* @throws {@link MaintenanceAuthorityMismatchError} when none is.
|
|
212
|
+
*/
|
|
213
|
+
const rosterKeyOf = async (ledger, rosterKeys, authority) => {
|
|
214
|
+
const rosterKey = await findRosterKey(ledger, rosterKeys, authority);
|
|
215
|
+
if (!rosterKey) throw new MaintenanceAuthorityMismatchError();
|
|
216
|
+
return rosterKey;
|
|
217
|
+
};
|
|
218
|
+
/** Whether any of `rosterKeys` derives the maintenance authority `authority`. */
|
|
219
|
+
const derivesAuthority = async (ledger, rosterKeys, authority) => await findRosterKey(ledger, rosterKeys, authority) !== void 0;
|
|
220
|
+
/**
|
|
221
|
+
* The authority a replace installs: the one the live roster key derives,
|
|
222
|
+
* which the replace must name.
|
|
223
|
+
*
|
|
224
|
+
* @throws {@link MaintenanceUpdateRefusedError} when it names another.
|
|
225
|
+
*/
|
|
226
|
+
const replacementOf = async (ledger, liveRosterKey, named) => {
|
|
227
|
+
const live = await authorityOf(ledger, liveRosterKey);
|
|
228
|
+
if (!isSameAuthority(live, named)) throw new MaintenanceUpdateRefusedError("A replace may only install the authority the live roster key derives.");
|
|
229
|
+
return live;
|
|
230
|
+
};
|
|
231
|
+
/** Signs the data of `update` with the authority `rosterKey` derives. */
|
|
232
|
+
const signUpdate = async (ledger, rosterKey, update) => withAuthorityKey(ledger, rosterKey, (key) => {
|
|
233
|
+
const { tag, value } = ledger.signData(key, update.dataToSign);
|
|
234
|
+
return {
|
|
235
|
+
tag,
|
|
236
|
+
value
|
|
237
|
+
};
|
|
238
|
+
});
|
|
239
|
+
/**
|
|
240
|
+
* Builds the maintenance update `changes` describes with
|
|
241
|
+
* {@link maintenanceUpdateOf} and signs its data with the authority one
|
|
242
|
+
* of `rosterKeys`, the live one first, derives when that authority is the
|
|
243
|
+
* on-chain `authority`. A replace may install only the authority the live
|
|
244
|
+
* roster key derives. The update is built here and never taken as bytes,
|
|
245
|
+
* so the authority signs nothing but the changes it was asked for. The
|
|
246
|
+
* changes must be the copy {@link signableChanges} answered.
|
|
247
|
+
*
|
|
248
|
+
* @throws {@link MaintenanceAuthorityMismatchError} when no roster key
|
|
249
|
+
* derives the on-chain authority.
|
|
250
|
+
* @throws {@link MaintenanceUpdateRefusedError} when a replace names
|
|
251
|
+
* another authority than the live roster key's.
|
|
252
|
+
*/
|
|
253
|
+
const signMaintenanceUpdate = async (ledger, { address, rosterKeys, authority, counter, changes }) => {
|
|
254
|
+
const signer = await rosterKeyOf(ledger, rosterKeys, authority);
|
|
255
|
+
const installed = changes.kind === "replace-authority" ? await replacementOf(ledger, rosterKeys[0], changes.authority) : void 0;
|
|
256
|
+
const signature = await signUpdate(ledger, signer, maintenanceUpdateOf(ledger, {
|
|
257
|
+
address,
|
|
258
|
+
counter,
|
|
259
|
+
changes
|
|
260
|
+
}));
|
|
261
|
+
return installed ? {
|
|
262
|
+
signature,
|
|
263
|
+
authority: installed
|
|
264
|
+
} : { signature };
|
|
265
|
+
};
|
|
266
|
+
//#endregion
|
|
267
|
+
//#region ../../packages/module/passport-account/src/infra/submit.ts
|
|
268
|
+
const defaultSleep = async (ms) => new Promise((resolve) => {
|
|
269
|
+
setTimeout(resolve, ms);
|
|
270
|
+
});
|
|
271
|
+
/**
|
|
272
|
+
* Node rejections caused by the wallet's dust view lagging the chain: a
|
|
273
|
+
* transaction built before the previous one landed can reuse a dust
|
|
274
|
+
* nullifier (DustDoubleSpend) or emit an empty dust action set
|
|
275
|
+
* (NotNormalized), and the node rejects it at submission.
|
|
276
|
+
*/
|
|
277
|
+
const DUST_RACE_PATTERN = /SubmissionError|Invalid Transaction|DustDoubleSpend|NotNormalized/;
|
|
278
|
+
const errorText = (error) => error instanceof Error ? `${error.name}: ${error.message}` : String(error);
|
|
279
|
+
/**
|
|
280
|
+
* Whether an error reports the verdict of a transaction that reached the
|
|
281
|
+
* chain. midnight-js raises these carrying the finalized data, and builds
|
|
282
|
+
* the message out of it, so the message can quote node text that reads
|
|
283
|
+
* like a dust-race rejection. Such a submission consumed its
|
|
284
|
+
* authorisation, so it must never be resubmitted whatever it says.
|
|
285
|
+
*/
|
|
286
|
+
const isFinalizedVerdict = (error) => typeof error === "object" && error !== null && "finalizedTxData" in error;
|
|
287
|
+
/**
|
|
288
|
+
* Runs a submission with a dust-race retry. A submission the node rejects
|
|
289
|
+
* changes no chain state and invalidates no signed authorisation, so
|
|
290
|
+
* waiting for the wallet's dust view to catch up and resubmitting is
|
|
291
|
+
* sound. Only the documented dust-race rejections are retried; any other
|
|
292
|
+
* error, or a dust race persisting past the retry budget, is rethrown.
|
|
293
|
+
*/
|
|
294
|
+
const submitWithDustRetry = async (submit, { sleep = defaultSleep, maxRetries = 3, retryDelayMs = 1e4 } = {}) => {
|
|
295
|
+
for (let attempt = 0;; attempt++) try {
|
|
296
|
+
return await submit();
|
|
297
|
+
} catch (error) {
|
|
298
|
+
if (!(!isFinalizedVerdict(error) && DUST_RACE_PATTERN.test(errorText(error))) || attempt >= maxRetries) throw error;
|
|
299
|
+
await sleep(retryDelayMs);
|
|
300
|
+
}
|
|
301
|
+
};
|
|
302
|
+
const defaultSubmit = async () => {
|
|
303
|
+
return (await import("@midnight-ntwrk/midnight-js-contracts")).submitTx;
|
|
304
|
+
};
|
|
305
|
+
/**
|
|
306
|
+
* Submits an unproven deployment or call transaction through midnight-js,
|
|
307
|
+
* wrapped in {@link submitWithDustRetry} so dust-race rejections rebuild
|
|
308
|
+
* and resubmit instead of failing the flow.
|
|
309
|
+
*/
|
|
310
|
+
const submitTx = async (providers, options, config = {}) => {
|
|
311
|
+
const { submit, ...retryOptions } = config;
|
|
312
|
+
const run = submit ?? await defaultSubmit();
|
|
313
|
+
return submitWithDustRetry(async () => run(providers, options), retryOptions);
|
|
314
|
+
};
|
|
315
|
+
const finalizedStatus = (finalized) => {
|
|
316
|
+
const data = finalized;
|
|
317
|
+
return data?.public?.status ?? data?.status;
|
|
318
|
+
};
|
|
319
|
+
/**
|
|
320
|
+
* Rejects a transaction that landed with a failing status. Such a
|
|
321
|
+
* submission resolves, but the circuit's effects were discarded, so
|
|
322
|
+
* nothing the call was meant to advance may be treated as done. A
|
|
323
|
+
* submission carrying no status is accepted: absence is not a failure
|
|
324
|
+
* verdict.
|
|
325
|
+
*
|
|
326
|
+
* Throwing here happens after {@link submitWithDustRetry} has resolved,
|
|
327
|
+
* and the message matches none of the dust-race patterns, so a status
|
|
328
|
+
* failure is never resubmitted: the transaction reached the chain, and a
|
|
329
|
+
* rebuild could present an authorisation the contract has consumed.
|
|
330
|
+
*/
|
|
331
|
+
const assertSubmitted = (label, finalized) => {
|
|
332
|
+
const status = finalizedStatus(finalized);
|
|
333
|
+
if (String(status).toLowerCase().includes("fail")) throw new Error(`${label} failed: ${JSON.stringify(status)}`);
|
|
334
|
+
};
|
|
335
|
+
//#endregion
|
|
336
|
+
export { derivesAuthority as a, maintenanceUpdateOf as c, assertVerifierKeyHeader as d, verifierKeyInsert as f, authorityOf as i, signMaintenanceUpdate as l, submitTx as n, isSameAuthority as o, DEPLOYED_OPERATIONS as p, submitWithDustRetry as r, loadMaintenanceLedger as s, assertSubmitted as t, signableChanges as u };
|