@lombard.finance/sdk-solana 1.2.2 → 2.0.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 +48 -15
- package/dist/index.cjs +1 -1
- package/dist/index.js +37 -31
- package/dist/index2.cjs +57 -54
- package/dist/index2.js +7608 -7206
- package/package.json +2 -2
- package/src/const/errors.ts +0 -4
- package/src/const/getConfig.ts +43 -20
- package/src/const/rpcUrls.ts +2 -2
- package/src/idl/asset_router.json +548 -179
- package/src/idl/consortium.json +24 -43
- package/src/idl/mailbox.json +118 -107
- package/src/index.ts +1 -3
- package/src/services/SolanaServiceImpl.test.ts +123 -0
- package/src/services/SolanaServiceImpl.ts +53 -17
- package/src/stories/components/OutputSelector/OutputSelector.tsx +1 -0
- package/src/types/errors.ts +2 -0
- package/src/utils/createDebugLogger.ts +6 -13
- package/src/utils/errors.ts +2 -0
- package/src/utils/tokenAccount.ts +3 -1
- package/src/utils/transactions.ts +1 -1
- package/src/web3Sdk/claimToken/claimBtcb.ts +37 -28
- package/src/web3Sdk/claimToken/claimLbtcGmp.ts +66 -8
- package/src/web3Sdk/claimToken/claimToken.stories.tsx +2 -2
- package/src/web3Sdk/claimToken/claimToken.ts +20 -16
- package/src/web3Sdk/claimToken/constants.ts +5 -0
- package/src/web3Sdk/claimToken/index.ts +1 -0
- package/src/web3Sdk/claimToken/shared.ts +88 -80
- package/src/web3Sdk/deposit/deposit.stories.tsx +240 -0
- package/src/web3Sdk/deposit/deposit.test.ts +327 -0
- package/src/web3Sdk/deposit/deposit.ts +339 -0
- package/src/web3Sdk/deposit/index.ts +1 -0
- package/src/web3Sdk/getTokenFeeConfig/getTokenFeeConfig.stories.tsx +166 -0
- package/src/web3Sdk/getTokenFeeConfig/getTokenFeeConfig.test.ts +224 -0
- package/src/web3Sdk/getTokenFeeConfig/getTokenFeeConfig.ts +154 -0
- package/src/web3Sdk/getTokenFeeConfig/index.ts +11 -0
- package/src/web3Sdk/index.ts +3 -4
- package/src/web3Sdk/redeem/index.ts +1 -0
- package/src/web3Sdk/redeem/redeem.stories.tsx +226 -0
- package/src/web3Sdk/redeem/redeem.test.ts +327 -0
- package/src/web3Sdk/redeem/redeem.ts +352 -0
- package/src/web3Sdk/redeemToken/redeemBtcb.ts +174 -0
- package/src/web3Sdk/redeemToken/redeemForBtc.stories.tsx +35 -21
- package/src/web3Sdk/redeemToken/redeemForBtc.test.ts +306 -0
- package/src/web3Sdk/redeemToken/redeemForBtc.ts +54 -215
- package/src/web3Sdk/redeemToken/redeemLbtc.ts +174 -0
- package/src/web3Sdk/redeemToken/shared.test.ts +45 -0
- package/src/web3Sdk/redeemToken/shared.ts +97 -0
- package/src/web3Sdk/claimLBTC/claimLBTC.stories.tsx +0 -189
- package/src/web3Sdk/claimLBTC/claimLBTC.ts +0 -225
- package/src/web3Sdk/claimLBTC/index.ts +0 -1
- package/src/web3Sdk/claimLBTC/utils/generateDepositId.ts +0 -75
- package/src/web3Sdk/claimLBTC/utils/index.ts +0 -2
- package/src/web3Sdk/claimLBTC/utils/parseTransactionLogs.ts +0 -44
- package/src/web3Sdk/claimLBTC/utils/payloadUtils.ts +0 -58
- package/src/web3Sdk/claimLBTC/utils/postMintSignatures.ts +0 -50
- package/src/web3Sdk/unstakeLBTC/index.ts +0 -1
- package/src/web3Sdk/unstakeLBTC/unstakeLBTC.stories.tsx +0 -141
- package/src/web3Sdk/unstakeLBTC/unstakeLBTC.ts +0 -140
- /package/src/web3Sdk/{claimLBTC → claimToken}/utils/__tests__/signatureUtils.test.ts +0 -0
- /package/src/web3Sdk/{claimLBTC → claimToken}/utils/signatureUtils.ts +0 -0
package/src/idl/consortium.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"address": "
|
|
2
|
+
"address": "Lomfd3XZfPV8PyLkjuLVwpYhrBoGJdnYkm98HCgeYGC",
|
|
3
3
|
"metadata": {
|
|
4
4
|
"name": "consortium",
|
|
5
5
|
"version": "0.1.0",
|
|
@@ -75,36 +75,6 @@
|
|
|
75
75
|
"writable": true,
|
|
76
76
|
"signer": true
|
|
77
77
|
},
|
|
78
|
-
{
|
|
79
|
-
"name": "config",
|
|
80
|
-
"writable": true,
|
|
81
|
-
"pda": {
|
|
82
|
-
"seeds": [
|
|
83
|
-
{
|
|
84
|
-
"kind": "const",
|
|
85
|
-
"value": [
|
|
86
|
-
99,
|
|
87
|
-
111,
|
|
88
|
-
110,
|
|
89
|
-
115,
|
|
90
|
-
111,
|
|
91
|
-
114,
|
|
92
|
-
116,
|
|
93
|
-
105,
|
|
94
|
-
117,
|
|
95
|
-
109,
|
|
96
|
-
95,
|
|
97
|
-
99,
|
|
98
|
-
111,
|
|
99
|
-
110,
|
|
100
|
-
102,
|
|
101
|
-
105,
|
|
102
|
-
103
|
|
103
|
-
]
|
|
104
|
-
}
|
|
105
|
-
]
|
|
106
|
-
}
|
|
107
|
-
},
|
|
108
78
|
{
|
|
109
79
|
"name": "session",
|
|
110
80
|
"writable": true
|
|
@@ -181,9 +151,6 @@
|
|
|
181
151
|
"name": "session",
|
|
182
152
|
"writable": true
|
|
183
153
|
},
|
|
184
|
-
{
|
|
185
|
-
"name": "validated_payload"
|
|
186
|
-
},
|
|
187
154
|
{
|
|
188
155
|
"name": "system_program",
|
|
189
156
|
"address": "11111111111111111111111111111111"
|
|
@@ -221,7 +188,6 @@
|
|
|
221
188
|
},
|
|
222
189
|
{
|
|
223
190
|
"name": "config",
|
|
224
|
-
"writable": true,
|
|
225
191
|
"pda": {
|
|
226
192
|
"seeds": [
|
|
227
193
|
{
|
|
@@ -1054,6 +1020,21 @@
|
|
|
1054
1020
|
"code": 6022,
|
|
1055
1021
|
"name": "ValidatedPayloadNotEmpty",
|
|
1056
1022
|
"msg": "Validated payload not empty"
|
|
1023
|
+
},
|
|
1024
|
+
{
|
|
1025
|
+
"code": 6023,
|
|
1026
|
+
"name": "ValidatedPayloadEpochMismatch",
|
|
1027
|
+
"msg": "Validated payload epoch mismatch"
|
|
1028
|
+
},
|
|
1029
|
+
{
|
|
1030
|
+
"code": 6024,
|
|
1031
|
+
"name": "InvalidEpoch",
|
|
1032
|
+
"msg": "Epoch must be greater than zero"
|
|
1033
|
+
},
|
|
1034
|
+
{
|
|
1035
|
+
"code": 6025,
|
|
1036
|
+
"name": "DuplicateValidator",
|
|
1037
|
+
"msg": "Duplicate validator in validator set"
|
|
1057
1038
|
}
|
|
1058
1039
|
],
|
|
1059
1040
|
"types": [
|
|
@@ -1226,14 +1207,9 @@
|
|
|
1226
1207
|
}
|
|
1227
1208
|
},
|
|
1228
1209
|
{
|
|
1229
|
-
"name": "
|
|
1210
|
+
"name": "validator_indices",
|
|
1230
1211
|
"type": {
|
|
1231
|
-
"vec":
|
|
1232
|
-
"array": [
|
|
1233
|
-
"u8",
|
|
1234
|
-
64
|
|
1235
|
-
]
|
|
1236
|
-
}
|
|
1212
|
+
"vec": "u64"
|
|
1237
1213
|
}
|
|
1238
1214
|
}
|
|
1239
1215
|
]
|
|
@@ -1243,7 +1219,12 @@
|
|
|
1243
1219
|
"name": "ValidatedPayload",
|
|
1244
1220
|
"type": {
|
|
1245
1221
|
"kind": "struct",
|
|
1246
|
-
"fields": [
|
|
1222
|
+
"fields": [
|
|
1223
|
+
{
|
|
1224
|
+
"name": "latest_epoch",
|
|
1225
|
+
"type": "u64"
|
|
1226
|
+
}
|
|
1227
|
+
]
|
|
1247
1228
|
}
|
|
1248
1229
|
},
|
|
1249
1230
|
{
|
package/src/idl/mailbox.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"address": "
|
|
2
|
+
"address": "Lomu595CAtJGF6mpnfeAJ7daZfVdHeRkAdKyfqzXqom",
|
|
3
3
|
"metadata": {
|
|
4
4
|
"name": "mailbox",
|
|
5
5
|
"version": "0.1.0",
|
|
@@ -735,7 +735,9 @@
|
|
|
735
735
|
}
|
|
736
736
|
}
|
|
737
737
|
],
|
|
738
|
-
"returns":
|
|
738
|
+
"returns": {
|
|
739
|
+
"option": "bytes"
|
|
740
|
+
}
|
|
739
741
|
},
|
|
740
742
|
{
|
|
741
743
|
"name": "initialize",
|
|
@@ -762,38 +764,38 @@
|
|
|
762
764
|
{
|
|
763
765
|
"kind": "const",
|
|
764
766
|
"value": [
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
193,
|
|
771
|
-
50,
|
|
772
|
-
141,
|
|
773
|
-
128,
|
|
774
|
-
131,
|
|
775
|
-
75,
|
|
776
|
-
41,
|
|
777
|
-
96,
|
|
778
|
-
114,
|
|
779
|
-
108,
|
|
780
|
-
90,
|
|
781
|
-
65,
|
|
782
|
-
124,
|
|
783
|
-
105,
|
|
784
|
-
212,
|
|
785
|
-
246,
|
|
786
|
-
221,
|
|
787
|
-
111,
|
|
788
|
-
217,
|
|
789
|
-
24,
|
|
790
|
-
17,
|
|
791
|
-
69,
|
|
767
|
+
36,
|
|
768
|
+
139,
|
|
769
|
+
239,
|
|
770
|
+
15,
|
|
771
|
+
35,
|
|
792
772
|
69,
|
|
793
|
-
|
|
794
|
-
|
|
773
|
+
202,
|
|
774
|
+
207,
|
|
775
|
+
115,
|
|
776
|
+
142,
|
|
777
|
+
92,
|
|
795
778
|
67,
|
|
796
|
-
|
|
779
|
+
70,
|
|
780
|
+
108,
|
|
781
|
+
102,
|
|
782
|
+
154,
|
|
783
|
+
92,
|
|
784
|
+
112,
|
|
785
|
+
22,
|
|
786
|
+
213,
|
|
787
|
+
14,
|
|
788
|
+
36,
|
|
789
|
+
245,
|
|
790
|
+
236,
|
|
791
|
+
182,
|
|
792
|
+
13,
|
|
793
|
+
241,
|
|
794
|
+
250,
|
|
795
|
+
220,
|
|
796
|
+
135,
|
|
797
|
+
229,
|
|
798
|
+
116
|
|
797
799
|
]
|
|
798
800
|
}
|
|
799
801
|
],
|
|
@@ -1108,6 +1110,9 @@
|
|
|
1108
1110
|
},
|
|
1109
1111
|
{
|
|
1110
1112
|
"name": "outbound_message",
|
|
1113
|
+
"docs": [
|
|
1114
|
+
"so the mailbox program handles its data"
|
|
1115
|
+
],
|
|
1111
1116
|
"writable": true,
|
|
1112
1117
|
"pda": {
|
|
1113
1118
|
"seeds": [
|
|
@@ -1151,33 +1156,7 @@
|
|
|
1151
1156
|
},
|
|
1152
1157
|
{
|
|
1153
1158
|
"name": "sender_config",
|
|
1154
|
-
"optional": true
|
|
1155
|
-
"pda": {
|
|
1156
|
-
"seeds": [
|
|
1157
|
-
{
|
|
1158
|
-
"kind": "const",
|
|
1159
|
-
"value": [
|
|
1160
|
-
115,
|
|
1161
|
-
101,
|
|
1162
|
-
110,
|
|
1163
|
-
100,
|
|
1164
|
-
101,
|
|
1165
|
-
114,
|
|
1166
|
-
95,
|
|
1167
|
-
99,
|
|
1168
|
-
111,
|
|
1169
|
-
110,
|
|
1170
|
-
102,
|
|
1171
|
-
105,
|
|
1172
|
-
103
|
|
1173
|
-
]
|
|
1174
|
-
},
|
|
1175
|
-
{
|
|
1176
|
-
"kind": "account",
|
|
1177
|
-
"path": "sender_authority.owner"
|
|
1178
|
-
}
|
|
1179
|
-
]
|
|
1180
|
-
}
|
|
1159
|
+
"optional": true
|
|
1181
1160
|
}
|
|
1182
1161
|
],
|
|
1183
1162
|
"args": [
|
|
@@ -1311,6 +1290,58 @@
|
|
|
1311
1290
|
}
|
|
1312
1291
|
]
|
|
1313
1292
|
},
|
|
1293
|
+
{
|
|
1294
|
+
"name": "set_treasury",
|
|
1295
|
+
"discriminator": [
|
|
1296
|
+
57,
|
|
1297
|
+
97,
|
|
1298
|
+
196,
|
|
1299
|
+
95,
|
|
1300
|
+
195,
|
|
1301
|
+
206,
|
|
1302
|
+
106,
|
|
1303
|
+
136
|
|
1304
|
+
],
|
|
1305
|
+
"accounts": [
|
|
1306
|
+
{
|
|
1307
|
+
"name": "admin",
|
|
1308
|
+
"signer": true
|
|
1309
|
+
},
|
|
1310
|
+
{
|
|
1311
|
+
"name": "config",
|
|
1312
|
+
"writable": true,
|
|
1313
|
+
"pda": {
|
|
1314
|
+
"seeds": [
|
|
1315
|
+
{
|
|
1316
|
+
"kind": "const",
|
|
1317
|
+
"value": [
|
|
1318
|
+
109,
|
|
1319
|
+
97,
|
|
1320
|
+
105,
|
|
1321
|
+
108,
|
|
1322
|
+
98,
|
|
1323
|
+
111,
|
|
1324
|
+
120,
|
|
1325
|
+
95,
|
|
1326
|
+
99,
|
|
1327
|
+
111,
|
|
1328
|
+
110,
|
|
1329
|
+
102,
|
|
1330
|
+
105,
|
|
1331
|
+
103
|
|
1332
|
+
]
|
|
1333
|
+
}
|
|
1334
|
+
]
|
|
1335
|
+
}
|
|
1336
|
+
}
|
|
1337
|
+
],
|
|
1338
|
+
"args": [
|
|
1339
|
+
{
|
|
1340
|
+
"name": "new_treasury",
|
|
1341
|
+
"type": "pubkey"
|
|
1342
|
+
}
|
|
1343
|
+
]
|
|
1344
|
+
},
|
|
1314
1345
|
{
|
|
1315
1346
|
"name": "transfer_ownership",
|
|
1316
1347
|
"discriminator": [
|
|
@@ -1611,19 +1642,6 @@
|
|
|
1611
1642
|
178
|
|
1612
1643
|
]
|
|
1613
1644
|
},
|
|
1614
|
-
{
|
|
1615
|
-
"name": "OutboundMessage",
|
|
1616
|
-
"discriminator": [
|
|
1617
|
-
166,
|
|
1618
|
-
139,
|
|
1619
|
-
82,
|
|
1620
|
-
146,
|
|
1621
|
-
129,
|
|
1622
|
-
32,
|
|
1623
|
-
235,
|
|
1624
|
-
239
|
|
1625
|
-
]
|
|
1626
|
-
},
|
|
1627
1645
|
{
|
|
1628
1646
|
"name": "OutboundMessagePath",
|
|
1629
1647
|
"discriminator": [
|
|
@@ -1910,91 +1928,96 @@
|
|
|
1910
1928
|
},
|
|
1911
1929
|
{
|
|
1912
1930
|
"code": 6004,
|
|
1931
|
+
"name": "InvalidPayloadHash",
|
|
1932
|
+
"msg": "Invalid payload hash"
|
|
1933
|
+
},
|
|
1934
|
+
{
|
|
1935
|
+
"code": 6005,
|
|
1913
1936
|
"name": "InvalidPayloadLength",
|
|
1914
1937
|
"msg": "Invalid payload size"
|
|
1915
1938
|
},
|
|
1916
1939
|
{
|
|
1917
|
-
"code":
|
|
1940
|
+
"code": 6006,
|
|
1918
1941
|
"name": "PayloadTooLarge",
|
|
1919
1942
|
"msg": "Payload too large"
|
|
1920
1943
|
},
|
|
1921
1944
|
{
|
|
1922
|
-
"code":
|
|
1945
|
+
"code": 6007,
|
|
1923
1946
|
"name": "InvalidPayloadSelector",
|
|
1924
1947
|
"msg": "Invalid payload selector"
|
|
1925
1948
|
},
|
|
1926
1949
|
{
|
|
1927
|
-
"code":
|
|
1950
|
+
"code": 6008,
|
|
1928
1951
|
"name": "InvalidMessagePath",
|
|
1929
1952
|
"msg": "Invalid message path"
|
|
1930
1953
|
},
|
|
1931
1954
|
{
|
|
1932
|
-
"code":
|
|
1955
|
+
"code": 6009,
|
|
1933
1956
|
"name": "PayloadNotFound",
|
|
1934
1957
|
"msg": "Payload not found"
|
|
1935
1958
|
},
|
|
1936
1959
|
{
|
|
1937
|
-
"code":
|
|
1960
|
+
"code": 6010,
|
|
1938
1961
|
"name": "PayloadAlreadyHandled",
|
|
1939
1962
|
"msg": "Payload already handled"
|
|
1940
1963
|
},
|
|
1941
1964
|
{
|
|
1942
|
-
"code":
|
|
1965
|
+
"code": 6011,
|
|
1943
1966
|
"name": "InvalidPayloadState",
|
|
1944
1967
|
"msg": "Invalid payload state"
|
|
1945
1968
|
},
|
|
1946
1969
|
{
|
|
1947
|
-
"code":
|
|
1970
|
+
"code": 6012,
|
|
1948
1971
|
"name": "InsufficientFunds",
|
|
1949
1972
|
"msg": "Insufficient funds for fee"
|
|
1950
1973
|
},
|
|
1951
1974
|
{
|
|
1952
|
-
"code":
|
|
1975
|
+
"code": 6013,
|
|
1953
1976
|
"name": "InvalidFeeConfiguration",
|
|
1954
1977
|
"msg": "Invalid fee configuration"
|
|
1955
1978
|
},
|
|
1956
1979
|
{
|
|
1957
|
-
"code":
|
|
1980
|
+
"code": 6014,
|
|
1958
1981
|
"name": "InvalidAdmin",
|
|
1959
1982
|
"msg": "Invalid admin"
|
|
1960
1983
|
},
|
|
1961
1984
|
{
|
|
1962
|
-
"code":
|
|
1985
|
+
"code": 6015,
|
|
1963
1986
|
"name": "InvalidPauser",
|
|
1964
1987
|
"msg": "Invalid pauser"
|
|
1965
1988
|
},
|
|
1966
1989
|
{
|
|
1967
|
-
"code":
|
|
1990
|
+
"code": 6016,
|
|
1968
1991
|
"name": "PauserAlreadyExists",
|
|
1969
1992
|
"msg": "Pauser already exists"
|
|
1970
1993
|
},
|
|
1971
1994
|
{
|
|
1972
|
-
"code":
|
|
1995
|
+
"code": 6017,
|
|
1973
1996
|
"name": "PauserNotFound",
|
|
1974
1997
|
"msg": "Pauser not found"
|
|
1975
1998
|
},
|
|
1976
1999
|
{
|
|
1977
|
-
"code":
|
|
2000
|
+
"code": 6018,
|
|
1978
2001
|
"name": "InvalidNonce",
|
|
1979
2002
|
"msg": "Invalid nonce"
|
|
1980
2003
|
},
|
|
1981
2004
|
{
|
|
1982
|
-
"code":
|
|
2005
|
+
"code": 6019,
|
|
1983
2006
|
"name": "BufferIOError",
|
|
1984
2007
|
"msg": "Buffer IO error"
|
|
1985
2008
|
},
|
|
1986
2009
|
{
|
|
1987
|
-
"code":
|
|
2010
|
+
"code": 6020,
|
|
1988
2011
|
"name": "TreasuryMismatch",
|
|
1989
2012
|
"msg": "treasury mismatch"
|
|
1990
2013
|
},
|
|
1991
2014
|
{
|
|
1992
|
-
"code":
|
|
2015
|
+
"code": 6021,
|
|
1993
2016
|
"name": "PublicSendWithFeeDisabled",
|
|
1994
2017
|
"msg": "public send with fee disabled"
|
|
1995
2018
|
},
|
|
1996
2019
|
{
|
|
1997
|
-
"code":
|
|
2020
|
+
"code": 6022,
|
|
1998
2021
|
"name": "InvalidDestinationCaller",
|
|
1999
2022
|
"msg": "Invalid destination caller"
|
|
2000
2023
|
}
|
|
@@ -2258,10 +2281,6 @@
|
|
|
2258
2281
|
{
|
|
2259
2282
|
"name": "nonce",
|
|
2260
2283
|
"type": "u64"
|
|
2261
|
-
},
|
|
2262
|
-
{
|
|
2263
|
-
"name": "raw_payload",
|
|
2264
|
-
"type": "bytes"
|
|
2265
2284
|
}
|
|
2266
2285
|
]
|
|
2267
2286
|
}
|
|
@@ -2364,19 +2383,6 @@
|
|
|
2364
2383
|
]
|
|
2365
2384
|
}
|
|
2366
2385
|
},
|
|
2367
|
-
{
|
|
2368
|
-
"name": "OutboundMessage",
|
|
2369
|
-
"type": {
|
|
2370
|
-
"kind": "struct",
|
|
2371
|
-
"fields": [
|
|
2372
|
-
{
|
|
2373
|
-
"defined": {
|
|
2374
|
-
"name": "MessageV1"
|
|
2375
|
-
}
|
|
2376
|
-
}
|
|
2377
|
-
]
|
|
2378
|
-
}
|
|
2379
|
-
},
|
|
2380
2386
|
{
|
|
2381
2387
|
"name": "OutboundMessagePath",
|
|
2382
2388
|
"type": {
|
|
@@ -2598,7 +2604,12 @@
|
|
|
2598
2604
|
"name": "ValidatedPayload",
|
|
2599
2605
|
"type": {
|
|
2600
2606
|
"kind": "struct",
|
|
2601
|
-
"fields": [
|
|
2607
|
+
"fields": [
|
|
2608
|
+
{
|
|
2609
|
+
"name": "latest_epoch",
|
|
2610
|
+
"type": "u64"
|
|
2611
|
+
}
|
|
2612
|
+
]
|
|
2602
2613
|
}
|
|
2603
2614
|
}
|
|
2604
2615
|
]
|
package/src/index.ts
CHANGED
|
@@ -3,7 +3,7 @@ export * from './types/network';
|
|
|
3
3
|
export * from './types/walletProviders';
|
|
4
4
|
|
|
5
5
|
// Export constants
|
|
6
|
-
export { getConfig, getLBTCAddress } from './const/getConfig';
|
|
6
|
+
export { getBTCBAddress, getConfig, getLBTCAddress } from './const/getConfig';
|
|
7
7
|
export * from './const/known-errors';
|
|
8
8
|
export * from './const/rpcUrls';
|
|
9
9
|
|
|
@@ -20,8 +20,6 @@ export * from './bridge';
|
|
|
20
20
|
// Add these specific exports to make them easier to import
|
|
21
21
|
export { loadBridgeFunctions } from './bridge';
|
|
22
22
|
export { getOftAmountCanBeSent } from './bridge/getOftAmountCanBeSent';
|
|
23
|
-
export { claimLBTC } from './web3Sdk/claimLBTC/claimLBTC';
|
|
24
|
-
export { unstakeLBTC } from './web3Sdk/unstakeLBTC/unstakeLBTC';
|
|
25
23
|
|
|
26
24
|
// Optional chain module (Service-First): used by the core SDK CapabilityRegistry.
|
|
27
25
|
// This MUST be exported from the package entrypoint so integrators can register:
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
2
|
+
|
|
3
|
+
import { SolanaServiceImpl } from './SolanaServiceImpl';
|
|
4
|
+
|
|
5
|
+
vi.mock('../web3Sdk/signLbtcDestinationAddrSolana', () => ({
|
|
6
|
+
signLbtcDestinationAddrSolana: vi.fn().mockResolvedValue({ signature: 'mock-sig' }),
|
|
7
|
+
}));
|
|
8
|
+
|
|
9
|
+
vi.mock('../web3Sdk/redeemToken/redeemForBtc', () => ({
|
|
10
|
+
redeemForBtc: vi.fn().mockResolvedValue('mock-redeemForBtc-tx'),
|
|
11
|
+
}));
|
|
12
|
+
|
|
13
|
+
vi.mock('../web3Sdk/redeem/redeem', () => ({
|
|
14
|
+
redeem: vi.fn().mockResolvedValue('mock-redeem-tx'),
|
|
15
|
+
}));
|
|
16
|
+
|
|
17
|
+
vi.mock('../web3Sdk/deposit/deposit', () => ({
|
|
18
|
+
deposit: vi.fn().mockResolvedValue('mock-deposit-tx'),
|
|
19
|
+
}));
|
|
20
|
+
|
|
21
|
+
const { signLbtcDestinationAddrSolana } = await import(
|
|
22
|
+
'../web3Sdk/signLbtcDestinationAddrSolana'
|
|
23
|
+
);
|
|
24
|
+
const { redeemForBtc } = await import('../web3Sdk/redeemToken/redeemForBtc');
|
|
25
|
+
const { redeem } = await import('../web3Sdk/redeem/redeem');
|
|
26
|
+
const { deposit } = await import('../web3Sdk/deposit/deposit');
|
|
27
|
+
|
|
28
|
+
const mockProvider = { publicKey: 'mock-pubkey' };
|
|
29
|
+
const getProvider = vi.fn().mockResolvedValue(mockProvider);
|
|
30
|
+
|
|
31
|
+
describe('SolanaServiceImpl', () => {
|
|
32
|
+
it('should resolve provider for each call', async () => {
|
|
33
|
+
const service = new SolanaServiceImpl(getProvider);
|
|
34
|
+
|
|
35
|
+
await service.signLbtcDestination({ network: 'devnet' });
|
|
36
|
+
|
|
37
|
+
expect(getProvider).toHaveBeenCalled();
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
describe('signLbtcDestination', () => {
|
|
41
|
+
it('should delegate to signLbtcDestinationAddrSolana', async () => {
|
|
42
|
+
const service = new SolanaServiceImpl(getProvider);
|
|
43
|
+
|
|
44
|
+
const result = await service.signLbtcDestination({ network: 'devnet' });
|
|
45
|
+
|
|
46
|
+
expect(signLbtcDestinationAddrSolana).toHaveBeenCalledWith({
|
|
47
|
+
provider: mockProvider,
|
|
48
|
+
network: 'devnet',
|
|
49
|
+
});
|
|
50
|
+
expect(result).toEqual({ signature: 'mock-sig' });
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
describe('redeemForBtc', () => {
|
|
55
|
+
it('should delegate to redeemForBtc and return signature', async () => {
|
|
56
|
+
const service = new SolanaServiceImpl(getProvider);
|
|
57
|
+
|
|
58
|
+
const result = await service.redeemForBtc({
|
|
59
|
+
amount: '2000',
|
|
60
|
+
btcAddress: 'bc1q...',
|
|
61
|
+
network: 'devnet',
|
|
62
|
+
env: 'dev',
|
|
63
|
+
tokenMint: 'LBTCmint...',
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
expect(redeemForBtc).toHaveBeenCalledWith(mockProvider, {
|
|
67
|
+
amount: '2000',
|
|
68
|
+
btcAddress: 'bc1q...',
|
|
69
|
+
network: 'devnet',
|
|
70
|
+
env: 'dev',
|
|
71
|
+
tokenMint: 'LBTCmint...',
|
|
72
|
+
});
|
|
73
|
+
expect(result).toEqual({ signature: 'mock-redeemForBtc-tx' });
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
describe('redeem', () => {
|
|
78
|
+
it('should delegate to redeem and return signature', async () => {
|
|
79
|
+
const service = new SolanaServiceImpl(getProvider);
|
|
80
|
+
|
|
81
|
+
const result = await service.redeem({
|
|
82
|
+
amount: '3000',
|
|
83
|
+
recipient: '8yarEiDaJVik...',
|
|
84
|
+
network: 'devnet',
|
|
85
|
+
env: 'dev',
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
expect(redeem).toHaveBeenCalledWith(mockProvider, {
|
|
89
|
+
amount: '3000',
|
|
90
|
+
recipient: '8yarEiDaJVik...',
|
|
91
|
+
network: 'devnet',
|
|
92
|
+
env: 'dev',
|
|
93
|
+
tokenMint: undefined,
|
|
94
|
+
toLchainId: undefined,
|
|
95
|
+
toTokenAddress: undefined,
|
|
96
|
+
});
|
|
97
|
+
expect(result).toEqual({ signature: 'mock-redeem-tx' });
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
describe('deposit', () => {
|
|
102
|
+
it('should delegate to deposit and return signature', async () => {
|
|
103
|
+
const service = new SolanaServiceImpl(getProvider);
|
|
104
|
+
|
|
105
|
+
const result = await service.deposit({
|
|
106
|
+
amount: '4000',
|
|
107
|
+
recipient: '8yarEiDaJVik...',
|
|
108
|
+
network: 'devnet',
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
expect(deposit).toHaveBeenCalledWith(mockProvider, {
|
|
112
|
+
amount: '4000',
|
|
113
|
+
recipient: '8yarEiDaJVik...',
|
|
114
|
+
network: 'devnet',
|
|
115
|
+
env: undefined,
|
|
116
|
+
sourceTokenMint: undefined,
|
|
117
|
+
toLchainId: undefined,
|
|
118
|
+
toTokenAddress: undefined,
|
|
119
|
+
});
|
|
120
|
+
expect(result).toEqual({ signature: 'mock-deposit-tx' });
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
});
|