@reyaxyz/sdk 0.149.21 → 0.150.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/README.md CHANGED
@@ -6,5 +6,5 @@
6
6
 
7
7
  | Statements | Branches | Functions | Lines |
8
8
  | --------------------------- | ----------------------- | ------------------------- | ----------------- |
9
- | ![Statements](https://img.shields.io/badge/statements-16.24%25-red.svg?style=flat) | ![Branches](https://img.shields.io/badge/branches-16.35%25-red.svg?style=flat) | ![Functions](https://img.shields.io/badge/functions-11.49%25-red.svg?style=flat) | ![Lines](https://img.shields.io/badge/lines-15.74%25-red.svg?style=flat) |
9
+ | ![Statements](https://img.shields.io/badge/statements-16%25-red.svg?style=flat) | ![Branches](https://img.shields.io/badge/branches-15.85%25-red.svg?style=flat) | ![Functions](https://img.shields.io/badge/functions-11.49%25-red.svg?style=flat) | ![Lines](https://img.shields.io/badge/lines-15.5%25-red.svg?style=flat) |
10
10
 
@@ -81,6 +81,14 @@ var lzBridgeAndDepositMAV2 = function (params) { return __awaiter(void 0, void 0
81
81
  return [4 /*yield*/, (0, common_1.executeTransaction)(params.signer, calldata, params.bridgeFee.nativeFee, params.chainId, params.collateralAddress)];
82
82
  case 3:
83
83
  result = _a.sent();
84
+ // No pending row is recorded here on purpose. LayerZero carries only REYA
85
+ // deposits, and nothing resolves a LayerZero message's status, so a pending
86
+ // row would never leave `pending`.
87
+ //
88
+ // The consequence is that LayerZero deposits do not appear on
89
+ // /v2/wallet/{address}/deposits at all -- that channel is fed solely by this
90
+ // table. Supporting them means teaching resolveBridgeTransactionStatus to
91
+ // query the LayerZero Scan API, and recording a row here once it can.
84
92
  return [2 /*return*/, {
85
93
  transactionHash: (result === null || result === void 0 ? void 0 : result.hash) || null,
86
94
  }];
@@ -1 +1 @@
1
- {"version":3,"file":"lzBridgeAndDepositMA.js","sourceRoot":"/","sources":["services/margin-accounts-v2/deposit/lz/lzBridgeAndDepositMA.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0CAKyB;AACzB,iCAAmC;AAKnC,qDAAgE;AAChE,+DAA8D;AAE9D,IAAM,WAAW,GAAG,UAClB,MAAoC;;;;;gBAE9B,MAAM,GAAG,IAAA,gBAAO,EAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC3C,qBAAM,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,EAAA;;gBAAhD,aAAa,GAAG,SAAgC;gBAEhD,UAAU,GAAG,IAAA,wCAA+B,EAAC;oBACjD,MAAM,QAAA;oBACN,gCAAgC,EAAE,MAAM,CAAC,gCAAgC;oBACzE,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,YAAY,EAAE,MAAM,CAAC,YAAY;oBACjC,eAAe,EAAE,IAAA,6BAAmB,GAAE;oBACtC,eAAe,EAAE,MAAM,CAAC,eAAe;iBACxC,CAAC,CAAC;gBAEG,SAAS,GAAG,IAAI,kBAAS,CAAC,eAAM,CAAC,CAAC;gBAClC,QAAQ,GAAG,SAAS,CAAC,kBAAkB,CAAC,MAAM,EAAE;oBACpD,UAAU;oBACV,MAAM,CAAC,SAAS;oBAChB,aAAa;iBACd,CAAC,CAAC;gBAEH,sBAAO,QAAQ,EAAC;;;KACjB,CAAC;AAEK,IAAM,sBAAsB,GAAG,UACpC,MAAoC;;;;oBAEpC,qBAAM,IAAA,2BAAY,EAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,EAAA;;gBAAjD,SAAiD,CAAC;gBACjC,qBAAM,WAAW,CAAC,MAAM,CAAC,EAAA;;gBAApC,QAAQ,GAAG,SAAyB;gBAE3B,qBAAM,IAAA,2BAAkB,EACrC,MAAM,CAAC,MAAM,EACb,QAAQ,EACR,MAAM,CAAC,SAAS,CAAC,SAAS,EAC1B,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,iBAAiB,CACzB,EAAA;;gBANK,MAAM,GAAG,SAMd;gBAED,sBAAO;wBACL,eAAe,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,KAAI,IAAI;qBACtC,EAAC;;;KACH,CAAC;AAjBW,QAAA,sBAAsB,0BAiBjC","sourcesContent":["import {\n buildOFTSendParamsToDepositInMA,\n executeTransaction,\n OFTAbi,\n scaleV2,\n} from '@reyaxyz/common';\nimport { Interface } from 'ethers';\nimport {\n LzBridgeAndDepositMAParamsV2,\n LzBridgeAndDepositMAResultV2,\n} from '../../types';\nimport { getPeripheryAddress } from '../../../../utils/network';\nimport { checkChainId } from '../../../../utils/checkChainId';\n\nconst getCalldata = async (\n params: LzBridgeAndDepositMAParamsV2,\n): Promise<string> => {\n const amount = scaleV2(params.collateralDecimals)(params.amount);\n const refundAddress = await params.signer.getAddress();\n\n const sendParams = buildOFTSendParamsToDepositInMA({\n amount,\n collateralAddressInReyaPeriphery: params.collateralAddressInReyaPeriphery,\n dstEid: params.dstEid,\n extraOptions: params.extraOptions,\n receiverAddress: getPeripheryAddress(),\n marginAccountId: params.marginAccountId,\n });\n\n const INTERFACE = new Interface(OFTAbi);\n const calldata = INTERFACE.encodeFunctionData('send', [\n sendParams,\n params.bridgeFee,\n refundAddress,\n ]);\n\n return calldata;\n};\n\nexport const lzBridgeAndDepositMAV2 = async (\n params: LzBridgeAndDepositMAParamsV2,\n): Promise<LzBridgeAndDepositMAResultV2> => {\n await checkChainId(params.signer, params.chainId);\n const calldata = await getCalldata(params);\n\n const result = await executeTransaction(\n params.signer,\n calldata,\n params.bridgeFee.nativeFee,\n params.chainId,\n params.collateralAddress,\n );\n\n return {\n transactionHash: result?.hash || null,\n };\n};\n"]}
1
+ {"version":3,"file":"lzBridgeAndDepositMA.js","sourceRoot":"/","sources":["services/margin-accounts-v2/deposit/lz/lzBridgeAndDepositMA.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0CAKyB;AACzB,iCAAmC;AAKnC,qDAAgE;AAChE,+DAA8D;AAE9D,IAAM,WAAW,GAAG,UAClB,MAAoC;;;;;gBAE9B,MAAM,GAAG,IAAA,gBAAO,EAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC3C,qBAAM,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,EAAA;;gBAAhD,aAAa,GAAG,SAAgC;gBAEhD,UAAU,GAAG,IAAA,wCAA+B,EAAC;oBACjD,MAAM,QAAA;oBACN,gCAAgC,EAAE,MAAM,CAAC,gCAAgC;oBACzE,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,YAAY,EAAE,MAAM,CAAC,YAAY;oBACjC,eAAe,EAAE,IAAA,6BAAmB,GAAE;oBACtC,eAAe,EAAE,MAAM,CAAC,eAAe;iBACxC,CAAC,CAAC;gBAEG,SAAS,GAAG,IAAI,kBAAS,CAAC,eAAM,CAAC,CAAC;gBAClC,QAAQ,GAAG,SAAS,CAAC,kBAAkB,CAAC,MAAM,EAAE;oBACpD,UAAU;oBACV,MAAM,CAAC,SAAS;oBAChB,aAAa;iBACd,CAAC,CAAC;gBAEH,sBAAO,QAAQ,EAAC;;;KACjB,CAAC;AAEK,IAAM,sBAAsB,GAAG,UACpC,MAAoC;;;;oBAEpC,qBAAM,IAAA,2BAAY,EAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,EAAA;;gBAAjD,SAAiD,CAAC;gBACjC,qBAAM,WAAW,CAAC,MAAM,CAAC,EAAA;;gBAApC,QAAQ,GAAG,SAAyB;gBAE3B,qBAAM,IAAA,2BAAkB,EACrC,MAAM,CAAC,MAAM,EACb,QAAQ,EACR,MAAM,CAAC,SAAS,CAAC,SAAS,EAC1B,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,iBAAiB,CACzB,EAAA;;gBANK,MAAM,GAAG,SAMd;gBAED,0EAA0E;gBAC1E,4EAA4E;gBAC5E,mCAAmC;gBACnC,EAAE;gBACF,8DAA8D;gBAC9D,6EAA6E;gBAC7E,0EAA0E;gBAC1E,sEAAsE;gBACtE,sBAAO;wBACL,eAAe,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,KAAI,IAAI;qBACtC,EAAC;;;KACH,CAAC;AAzBW,QAAA,sBAAsB,0BAyBjC","sourcesContent":["import {\n buildOFTSendParamsToDepositInMA,\n executeTransaction,\n OFTAbi,\n scaleV2,\n} from '@reyaxyz/common';\nimport { Interface } from 'ethers';\nimport {\n LzBridgeAndDepositMAParamsV2,\n LzBridgeAndDepositMAResultV2,\n} from '../../types';\nimport { getPeripheryAddress } from '../../../../utils/network';\nimport { checkChainId } from '../../../../utils/checkChainId';\n\nconst getCalldata = async (\n params: LzBridgeAndDepositMAParamsV2,\n): Promise<string> => {\n const amount = scaleV2(params.collateralDecimals)(params.amount);\n const refundAddress = await params.signer.getAddress();\n\n const sendParams = buildOFTSendParamsToDepositInMA({\n amount,\n collateralAddressInReyaPeriphery: params.collateralAddressInReyaPeriphery,\n dstEid: params.dstEid,\n extraOptions: params.extraOptions,\n receiverAddress: getPeripheryAddress(),\n marginAccountId: params.marginAccountId,\n });\n\n const INTERFACE = new Interface(OFTAbi);\n const calldata = INTERFACE.encodeFunctionData('send', [\n sendParams,\n params.bridgeFee,\n refundAddress,\n ]);\n\n return calldata;\n};\n\nexport const lzBridgeAndDepositMAV2 = async (\n params: LzBridgeAndDepositMAParamsV2,\n): Promise<LzBridgeAndDepositMAResultV2> => {\n await checkChainId(params.signer, params.chainId);\n const calldata = await getCalldata(params);\n\n const result = await executeTransaction(\n params.signer,\n calldata,\n params.bridgeFee.nativeFee,\n params.chainId,\n params.collateralAddress,\n );\n\n // No pending row is recorded here on purpose. LayerZero carries only REYA\n // deposits, and nothing resolves a LayerZero message's status, so a pending\n // row would never leave `pending`.\n //\n // The consequence is that LayerZero deposits do not appear on\n // /v2/wallet/{address}/deposits at all -- that channel is fed solely by this\n // table. Supporting them means teaching resolveBridgeTransactionStatus to\n // query the LayerZero Scan API, and recording a row here once it can.\n return {\n transactionHash: result?.hash || null,\n };\n};\n"]}
@@ -41,6 +41,7 @@ var ethers_1 = require("ethers");
41
41
  var common_1 = require("@reyaxyz/common");
42
42
  var network_1 = require("../../../../utils/network");
43
43
  var checkChainId_1 = require("../../../../utils/checkChainId");
44
+ var config_1 = require("../../../../config");
44
45
  var getCalldata = function (params) {
45
46
  var amount = (0, common_1.scaleV2)(params.collateralDecimals)(params.amount);
46
47
  var PERIPHERY_INTERFACE = new ethers_1.Interface(common_1.PeripheryAbi);
@@ -62,7 +63,7 @@ var getCalldata = function (params) {
62
63
  return calldata;
63
64
  };
64
65
  var socketBridgeAndDepositMAV2 = function (params) { return __awaiter(void 0, void 0, void 0, function () {
65
- var calldata, result;
66
+ var calldata, result, persistedPendingTransaction, reyaChainId, peripheryTokenInfo, coreTokenInfo, error_1;
66
67
  return __generator(this, function (_a) {
67
68
  switch (_a.label) {
68
69
  case 0: return [4 /*yield*/, (0, checkChainId_1.checkChainId)(params.signer, params.chainId)];
@@ -72,9 +73,35 @@ var socketBridgeAndDepositMAV2 = function (params) { return __awaiter(void 0, vo
72
73
  return [4 /*yield*/, (0, common_1.executeTransaction)(params.signer, calldata, params.bridgeFee, params.chainId, params.vaultAddress)];
73
74
  case 2:
74
75
  result = _a.sent();
75
- return [2 /*return*/, {
76
- transactionHash: (result === null || result === void 0 ? void 0 : result.hash) || null,
77
- }];
76
+ persistedPendingTransaction = {
77
+ status: false,
78
+ reason: 'Deposit transaction was not broadcast',
79
+ };
80
+ if (!(result === null || result === void 0 ? void 0 : result.hash)) return [3 /*break*/, 6];
81
+ _a.label = 3;
82
+ case 3:
83
+ _a.trys.push([3, 5, , 6]);
84
+ reyaChainId = (0, common_1.getReyaNetworkFromMoneyInOutChainId)(params.chainId);
85
+ peripheryTokenInfo = (0, common_1.getTokenInfoByAddress)(params.collateralAddressInReyaPeriphery, reyaChainId);
86
+ coreTokenInfo = peripheryTokenInfo.isRUSDUnderlying
87
+ ? (0, common_1.getTokenInfoByName)('RUSD', reyaChainId)
88
+ : peripheryTokenInfo;
89
+ return [4 /*yield*/, (0, config_1.getTransactionModuleClient)().pushPendingTransaction(params.accountId, result.hash, params.chainId, params.amount, coreTokenInfo.address, 'deposit')];
90
+ case 4:
91
+ _a.sent();
92
+ persistedPendingTransaction = { status: true };
93
+ return [3 /*break*/, 6];
94
+ case 5:
95
+ error_1 = _a.sent();
96
+ persistedPendingTransaction = {
97
+ status: false,
98
+ reason: error_1 instanceof Error ? error_1.message : String(error_1),
99
+ };
100
+ return [3 /*break*/, 6];
101
+ case 6: return [2 /*return*/, {
102
+ transactionHash: (result === null || result === void 0 ? void 0 : result.hash) || null,
103
+ persistedPendingTransaction: persistedPendingTransaction,
104
+ }];
78
105
  }
79
106
  });
80
107
  }); };
@@ -1 +1 @@
1
- {"version":3,"file":"socketBridgeAndDepositMA.js","sourceRoot":"/","sources":["services/margin-accounts-v2/deposit/socket/socketBridgeAndDepositMA.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iCAAmC;AACnC,0CAKyB;AAKzB,qDAAgE;AAChE,+DAA8D;AAE9D,IAAM,WAAW,GAAG,UAAC,MAAwC;IAC3D,IAAM,MAAM,GAAG,IAAA,gBAAO,EAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAEjE,IAAM,mBAAmB,GAAG,IAAI,kBAAS,CAAC,qBAAY,CAAC,CAAC;IACxD,IAAM,MAAM,GAAG;QACb,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,KAAK,EAAE,MAAM,CAAC,gCAAgC;KAC/C,CAAC;IACF,IAAM,iBAAiB,GAAG,mBAAmB,CAAC,kBAAkB,CAC9D,sCAAsC,EACtC,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,IAAM,eAAe,GAAG,IAAI,kBAAS,CAAC,mCAAQ,CAAC,CAAC;IAChD,IAAM,UAAU,GAAG;QACjB,IAAA,6BAAmB,GAAE;QACrB,MAAM;QACN,MAAM,CAAC,WAAW;QAClB,MAAM,CAAC,gBAAgB;QACvB,iBAAiB;QACjB,IAAI;KACL,CAAC;IACF,IAAM,QAAQ,GAAG,eAAe,CAAC,kBAAkB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAE1E,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEK,IAAM,0BAA0B,GAAG,UACxC,MAAwC;;;;oBAExC,qBAAM,IAAA,2BAAY,EAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,EAAA;;gBAAjD,SAAiD,CAAC;gBAC5C,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;gBAEtB,qBAAM,IAAA,2BAAkB,EACrC,MAAM,CAAC,MAAM,EACb,QAAQ,EACR,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,YAAY,CACpB,EAAA;;gBANK,MAAM,GAAG,SAMd;gBAED,sBAAO;wBACL,eAAe,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,KAAI,IAAI;qBACtC,EAAC;;;KACH,CAAC;AAjBW,QAAA,0BAA0B,8BAiBrC","sourcesContent":["import { Interface } from 'ethers';\nimport {\n PeripheryAbi,\n Socket_VaultWithPayloadAbi as VaultAbi,\n executeTransaction,\n scaleV2,\n} from '@reyaxyz/common';\nimport {\n SocketBridgeAndDepositMAParamsV2,\n SocketBridgeAndDepositMAResultV2,\n} from '../../types';\nimport { getPeripheryAddress } from '../../../../utils/network';\nimport { checkChainId } from '../../../../utils/checkChainId';\n\nconst getCalldata = (params: SocketBridgeAndDepositMAParamsV2): string => {\n const amount = scaleV2(params.collateralDecimals)(params.amount);\n\n const PERIPHERY_INTERFACE = new Interface(PeripheryAbi);\n const inputs = {\n accountId: params.accountId,\n token: params.collateralAddressInReyaPeriphery,\n };\n const peripheryCalldata = PERIPHERY_INTERFACE.encodeFunctionData(\n 'depositExistingMA((uint128,address))',\n [inputs],\n );\n\n const VAULT_INTERFACE = new Interface(VaultAbi);\n const parameters = [\n getPeripheryAddress(),\n amount,\n params.msgGasLimit,\n params.connectorAddress,\n peripheryCalldata,\n '0x',\n ];\n const calldata = VAULT_INTERFACE.encodeFunctionData('bridge', parameters);\n\n return calldata;\n};\n\nexport const socketBridgeAndDepositMAV2 = async (\n params: SocketBridgeAndDepositMAParamsV2,\n): Promise<SocketBridgeAndDepositMAResultV2> => {\n await checkChainId(params.signer, params.chainId);\n const calldata = getCalldata(params);\n\n const result = await executeTransaction(\n params.signer,\n calldata,\n params.bridgeFee,\n params.chainId,\n params.vaultAddress,\n );\n\n return {\n transactionHash: result?.hash || null,\n };\n};\n"]}
1
+ {"version":3,"file":"socketBridgeAndDepositMA.js","sourceRoot":"/","sources":["services/margin-accounts-v2/deposit/socket/socketBridgeAndDepositMA.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iCAAmC;AACnC,0CASyB;AAMzB,qDAAgE;AAChE,+DAA8D;AAC9D,6CAAgE;AAEhE,IAAM,WAAW,GAAG,UAAC,MAAwC;IAC3D,IAAM,MAAM,GAAG,IAAA,gBAAO,EAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAEjE,IAAM,mBAAmB,GAAG,IAAI,kBAAS,CAAC,qBAAY,CAAC,CAAC;IACxD,IAAM,MAAM,GAAG;QACb,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,KAAK,EAAE,MAAM,CAAC,gCAAgC;KAC/C,CAAC;IACF,IAAM,iBAAiB,GAAG,mBAAmB,CAAC,kBAAkB,CAC9D,sCAAsC,EACtC,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,IAAM,eAAe,GAAG,IAAI,kBAAS,CAAC,mCAAQ,CAAC,CAAC;IAChD,IAAM,UAAU,GAAG;QACjB,IAAA,6BAAmB,GAAE;QACrB,MAAM;QACN,MAAM,CAAC,WAAW;QAClB,MAAM,CAAC,gBAAgB;QACvB,iBAAiB;QACjB,IAAI;KACL,CAAC;IACF,IAAM,QAAQ,GAAG,eAAe,CAAC,kBAAkB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAE1E,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEK,IAAM,0BAA0B,GAAG,UACxC,MAAwC;;;;oBAExC,qBAAM,IAAA,2BAAY,EAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,EAAA;;gBAAjD,SAAiD,CAAC;gBAC5C,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;gBAEtB,qBAAM,IAAA,2BAAkB,EACrC,MAAM,CAAC,MAAM,EACb,QAAQ,EACR,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,YAAY,CACpB,EAAA;;gBANK,MAAM,GAAG,SAMd;gBAEG,2BAA2B,GAAkC;oBAC/D,MAAM,EAAE,KAAK;oBACb,MAAM,EAAE,uCAAuC;iBAChD,CAAC;qBAEE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,CAAA,EAAZ,wBAAY;;;;gBAMN,WAAW,GAAG,IAAA,4CAAmC,EACrD,MAAM,CAAC,OAA4B,CACpC,CAAC;gBAKI,kBAAkB,GAAG,IAAA,8BAAqB,EAC9C,MAAM,CAAC,gCAAgC,EACvC,WAAW,CACZ,CAAC;gBACI,aAAa,GAAG,kBAAkB,CAAC,gBAAgB;oBACvD,CAAC,CAAC,IAAA,2BAAkB,EAAC,MAAM,EAAE,WAAW,CAAC;oBACzC,CAAC,CAAC,kBAAkB,CAAC;gBAEvB,qBAAM,IAAA,mCAA0B,GAAE,CAAC,sBAAsB,CACvD,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,MAAM,EACb,aAAa,CAAC,OAAO,EACrB,SAAS,CACV,EAAA;;gBAPD,SAOC,CAAC;gBAEF,2BAA2B,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;;;;gBAE/C,2BAA2B,GAAG;oBAC5B,MAAM,EAAE,KAAK;oBACb,MAAM,EAAE,OAAK,YAAY,KAAK,CAAC,CAAC,CAAC,OAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAK,CAAC;iBAC/D,CAAC;;oBAIN,sBAAO;oBACL,eAAe,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,KAAI,IAAI;oBACrC,2BAA2B,6BAAA;iBAC5B,EAAC;;;KACH,CAAC;AA9DW,QAAA,0BAA0B,8BA8DrC","sourcesContent":["import { Interface } from 'ethers';\nimport {\n PeripheryAbi,\n Socket_VaultWithPayloadAbi as VaultAbi,\n executeTransaction,\n scaleV2,\n getReyaNetworkFromMoneyInOutChainId,\n getTokenInfoByAddress,\n getTokenInfoByName,\n MoneyInOutChainId,\n} from '@reyaxyz/common';\nimport {\n SocketBridgeAndDepositMAParamsV2,\n SocketBridgeAndDepositMAResultV2,\n PendingTransactionPersistence,\n} from '../../types';\nimport { getPeripheryAddress } from '../../../../utils/network';\nimport { checkChainId } from '../../../../utils/checkChainId';\nimport { getTransactionModuleClient } from '../../../../config';\n\nconst getCalldata = (params: SocketBridgeAndDepositMAParamsV2): string => {\n const amount = scaleV2(params.collateralDecimals)(params.amount);\n\n const PERIPHERY_INTERFACE = new Interface(PeripheryAbi);\n const inputs = {\n accountId: params.accountId,\n token: params.collateralAddressInReyaPeriphery,\n };\n const peripheryCalldata = PERIPHERY_INTERFACE.encodeFunctionData(\n 'depositExistingMA((uint128,address))',\n [inputs],\n );\n\n const VAULT_INTERFACE = new Interface(VaultAbi);\n const parameters = [\n getPeripheryAddress(),\n amount,\n params.msgGasLimit,\n params.connectorAddress,\n peripheryCalldata,\n '0x',\n ];\n const calldata = VAULT_INTERFACE.encodeFunctionData('bridge', parameters);\n\n return calldata;\n};\n\nexport const socketBridgeAndDepositMAV2 = async (\n params: SocketBridgeAndDepositMAParamsV2,\n): Promise<SocketBridgeAndDepositMAResultV2> => {\n await checkChainId(params.signer, params.chainId);\n const calldata = getCalldata(params);\n\n const result = await executeTransaction(\n params.signer,\n calldata,\n params.bridgeFee,\n params.chainId,\n params.vaultAddress,\n );\n\n let persistedPendingTransaction: PendingTransactionPersistence = {\n status: false,\n reason: 'Deposit transaction was not broadcast',\n };\n\n if (result?.hash) {\n // Record the deposit as pending so it can be surfaced while the bridge\n // delivers. Best-effort: the deposit is already on-chain by now, so a\n // failure here must never surface to the caller as a throw -- it is\n // returned instead, for the caller to report.\n try {\n const reyaChainId = getReyaNetworkFromMoneyInOutChainId(\n params.chainId as MoneyInOutChainId,\n );\n\n // `asset_id` is a foreign key onto the Reya-side Asset row, which is the\n // *core* token -- rUSD-underlying collateral (e.g. USDC) lands in the\n // margin account as RUSD. Mirrors the v1 bridgeAndDepositExistingMA path.\n const peripheryTokenInfo = getTokenInfoByAddress(\n params.collateralAddressInReyaPeriphery,\n reyaChainId,\n );\n const coreTokenInfo = peripheryTokenInfo.isRUSDUnderlying\n ? getTokenInfoByName('RUSD', reyaChainId)\n : peripheryTokenInfo;\n\n await getTransactionModuleClient().pushPendingTransaction(\n params.accountId,\n result.hash,\n params.chainId,\n params.amount,\n coreTokenInfo.address,\n 'deposit',\n );\n\n persistedPendingTransaction = { status: true };\n } catch (error) {\n persistedPendingTransaction = {\n status: false,\n reason: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n return {\n transactionHash: result?.hash || null,\n persistedPendingTransaction,\n };\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"/","sources":["services/margin-accounts-v2/types.ts"],"names":[],"mappings":"","sourcesContent":["import { JsonRpcSigner, Signer } from 'ethers';\nimport { Address, OFTMessagingFee } from '@reyaxyz/common';\n\nexport type CreateAccountParamsV2 = {\n ownerAddress: string;\n name: string;\n};\n\nexport type CreateAccountResultV2 = {\n transactionHash: string | null;\n accountId: number | null;\n};\n\nexport type TransferMAParamsV2 = {\n collateralAddress: Address;\n collateralDecimals: number;\n signer: Signer | JsonRpcSigner;\n coreSigNonce: number;\n fromMarginAccountId: number;\n toMarginAccountId: number;\n amount: number;\n};\n\nexport type TransferMAResultV2 = {\n transactionHash: string | null;\n coreSigNonce: number | null;\n};\n\nexport type SocketBridgeAndDepositMAParamsV2 = {\n collateralAddressInReyaPeriphery: Address;\n collateralDecimals: number;\n chainId: number;\n bridgeFee: string;\n vaultAddress: Address;\n connectorAddress: Address;\n msgGasLimit: string;\n signer: Signer | JsonRpcSigner;\n accountId: number;\n amount: number;\n};\n\nexport type SocketBridgeAndDepositMAResultV2 = {\n transactionHash: string | null;\n};\n\nexport type LzBridgeAndDepositMAParamsV2 = {\n collateralAddress: Address;\n collateralDecimals: number;\n collateralAddressInReyaPeriphery: Address;\n chainId: number;\n dstEid: number;\n bridgeFee: OFTMessagingFee;\n extraOptions: string;\n signer: Signer | JsonRpcSigner;\n marginAccountId: number;\n amount: number;\n};\n\nexport type LzBridgeAndDepositMAResultV2 = {\n transactionHash: string | null;\n};\n\nexport type EstimateFeeLzBridgeAndDepositMAParamsV2 = Pick<\n LzBridgeAndDepositMAParamsV2,\n | 'collateralAddress'\n | 'collateralDecimals'\n | 'collateralAddressInReyaPeriphery'\n | 'chainId'\n | 'dstEid'\n | 'extraOptions'\n> & {\n signer: Signer | JsonRpcSigner;\n};\n\nexport type EstimateFeeSocketBridgeAndDepositMAParamsV2 = Pick<\n SocketBridgeAndDepositMAParamsV2,\n 'vaultAddress' | 'connectorAddress' | 'msgGasLimit' | 'chainId'\n> & {\n signer: Signer | JsonRpcSigner;\n};\n\nexport type WithdrawMAAndSocketBridgeParamsV2 = {\n collateralAddressInReyaCore: Address;\n collateralDecimals: number;\n destinationChainId: number;\n msgGasLimit: string;\n signer: Signer | JsonRpcSigner;\n coreSigNonce: number;\n marginAccountId: number;\n amount: number;\n receiverAddress: Address;\n};\n\nexport type WithdrawMAAndSocketBridgeResultV2 = {\n transactionHash: string | null;\n coreSigNonce: number | null;\n};\n\nexport type WithdrawMAAndLzBridgeParamsV2 = {\n collateralAddressInReyaCore: Address;\n collateralDecimals: number;\n dstEid: number;\n signer: Signer | JsonRpcSigner;\n coreSigNonce: number;\n marginAccountId: number;\n amount: number;\n receiverAddress: Address;\n};\n\nexport type WithdrawMAAndLzBridgeResultV2 = {\n transactionHash: string | null;\n coreSigNonce: number | null;\n};\n\nexport type Erc20ApproveParamsV2 = {\n collateralAddress: Address;\n collateralDecimals: number;\n spenderAddress: Address;\n chainId: number;\n signer: Signer | JsonRpcSigner;\n amount: number;\n};\n\nexport type Erc20ApproveResultV2 = {\n transactionHash: string | null;\n};\n\nexport type Erc20GetAllowanceParamsV2 = {\n signer: Signer | JsonRpcSigner;\n collateralAddress: Address;\n collateralDecimals: number;\n walletAddress: Address;\n spenderAddress: Address;\n chainId: number;\n};\n\nexport type Erc20GetAllowanceResultV2 = {\n allowance: number;\n};\n\nexport type Erc20GetBalanceParamsV2 = {\n signer: Signer | JsonRpcSigner;\n collateralAddress: Address;\n collateralDecimals: number;\n chainId: number;\n walletAddress: Address;\n};\n\nexport type Erc20GetBalanceResultV2 = {\n balance: number;\n};\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"/","sources":["services/margin-accounts-v2/types.ts"],"names":[],"mappings":"","sourcesContent":["import { JsonRpcSigner, Signer } from 'ethers';\nimport { Address, OFTMessagingFee } from '@reyaxyz/common';\n\nexport type CreateAccountParamsV2 = {\n ownerAddress: string;\n name: string;\n};\n\nexport type CreateAccountResultV2 = {\n transactionHash: string | null;\n accountId: number | null;\n};\n\nexport type TransferMAParamsV2 = {\n collateralAddress: Address;\n collateralDecimals: number;\n signer: Signer | JsonRpcSigner;\n coreSigNonce: number;\n fromMarginAccountId: number;\n toMarginAccountId: number;\n amount: number;\n};\n\nexport type TransferMAResultV2 = {\n transactionHash: string | null;\n coreSigNonce: number | null;\n};\n\nexport type SocketBridgeAndDepositMAParamsV2 = {\n collateralAddressInReyaPeriphery: Address;\n collateralDecimals: number;\n chainId: number;\n bridgeFee: string;\n vaultAddress: Address;\n connectorAddress: Address;\n msgGasLimit: string;\n signer: Signer | JsonRpcSigner;\n accountId: number;\n amount: number;\n};\n\n/**\n * Whether the pending row was registered with the API.\n *\n * Recording it is best-effort -- the deposit is already on-chain by then, so a\n * failure never fails the deposit -- but the caller is the one with error\n * reporting wired up, so the outcome is returned rather than swallowed. A\n * `false` here means the deposit will not appear as pending until the bridge\n * delivers and the indexer picks it up.\n */\nexport type PendingTransactionPersistence =\n | { status: true }\n | { status: false; reason: string };\n\nexport type SocketBridgeAndDepositMAResultV2 = {\n transactionHash: string | null;\n persistedPendingTransaction: PendingTransactionPersistence;\n};\n\nexport type LzBridgeAndDepositMAParamsV2 = {\n collateralAddress: Address;\n collateralDecimals: number;\n collateralAddressInReyaPeriphery: Address;\n chainId: number;\n dstEid: number;\n bridgeFee: OFTMessagingFee;\n extraOptions: string;\n signer: Signer | JsonRpcSigner;\n marginAccountId: number;\n amount: number;\n};\n\nexport type LzBridgeAndDepositMAResultV2 = {\n transactionHash: string | null;\n};\n\nexport type EstimateFeeLzBridgeAndDepositMAParamsV2 = Pick<\n LzBridgeAndDepositMAParamsV2,\n | 'collateralAddress'\n | 'collateralDecimals'\n | 'collateralAddressInReyaPeriphery'\n | 'chainId'\n | 'dstEid'\n | 'extraOptions'\n> & {\n signer: Signer | JsonRpcSigner;\n};\n\nexport type EstimateFeeSocketBridgeAndDepositMAParamsV2 = Pick<\n SocketBridgeAndDepositMAParamsV2,\n 'vaultAddress' | 'connectorAddress' | 'msgGasLimit' | 'chainId'\n> & {\n signer: Signer | JsonRpcSigner;\n};\n\nexport type WithdrawMAAndSocketBridgeParamsV2 = {\n collateralAddressInReyaCore: Address;\n collateralDecimals: number;\n destinationChainId: number;\n msgGasLimit: string;\n signer: Signer | JsonRpcSigner;\n coreSigNonce: number;\n marginAccountId: number;\n amount: number;\n receiverAddress: Address;\n};\n\nexport type WithdrawMAAndSocketBridgeResultV2 = {\n transactionHash: string | null;\n coreSigNonce: number | null;\n};\n\nexport type WithdrawMAAndLzBridgeParamsV2 = {\n collateralAddressInReyaCore: Address;\n collateralDecimals: number;\n dstEid: number;\n signer: Signer | JsonRpcSigner;\n coreSigNonce: number;\n marginAccountId: number;\n amount: number;\n receiverAddress: Address;\n};\n\nexport type WithdrawMAAndLzBridgeResultV2 = {\n transactionHash: string | null;\n coreSigNonce: number | null;\n};\n\nexport type Erc20ApproveParamsV2 = {\n collateralAddress: Address;\n collateralDecimals: number;\n spenderAddress: Address;\n chainId: number;\n signer: Signer | JsonRpcSigner;\n amount: number;\n};\n\nexport type Erc20ApproveResultV2 = {\n transactionHash: string | null;\n};\n\nexport type Erc20GetAllowanceParamsV2 = {\n signer: Signer | JsonRpcSigner;\n collateralAddress: Address;\n collateralDecimals: number;\n walletAddress: Address;\n spenderAddress: Address;\n chainId: number;\n};\n\nexport type Erc20GetAllowanceResultV2 = {\n allowance: number;\n};\n\nexport type Erc20GetBalanceParamsV2 = {\n signer: Signer | JsonRpcSigner;\n collateralAddress: Address;\n collateralDecimals: number;\n chainId: number;\n walletAddress: Address;\n};\n\nexport type Erc20GetBalanceResultV2 = {\n balance: number;\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"lzBridgeAndDepositMA.d.ts","sourceRoot":"/","sources":["services/margin-accounts-v2/deposit/lz/lzBridgeAndDepositMA.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,4BAA4B,EAC5B,4BAA4B,EAC7B,MAAM,aAAa,CAAC;AA6BrB,eAAO,MAAM,sBAAsB,WACzB,4BAA4B,KACnC,QAAQ,4BAA4B,CAetC,CAAC"}
1
+ {"version":3,"file":"lzBridgeAndDepositMA.d.ts","sourceRoot":"/","sources":["services/margin-accounts-v2/deposit/lz/lzBridgeAndDepositMA.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,4BAA4B,EAC5B,4BAA4B,EAC7B,MAAM,aAAa,CAAC;AA6BrB,eAAO,MAAM,sBAAsB,WACzB,4BAA4B,KACnC,QAAQ,4BAA4B,CAuBtC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"socketBridgeAndDepositMA.d.ts","sourceRoot":"/","sources":["services/margin-accounts-v2/deposit/socket/socketBridgeAndDepositMA.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,gCAAgC,EAChC,gCAAgC,EACjC,MAAM,aAAa,CAAC;AA+BrB,eAAO,MAAM,0BAA0B,WAC7B,gCAAgC,KACvC,QAAQ,gCAAgC,CAe1C,CAAC"}
1
+ {"version":3,"file":"socketBridgeAndDepositMA.d.ts","sourceRoot":"/","sources":["services/margin-accounts-v2/deposit/socket/socketBridgeAndDepositMA.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,gCAAgC,EAChC,gCAAgC,EAEjC,MAAM,aAAa,CAAC;AAgCrB,eAAO,MAAM,0BAA0B,WAC7B,gCAAgC,KACvC,QAAQ,gCAAgC,CA4D1C,CAAC"}
@@ -33,8 +33,24 @@ export type SocketBridgeAndDepositMAParamsV2 = {
33
33
  accountId: number;
34
34
  amount: number;
35
35
  };
36
+ /**
37
+ * Whether the pending row was registered with the API.
38
+ *
39
+ * Recording it is best-effort -- the deposit is already on-chain by then, so a
40
+ * failure never fails the deposit -- but the caller is the one with error
41
+ * reporting wired up, so the outcome is returned rather than swallowed. A
42
+ * `false` here means the deposit will not appear as pending until the bridge
43
+ * delivers and the indexer picks it up.
44
+ */
45
+ export type PendingTransactionPersistence = {
46
+ status: true;
47
+ } | {
48
+ status: false;
49
+ reason: string;
50
+ };
36
51
  export type SocketBridgeAndDepositMAResultV2 = {
37
52
  transactionHash: string | null;
53
+ persistedPendingTransaction: PendingTransactionPersistence;
38
54
  };
39
55
  export type LzBridgeAndDepositMAParamsV2 = {
40
56
  collateralAddress: Address;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"/","sources":["services/margin-accounts-v2/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"/","sources":["services/margin-accounts-v2/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reyaxyz/sdk",
3
- "version": "0.149.21",
3
+ "version": "0.150.0",
4
4
  "publishConfig": {
5
5
  "access": "public",
6
6
  "registry": "https://registry.npmjs.org"
@@ -32,11 +32,11 @@
32
32
  },
33
33
  "dependencies": {
34
34
  "@reyaxyz/api-v2-sdk": "0.308.0",
35
- "@reyaxyz/common": "0.358.2",
35
+ "@reyaxyz/common": "0.360.0",
36
36
  "axios": "1.6.2",
37
37
  "bignumber.js": "9.1.2",
38
38
  "ethers": "6.9.0"
39
39
  },
40
40
  "packageManager": "pnpm@8.3.1",
41
- "gitHead": "1e3e82c0e07cb9f6daaf126b88a3cf6e9c4e1439"
41
+ "gitHead": "44d6dac5c229aa3ff0115cd08d0551c58ae0c544"
42
42
  }
@@ -51,6 +51,14 @@ export const lzBridgeAndDepositMAV2 = async (
51
51
  params.collateralAddress,
52
52
  );
53
53
 
54
+ // No pending row is recorded here on purpose. LayerZero carries only REYA
55
+ // deposits, and nothing resolves a LayerZero message's status, so a pending
56
+ // row would never leave `pending`.
57
+ //
58
+ // The consequence is that LayerZero deposits do not appear on
59
+ // /v2/wallet/{address}/deposits at all -- that channel is fed solely by this
60
+ // table. Supporting them means teaching resolveBridgeTransactionStatus to
61
+ // query the LayerZero Scan API, and recording a row here once it can.
54
62
  return {
55
63
  transactionHash: result?.hash || null,
56
64
  };
@@ -4,13 +4,19 @@ import {
4
4
  Socket_VaultWithPayloadAbi as VaultAbi,
5
5
  executeTransaction,
6
6
  scaleV2,
7
+ getReyaNetworkFromMoneyInOutChainId,
8
+ getTokenInfoByAddress,
9
+ getTokenInfoByName,
10
+ MoneyInOutChainId,
7
11
  } from '@reyaxyz/common';
8
12
  import {
9
13
  SocketBridgeAndDepositMAParamsV2,
10
14
  SocketBridgeAndDepositMAResultV2,
15
+ PendingTransactionPersistence,
11
16
  } from '../../types';
12
17
  import { getPeripheryAddress } from '../../../../utils/network';
13
18
  import { checkChainId } from '../../../../utils/checkChainId';
19
+ import { getTransactionModuleClient } from '../../../../config';
14
20
 
15
21
  const getCalldata = (params: SocketBridgeAndDepositMAParamsV2): string => {
16
22
  const amount = scaleV2(params.collateralDecimals)(params.amount);
@@ -53,7 +59,52 @@ export const socketBridgeAndDepositMAV2 = async (
53
59
  params.vaultAddress,
54
60
  );
55
61
 
62
+ let persistedPendingTransaction: PendingTransactionPersistence = {
63
+ status: false,
64
+ reason: 'Deposit transaction was not broadcast',
65
+ };
66
+
67
+ if (result?.hash) {
68
+ // Record the deposit as pending so it can be surfaced while the bridge
69
+ // delivers. Best-effort: the deposit is already on-chain by now, so a
70
+ // failure here must never surface to the caller as a throw -- it is
71
+ // returned instead, for the caller to report.
72
+ try {
73
+ const reyaChainId = getReyaNetworkFromMoneyInOutChainId(
74
+ params.chainId as MoneyInOutChainId,
75
+ );
76
+
77
+ // `asset_id` is a foreign key onto the Reya-side Asset row, which is the
78
+ // *core* token -- rUSD-underlying collateral (e.g. USDC) lands in the
79
+ // margin account as RUSD. Mirrors the v1 bridgeAndDepositExistingMA path.
80
+ const peripheryTokenInfo = getTokenInfoByAddress(
81
+ params.collateralAddressInReyaPeriphery,
82
+ reyaChainId,
83
+ );
84
+ const coreTokenInfo = peripheryTokenInfo.isRUSDUnderlying
85
+ ? getTokenInfoByName('RUSD', reyaChainId)
86
+ : peripheryTokenInfo;
87
+
88
+ await getTransactionModuleClient().pushPendingTransaction(
89
+ params.accountId,
90
+ result.hash,
91
+ params.chainId,
92
+ params.amount,
93
+ coreTokenInfo.address,
94
+ 'deposit',
95
+ );
96
+
97
+ persistedPendingTransaction = { status: true };
98
+ } catch (error) {
99
+ persistedPendingTransaction = {
100
+ status: false,
101
+ reason: error instanceof Error ? error.message : String(error),
102
+ };
103
+ }
104
+ }
105
+
56
106
  return {
57
107
  transactionHash: result?.hash || null,
108
+ persistedPendingTransaction,
58
109
  };
59
110
  };
@@ -39,8 +39,22 @@ export type SocketBridgeAndDepositMAParamsV2 = {
39
39
  amount: number;
40
40
  };
41
41
 
42
+ /**
43
+ * Whether the pending row was registered with the API.
44
+ *
45
+ * Recording it is best-effort -- the deposit is already on-chain by then, so a
46
+ * failure never fails the deposit -- but the caller is the one with error
47
+ * reporting wired up, so the outcome is returned rather than swallowed. A
48
+ * `false` here means the deposit will not appear as pending until the bridge
49
+ * delivers and the indexer picks it up.
50
+ */
51
+ export type PendingTransactionPersistence =
52
+ | { status: true }
53
+ | { status: false; reason: string };
54
+
42
55
  export type SocketBridgeAndDepositMAResultV2 = {
43
56
  transactionHash: string | null;
57
+ persistedPendingTransaction: PendingTransactionPersistence;
44
58
  };
45
59
 
46
60
  export type LzBridgeAndDepositMAParamsV2 = {