@nadohq/shared 0.1.0-alpha.4
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/README.md +2 -0
- package/dist/abis/Clearinghouse.cjs +891 -0
- package/dist/abis/Clearinghouse.cjs.map +1 -0
- package/dist/abis/Clearinghouse.d.cts +669 -0
- package/dist/abis/Clearinghouse.d.ts +669 -0
- package/dist/abis/Clearinghouse.js +868 -0
- package/dist/abis/Clearinghouse.js.map +1 -0
- package/dist/abis/ERC20.cjs +215 -0
- package/dist/abis/ERC20.cjs.map +1 -0
- package/dist/abis/ERC20.d.cts +143 -0
- package/dist/abis/ERC20.d.ts +143 -0
- package/dist/abis/ERC20.js +192 -0
- package/dist/abis/ERC20.js.map +1 -0
- package/dist/abis/Endpoint.cjs +589 -0
- package/dist/abis/Endpoint.cjs.map +1 -0
- package/dist/abis/Endpoint.d.cts +433 -0
- package/dist/abis/Endpoint.d.ts +433 -0
- package/dist/abis/Endpoint.js +566 -0
- package/dist/abis/Endpoint.js.map +1 -0
- package/dist/abis/MockERC20.cjs +341 -0
- package/dist/abis/MockERC20.cjs.map +1 -0
- package/dist/abis/MockERC20.d.cts +239 -0
- package/dist/abis/MockERC20.d.ts +239 -0
- package/dist/abis/MockERC20.js +318 -0
- package/dist/abis/MockERC20.js.map +1 -0
- package/dist/abis/PerpEngine.cjs +886 -0
- package/dist/abis/PerpEngine.cjs.map +1 -0
- package/dist/abis/PerpEngine.d.cts +661 -0
- package/dist/abis/PerpEngine.d.ts +661 -0
- package/dist/abis/PerpEngine.js +863 -0
- package/dist/abis/PerpEngine.js.map +1 -0
- package/dist/abis/Querier.cjs +1522 -0
- package/dist/abis/Querier.cjs.map +1 -0
- package/dist/abis/Querier.d.cts +1149 -0
- package/dist/abis/Querier.d.ts +1149 -0
- package/dist/abis/Querier.js +1499 -0
- package/dist/abis/Querier.js.map +1 -0
- package/dist/abis/SpotEngine.cjs +937 -0
- package/dist/abis/SpotEngine.cjs.map +1 -0
- package/dist/abis/SpotEngine.d.cts +701 -0
- package/dist/abis/SpotEngine.d.ts +701 -0
- package/dist/abis/SpotEngine.js +914 -0
- package/dist/abis/SpotEngine.js.map +1 -0
- package/dist/abis/WithdrawPool.cjs +307 -0
- package/dist/abis/WithdrawPool.cjs.map +1 -0
- package/dist/abis/WithdrawPool.d.cts +214 -0
- package/dist/abis/WithdrawPool.d.ts +214 -0
- package/dist/abis/WithdrawPool.js +284 -0
- package/dist/abis/WithdrawPool.js.map +1 -0
- package/dist/abis/index.cjs +41 -0
- package/dist/abis/index.cjs.map +1 -0
- package/dist/abis/index.d.cts +9 -0
- package/dist/abis/index.d.ts +9 -0
- package/dist/abis/index.js +11 -0
- package/dist/abis/index.js.map +1 -0
- package/dist/abis/nadoAbis.cjs +44 -0
- package/dist/abis/nadoAbis.cjs.map +1 -0
- package/dist/abis/nadoAbis.d.cts +3821 -0
- package/dist/abis/nadoAbis.d.ts +3821 -0
- package/dist/abis/nadoAbis.js +21 -0
- package/dist/abis/nadoAbis.js.map +1 -0
- package/dist/chunk-5WRI5ZAA.js +31 -0
- package/dist/chunk-5WRI5ZAA.js.map +1 -0
- package/dist/chunk-TUJ4HQKF.js +33 -0
- package/dist/chunk-TUJ4HQKF.js.map +1 -0
- package/dist/consts/chainEnvToChain.cjs +44 -0
- package/dist/consts/chainEnvToChain.cjs.map +1 -0
- package/dist/consts/chainEnvToChain.d.cts +388 -0
- package/dist/consts/chainEnvToChain.d.ts +388 -0
- package/dist/consts/chainEnvToChain.js +20 -0
- package/dist/consts/chainEnvToChain.js.map +1 -0
- package/dist/consts/index.cjs +27 -0
- package/dist/consts/index.cjs.map +1 -0
- package/dist/consts/index.d.cts +6 -0
- package/dist/consts/index.d.ts +6 -0
- package/dist/consts/index.js +4 -0
- package/dist/consts/index.js.map +1 -0
- package/dist/consts/productIds.cjs +34 -0
- package/dist/consts/productIds.cjs.map +1 -0
- package/dist/consts/productIds.d.cts +4 -0
- package/dist/consts/productIds.d.ts +4 -0
- package/dist/consts/productIds.js +10 -0
- package/dist/consts/productIds.js.map +1 -0
- package/dist/deployments/core/deployment.InkSepolia.json +13 -0
- package/dist/deployments/core/deployment.arbitrumOne.json +18 -0
- package/dist/deployments/core/deployment.localhost.json +18 -0
- package/dist/deployments/index.cjs +65 -0
- package/dist/deployments/index.cjs.map +1 -0
- package/dist/deployments/index.d.cts +13 -0
- package/dist/deployments/index.d.ts +13 -0
- package/dist/deployments/index.js +32 -0
- package/dist/deployments/index.js.map +1 -0
- package/dist/eip712/eip712ValueTypes.cjs +19 -0
- package/dist/eip712/eip712ValueTypes.cjs.map +1 -0
- package/dist/eip712/eip712ValueTypes.d.cts +48 -0
- package/dist/eip712/eip712ValueTypes.d.ts +48 -0
- package/dist/eip712/eip712ValueTypes.js +1 -0
- package/dist/eip712/eip712ValueTypes.js.map +1 -0
- package/dist/eip712/getNadoEIP712Domain.cjs +39 -0
- package/dist/eip712/getNadoEIP712Domain.cjs.map +1 -0
- package/dist/eip712/getNadoEIP712Domain.d.cts +11 -0
- package/dist/eip712/getNadoEIP712Domain.d.ts +11 -0
- package/dist/eip712/getNadoEIP712Domain.js +16 -0
- package/dist/eip712/getNadoEIP712Domain.js.map +1 -0
- package/dist/eip712/getNadoEIP712PrimaryType.cjs +35 -0
- package/dist/eip712/getNadoEIP712PrimaryType.cjs.map +1 -0
- package/dist/eip712/getNadoEIP712PrimaryType.d.cts +16 -0
- package/dist/eip712/getNadoEIP712PrimaryType.d.ts +16 -0
- package/dist/eip712/getNadoEIP712PrimaryType.js +12 -0
- package/dist/eip712/getNadoEIP712PrimaryType.js.map +1 -0
- package/dist/eip712/getNadoEIP712Types.cjs +129 -0
- package/dist/eip712/getNadoEIP712Types.cjs.map +1 -0
- package/dist/eip712/getNadoEIP712Types.d.cts +20 -0
- package/dist/eip712/getNadoEIP712Types.d.ts +20 -0
- package/dist/eip712/getNadoEIP712Types.js +106 -0
- package/dist/eip712/getNadoEIP712Types.js.map +1 -0
- package/dist/eip712/getNadoEIP712Values.cjs +206 -0
- package/dist/eip712/getNadoEIP712Values.cjs.map +1 -0
- package/dist/eip712/getNadoEIP712Values.d.cts +20 -0
- package/dist/eip712/getNadoEIP712Values.d.ts +20 -0
- package/dist/eip712/getNadoEIP712Values.js +183 -0
- package/dist/eip712/getNadoEIP712Values.js.map +1 -0
- package/dist/eip712/getOrderVerifyingAddress.cjs +34 -0
- package/dist/eip712/getOrderVerifyingAddress.cjs.map +1 -0
- package/dist/eip712/getOrderVerifyingAddress.d.cts +9 -0
- package/dist/eip712/getOrderVerifyingAddress.d.ts +9 -0
- package/dist/eip712/getOrderVerifyingAddress.js +11 -0
- package/dist/eip712/getOrderVerifyingAddress.js.map +1 -0
- package/dist/eip712/getSignedTransactionRequest.cjs +42 -0
- package/dist/eip712/getSignedTransactionRequest.cjs.map +1 -0
- package/dist/eip712/getSignedTransactionRequest.d.cts +19 -0
- package/dist/eip712/getSignedTransactionRequest.d.ts +19 -0
- package/dist/eip712/getSignedTransactionRequest.js +19 -0
- package/dist/eip712/getSignedTransactionRequest.js.map +1 -0
- package/dist/eip712/index.cjs +43 -0
- package/dist/eip712/index.cjs.map +1 -0
- package/dist/eip712/index.d.cts +17 -0
- package/dist/eip712/index.d.ts +17 -0
- package/dist/eip712/index.js +12 -0
- package/dist/eip712/index.js.map +1 -0
- package/dist/eip712/orderDigest.cjs +45 -0
- package/dist/eip712/orderDigest.cjs.map +1 -0
- package/dist/eip712/orderDigest.d.cts +20 -0
- package/dist/eip712/orderDigest.d.ts +20 -0
- package/dist/eip712/orderDigest.js +22 -0
- package/dist/eip712/orderDigest.js.map +1 -0
- package/dist/eip712/signableRequestType.cjs +19 -0
- package/dist/eip712/signableRequestType.cjs.map +1 -0
- package/dist/eip712/signableRequestType.d.cts +26 -0
- package/dist/eip712/signableRequestType.d.ts +26 -0
- package/dist/eip712/signableRequestType.js +1 -0
- package/dist/eip712/signableRequestType.js.map +1 -0
- package/dist/eip712/signatureParamTypes.cjs +19 -0
- package/dist/eip712/signatureParamTypes.cjs.map +1 -0
- package/dist/eip712/signatureParamTypes.d.cts +68 -0
- package/dist/eip712/signatureParamTypes.d.ts +68 -0
- package/dist/eip712/signatureParamTypes.js +1 -0
- package/dist/eip712/signatureParamTypes.js.map +1 -0
- package/dist/encoding/encoding.cjs +73 -0
- package/dist/encoding/encoding.cjs.map +1 -0
- package/dist/encoding/encoding.d.cts +11 -0
- package/dist/encoding/encoding.d.ts +11 -0
- package/dist/encoding/encoding.js +49 -0
- package/dist/encoding/encoding.js.map +1 -0
- package/dist/encoding/index.cjs +25 -0
- package/dist/encoding/index.cjs.map +1 -0
- package/dist/encoding/index.d.cts +7 -0
- package/dist/encoding/index.d.ts +7 -0
- package/dist/encoding/index.js +3 -0
- package/dist/encoding/index.js.map +1 -0
- package/dist/execute/approveDepositAllowance.cjs +38 -0
- package/dist/execute/approveDepositAllowance.cjs.map +1 -0
- package/dist/execute/approveDepositAllowance.d.cts +18 -0
- package/dist/execute/approveDepositAllowance.d.ts +18 -0
- package/dist/execute/approveDepositAllowance.js +15 -0
- package/dist/execute/approveDepositAllowance.js.map +1 -0
- package/dist/execute/depositCollateral.cjs +59 -0
- package/dist/execute/depositCollateral.cjs.map +1 -0
- package/dist/execute/depositCollateral.d.cts +21 -0
- package/dist/execute/depositCollateral.d.ts +21 -0
- package/dist/execute/depositCollateral.js +36 -0
- package/dist/execute/depositCollateral.js.map +1 -0
- package/dist/execute/index.cjs +27 -0
- package/dist/execute/index.cjs.map +1 -0
- package/dist/execute/index.d.cts +9 -0
- package/dist/execute/index.d.ts +9 -0
- package/dist/execute/index.js +4 -0
- package/dist/execute/index.js.map +1 -0
- package/dist/index.cjs +39 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +67 -0
- package/dist/index.d.ts +67 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/types/ChainEnv.cjs +44 -0
- package/dist/types/ChainEnv.cjs.map +1 -0
- package/dist/types/ChainEnv.d.cts +7 -0
- package/dist/types/ChainEnv.d.ts +7 -0
- package/dist/types/ChainEnv.js +18 -0
- package/dist/types/ChainEnv.js.map +1 -0
- package/dist/types/OrderExecutionType.cjs +19 -0
- package/dist/types/OrderExecutionType.cjs.map +1 -0
- package/dist/types/OrderExecutionType.d.cts +10 -0
- package/dist/types/OrderExecutionType.d.ts +10 -0
- package/dist/types/OrderExecutionType.js +1 -0
- package/dist/types/OrderExecutionType.js.map +1 -0
- package/dist/types/balanceTypes.cjs +19 -0
- package/dist/types/balanceTypes.cjs.map +1 -0
- package/dist/types/balanceTypes.d.cts +38 -0
- package/dist/types/balanceTypes.d.ts +38 -0
- package/dist/types/balanceTypes.js +1 -0
- package/dist/types/balanceTypes.js.map +1 -0
- package/dist/types/bytes.cjs +19 -0
- package/dist/types/bytes.cjs.map +1 -0
- package/dist/types/bytes.d.cts +3 -0
- package/dist/types/bytes.d.ts +3 -0
- package/dist/types/bytes.js +1 -0
- package/dist/types/bytes.js.map +1 -0
- package/dist/types/healthTypes.cjs +19 -0
- package/dist/types/healthTypes.cjs.map +1 -0
- package/dist/types/healthTypes.d.cts +15 -0
- package/dist/types/healthTypes.d.ts +15 -0
- package/dist/types/healthTypes.js +1 -0
- package/dist/types/healthTypes.js.map +1 -0
- package/dist/types/index.cjs +45 -0
- package/dist/types/index.cjs.map +1 -0
- package/dist/types/index.d.cts +15 -0
- package/dist/types/index.d.ts +15 -0
- package/dist/types/index.js +13 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/marketTypes.cjs +19 -0
- package/dist/types/marketTypes.cjs.map +1 -0
- package/dist/types/marketTypes.d.cts +31 -0
- package/dist/types/marketTypes.d.ts +31 -0
- package/dist/types/marketTypes.js +1 -0
- package/dist/types/marketTypes.js.map +1 -0
- package/dist/types/nadoContractTypes.cjs +19 -0
- package/dist/types/nadoContractTypes.cjs.map +1 -0
- package/dist/types/nadoContractTypes.d.cts +14 -0
- package/dist/types/nadoContractTypes.d.ts +14 -0
- package/dist/types/nadoContractTypes.js +1 -0
- package/dist/types/nadoContractTypes.js.map +1 -0
- package/dist/types/orderAppendixTypes.cjs +19 -0
- package/dist/types/orderAppendixTypes.cjs.map +1 -0
- package/dist/types/orderAppendixTypes.d.cts +54 -0
- package/dist/types/orderAppendixTypes.d.ts +54 -0
- package/dist/types/orderAppendixTypes.js +1 -0
- package/dist/types/orderAppendixTypes.js.map +1 -0
- package/dist/types/productTypes.cjs +47 -0
- package/dist/types/productTypes.cjs.map +1 -0
- package/dist/types/productTypes.d.cts +55 -0
- package/dist/types/productTypes.d.ts +55 -0
- package/dist/types/productTypes.js +23 -0
- package/dist/types/productTypes.js.map +1 -0
- package/dist/types/subaccountTypes.cjs +19 -0
- package/dist/types/subaccountTypes.cjs.map +1 -0
- package/dist/types/subaccountTypes.d.cts +13 -0
- package/dist/types/subaccountTypes.d.ts +13 -0
- package/dist/types/subaccountTypes.js +1 -0
- package/dist/types/subaccountTypes.js.map +1 -0
- package/dist/types/viemTypes.cjs +19 -0
- package/dist/types/viemTypes.cjs.map +1 -0
- package/dist/types/viemTypes.d.cts +23 -0
- package/dist/types/viemTypes.d.ts +23 -0
- package/dist/types/viemTypes.js +1 -0
- package/dist/types/viemTypes.js.map +1 -0
- package/dist/utils/asyncResult.cjs +36 -0
- package/dist/utils/asyncResult.cjs.map +1 -0
- package/dist/utils/asyncResult.d.cts +4 -0
- package/dist/utils/asyncResult.d.ts +4 -0
- package/dist/utils/asyncResult.js +13 -0
- package/dist/utils/asyncResult.js.map +1 -0
- package/dist/utils/balanceValue.cjs +43 -0
- package/dist/utils/balanceValue.cjs.map +1 -0
- package/dist/utils/balanceValue.d.cts +25 -0
- package/dist/utils/balanceValue.d.ts +25 -0
- package/dist/utils/balanceValue.js +18 -0
- package/dist/utils/balanceValue.js.map +1 -0
- package/dist/utils/bytes32.cjs +92 -0
- package/dist/utils/bytes32.cjs.map +1 -0
- package/dist/utils/bytes32.d.cts +47 -0
- package/dist/utils/bytes32.d.ts +47 -0
- package/dist/utils/bytes32.js +64 -0
- package/dist/utils/bytes32.js.map +1 -0
- package/dist/utils/bytes32.test.cjs +203 -0
- package/dist/utils/bytes32.test.cjs.map +1 -0
- package/dist/utils/bytes32.test.d.cts +2 -0
- package/dist/utils/bytes32.test.d.ts +2 -0
- package/dist/utils/bytes32.test.js +165 -0
- package/dist/utils/bytes32.test.js.map +1 -0
- package/dist/utils/createDeterministicLinkedSignerPrivateKey.cjs +56 -0
- package/dist/utils/createDeterministicLinkedSignerPrivateKey.cjs.map +1 -0
- package/dist/utils/createDeterministicLinkedSignerPrivateKey.d.cts +20 -0
- package/dist/utils/createDeterministicLinkedSignerPrivateKey.d.ts +20 -0
- package/dist/utils/createDeterministicLinkedSignerPrivateKey.js +33 -0
- package/dist/utils/createDeterministicLinkedSignerPrivateKey.js.map +1 -0
- package/dist/utils/errors/WalletNotProvidedError.cjs +36 -0
- package/dist/utils/errors/WalletNotProvidedError.cjs.map +1 -0
- package/dist/utils/errors/WalletNotProvidedError.d.cts +5 -0
- package/dist/utils/errors/WalletNotProvidedError.d.ts +5 -0
- package/dist/utils/errors/WalletNotProvidedError.js +13 -0
- package/dist/utils/errors/WalletNotProvidedError.js.map +1 -0
- package/dist/utils/errors/index.cjs +25 -0
- package/dist/utils/errors/index.cjs.map +1 -0
- package/dist/utils/errors/index.d.cts +1 -0
- package/dist/utils/errors/index.d.ts +1 -0
- package/dist/utils/errors/index.js +3 -0
- package/dist/utils/errors/index.js.map +1 -0
- package/dist/utils/getValidatedAddress.cjs +37 -0
- package/dist/utils/getValidatedAddress.cjs.map +1 -0
- package/dist/utils/getValidatedAddress.d.cts +9 -0
- package/dist/utils/getValidatedAddress.d.ts +9 -0
- package/dist/utils/getValidatedAddress.js +14 -0
- package/dist/utils/getValidatedAddress.js.map +1 -0
- package/dist/utils/getValidatedHex.cjs +37 -0
- package/dist/utils/getValidatedHex.cjs.map +1 -0
- package/dist/utils/getValidatedHex.d.cts +9 -0
- package/dist/utils/getValidatedHex.d.ts +9 -0
- package/dist/utils/getValidatedHex.js +14 -0
- package/dist/utils/getValidatedHex.js.map +1 -0
- package/dist/utils/index.cjs +53 -0
- package/dist/utils/index.cjs.map +1 -0
- package/dist/utils/index.d.cts +37 -0
- package/dist/utils/index.d.ts +37 -0
- package/dist/utils/index.js +17 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/interest.cjs +94 -0
- package/dist/utils/interest.cjs.map +1 -0
- package/dist/utils/interest.d.cts +50 -0
- package/dist/utils/interest.d.ts +50 -0
- package/dist/utils/interest.js +70 -0
- package/dist/utils/interest.js.map +1 -0
- package/dist/utils/isWriteableContract.cjs +33 -0
- package/dist/utils/isWriteableContract.cjs.map +1 -0
- package/dist/utils/isWriteableContract.d.cts +6 -0
- package/dist/utils/isWriteableContract.d.ts +6 -0
- package/dist/utils/isWriteableContract.js +10 -0
- package/dist/utils/isWriteableContract.js.map +1 -0
- package/dist/utils/mapValues.cjs +38 -0
- package/dist/utils/mapValues.cjs.map +1 -0
- package/dist/utils/mapValues.d.cts +6 -0
- package/dist/utils/mapValues.d.ts +6 -0
- package/dist/utils/mapValues.js +15 -0
- package/dist/utils/mapValues.js.map +1 -0
- package/dist/utils/math/BigDecimals.cjs +37 -0
- package/dist/utils/math/BigDecimals.cjs.map +1 -0
- package/dist/utils/math/BigDecimals.d.cts +8 -0
- package/dist/utils/math/BigDecimals.d.ts +8 -0
- package/dist/utils/math/BigDecimals.js +14 -0
- package/dist/utils/math/BigDecimals.js.map +1 -0
- package/dist/utils/math/bigDecimal.cjs +57 -0
- package/dist/utils/math/bigDecimal.cjs.map +1 -0
- package/dist/utils/math/bigDecimal.d.cts +18 -0
- package/dist/utils/math/bigDecimal.d.ts +18 -0
- package/dist/utils/math/bigDecimal.js +23 -0
- package/dist/utils/math/bigDecimal.js.map +1 -0
- package/dist/utils/math/clamp.cjs +38 -0
- package/dist/utils/math/clamp.cjs.map +1 -0
- package/dist/utils/math/clamp.d.cts +15 -0
- package/dist/utils/math/clamp.d.ts +15 -0
- package/dist/utils/math/clamp.js +15 -0
- package/dist/utils/math/clamp.js.map +1 -0
- package/dist/utils/math/decimalAdjustment.cjs +60 -0
- package/dist/utils/math/decimalAdjustment.cjs.map +1 -0
- package/dist/utils/math/decimalAdjustment.d.cts +31 -0
- package/dist/utils/math/decimalAdjustment.d.ts +31 -0
- package/dist/utils/math/decimalAdjustment.js +35 -0
- package/dist/utils/math/decimalAdjustment.js.map +1 -0
- package/dist/utils/math/index.cjs +37 -0
- package/dist/utils/math/index.cjs.map +1 -0
- package/dist/utils/math/index.d.cts +8 -0
- package/dist/utils/math/index.d.ts +8 -0
- package/dist/utils/math/index.js +9 -0
- package/dist/utils/math/index.js.map +1 -0
- package/dist/utils/math/sumBigDecimalBy.cjs +36 -0
- package/dist/utils/math/sumBigDecimalBy.cjs.map +1 -0
- package/dist/utils/math/sumBigDecimalBy.d.cts +10 -0
- package/dist/utils/math/sumBigDecimalBy.d.ts +10 -0
- package/dist/utils/math/sumBigDecimalBy.js +13 -0
- package/dist/utils/math/sumBigDecimalBy.js.map +1 -0
- package/dist/utils/math/toBigInt.cjs +34 -0
- package/dist/utils/math/toBigInt.cjs.map +1 -0
- package/dist/utils/math/toBigInt.d.cts +11 -0
- package/dist/utils/math/toBigInt.d.ts +11 -0
- package/dist/utils/math/toBigInt.js +11 -0
- package/dist/utils/math/toBigInt.js.map +1 -0
- package/dist/utils/math/toIntegerString.cjs +34 -0
- package/dist/utils/math/toIntegerString.cjs.map +1 -0
- package/dist/utils/math/toIntegerString.d.cts +11 -0
- package/dist/utils/math/toIntegerString.d.ts +11 -0
- package/dist/utils/math/toIntegerString.js +11 -0
- package/dist/utils/math/toIntegerString.js.map +1 -0
- package/dist/utils/orders/appendix/appendixTWAPValue.cjs +50 -0
- package/dist/utils/orders/appendix/appendixTWAPValue.cjs.map +1 -0
- package/dist/utils/orders/appendix/appendixTWAPValue.d.cts +31 -0
- package/dist/utils/orders/appendix/appendixTWAPValue.d.ts +31 -0
- package/dist/utils/orders/appendix/appendixTWAPValue.js +26 -0
- package/dist/utils/orders/appendix/appendixTWAPValue.js.map +1 -0
- package/dist/utils/orders/appendix/bitMaskValue.cjs +34 -0
- package/dist/utils/orders/appendix/bitMaskValue.cjs.map +1 -0
- package/dist/utils/orders/appendix/bitMaskValue.d.cts +10 -0
- package/dist/utils/orders/appendix/bitMaskValue.d.ts +10 -0
- package/dist/utils/orders/appendix/bitMaskValue.js +11 -0
- package/dist/utils/orders/appendix/bitMaskValue.js.map +1 -0
- package/dist/utils/orders/appendix/index.cjs +33 -0
- package/dist/utils/orders/appendix/index.cjs.map +1 -0
- package/dist/utils/orders/appendix/index.d.cts +9 -0
- package/dist/utils/orders/appendix/index.d.ts +9 -0
- package/dist/utils/orders/appendix/index.js +7 -0
- package/dist/utils/orders/appendix/index.js.map +1 -0
- package/dist/utils/orders/appendix/orderAppendix.test.cjs +165 -0
- package/dist/utils/orders/appendix/orderAppendix.test.cjs.map +1 -0
- package/dist/utils/orders/appendix/orderAppendix.test.d.cts +2 -0
- package/dist/utils/orders/appendix/orderAppendix.test.d.ts +2 -0
- package/dist/utils/orders/appendix/orderAppendix.test.js +120 -0
- package/dist/utils/orders/appendix/orderAppendix.test.js.map +1 -0
- package/dist/utils/orders/appendix/packOrderAppendix.cjs +88 -0
- package/dist/utils/orders/appendix/packOrderAppendix.cjs.map +1 -0
- package/dist/utils/orders/appendix/packOrderAppendix.d.cts +12 -0
- package/dist/utils/orders/appendix/packOrderAppendix.d.ts +12 -0
- package/dist/utils/orders/appendix/packOrderAppendix.js +65 -0
- package/dist/utils/orders/appendix/packOrderAppendix.js.map +1 -0
- package/dist/utils/orders/appendix/types.cjs +19 -0
- package/dist/utils/orders/appendix/types.cjs.map +1 -0
- package/dist/utils/orders/appendix/types.d.cts +19 -0
- package/dist/utils/orders/appendix/types.d.ts +19 -0
- package/dist/utils/orders/appendix/types.js +1 -0
- package/dist/utils/orders/appendix/types.js.map +1 -0
- package/dist/utils/orders/appendix/unpackOrderAppendix.cjs +106 -0
- package/dist/utils/orders/appendix/unpackOrderAppendix.cjs.map +1 -0
- package/dist/utils/orders/appendix/unpackOrderAppendix.d.cts +12 -0
- package/dist/utils/orders/appendix/unpackOrderAppendix.d.ts +12 -0
- package/dist/utils/orders/appendix/unpackOrderAppendix.js +83 -0
- package/dist/utils/orders/appendix/unpackOrderAppendix.js.map +1 -0
- package/dist/utils/orders/index.cjs +29 -0
- package/dist/utils/orders/index.cjs.map +1 -0
- package/dist/utils/orders/index.d.cts +11 -0
- package/dist/utils/orders/index.d.ts +11 -0
- package/dist/utils/orders/index.js +5 -0
- package/dist/utils/orders/index.js.map +1 -0
- package/dist/utils/orders/orderNonce.cjs +44 -0
- package/dist/utils/orders/orderNonce.cjs.map +1 -0
- package/dist/utils/orders/orderNonce.d.cts +14 -0
- package/dist/utils/orders/orderNonce.d.ts +14 -0
- package/dist/utils/orders/orderNonce.js +20 -0
- package/dist/utils/orders/orderNonce.js.map +1 -0
- package/dist/utils/orders/recvTime.cjs +33 -0
- package/dist/utils/orders/recvTime.cjs.map +1 -0
- package/dist/utils/orders/recvTime.d.cts +9 -0
- package/dist/utils/orders/recvTime.d.ts +9 -0
- package/dist/utils/orders/recvTime.js +10 -0
- package/dist/utils/orders/recvTime.js.map +1 -0
- package/dist/utils/productTypeFilter.cjs +49 -0
- package/dist/utils/productTypeFilter.cjs.map +1 -0
- package/dist/utils/productTypeFilter.d.cts +11 -0
- package/dist/utils/productTypeFilter.d.ts +11 -0
- package/dist/utils/productTypeFilter.js +25 -0
- package/dist/utils/productTypeFilter.js.map +1 -0
- package/dist/utils/time.cjs +47 -0
- package/dist/utils/time.cjs.map +1 -0
- package/dist/utils/time.d.cts +17 -0
- package/dist/utils/time.d.ts +17 -0
- package/dist/utils/time.js +22 -0
- package/dist/utils/time.js.map +1 -0
- package/dist/utils/toPrintableObject.cjs +51 -0
- package/dist/utils/toPrintableObject.cjs.map +1 -0
- package/dist/utils/toPrintableObject.d.cts +6 -0
- package/dist/utils/toPrintableObject.d.ts +6 -0
- package/dist/utils/toPrintableObject.js +28 -0
- package/dist/utils/toPrintableObject.js.map +1 -0
- package/package.json +49 -0
- package/src/abis/Clearinghouse.ts +861 -0
- package/src/abis/ERC20.ts +185 -0
- package/src/abis/Endpoint.ts +559 -0
- package/src/abis/MockERC20.ts +311 -0
- package/src/abis/PerpEngine.ts +856 -0
- package/src/abis/Querier.ts +1492 -0
- package/src/abis/SpotEngine.ts +907 -0
- package/src/abis/WithdrawPool.ts +277 -0
- package/src/abis/index.ts +9 -0
- package/src/abis/nadoAbis.ts +19 -0
- package/src/consts/chainEnvToChain.ts +16 -0
- package/src/consts/index.ts +2 -0
- package/src/consts/productIds.ts +3 -0
- package/src/deployments/core/deployment.InkSepolia.json +13 -0
- package/src/deployments/core/deployment.arbitrumOne.json +18 -0
- package/src/deployments/core/deployment.localhost.json +18 -0
- package/src/deployments/index.ts +40 -0
- package/src/eip712/eip712ValueTypes.ts +83 -0
- package/src/eip712/getNadoEIP712Domain.ts +20 -0
- package/src/eip712/getNadoEIP712PrimaryType.ts +13 -0
- package/src/eip712/getNadoEIP712Types.ts +113 -0
- package/src/eip712/getNadoEIP712Values.ts +248 -0
- package/src/eip712/getOrderVerifyingAddress.ts +9 -0
- package/src/eip712/getSignedTransactionRequest.ts +30 -0
- package/src/eip712/index.ts +10 -0
- package/src/eip712/orderDigest.ts +28 -0
- package/src/eip712/signableRequestType.ts +32 -0
- package/src/eip712/signatureParamTypes.ts +84 -0
- package/src/encoding/encoding.ts +50 -0
- package/src/encoding/index.ts +1 -0
- package/src/execute/approveDepositAllowance.ts +20 -0
- package/src/execute/depositCollateral.ts +43 -0
- package/src/execute/index.ts +2 -0
- package/src/index.ts +8 -0
- package/src/types/ChainEnv.ts +13 -0
- package/src/types/OrderExecutionType.ts +8 -0
- package/src/types/balanceTypes.ts +47 -0
- package/src/types/bytes.ts +1 -0
- package/src/types/healthTypes.ts +17 -0
- package/src/types/index.ts +11 -0
- package/src/types/marketTypes.ts +40 -0
- package/src/types/nadoContractTypes.ts +14 -0
- package/src/types/orderAppendixTypes.ts +58 -0
- package/src/types/productTypes.ts +76 -0
- package/src/types/subaccountTypes.ts +13 -0
- package/src/types/viemTypes.ts +42 -0
- package/src/utils/asyncResult.ts +12 -0
- package/src/utils/balanceValue.ts +42 -0
- package/src/utils/bytes32.test.ts +117 -0
- package/src/utils/bytes32.ts +110 -0
- package/src/utils/createDeterministicLinkedSignerPrivateKey.ts +46 -0
- package/src/utils/errors/WalletNotProvidedError.ts +6 -0
- package/src/utils/errors/index.ts +1 -0
- package/src/utils/getValidatedAddress.ts +13 -0
- package/src/utils/getValidatedHex.ts +13 -0
- package/src/utils/index.ts +15 -0
- package/src/utils/interest.ts +133 -0
- package/src/utils/isWriteableContract.ts +11 -0
- package/src/utils/mapValues.ts +18 -0
- package/src/utils/math/BigDecimals.ts +8 -0
- package/src/utils/math/bigDecimal.ts +32 -0
- package/src/utils/math/clamp.ts +26 -0
- package/src/utils/math/decimalAdjustment.ts +65 -0
- package/src/utils/math/index.ts +7 -0
- package/src/utils/math/sumBigDecimalBy.ts +18 -0
- package/src/utils/math/toBigInt.ts +11 -0
- package/src/utils/math/toIntegerString.ts +11 -0
- package/src/utils/orders/appendix/appendixTWAPValue.ts +51 -0
- package/src/utils/orders/appendix/bitMaskValue.ts +11 -0
- package/src/utils/orders/appendix/index.ts +5 -0
- package/src/utils/orders/appendix/orderAppendix.test.ts +121 -0
- package/src/utils/orders/appendix/packOrderAppendix.ts +71 -0
- package/src/utils/orders/appendix/types.ts +17 -0
- package/src/utils/orders/appendix/unpackOrderAppendix.ts +90 -0
- package/src/utils/orders/index.ts +3 -0
- package/src/utils/orders/orderNonce.ts +32 -0
- package/src/utils/orders/recvTime.ts +9 -0
- package/src/utils/productTypeFilter.ts +23 -0
- package/src/utils/time.ts +21 -0
- package/src/utils/toPrintableObject.ts +25 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { BigDecimal } from '../utils/math';
|
|
2
|
+
import {
|
|
3
|
+
PerpProduct,
|
|
4
|
+
Product,
|
|
5
|
+
ProductEngineType,
|
|
6
|
+
SpotProduct,
|
|
7
|
+
} from './productTypes';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Shared properties of a market
|
|
11
|
+
*/
|
|
12
|
+
export interface Market {
|
|
13
|
+
productId: number;
|
|
14
|
+
type: ProductEngineType;
|
|
15
|
+
product: Product;
|
|
16
|
+
// Minimum order size to be placed on the book (i.e. not an IOC order)
|
|
17
|
+
minSize: BigDecimal;
|
|
18
|
+
// Price increment for the orderbook, order prices must be placed at multiples of this increment
|
|
19
|
+
priceIncrement: BigDecimal;
|
|
20
|
+
// Size increment for the orderbook, order sizes must be placed at multiples of this increment
|
|
21
|
+
sizeIncrement: BigDecimal;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Perp market with perp product info
|
|
26
|
+
*/
|
|
27
|
+
export interface PerpMarket extends Market {
|
|
28
|
+
type: ProductEngineType.PERP;
|
|
29
|
+
product: PerpProduct;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Spot market with spot product info
|
|
34
|
+
*/
|
|
35
|
+
export interface SpotMarket extends Market {
|
|
36
|
+
type: ProductEngineType.SPOT;
|
|
37
|
+
product: SpotProduct;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export type MarketWithProduct = PerpMarket | SpotMarket;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { NadoAbis, NadoContractName } from '../abis/nadoAbis';
|
|
2
|
+
import { WriteableContractInstance } from './viemTypes';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Encapsulates the set of Nado contracts required for querying and executing, assumes that a wallet client is connected
|
|
6
|
+
*/
|
|
7
|
+
export type NadoContracts = {
|
|
8
|
+
[name in NadoContractName]: WriteableContractInstance<NadoAbis[name]>;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
// Utility types to bundle parameters with contracts
|
|
12
|
+
export type WithContracts<T> = T & NadoContracts;
|
|
13
|
+
export type WithContract<TContractName extends keyof NadoContracts, T> = T &
|
|
14
|
+
Pick<NadoContracts, TContractName>;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { BigDecimalish } from '../utils/math';
|
|
2
|
+
import { OrderExecutionType } from './OrderExecutionType';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Encodes whether the order will be sent to the trigger service
|
|
6
|
+
*/
|
|
7
|
+
export type OrderAppendixTriggerType =
|
|
8
|
+
| 'price'
|
|
9
|
+
| 'twap'
|
|
10
|
+
// TWAP with specified order amounts, which will be specified in the Trigger Order itself
|
|
11
|
+
| 'twap_custom_amounts';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Fields associated with a TWAP trigger order.
|
|
15
|
+
*/
|
|
16
|
+
export interface OrderAppendixTWAPFields {
|
|
17
|
+
/**
|
|
18
|
+
* Number of TWAP orders to be placed.
|
|
19
|
+
*/
|
|
20
|
+
numOrders: number;
|
|
21
|
+
/**
|
|
22
|
+
* Maximum slippage on each TWAP order, based on the oracle price at time of order execution.
|
|
23
|
+
* Ex: 0.01 means 1% slippage.
|
|
24
|
+
*/
|
|
25
|
+
slippageFrac: number;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Fields associated with an isolated order
|
|
30
|
+
*/
|
|
31
|
+
export interface OrderAppendixIsolatedFields {
|
|
32
|
+
/**
|
|
33
|
+
* Amount of margin to transfer into the isolated position.
|
|
34
|
+
*/
|
|
35
|
+
margin: BigDecimalish;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* All the fields encoded by the order appendix
|
|
40
|
+
*/
|
|
41
|
+
export interface OrderAppendix {
|
|
42
|
+
reduceOnly?: boolean;
|
|
43
|
+
orderExecutionType: OrderExecutionType;
|
|
44
|
+
/**
|
|
45
|
+
* Specify the type of trigger that will be used for the order if the order will be sent to the trigger service.
|
|
46
|
+
*/
|
|
47
|
+
triggerType?: OrderAppendixTriggerType;
|
|
48
|
+
/**
|
|
49
|
+
* Specify if the order is for an isolated position
|
|
50
|
+
* An order CANNOT be both a TWAP order and an isolated order.
|
|
51
|
+
*/
|
|
52
|
+
isolated?: OrderAppendixIsolatedFields;
|
|
53
|
+
/**
|
|
54
|
+
* Specify if the order is a TWAP order
|
|
55
|
+
* An order CANNOT be both a TWAP order and an isolated order.
|
|
56
|
+
*/
|
|
57
|
+
twap?: OrderAppendixTWAPFields;
|
|
58
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { BigDecimal } from '../utils/math';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Representation of the ProductEngineType enum used within the contract
|
|
5
|
+
* Enums do not get reflected in the ABI, so this must be manually defined
|
|
6
|
+
*/
|
|
7
|
+
export enum ProductEngineType {
|
|
8
|
+
SPOT,
|
|
9
|
+
PERP,
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Maps a raw ProductEngineType enum value to the proper type
|
|
14
|
+
* @param val
|
|
15
|
+
*/
|
|
16
|
+
export function toProductEngineType(val: number): ProductEngineType {
|
|
17
|
+
switch (val) {
|
|
18
|
+
case 0:
|
|
19
|
+
return ProductEngineType.SPOT;
|
|
20
|
+
case 1:
|
|
21
|
+
return ProductEngineType.PERP;
|
|
22
|
+
default:
|
|
23
|
+
throw new Error(`Unknown product engine type: ${val}`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Shared properties across products
|
|
29
|
+
*/
|
|
30
|
+
interface BaseProduct {
|
|
31
|
+
type: ProductEngineType;
|
|
32
|
+
productId: number;
|
|
33
|
+
// Latest price given by oracle
|
|
34
|
+
oraclePrice: BigDecimal;
|
|
35
|
+
// Weight used to calculate initial health for a long position
|
|
36
|
+
longWeightInitial: BigDecimal;
|
|
37
|
+
// Weight used to calculate initial health for a short position
|
|
38
|
+
shortWeightInitial: BigDecimal;
|
|
39
|
+
// Weight used to calculate maint. health for a long position
|
|
40
|
+
longWeightMaintenance: BigDecimal;
|
|
41
|
+
// Weight used to calculate maint. health for a short position
|
|
42
|
+
shortWeightMaintenance: BigDecimal;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Represents a product stored in PerpEngine
|
|
47
|
+
*/
|
|
48
|
+
export interface PerpProduct extends BaseProduct {
|
|
49
|
+
type: ProductEngineType.PERP;
|
|
50
|
+
// Current open interest
|
|
51
|
+
openInterest: BigDecimal;
|
|
52
|
+
cumulativeFundingLong: BigDecimal;
|
|
53
|
+
cumulativeFundingShort: BigDecimal;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Represents a product stored in SpotEngine.
|
|
58
|
+
*
|
|
59
|
+
* @see {@link calcBorrowRatePerSecond} for more details on the calculation and interest parameters
|
|
60
|
+
*/
|
|
61
|
+
export interface SpotProduct extends BaseProduct {
|
|
62
|
+
type: ProductEngineType.SPOT;
|
|
63
|
+
tokenAddr: string;
|
|
64
|
+
interestFloor: BigDecimal;
|
|
65
|
+
interestInflectionUtil: BigDecimal;
|
|
66
|
+
interestSmallCap: BigDecimal;
|
|
67
|
+
interestLargeCap: BigDecimal;
|
|
68
|
+
minDepositRate: BigDecimal;
|
|
69
|
+
|
|
70
|
+
// Total deposited for this product
|
|
71
|
+
totalDeposited: BigDecimal;
|
|
72
|
+
// Total borrowed for this product
|
|
73
|
+
totalBorrowed: BigDecimal;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export type Product = PerpProduct | SpotProduct;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Bytes } from './bytes';
|
|
2
|
+
|
|
3
|
+
export type SubaccountBytes32 = Bytes;
|
|
4
|
+
|
|
5
|
+
export type SubaccountNameBytes12 = Bytes;
|
|
6
|
+
|
|
7
|
+
export interface Subaccount {
|
|
8
|
+
subaccountOwner: string;
|
|
9
|
+
/**
|
|
10
|
+
* If the subaccount is not a valid UTF-8 string, it will be the hex representation of the bytes
|
|
11
|
+
*/
|
|
12
|
+
subaccountName: string;
|
|
13
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Abi,
|
|
3
|
+
Account,
|
|
4
|
+
Chain,
|
|
5
|
+
GetContractReturnType,
|
|
6
|
+
PublicClient,
|
|
7
|
+
RpcSchema,
|
|
8
|
+
Transport,
|
|
9
|
+
WalletClient,
|
|
10
|
+
} from 'viem';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* An account with its corresponding private key. Viem does not allow private keys to be accessible from an account
|
|
14
|
+
*/
|
|
15
|
+
export interface AccountWithPrivateKey {
|
|
16
|
+
account: Account;
|
|
17
|
+
privateKey: string;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* A viem WalletClient that is fully initialized with a Transport, Chain, Account, and RpcSchema
|
|
22
|
+
*/
|
|
23
|
+
export type WalletClientWithAccount = WalletClient<
|
|
24
|
+
Transport,
|
|
25
|
+
Chain,
|
|
26
|
+
Account,
|
|
27
|
+
RpcSchema
|
|
28
|
+
>;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* A viem contract instance that has a connected WalletClient, thus allowing write operations
|
|
32
|
+
*/
|
|
33
|
+
export type WriteableContractInstance<TAbi extends Abi = Abi> =
|
|
34
|
+
GetContractReturnType<TAbi, WalletClientWithAccount>;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* A viem contract instance that has a connected WalletClient or PublicClient
|
|
38
|
+
*/
|
|
39
|
+
export type ContractInstance<TAbi extends Abi = Abi> = GetContractReturnType<
|
|
40
|
+
TAbi,
|
|
41
|
+
WalletClient | PublicClient
|
|
42
|
+
>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type AsyncResult<TData, TError> =
|
|
2
|
+
| [data: undefined, error: TError]
|
|
3
|
+
| [data: TData, error: undefined];
|
|
4
|
+
|
|
5
|
+
export function asyncResult<TData, TError = unknown>(
|
|
6
|
+
promise: Promise<TData>,
|
|
7
|
+
): Promise<AsyncResult<TData, TError>> {
|
|
8
|
+
return Promise.resolve(promise).then(
|
|
9
|
+
(data) => [data, undefined] as [TData, undefined],
|
|
10
|
+
(error) => [undefined, error] as [undefined, TError],
|
|
11
|
+
);
|
|
12
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import {
|
|
2
|
+
PerpBalanceWithProduct,
|
|
3
|
+
SpotBalanceWithProduct,
|
|
4
|
+
} from '../types/balanceTypes';
|
|
5
|
+
import { BigDecimal } from './math';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Calculates the quote value of a spot balance, in terms of quote units
|
|
9
|
+
*
|
|
10
|
+
* @param balanceWithProduct
|
|
11
|
+
*/
|
|
12
|
+
export function calcSpotBalanceValue(
|
|
13
|
+
balanceWithProduct: SpotBalanceWithProduct,
|
|
14
|
+
): BigDecimal {
|
|
15
|
+
return balanceWithProduct.amount.multipliedBy(balanceWithProduct.oraclePrice);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Calculates the notional value of a perp balance, in terms of quote units
|
|
20
|
+
*
|
|
21
|
+
* @param balanceWithProduct
|
|
22
|
+
*/
|
|
23
|
+
export function calcPerpBalanceNotionalValue(
|
|
24
|
+
balanceWithProduct: PerpBalanceWithProduct,
|
|
25
|
+
): BigDecimal {
|
|
26
|
+
return balanceWithProduct.amount
|
|
27
|
+
.multipliedBy(balanceWithProduct.oraclePrice)
|
|
28
|
+
.abs();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Calculates the true quote value of a perp balance, which is the same as its unrealized pnl / unsettled quote, in terms of quote units
|
|
33
|
+
*
|
|
34
|
+
* @param balanceWithProduct
|
|
35
|
+
*/
|
|
36
|
+
export function calcPerpBalanceValue(
|
|
37
|
+
balanceWithProduct: PerpBalanceWithProduct,
|
|
38
|
+
): BigDecimal {
|
|
39
|
+
return balanceWithProduct.amount
|
|
40
|
+
.multipliedBy(balanceWithProduct.oraclePrice)
|
|
41
|
+
.plus(balanceWithProduct.vQuoteBalance);
|
|
42
|
+
}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { describe, expect, it } from '@jest/globals';
|
|
2
|
+
import { Subaccount } from '../types/subaccountTypes';
|
|
3
|
+
import {
|
|
4
|
+
subaccountFromBytes32,
|
|
5
|
+
subaccountFromHex,
|
|
6
|
+
subaccountNameBytesToStr,
|
|
7
|
+
subaccountNameToBytes12,
|
|
8
|
+
subaccountToBytes32,
|
|
9
|
+
subaccountToHex,
|
|
10
|
+
} from './bytes32';
|
|
11
|
+
|
|
12
|
+
const TEST_ADDRESS = '0xb92EFcF519EDC2f1FE60b4491Ef51d97Ed4d7685';
|
|
13
|
+
|
|
14
|
+
describe('bytes32', () => {
|
|
15
|
+
it('converts a subaccount to bytes', () => {
|
|
16
|
+
const expectedBytes = new Uint8Array([
|
|
17
|
+
185, 46, 252, 245, 25, 237, 194, 241, 254, 96, 180, 73, 30, 245, 29, 151,
|
|
18
|
+
237, 77, 118, 133, 116, 101, 115, 116, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
19
|
+
]);
|
|
20
|
+
expect(
|
|
21
|
+
subaccountToBytes32({
|
|
22
|
+
subaccountName: 'test',
|
|
23
|
+
subaccountOwner: TEST_ADDRESS,
|
|
24
|
+
}),
|
|
25
|
+
).toStrictEqual(expectedBytes);
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
it('converts bytes to a subaccount', () => {
|
|
29
|
+
const subaccountBytes = new Uint8Array([
|
|
30
|
+
185, 46, 252, 245, 25, 237, 194, 241, 254, 96, 180, 73, 30, 245, 29, 151,
|
|
31
|
+
237, 77, 118, 133, 116, 101, 115, 116, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
32
|
+
]);
|
|
33
|
+
const expectedSubaccount: Subaccount = {
|
|
34
|
+
subaccountOwner: TEST_ADDRESS,
|
|
35
|
+
subaccountName: 'test',
|
|
36
|
+
};
|
|
37
|
+
const convertedSubaccount = subaccountFromBytes32(subaccountBytes);
|
|
38
|
+
|
|
39
|
+
expect(convertedSubaccount.subaccountOwner.toLowerCase()).toBe(
|
|
40
|
+
expectedSubaccount.subaccountOwner.toLowerCase(),
|
|
41
|
+
);
|
|
42
|
+
expect(convertedSubaccount.subaccountName).toBe(
|
|
43
|
+
expectedSubaccount.subaccountName,
|
|
44
|
+
);
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
it('converts a string subaccount name to bytes', () => {
|
|
48
|
+
const nameBytes = subaccountNameToBytes12('test');
|
|
49
|
+
|
|
50
|
+
expect(nameBytes).toStrictEqual(
|
|
51
|
+
new Uint8Array([116, 101, 115, 116, 0, 0, 0, 0, 0, 0, 0, 0]),
|
|
52
|
+
);
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
it('converts a hex string subaccount name to bytes', () => {
|
|
56
|
+
// `test` in hex form
|
|
57
|
+
const nameBytes = subaccountNameToBytes12('0x74657374');
|
|
58
|
+
|
|
59
|
+
expect(nameBytes).toStrictEqual(
|
|
60
|
+
new Uint8Array([116, 101, 115, 116, 0, 0, 0, 0, 0, 0, 0, 0]),
|
|
61
|
+
);
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
it('converts a subaccount with a string subaccount name to a hex string', () => {
|
|
65
|
+
const subaccount: Subaccount = {
|
|
66
|
+
subaccountOwner: TEST_ADDRESS,
|
|
67
|
+
subaccountName: 'test',
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
expect(subaccountToHex(subaccount)).toBe(
|
|
71
|
+
'0xb92efcf519edc2f1fe60b4491ef51d97ed4d7685746573740000000000000000',
|
|
72
|
+
);
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
it('converts a subaccount with a hex subaccount name to a hex string', () => {
|
|
76
|
+
const subaccount: Subaccount = {
|
|
77
|
+
subaccountOwner: TEST_ADDRESS,
|
|
78
|
+
// `test` in hex form
|
|
79
|
+
subaccountName: '0x74657374',
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
expect(subaccountToHex(subaccount)).toBe(
|
|
83
|
+
'0xb92efcf519edc2f1fe60b4491ef51d97ed4d7685746573740000000000000000',
|
|
84
|
+
);
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
it('converts a hex string to a subaccount', () => {
|
|
88
|
+
const convertedSubaccount = subaccountFromHex(
|
|
89
|
+
'0xb92efcf519edc2f1fe60b4491ef51d97ed4d7685746573740000000000000000',
|
|
90
|
+
);
|
|
91
|
+
|
|
92
|
+
expect(convertedSubaccount.subaccountOwner.toLowerCase()).toBe(
|
|
93
|
+
TEST_ADDRESS.toLowerCase(),
|
|
94
|
+
);
|
|
95
|
+
expect(convertedSubaccount.subaccountName).toBe('test');
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
it('handles leading zero bytes in subaccount name properly', () => {
|
|
99
|
+
const subaccount: Subaccount = {
|
|
100
|
+
subaccountOwner: TEST_ADDRESS,
|
|
101
|
+
subaccountName: '\u0000\u0000\u0002\u0000iso\u0000',
|
|
102
|
+
};
|
|
103
|
+
const subaccountHex =
|
|
104
|
+
'0xb92efcf519edc2f1fe60b4491ef51d97ed4d76850000020069736f0000000000';
|
|
105
|
+
|
|
106
|
+
expect(subaccountToHex(subaccount)).toBe(subaccountHex);
|
|
107
|
+
// Trailing 0 bytes are trimmed
|
|
108
|
+
expect(subaccountFromHex(subaccountHex).subaccountName).toBe(
|
|
109
|
+
'\u0000\u0000\u0002\u0000iso',
|
|
110
|
+
);
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
it('handles converting non-utf8 byte sequences by converting bytes to a hex string', () => {
|
|
114
|
+
const invalidUtf8Array = new Uint8Array([0x80, 0x81, 0x82]);
|
|
115
|
+
expect(subaccountNameBytesToStr(invalidUtf8Array)).toBe('0x808182');
|
|
116
|
+
});
|
|
117
|
+
});
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { bytesToString, Hex, toBytes, toHex } from 'viem';
|
|
2
|
+
import { Bytes } from '../types/bytes';
|
|
3
|
+
import {
|
|
4
|
+
Subaccount,
|
|
5
|
+
SubaccountBytes32,
|
|
6
|
+
SubaccountNameBytes12,
|
|
7
|
+
} from '../types/subaccountTypes';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Converts a subaccount object (owner + name) to its bytes32 representation.
|
|
11
|
+
* @param subaccount subaccount object (owner + name)
|
|
12
|
+
* @returns bytes32 representation of a subaccount
|
|
13
|
+
*/
|
|
14
|
+
export function subaccountToBytes32(subaccount: Subaccount): SubaccountBytes32 {
|
|
15
|
+
const address = toBytes(subaccount.subaccountOwner);
|
|
16
|
+
|
|
17
|
+
if (address.length != 20) {
|
|
18
|
+
throw new Error(`owner must be 20 bytes, but found ${address.length}`);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const nameBytes = subaccountNameToBytes12(subaccount.subaccountName);
|
|
22
|
+
|
|
23
|
+
const bytes32 = new Uint8Array(32);
|
|
24
|
+
for (let i = 0; i < address.length; i++) {
|
|
25
|
+
bytes32[i] = address[i];
|
|
26
|
+
}
|
|
27
|
+
for (let i = 0; i < nameBytes.length; i++) {
|
|
28
|
+
bytes32[i + 20] = nameBytes[i];
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return bytes32;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Given a bytes32 representation of a subaccount, returns a subaccount object (owner + name)
|
|
36
|
+
* @param bytes bytes32 representaion of a subaccount where bytes[0:20]=owner & bytes[20:32]=subaccountName
|
|
37
|
+
* @returns subaccount object (owner + name)
|
|
38
|
+
*/
|
|
39
|
+
export function subaccountFromBytes32(bytes: SubaccountBytes32): Subaccount {
|
|
40
|
+
if (bytes.length != 32) {
|
|
41
|
+
throw new Error('input must be 32 bytes');
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const address = new Uint8Array(20);
|
|
45
|
+
const name = new Uint8Array(12);
|
|
46
|
+
|
|
47
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
48
|
+
if (i < 20) {
|
|
49
|
+
address[i] = bytes[i];
|
|
50
|
+
} else {
|
|
51
|
+
name[i - 20] = bytes[i];
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return {
|
|
56
|
+
subaccountOwner: toHex(address),
|
|
57
|
+
subaccountName: subaccountNameBytesToStr(name),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* When interacting with the contracts (e.g: deposit collateral);
|
|
63
|
+
* subaccount name is represented as bytes12.
|
|
64
|
+
* This util converts a subaccount name to it's bytes12 representation.
|
|
65
|
+
* @param name subaccount name
|
|
66
|
+
* @returns bytes12 representation of a subaccount name.
|
|
67
|
+
*/
|
|
68
|
+
export function subaccountNameToBytes12(name: string): SubaccountNameBytes12 {
|
|
69
|
+
return toBytes(name, {
|
|
70
|
+
size: 12,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* When interacting with the engine, we need to send a hex string representation
|
|
76
|
+
* of the bytes32 of a subaccount for serialization reasons. This util
|
|
77
|
+
* converts a subaccount object (owner + name) to such hex representation.
|
|
78
|
+
* @param subaccount subaccount object (owner + name)
|
|
79
|
+
* @returns hex string representation of a subaccount
|
|
80
|
+
*/
|
|
81
|
+
export function subaccountToHex(subaccount: Subaccount): Hex {
|
|
82
|
+
return toHex(subaccountToBytes32(subaccount));
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Converts a hex string representation of a bytes32 subaccount to a subaccount object (owner + name)
|
|
87
|
+
* @param subaccount hex string representation of a bytes32 subaccount.
|
|
88
|
+
* @returns subaccount object (owner + name)
|
|
89
|
+
*/
|
|
90
|
+
export function subaccountFromHex(subaccount: string): Subaccount {
|
|
91
|
+
return subaccountFromBytes32(toBytes(subaccount));
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Converts Bytes to a string. If the bytes represent a valid UTF-8 string, then a string is returned, if not,
|
|
96
|
+
* then the hex representation is returned.
|
|
97
|
+
*
|
|
98
|
+
* @param input
|
|
99
|
+
*/
|
|
100
|
+
export function subaccountNameBytesToStr(input: Bytes): string {
|
|
101
|
+
// bytesToString will replace zero bytes with \0
|
|
102
|
+
// strip out any trailing bytes for a readable name
|
|
103
|
+
// however, we need to leave any leading bytes otherwise reverse conversion to bytes will not work
|
|
104
|
+
const toStringResult = bytesToString(input).replace(/\0*$/, '');
|
|
105
|
+
// bytesToString will replace invalid byte sequences with �, so default to converting to hex string if � is present
|
|
106
|
+
if (toStringResult.includes('�')) {
|
|
107
|
+
return toHex(input);
|
|
108
|
+
}
|
|
109
|
+
return toStringResult;
|
|
110
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { keccak256 } from 'viem';
|
|
2
|
+
import { Subaccount } from '../types/subaccountTypes';
|
|
3
|
+
import { WalletClientWithAccount } from '../types/viemTypes';
|
|
4
|
+
import { getNadoEIP712Domain } from '../eip712/getNadoEIP712Domain';
|
|
5
|
+
import { subaccountToHex } from './bytes32';
|
|
6
|
+
|
|
7
|
+
interface Params extends Subaccount {
|
|
8
|
+
walletClient: WalletClientWithAccount;
|
|
9
|
+
chainId: number;
|
|
10
|
+
endpointAddress: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Deterministically creates a new private key from a predetermined EIP712 message. This is used to
|
|
15
|
+
* reliably create an authorized signer delegate for the subaccount across different clients. Used on the FE in order
|
|
16
|
+
* to have a consistent private key for the subaccount linked signer across different clients.
|
|
17
|
+
*
|
|
18
|
+
* @param params
|
|
19
|
+
*/
|
|
20
|
+
export async function createDeterministicLinkedSignerPrivateKey(
|
|
21
|
+
params: Params,
|
|
22
|
+
) {
|
|
23
|
+
const {
|
|
24
|
+
chainId,
|
|
25
|
+
endpointAddress,
|
|
26
|
+
walletClient,
|
|
27
|
+
subaccountName,
|
|
28
|
+
subaccountOwner,
|
|
29
|
+
} = params;
|
|
30
|
+
|
|
31
|
+
const signedMessage = await walletClient.signTypedData({
|
|
32
|
+
domain: getNadoEIP712Domain(endpointAddress, chainId),
|
|
33
|
+
types: {
|
|
34
|
+
CreateLinkedSignerWallet: [{ name: 'subaccount', type: 'bytes32' }],
|
|
35
|
+
},
|
|
36
|
+
primaryType: 'CreateLinkedSignerWallet',
|
|
37
|
+
message: {
|
|
38
|
+
subaccount: subaccountToHex({
|
|
39
|
+
subaccountOwner,
|
|
40
|
+
subaccountName,
|
|
41
|
+
}),
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
return keccak256(signedMessage);
|
|
46
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './WalletNotProvidedError';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Address, isAddress } from 'viem';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Check if the given string is a valid address. Throws an error if not.
|
|
5
|
+
* @param maybeAddress
|
|
6
|
+
*/
|
|
7
|
+
export function getValidatedAddress(maybeAddress: string): Address {
|
|
8
|
+
if (!isAddress(maybeAddress)) {
|
|
9
|
+
throw new Error(`Invalid address: ${maybeAddress}`);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
return maybeAddress;
|
|
13
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Hex, isHex } from 'viem';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Check if the given string is a valid hex string. Throws an error if not.
|
|
5
|
+
* @param maybeHex
|
|
6
|
+
*/
|
|
7
|
+
export function getValidatedHex(maybeHex: string): Hex {
|
|
8
|
+
if (!isHex(maybeHex)) {
|
|
9
|
+
throw new Error(`Invalid hex string: ${maybeHex}`);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
return maybeHex;
|
|
13
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export * from './orders';
|
|
2
|
+
export * from './interest';
|
|
3
|
+
export * from './productTypeFilter';
|
|
4
|
+
export * from './balanceValue';
|
|
5
|
+
export * from './bytes32';
|
|
6
|
+
export * from './createDeterministicLinkedSignerPrivateKey';
|
|
7
|
+
export * from './isWriteableContract';
|
|
8
|
+
export * from './errors';
|
|
9
|
+
export * from './math';
|
|
10
|
+
export * from './asyncResult';
|
|
11
|
+
export * from './getValidatedAddress';
|
|
12
|
+
export * from './getValidatedHex';
|
|
13
|
+
export * from './mapValues';
|
|
14
|
+
export * from './time';
|
|
15
|
+
export * from './toPrintableObject';
|