@layerzerolabs/layerzero-v2-ton 3.0.27 → 3.0.29
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/CHANGELOG.md +12 -0
- package/build/ActionsSerde.test.compiled.json +1 -0
- package/build/AllStorages.compiled.json +1 -1
- package/build/AllStorages.test.compiled.json +1 -1
- package/build/BaseContract.test.compiled.json +1 -1
- package/build/Channel.compiled.json +1 -1
- package/build/Channel.permissions.test.compiled.json +1 -1
- package/build/ChannelBurn.test.compiled.json +1 -1
- package/build/ChannelCommitPacket.test.compiled.json +1 -1
- package/build/ChannelConfig.test.compiled.json +1 -1
- package/build/ChannelInitialize.test.compiled.json +1 -1
- package/build/ChannelMsglibIntegration.test.compiled.json +1 -1
- package/build/ChannelMsglibSendCallback.test.compiled.json +1 -1
- package/build/ChannelNilify.test.compiled.json +1 -1
- package/build/ChannelReceive.test.compiled.json +1 -1
- package/build/ChannelReceiveCallback.test.compiled.json +1 -1
- package/build/ChannelReceiveView.test.compiled.json +1 -1
- package/build/ChannelSend.test.compiled.json +1 -1
- package/build/ChannelSerde.test.compiled.json +1 -0
- package/build/Classlib.test.compiled.json +1 -1
- package/build/ComputeDataSizeGas.test.compiled.json +1 -1
- package/build/Connection.compiled.json +1 -1
- package/build/Controller.assertions.test.compiled.json +1 -1
- package/build/Controller.compiled.json +1 -1
- package/build/Controller.permissions.test.compiled.json +1 -1
- package/build/Controller.test.compiled.json +1 -1
- package/build/Counter.compiled.json +1 -1
- package/build/Counter.permissions.test.compiled.json +1 -1
- package/build/Counter.setters.test.compiled.json +1 -1
- package/build/Counter.test.compiled.json +1 -1
- package/build/Dvn.compiled.json +1 -1
- package/build/Dvn.test.compiled.json +1 -1
- package/build/DvnFeeLib.compiled.json +1 -1
- package/build/DvnFeeLibSerde.test.compiled.json +1 -0
- package/build/DvnPermissions.test.compiled.json +1 -1
- package/build/DvnSerde.test.compiled.json +1 -0
- package/build/Endpoint.compiled.json +1 -1
- package/build/Endpoint.permissions.test.compiled.json +1 -1
- package/build/Endpoint.test.compiled.json +1 -1
- package/build/EndpointSerde.test.compiled.json +1 -0
- package/build/EndpointSetEpConfigDefaults.test.compiled.json +1 -1
- package/build/Executor.compiled.json +1 -1
- package/build/Executor.test.compiled.json +1 -1
- package/build/ExecutorFeeLib.compiled.json +1 -1
- package/build/ExecutorFeeLibSerde.test.compiled.json +1 -0
- package/build/ExecutorPermissions.test.compiled.json +1 -1
- package/build/ExecutorSerde.test.compiled.json +1 -0
- package/build/LzClasses.test.compiled.json +1 -1
- package/build/LzClassesSerde.test.compiled.json +1 -0
- package/build/LzUtil.test.compiled.json +1 -1
- package/build/MsgData.test.compiled.json +1 -1
- package/build/MsgDataSerde.test.compiled.json +1 -0
- package/build/MsglibPacketCodec.test.compiled.json +1 -1
- package/build/PipelinedOutOfOrder.test.compiled.json +1 -1
- package/build/PipelinedOutOfOrderSerde.test.compiled.json +1 -0
- package/build/PriceFeedCache.compiled.json +1 -1
- package/build/PriceFeedCache.test.compiled.json +1 -1
- package/build/PriceFeedCache.test.permissions.compiled.json +1 -1
- package/build/PriceFeedCacheSerde.test.compiled.json +1 -0
- package/build/PriceFeedFeeLibSerde.test.compiled.json +1 -0
- package/build/Proxy.compiled.json +1 -1
- package/build/Proxy.permissions.test.compiled.json +1 -1
- package/build/Proxy.test.compiled.json +1 -1
- package/build/SmlConnection.compiled.json +1 -1
- package/build/SmlConnection.permissions.test.compiled.json +1 -1
- package/build/SmlConnection.test.compiled.json +1 -1
- package/build/SmlManager.compiled.json +1 -1
- package/build/SmlManager.permissions.test.compiled.json +1 -1
- package/build/SmlManager.test.compiled.json +1 -1
- package/build/Uln.compiled.json +1 -1
- package/build/Uln.test.compiled.json +1 -1
- package/build/UlnConnection.compiled.json +1 -1
- package/build/UlnConnection.test.compiled.json +1 -1
- package/build/UlnConnectionPermissions.test.compiled.json +1 -1
- package/build/UlnConnectionSerde.test.compiled.json +1 -0
- package/build/UlnManagement.test.compiled.json +1 -1
- package/build/UlnManager.compiled.json +1 -1
- package/build/UlnManager.test.compiled.json +1 -1
- package/build/UlnManagerPermissions.test.compiled.json +1 -1
- package/build/UlnManagerUtil.test.compiled.json +1 -1
- package/build/UlnMsgDataSerde.test.compiled.json +1 -0
- package/build/UlnPermissions.test.compiled.json +1 -1
- package/build/UlnReceiveConfig.test.compiled.json +1 -1
- package/build/UlnSend.test.compiled.json +1 -1
- package/build/UlnSendConfig.test.compiled.json +1 -1
- package/build/UlnSendWithDvnFeeLib.test.compiled.json +1 -1
- package/build/UlnSendWithExecFeeLib.test.compiled.json +1 -1
- package/build/UlnSendWorkerFactory.test.compiled.json +1 -1
- package/build/UlnSerde.test.compiled.json +1 -0
- package/build/UlnUtil.test.compiled.json +1 -1
- package/build/WorkerCore.test.compiled.json +1 -1
- package/build/WorkerCoreMsgDataSerde.test.compiled.json +1 -0
- package/build/WorkerCoreSerde.test.compiled.json +1 -0
- package/build/badFeeLib1.test.compiled.json +1 -1
- package/build/badFeeLib10.test.compiled.json +1 -1
- package/build/badFeeLib11.test.compiled.json +1 -1
- package/build/badFeeLib12.test.compiled.json +1 -1
- package/build/badFeeLib2.test.compiled.json +1 -1
- package/build/badFeeLib3.test.compiled.json +1 -1
- package/build/badFeeLib4.test.compiled.json +1 -1
- package/build/badFeeLib5.test.compiled.json +1 -1
- package/build/badFeeLib6.test.compiled.json +1 -1
- package/build/badFeeLib7.test.compiled.json +1 -1
- package/build/badFeeLib8.test.compiled.json +1 -1
- package/build/badFeeLib9.test.compiled.json +1 -1
- package/package.json +2 -1
- package/src/classes/lz/EpConfig.fc +90 -23
- package/src/classes/lz/MsglibInfo.fc +32 -5
- package/src/classes/lz/Packet.fc +109 -48
- package/src/classes/lz/Path.fc +55 -4
- package/src/classes/lz/ReceiveEpConfig.fc +36 -5
- package/src/classes/lz/SendEpConfig.fc +55 -5
- package/src/classes/msgdata/AddMsglib.fc +11 -0
- package/src/classes/msgdata/ChannelNonceInfo.fc +20 -0
- package/src/classes/msgdata/CoinsAmount.fc +8 -0
- package/src/classes/msgdata/Deploy.fc +19 -0
- package/src/classes/msgdata/ExtendedMd.fc +52 -1
- package/src/classes/msgdata/LzReceivePrepare.fc +21 -1
- package/src/classes/msgdata/LzReceiveStatus.fc +72 -1
- package/src/classes/msgdata/LzSend.fc +143 -24
- package/src/classes/msgdata/MdAddress.fc +42 -0
- package/src/classes/msgdata/MdEid.fc +8 -0
- package/src/classes/msgdata/MdObj.fc +32 -0
- package/src/classes/msgdata/MessagingReceipt.fc +34 -1
- package/src/classes/msgdata/MsglibSendCallback.fc +82 -0
- package/src/classes/msgdata/Nonce.fc +30 -0
- package/src/classes/msgdata/OptionsV1.fc +21 -1
- package/src/classes/msgdata/OptionsV2.fc +27 -0
- package/src/classes/msgdata/PacketId.fc +24 -0
- package/src/classes/msgdata/PacketSent.fc +35 -1
- package/src/classes/msgdata/SetAddress.fc +7 -0
- package/src/classes/msgdata/SetEpConfig.fc +17 -0
- package/src/funC++/actions/event.fc +17 -2
- package/src/funC++/actions/utils.fc +2 -2
- package/src/funC++/classlib.fc +33 -43
- package/src/funC++/constants.fc +28 -28
- package/src/funC++/dataStructures/PipelinedOutOfOrder.fc +75 -59
- package/src/funC++/stdlib.fc +26 -11
- package/src/funC++/testutils.fc +2 -2
- package/src/funC++/txnContext.fc +14 -14
- package/src/funC++/utils.fc +97 -1
- package/src/protocol/channel/handler.fc +247 -189
- package/src/protocol/channel/storage.fc +206 -1
- package/src/protocol/controller/handler.fc +35 -17
- package/src/protocol/controller/main.fc +1 -1
- package/src/protocol/core/abstract/protocolHandler.fc +11 -21
- package/src/protocol/core/baseStorage.fc +24 -0
- package/src/protocol/endpoint/handler.fc +99 -57
- package/src/protocol/endpoint/storage.fc +69 -5
- package/src/protocol/msglibs/BytesEncoder.fc +11 -10
- package/src/protocol/msglibs/simpleMsglib/smlManager/handler.fc +1 -4
- package/src/protocol/msglibs/ultralightnode/feeLibInterface.fc +1 -0
- package/src/protocol/msglibs/ultralightnode/msgdata/Attestation.fc +7 -8
- package/src/protocol/msglibs/ultralightnode/msgdata/DvnFeesPaidEvent.fc +20 -0
- package/src/protocol/msglibs/ultralightnode/msgdata/ExecutorFeePaidEvent.fc +15 -0
- package/src/protocol/msglibs/ultralightnode/msgdata/InitUln.fc +1 -1
- package/src/protocol/msglibs/ultralightnode/msgdata/InitUlnConnection.fc +1 -1
- package/src/protocol/msglibs/ultralightnode/msgdata/SetAdminWorkerAddresses.fc +6 -0
- package/src/protocol/msglibs/ultralightnode/msgdata/UlnEvents.fc +20 -0
- package/src/protocol/msglibs/ultralightnode/msgdata/UlnReceiveConfig.fc +114 -28
- package/src/protocol/msglibs/ultralightnode/msgdata/UlnSend.fc +51 -1
- package/src/protocol/msglibs/ultralightnode/msgdata/UlnSendConfig.fc +1 -1
- package/src/protocol/msglibs/ultralightnode/msgdata/UlnVerification.fc +10 -0
- package/src/protocol/msglibs/ultralightnode/msgdata/UlnWorkerFeelibBytecode.fc +6 -0
- package/src/protocol/msglibs/ultralightnode/msgdata/UlnWorkerFeelibInfo.fc +51 -1
- package/src/protocol/msglibs/ultralightnode/msgdata/VerificationStatus.fc +15 -0
- package/src/protocol/msglibs/ultralightnode/uln/handler.fc +84 -107
- package/src/protocol/msglibs/ultralightnode/uln/storage.fc +77 -1
- package/src/protocol/msglibs/ultralightnode/ulnConnection/handler.fc +92 -66
- package/src/protocol/msglibs/ultralightnode/ulnConnection/storage.fc +113 -6
- package/src/protocol/msglibs/ultralightnode/ulnConnection/utils.fc +6 -91
- package/src/protocol/msglibs/ultralightnode/ulnManager/handler.fc +55 -31
- package/src/protocol/msglibs/ultralightnode/workerFeeLibs/dvnFeeLib/handler.fc +13 -9
- package/src/protocol/msglibs/ultralightnode/workerFeeLibs/dvnFeeLib/storage.fc +23 -0
- package/src/protocol/msglibs/ultralightnode/workerFeeLibs/executorFeeLib/handler.fc +63 -27
- package/src/protocol/msglibs/ultralightnode/workerFeeLibs/executorFeeLib/storage.fc +19 -0
- package/src/protocol/msglibs/ultralightnode/workerFeeLibs/priceFeedFeeLib/storage.fc +55 -6
- package/src/workers/core/abstract/workerHandler.fc +20 -19
- package/src/workers/core/interface.fc +2 -1
- package/src/workers/core/workerCoreStorage.fc +16 -1
- package/src/workers/dvn/handler.fc +67 -26
- package/src/workers/dvn/storage.fc +15 -2
- package/src/workers/executor/handler.fc +18 -6
- package/src/workers/executor/interface.fc +1 -0
- package/src/workers/executor/storage.fc +8 -1
- package/src/workers/msgdata/DropEvent.fc +18 -0
- package/src/workers/msgdata/ExecuteParams.fc +66 -3
- package/src/workers/msgdata/NativeDrop.fc +4 -0
- package/src/workers/msgdata/SetDict.fc +6 -4
- package/src/workers/msgdata/SetQuorum.fc +4 -2
- package/src/workers/msgdata/SignedRequest.fc +8 -0
- package/src/workers/priceFeedCache/handler.fc +21 -27
- package/src/workers/priceFeedCache/storage.fc +16 -1
- package/src/workers/proxy/handler.fc +2 -1
- package/src/workers/proxy/storage.fc +1 -1
- package/tests/baseContractTest.fc +2 -6
- package/tests/baseSerdeTest.fc +117 -0
- package/tests/testMain.fc +2 -2
- package/src/classes/msgdata/Amount.fc +0 -16
- package/src/funC++/actions/destroy.fc +0 -27
|
@@ -1,31 +1,34 @@
|
|
|
1
1
|
#include "../../funC++/classlib.fc";
|
|
2
|
+
#include "../lz/Packet.fc";
|
|
2
3
|
|
|
3
4
|
;; required storage name
|
|
4
5
|
const int md::LzSend::NAME = "lzSend"u;
|
|
5
6
|
|
|
6
7
|
;; field names
|
|
7
8
|
const int md::LzSend::sendRequestId = 0;
|
|
8
|
-
const int md::LzSend::
|
|
9
|
-
const int md::LzSend::
|
|
10
|
-
const int md::LzSend::
|
|
11
|
-
const int md::LzSend::
|
|
12
|
-
const int md::LzSend::
|
|
13
|
-
const int md::LzSend::
|
|
14
|
-
const int md::LzSend::
|
|
15
|
-
const int md::LzSend::
|
|
9
|
+
const int md::LzSend::sendMsglibManager = 1;
|
|
10
|
+
const int md::LzSend::sendMsglib = 2;
|
|
11
|
+
const int md::LzSend::sendMsglibConnection = 3;
|
|
12
|
+
const int md::LzSend::packet = 4;
|
|
13
|
+
const int md::LzSend::nativeFee = 5;
|
|
14
|
+
const int md::LzSend::zroFee = 6;
|
|
15
|
+
const int md::LzSend::extraOptions = 7;
|
|
16
|
+
const int md::LzSend::enforcedOptions = 8;
|
|
17
|
+
const int md::LzSend::callbackData = 9;
|
|
16
18
|
|
|
17
19
|
cell md::LzSend::New(
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
int nativeFee,
|
|
21
|
+
int zroFee,
|
|
22
|
+
cell $extraOptions,
|
|
23
|
+
cell $enforcedOptions,
|
|
24
|
+
cell $packet,
|
|
25
|
+
cell callbackData
|
|
24
26
|
) inline method_id {
|
|
25
27
|
return cl::declare(
|
|
26
28
|
md::LzSend::NAME,
|
|
27
29
|
unsafeTuple([
|
|
28
30
|
[cl::t::uint64, 0], ;; md::LzSend::sendRequestId
|
|
31
|
+
[cl::t::address, NULLADDRESS], ;; md::LzSend::sendMsglibManager
|
|
29
32
|
[cl::t::address, NULLADDRESS], ;; md::lzSend::sendMsglib
|
|
30
33
|
[cl::t::address, NULLADDRESS], ;; md::lzSend::sendMsglibConnection
|
|
31
34
|
[cl::t::objRef, $packet], ;; md::LzSend::packet
|
|
@@ -38,21 +41,137 @@ cell md::LzSend::New(
|
|
|
38
41
|
);
|
|
39
42
|
}
|
|
40
43
|
|
|
41
|
-
const md::
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
const int md::LzSend::_headerPostNameBits = 180;
|
|
45
|
+
const int md::LzSend::_headerFillerBits = _HEADER_WIDTH - (md::LzSend::_headerPostNameBits + _NAME_WIDTH);
|
|
46
|
+
const int md::LzSend::_headerInfo = 582890735024998957421269964955452773563747974476099581;
|
|
47
|
+
|
|
48
|
+
;; ========================== Object Builders ==========================
|
|
49
|
+
|
|
50
|
+
;; this function is unused by the protocol but will be used by OApps
|
|
51
|
+
cell md::LzSend::build(
|
|
52
|
+
int nativeFee,
|
|
53
|
+
int zroFee,
|
|
54
|
+
cell $extraOptions,
|
|
55
|
+
cell $enforcedOptions,
|
|
56
|
+
cell $packet,
|
|
57
|
+
cell callbackData
|
|
58
|
+
) impure inline {
|
|
59
|
+
return begin_cell()
|
|
60
|
+
.store_uint(md::LzSend::NAME, _NAME_WIDTH)
|
|
61
|
+
.store_uint(md::LzSend::_headerInfo, md::LzSend::_headerPostNameBits)
|
|
62
|
+
.store_ones(md::LzSend::_headerFillerBits)
|
|
63
|
+
.store_uint64(0) ;; sendRequestId
|
|
64
|
+
.store_uint256(NULLADDRESS) ;; sendMsglibManager
|
|
65
|
+
.store_uint256(NULLADDRESS) ;; sendMsglib
|
|
66
|
+
.store_ref($packet)
|
|
67
|
+
.store_ref($extraOptions)
|
|
68
|
+
.store_ref(
|
|
69
|
+
begin_cell()
|
|
70
|
+
.store_uint256(NULLADDRESS) ;; sendMsglibConnection
|
|
71
|
+
.store_uint128(nativeFee) ;; nativeFee
|
|
72
|
+
.store_uint128(zroFee) ;; zroFee
|
|
73
|
+
.store_ref($enforcedOptions) ;; enforcedOptions
|
|
74
|
+
.store_ref(callbackData) ;; callbackData
|
|
75
|
+
.end_cell()
|
|
76
|
+
)
|
|
77
|
+
.end_cell();
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
;; ====================== Object Accessors =====================
|
|
81
|
+
|
|
82
|
+
;; in root cell
|
|
83
|
+
const int md::LzSend::_sendRequestIdffset = _HEADER_WIDTH;
|
|
84
|
+
const int md::LzSend::_sendMsglibManagerOffset = md::LzSend::_sendRequestIdffset + 64;
|
|
85
|
+
const int md::LzSend::_sendMsglibOffset = md::LzSend::_sendMsglibManagerOffset + 256;
|
|
86
|
+
|
|
87
|
+
;; in ref[2]
|
|
88
|
+
const int md::LzSend::_sendMsglibConnectionOffset = 0;
|
|
89
|
+
const int md::LzSend::_nativeFeeOffset = md::LzSend::_sendMsglibConnectionOffset + 256;
|
|
90
|
+
const int md::LzSend::_zroFeeOffset = md::LzSend::_nativeFeeOffset + 128;
|
|
91
|
+
|
|
92
|
+
int md::LzSend::getSendMsglib(cell $self) impure inline {
|
|
93
|
+
return $self.cellPreloadAddressAt(md::LzSend::_sendMsglibOffset);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
cell md::LzSend::getPacket(cell $self) impure inline {
|
|
97
|
+
return $self.cellPreloadRefAt(0);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
;; gets the path from the packet inside the LzSend
|
|
101
|
+
cell md::LzSend::getPath(cell $self) impure inline {
|
|
102
|
+
return $self.cellPreloadRefAt(0).cellPreloadRefAt(0);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
;; (requestId, nativeFee, zroFee, extraOptions, enforcedOptions)
|
|
106
|
+
(int, int, int, cell, cell) md::LzSend::deserializeSendCallback(cell $self) impure inline {
|
|
107
|
+
slice selfSlice = $self.begin_parse();
|
|
108
|
+
slice ref2Slice = selfSlice.preloadRefSliceAt(2);
|
|
109
|
+
return (
|
|
110
|
+
selfSlice.preloadUint64At(md::LzSend::_sendRequestIdffset),
|
|
111
|
+
ref2Slice.preloadCoinsAt(md::LzSend::_nativeFeeOffset),
|
|
112
|
+
ref2Slice.preloadCoinsAt(md::LzSend::_zroFeeOffset),
|
|
113
|
+
selfSlice.preloadRefAt(1),
|
|
114
|
+
ref2Slice.preloadRefAt(0)
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
;; (packet, extraOptions, enforcedOptions)
|
|
119
|
+
(cell, cell, cell) md::LzSend::getQuoteInformation(cell $self) impure inline {
|
|
120
|
+
return (
|
|
121
|
+
$self.cellPreloadRefAt(0),
|
|
122
|
+
$self.cellPreloadRefAt(1),
|
|
123
|
+
$self.cellPreloadRefAt(2).cellPreloadRefAt(0)
|
|
124
|
+
);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
int md::LzSend::getSendMsglibManager(cell $self) impure inline {
|
|
128
|
+
return $self.cellPreloadAddressAt(md::LzSend::_sendMsglibManagerOffset);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
;; ====================== Object Composite Modifiers =====================
|
|
132
|
+
|
|
133
|
+
const int md::lzSend::requestInfoWidth = _HEADER_WIDTH + 64 + 256 + 256;
|
|
134
|
+
;; Can't easily store a slice constant because the header isn't byte-aligned
|
|
135
|
+
const int md::lzSend::_headerInfoBits = _BASIC_HEADER_WIDTH + (_FIELD_INFO_WIDTH * 10);
|
|
136
|
+
const int md::lzSend::_headerPrefix = 11424049401754228397633815938683071207390004427712457772775726065407;
|
|
137
|
+
const int md::lzSend::_headerSuffix = 17331160549995323848587739135;
|
|
138
|
+
const int md::lzSend::_headerTrailingBits = _HEADER_WIDTH - 256;
|
|
139
|
+
|
|
140
|
+
cell md::LzSend::fillRequestInfo(
|
|
141
|
+
cell $self,
|
|
46
142
|
int requestId,
|
|
143
|
+
int sendMsglibManager,
|
|
47
144
|
int sendMsglib,
|
|
48
145
|
int sendMsglibConnection
|
|
49
|
-
) inline method_id {
|
|
50
|
-
slice
|
|
146
|
+
) impure inline method_id {
|
|
147
|
+
slice selfslice = $self.begin_parse();
|
|
148
|
+
slice ref2Slice = selfslice.preloadRefSliceAt(2);
|
|
149
|
+
|
|
150
|
+
;; Fill in the fields AND overwrite the entire header to match the expected format
|
|
51
151
|
return begin_cell()
|
|
52
|
-
.
|
|
152
|
+
.store_uint256(md::lzSend::_headerPrefix)
|
|
153
|
+
.store_uint(md::lzSend::_headerSuffix, md::lzSend::_headerTrailingBits)
|
|
154
|
+
.store_slice(selfslice.scutfirst(0, 2))
|
|
53
155
|
.store_uint64(requestId)
|
|
156
|
+
.store_uint256(sendMsglibManager)
|
|
54
157
|
.store_uint256(sendMsglib)
|
|
55
|
-
.
|
|
56
|
-
|
|
158
|
+
.store_ref(
|
|
159
|
+
begin_cell()
|
|
160
|
+
.store_uint256(sendMsglibConnection)
|
|
161
|
+
.store_slice(ref2Slice.sskipfirst(md::LzSend::_nativeFeeOffset, 0))
|
|
162
|
+
.end_cell()
|
|
163
|
+
)
|
|
164
|
+
.end_cell();
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
cell md::LzSend::setPacketNonceAndGuid(cell $self, int packetNonce, int packetGuid) impure inline {
|
|
168
|
+
slice selfSlice = $self.begin_parse();
|
|
169
|
+
|
|
170
|
+
cell $newPacket = selfSlice~load_ref()
|
|
171
|
+
.lz::Packet::setNonceAndGuid(packetNonce, packetGuid);
|
|
172
|
+
|
|
173
|
+
return begin_cell()
|
|
174
|
+
.store_ref($newPacket)
|
|
175
|
+
.store_slice(selfSlice)
|
|
57
176
|
.end_cell();
|
|
58
177
|
}
|
|
@@ -15,4 +15,46 @@ cell md::MdAddress::New(cell $md, int address) inline method_id {
|
|
|
15
15
|
[cl::t::address, address] ;; md::MdAddress::address
|
|
16
16
|
])
|
|
17
17
|
);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
;; ========================== Object Builders ==========================
|
|
21
|
+
|
|
22
|
+
const int md::MdAddress::_headerInfoBits = _BASIC_HEADER_WIDTH + (_FIELD_INFO_WIDTH * 2);
|
|
23
|
+
const int md::MdAddress::_headerFillerBits = _HEADER_WIDTH - md::MdAddress::_headerInfoBits;
|
|
24
|
+
const int md::MdAddress::_headerInfo = 5847545689438192720283003;
|
|
25
|
+
|
|
26
|
+
cell md::MdAddress::build(cell $md, int address) impure inline method_id {
|
|
27
|
+
return begin_cell()
|
|
28
|
+
.store_uint(md::MdAddress::_headerInfo, md::MdAddress::_headerInfoBits) ;; header info
|
|
29
|
+
.store_ones(md::MdAddress::_headerFillerBits) ;; header filler
|
|
30
|
+
.store_uint256(address) ;; md::MdAddress::address
|
|
31
|
+
.store_ref($md) ;; md::MdAddress::md = ref[0]
|
|
32
|
+
.end_cell();
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
;; ========================== Object Getters ==========================
|
|
36
|
+
|
|
37
|
+
const int md::MdAddress::_addressOffset = _HEADER_WIDTH;
|
|
38
|
+
|
|
39
|
+
cell md::MdAddress::getMd(cell $self) impure inline {
|
|
40
|
+
return $self.cellPreloadRefAt(0);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
;; ========================== Object Multi-Getters ==========================
|
|
44
|
+
|
|
45
|
+
(cell, int) md::MdAddress::deserialize(cell $self) impure inline {
|
|
46
|
+
slice selfSlice = $self.begin_parse();
|
|
47
|
+
return (
|
|
48
|
+
selfSlice.preloadRefAt(0),
|
|
49
|
+
selfSlice.preloadAddressAt(md::MdAddress::_addressOffset)
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
;; ========================== Sanitize ==========================
|
|
54
|
+
|
|
55
|
+
cell md::MdAddress::sanitize(cell $self) impure inline_ref {
|
|
56
|
+
int address = $self.cl::get<uint256>(md::MdAddress::address);
|
|
57
|
+
cell $md = $self.cl::get<objRef>(md::MdAddress::md);
|
|
58
|
+
|
|
59
|
+
return md::MdAddress::New($md, address);
|
|
18
60
|
}
|
|
@@ -15,4 +15,12 @@ cell md::MdEid::New(cell $md, int eid) inline method_id {
|
|
|
15
15
|
[cl::t::uint32, eid] ;; md::MdEid::eid
|
|
16
16
|
])
|
|
17
17
|
);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
cell md::MdEid::sanitize(cell $mdEid) impure inline_ref {
|
|
22
|
+
cell $md = $mdEid.cl::get<objRef>(md::MdEid::md);
|
|
23
|
+
int eid = $mdEid.cl::get<uint32>(md::MdEid::eid);
|
|
24
|
+
|
|
25
|
+
return md::MdEid::New($md, eid);
|
|
18
26
|
}
|
|
@@ -15,4 +15,36 @@ cell md::MdObj::New(cell $md, cell $obj) inline method_id {
|
|
|
15
15
|
[cl::t::objRef, $obj] ;; md::MdObj::obj
|
|
16
16
|
])
|
|
17
17
|
);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
;; ========================== Object Builders ==========================
|
|
22
|
+
const int md::MdObj::_headerInfoBits = _BASIC_HEADER_WIDTH + (_FIELD_INFO_WIDTH * 2);
|
|
23
|
+
const int md::MdObj::_headerFillerBits = _HEADER_WIDTH - md::MdObj::_headerInfoBits;
|
|
24
|
+
const int md::MdObj::_headerInfo = 22842038364999638994941;
|
|
25
|
+
|
|
26
|
+
cell md::MdObj::build(cell $md, cell $obj) impure inline {
|
|
27
|
+
return begin_cell()
|
|
28
|
+
.store_uint(md::MdObj::_headerInfo, md::MdObj::_headerInfoBits) ;; header info
|
|
29
|
+
.store_ones(md::MdObj::_headerFillerBits) ;; header filler
|
|
30
|
+
.store_ref($md) ;; ref[0]
|
|
31
|
+
.store_ref($obj) ;; ref[1]
|
|
32
|
+
.end_cell();
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
;; ========================== Object Multi-Getters ==========================
|
|
36
|
+
|
|
37
|
+
(cell, cell) md::MdObj::deserialize(cell $self) impure inline {
|
|
38
|
+
slice selfSlice = $self.begin_parse();
|
|
39
|
+
return (
|
|
40
|
+
selfSlice.preloadRefAt(0),
|
|
41
|
+
selfSlice.preloadRefAt(1)
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
cell md::MdObj::sanitize(cell $mdObj) impure {
|
|
46
|
+
cell $md = $mdObj.cl::get<objRef>(md::MdObj::md);
|
|
47
|
+
cell $obj = $mdObj.cl::get<objRef>(md::MdObj::obj);
|
|
48
|
+
|
|
49
|
+
return md::MdObj::New($md, $obj);
|
|
18
50
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#include "../../funC++/classlib.fc";
|
|
2
2
|
|
|
3
3
|
;; required storage name
|
|
4
|
-
const int
|
|
4
|
+
const int md::MessagingReceipt::NAME = "MsgReceipt"u;
|
|
5
5
|
|
|
6
6
|
;; field names
|
|
7
7
|
const int md::MessagingReceipt::lzSend = 0;
|
|
@@ -20,3 +20,36 @@ cell md::MessagingReceipt::New(cell $lzSend, int nativeFee, int zroFee, int erro
|
|
|
20
20
|
])
|
|
21
21
|
);
|
|
22
22
|
}
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
;; ========================== Object Builders ==========================
|
|
26
|
+
|
|
27
|
+
const int md::MessagingReceipt::_headerInfoBits = _BASIC_HEADER_WIDTH + (_FIELD_INFO_WIDTH * 4);
|
|
28
|
+
const int md::MessagingReceipt::_headerFillerBits = _HEADER_WIDTH - md::MessagingReceipt::_headerInfoBits;
|
|
29
|
+
const int md::MessagingReceipt::_headerInfo = 1727210451775936897226519655289233983117527419;
|
|
30
|
+
|
|
31
|
+
cell md::MessagingReceipt::build(cell $lzSend, int nativeFee, int zroFee, int errorCode) impure inline {
|
|
32
|
+
return begin_cell()
|
|
33
|
+
.store_uint(md::MessagingReceipt::_headerInfo, md::MessagingReceipt::_headerInfoBits) ;; header info
|
|
34
|
+
.store_ones(md::MessagingReceipt::_headerFillerBits) ;; header filler
|
|
35
|
+
.store_ref($lzSend) ;; ref[0]
|
|
36
|
+
.store_uint128(nativeFee) ;; coins[1]
|
|
37
|
+
.store_uint128(zroFee) ;; coins[2]
|
|
38
|
+
.store_uint16(errorCode) ;; uint16[3]
|
|
39
|
+
.end_cell();
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
;; ========================== Object Accessors ==========================
|
|
43
|
+
|
|
44
|
+
const int md::MessagingReceipt::_nativeFeeOffset = _HEADER_WIDTH;
|
|
45
|
+
const int md::MessagingReceipt::_zroFeeOffset = _HEADER_WIDTH + 128;
|
|
46
|
+
const int md::MessagingReceipt::_errorCodeOffset = _HEADER_WIDTH + 256;
|
|
47
|
+
|
|
48
|
+
;; this function is unused by the protocol but will be used by OApps
|
|
49
|
+
(int, cell) md::MessagingReceipt::getErrorCodeAndLzSend(cell $self) impure inline {
|
|
50
|
+
slice selfSlice = $self.begin_parse();
|
|
51
|
+
return (
|
|
52
|
+
selfSlice.preloadUint16At(md::MessagingReceipt::_errorCodeOffset),
|
|
53
|
+
selfSlice.preloadRefAt(0)
|
|
54
|
+
);
|
|
55
|
+
}
|
|
@@ -47,6 +47,88 @@ cell md::MsglibSendCallback::New(
|
|
|
47
47
|
);
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
+
;; ========================== Object Builders ==========================
|
|
51
|
+
|
|
52
|
+
const int md::MsglibSendCallback::_headerInfoBits = 198;
|
|
53
|
+
const int md::MsglibSendCallback::_headerFillerBits = _HEADER_WIDTH - (198 + _NAME_WIDTH);
|
|
54
|
+
const int md::MsglibSendCallback::_headerInfo = 177909621499943220462532613625031755041688677811453802367547;
|
|
55
|
+
|
|
56
|
+
cell md::MsglibSendCallback::build(
|
|
57
|
+
int nativeFee,
|
|
58
|
+
int zroFee,
|
|
59
|
+
cell $lzSend,
|
|
60
|
+
cell packetEncoded,
|
|
61
|
+
cell payees,
|
|
62
|
+
int nonceByteOffset,
|
|
63
|
+
int nonceBytes,
|
|
64
|
+
int guidByteOffset,
|
|
65
|
+
int guidBytes,
|
|
66
|
+
cell $msglibSendEvents,
|
|
67
|
+
int errorCode
|
|
68
|
+
) impure inline {
|
|
69
|
+
return begin_cell()
|
|
70
|
+
.store_uint(md::MsglibSendCallback::NAME, _NAME_WIDTH) ;; name
|
|
71
|
+
.store_uint(md::MsglibSendCallback::_headerInfo, md::MsglibSendCallback::_headerInfoBits) ;; rest of the header
|
|
72
|
+
.store_ones(md::MsglibSendCallback::_headerFillerBits) ;; header filler
|
|
73
|
+
.store_uint128(nativeFee) ;; nativeFee
|
|
74
|
+
.store_uint128(zroFee) ;; zroFee
|
|
75
|
+
.store_uint16(nonceByteOffset) ;; nonceByteOffset
|
|
76
|
+
.store_uint8(nonceBytes) ;; nonceBytes
|
|
77
|
+
.store_uint16(guidByteOffset) ;; guidByteOffset
|
|
78
|
+
.store_uint8(guidBytes) ;; guidBytes
|
|
79
|
+
.store_uint8(errorCode) ;; errorCode
|
|
80
|
+
.store_ref($lzSend) ;; lzSend
|
|
81
|
+
.store_ref(packetEncoded) ;; packetEncoded
|
|
82
|
+
.store_ref(
|
|
83
|
+
begin_cell()
|
|
84
|
+
.store_ref(payees) ;; payees
|
|
85
|
+
.store_ref($msglibSendEvents) ;; msglibSendEvents
|
|
86
|
+
.end_cell()
|
|
87
|
+
)
|
|
88
|
+
.end_cell();
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
;; ========================== Object Getters ==========================
|
|
92
|
+
|
|
93
|
+
const int md::MsglibSendCallback::_nativeFeeOffset = _HEADER_WIDTH;
|
|
94
|
+
const int md::MsglibSendCallback::_zroFeeOffset = md::MsglibSendCallback::_nativeFeeOffset + 128;
|
|
95
|
+
const int md::MsglibSendCallback::_nonceByteOffsetOffset = md::MsglibSendCallback::_zroFeeOffset + 128;
|
|
96
|
+
const int md::MsglibSendCallback::_nonceBytesOffset = md::MsglibSendCallback::_nonceByteOffsetOffset + 16;
|
|
97
|
+
const int md::MsglibSendCallback::_guidByteOffsetOffset = md::MsglibSendCallback::_nonceBytesOffset + 8;
|
|
98
|
+
const int md::MsglibSendCallback::_guidBytesOffset = md::MsglibSendCallback::_guidByteOffsetOffset + 16;
|
|
99
|
+
const int md::MsglibSendCallback::_errorCodeOffset = md::MsglibSendCallback::_guidBytesOffset + 8;
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
cell md::MsglibSendCallback::getLzSend(cell $self) impure inline {
|
|
103
|
+
return $self
|
|
104
|
+
.begin_parse()
|
|
105
|
+
.preload_ref_at(0);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
;; ========================== Object Multi-Getters ==========================
|
|
109
|
+
|
|
110
|
+
;; (errorCode, nativeFee, zroFee, lzSend, payees, encodedPacket, nonceByteOffset, nonceBytes, guidByteOffset, guidBytes, sendEvents)
|
|
111
|
+
(int, int, int, cell, cell, cell, int, int, int, int, cell) md::MsglibSendCallback::deserialize(cell $self) impure inline {
|
|
112
|
+
slice selfSlice = $self.begin_parse();
|
|
113
|
+
slice ref2 = selfSlice.preloadRefSliceAt(2);
|
|
114
|
+
|
|
115
|
+
return (
|
|
116
|
+
selfSlice.preloadUint8At(md::MsglibSendCallback::_errorCodeOffset), ;; errorCode
|
|
117
|
+
selfSlice.preloadCoinsAt(md::MsglibSendCallback::_nativeFeeOffset), ;; nativeFee
|
|
118
|
+
selfSlice.preloadCoinsAt(md::MsglibSendCallback::_zroFeeOffset), ;; zroFee
|
|
119
|
+
selfSlice.preloadRefAt(0), ;; lzSend
|
|
120
|
+
ref2.preloadRefAt(0), ;; payees
|
|
121
|
+
selfSlice.preloadRefAt(1), ;; encodedPacket
|
|
122
|
+
selfSlice.preloadUint16At(md::MsglibSendCallback::_nonceByteOffsetOffset),;; nonceByteOffset
|
|
123
|
+
selfSlice.preloadUint8At(md::MsglibSendCallback::_nonceBytesOffset), ;; nonceBytes
|
|
124
|
+
selfSlice.preloadUint16At(md::MsglibSendCallback::_guidByteOffsetOffset), ;; guidByteOffset
|
|
125
|
+
selfSlice.preloadUint8At(md::MsglibSendCallback::_guidBytesOffset), ;; guidBytes
|
|
126
|
+
ref2.preloadRefAt(1)
|
|
127
|
+
);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
;; ========================== Payees Utilities ==========================
|
|
131
|
+
|
|
50
132
|
const int payeesTuple::addressIdx = 0;
|
|
51
133
|
const int payeesTuple::nativeAmountIdx = 1;
|
|
52
134
|
const int payees::addressBits = 256;
|
|
@@ -13,4 +13,34 @@ cell md::Nonce::New(int nonce) inline method_id {
|
|
|
13
13
|
[cl::t::uint64, nonce] ;; md::Nonce::nonce
|
|
14
14
|
])
|
|
15
15
|
);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
;; ========================== Object Builders ==========================
|
|
19
|
+
const int md::Nonce::_headerInfoBits = _BASIC_HEADER_WIDTH + (_FIELD_INFO_WIDTH * 1);
|
|
20
|
+
const int md::Nonce::_headerFillerBits = _HEADER_WIDTH - md::Nonce::_headerInfoBits;
|
|
21
|
+
const int md::Nonce::_headerInfo = 124339069371385211;
|
|
22
|
+
|
|
23
|
+
;; this function is unused by the protocol but will be used by OApps
|
|
24
|
+
cell md::Nonce::build(int nonce) impure inline {
|
|
25
|
+
return begin_cell()
|
|
26
|
+
.store_uint(md::Nonce::_headerInfo, md::Nonce::_headerInfoBits) ;; header info
|
|
27
|
+
.store_ones(md::Nonce::_headerFillerBits) ;; header filler
|
|
28
|
+
.store_uint64(nonce)
|
|
29
|
+
.end_cell();
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
;; ========================== Object Getters ==========================
|
|
34
|
+
const int md::Nonce::_nonceOffset = _HEADER_WIDTH;
|
|
35
|
+
|
|
36
|
+
int md::Nonce::getNonce(cell $self) impure inline {
|
|
37
|
+
return $self.cellPreloadUint64At(md::Nonce::_nonceOffset);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
;; ========================== Sanitize ==========================
|
|
41
|
+
|
|
42
|
+
cell md::Nonce::sanitize(cell $self) impure inline_ref {
|
|
43
|
+
int nonce = $self.cl::get<uint64>(md::Nonce::nonce);
|
|
44
|
+
|
|
45
|
+
return md::Nonce::New(nonce);
|
|
16
46
|
}
|
|
@@ -24,4 +24,24 @@ cell md::OptionsV1::New(
|
|
|
24
24
|
[cl::t::uint256, nativeDropAmount] ;; md::OptionsV1::nativeDropAmount
|
|
25
25
|
])
|
|
26
26
|
);
|
|
27
|
-
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
;; ========================== Object Multi-Getters ==========================
|
|
30
|
+
|
|
31
|
+
const int md::OptionsV1::_lzReceiveGasOffset = _HEADER_WIDTH;
|
|
32
|
+
const int md::OptionsV1::_lzReceiveValueOffset = md::OptionsV1::_lzReceiveGasOffset + 256;
|
|
33
|
+
|
|
34
|
+
const int md::OptionsV1::_nativeDropAddressOffset = 0;
|
|
35
|
+
const int md::OptionsV1::_nativeDropAmountOffset = md::OptionsV1::_nativeDropAddressOffset + 256;
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
;; (lzReceiveGas, lzReceiveValue, nativeDropAmount)
|
|
39
|
+
(int, int, int) md::OptionsV1::decodeCoins(cell $self) impure inline {
|
|
40
|
+
slice selfSlice = $self.begin_parse();
|
|
41
|
+
slice ref2 = selfSlice.preloadRefSliceAt(2);
|
|
42
|
+
return (
|
|
43
|
+
selfSlice.preloadUint256At(md::OptionsV1::_lzReceiveGasOffset),
|
|
44
|
+
selfSlice.preloadUint256At(md::OptionsV1::_lzReceiveValueOffset),
|
|
45
|
+
ref2.preloadUint256At(md::OptionsV1::_nativeDropAmountOffset)
|
|
46
|
+
);
|
|
47
|
+
}
|
|
@@ -34,4 +34,31 @@ cell md::OptionsV2::New(
|
|
|
34
34
|
[cl::t::uint256, nativeDropAmount] ;; md::OptionsV2::nativeDropAmount
|
|
35
35
|
])
|
|
36
36
|
);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
;; ========================== Object Multi-Getters ==========================
|
|
40
|
+
|
|
41
|
+
const int md::OptionsV2::_lzReceiveGasOffset = _HEADER_WIDTH;
|
|
42
|
+
const int md::OptionsV2::_lzReceiveValueOffset = md::OptionsV2::_lzReceiveGasOffset + 256;
|
|
43
|
+
|
|
44
|
+
const int md::OptionsV2::_lzComposeGasOffset = 0;
|
|
45
|
+
const int md::OptionsV2::_lzComposeValueOffset = md::OptionsV2::_lzComposeGasOffset + 256;
|
|
46
|
+
const int md::OptionsV2::_nativeDropAddressOffset = md::OptionsV2::_lzComposeValueOffset + 256;
|
|
47
|
+
|
|
48
|
+
const int md::OptionsV2::_nativeDropAmountOffset = 0;
|
|
49
|
+
|
|
50
|
+
;; (lzComposeGas, lzComposeValue, lzReceiveGas, lzReceiveValue, nativeDropAmount)
|
|
51
|
+
(int, int, int, int, int) md::OptionsV2::decodeCoins(cell $self) impure inline {
|
|
52
|
+
slice selfSlice = $self.begin_parse();
|
|
53
|
+
|
|
54
|
+
slice ref2 = selfSlice.preloadRefSliceAt(2);
|
|
55
|
+
slice ref3 = selfSlice.preloadRefSliceAt(3);
|
|
56
|
+
|
|
57
|
+
return (
|
|
58
|
+
ref2.preloadUint256At(md::OptionsV2::_lzComposeGasOffset),
|
|
59
|
+
ref2.preloadUint256At(md::OptionsV2::_lzComposeValueOffset),
|
|
60
|
+
selfSlice.preloadUint256At(md::OptionsV2::_lzReceiveGasOffset),
|
|
61
|
+
selfSlice.preloadUint256At(md::OptionsV2::_lzReceiveValueOffset),
|
|
62
|
+
ref3.preloadUint256At(md::OptionsV2::_nativeDropAmountOffset)
|
|
63
|
+
);
|
|
37
64
|
}
|
|
@@ -15,4 +15,28 @@ cell md::PacketId::New(cell $path, int nonce) inline method_id {
|
|
|
15
15
|
[cl::t::uint64, nonce] ;; md::PacketId::nonce
|
|
16
16
|
])
|
|
17
17
|
);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
;; ========================== Object Builders ==========================
|
|
21
|
+
|
|
22
|
+
const int md::PacketId::_headerInfoBits = _BASIC_HEADER_WIDTH + (_FIELD_INFO_WIDTH * 2);
|
|
23
|
+
const int md::PacketId::_headerFillerBits = _HEADER_WIDTH - md::PacketId::_headerInfoBits;
|
|
24
|
+
const int md::PacketId::_headerInfo = 33180451689778480514427;
|
|
25
|
+
|
|
26
|
+
cell md::PacketId::build(cell $path, int nonce) impure inline {
|
|
27
|
+
return begin_cell()
|
|
28
|
+
.store_uint(md::PacketId::_headerInfo, md::PacketId::_headerInfoBits) ;; header info
|
|
29
|
+
.store_ones(md::PacketId::_headerFillerBits) ;; header filler
|
|
30
|
+
.store_ref($path) ;; ref[0]
|
|
31
|
+
.store_uint(nonce, 64) ;; uint[1]
|
|
32
|
+
.end_cell();
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
;; ========================== Sanitize ==========================
|
|
36
|
+
|
|
37
|
+
cell md::PacketId::sanitize(cell $self) impure {
|
|
38
|
+
cell $path = $self.cl::get<objRef>(md::PacketId::path);
|
|
39
|
+
int nonce = $self.cl::get<uint64>(md::PacketId::nonce);
|
|
40
|
+
|
|
41
|
+
return md::PacketId::New($path, nonce);
|
|
18
42
|
}
|
|
@@ -22,7 +22,7 @@ cell md::PacketSent::New(
|
|
|
22
22
|
int nonce,
|
|
23
23
|
int msglibAddress,
|
|
24
24
|
cell $msglibSendEvents
|
|
25
|
-
) inline method_id {
|
|
25
|
+
) impure inline method_id {
|
|
26
26
|
return cl::declare(
|
|
27
27
|
md::PacketSent::NAME,
|
|
28
28
|
unsafeTuple([
|
|
@@ -37,3 +37,37 @@ cell md::PacketSent::New(
|
|
|
37
37
|
])
|
|
38
38
|
);
|
|
39
39
|
}
|
|
40
|
+
|
|
41
|
+
;; ========================== Object Builders ==========================
|
|
42
|
+
|
|
43
|
+
const int md::PacketSent::_headerInfoBits = _BASIC_HEADER_WIDTH + (_FIELD_INFO_WIDTH * 8);
|
|
44
|
+
const int md::PacketSent::_headerFillerBits = _HEADER_WIDTH - md::PacketSent::_headerInfoBits;
|
|
45
|
+
const int md::PacketSent::_headerInfo = 705670168524170966093988960735291442056898952154447392698365;
|
|
46
|
+
|
|
47
|
+
cell md::PacketSent::build(
|
|
48
|
+
int nativeFee,
|
|
49
|
+
int zroFee,
|
|
50
|
+
cell $extraOptions,
|
|
51
|
+
cell $enforcedOptions,
|
|
52
|
+
cell packetEncoded,
|
|
53
|
+
int nonce,
|
|
54
|
+
int msglibAddress,
|
|
55
|
+
cell $msglibSendEvents
|
|
56
|
+
) impure inline {
|
|
57
|
+
return begin_cell()
|
|
58
|
+
.store_uint(md::PacketSent::_headerInfo, md::PacketSent::_headerInfoBits)
|
|
59
|
+
.store_ones(md::PacketSent::_headerFillerBits)
|
|
60
|
+
.store_uint128(nativeFee)
|
|
61
|
+
.store_uint128(zroFee)
|
|
62
|
+
.store_uint64(nonce)
|
|
63
|
+
.store_uint256(msglibAddress)
|
|
64
|
+
.store_ref($extraOptions)
|
|
65
|
+
.store_ref($enforcedOptions)
|
|
66
|
+
.store_ref(
|
|
67
|
+
begin_cell()
|
|
68
|
+
.store_ref(packetEncoded)
|
|
69
|
+
.store_ref($msglibSendEvents)
|
|
70
|
+
.end_cell()
|
|
71
|
+
)
|
|
72
|
+
.end_cell();
|
|
73
|
+
}
|
|
@@ -13,4 +13,11 @@ cell md::SetAddress::New(int address) inline method_id {
|
|
|
13
13
|
[cl::t::address, address] ;; md::SetAddress::owner
|
|
14
14
|
])
|
|
15
15
|
);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
;; Ensure SetAddress doesn't have garbage bits that would cause undefined behaviors in the protocol
|
|
19
|
+
cell md::SetAddress::sanitize(cell $setAddress) impure {
|
|
20
|
+
return md::SetAddress::New(
|
|
21
|
+
$setAddress.cl::get<address>(md::SetAddress::address)
|
|
22
|
+
);
|
|
16
23
|
}
|
|
@@ -30,4 +30,21 @@ cell md::SetEpConfig::New(
|
|
|
30
30
|
[cl::t::uint64, timeoutReceiveMsglibExpiry] ;; md::SetEpConfig::timeoutReceiveMsglibExpiry
|
|
31
31
|
])
|
|
32
32
|
);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
;; Ensure SetEpConfig doesn't have garbage bits that would cause undefined behaviors in the protocol
|
|
36
|
+
cell md::SetEpConfig::sanitize(cell $setEpConfig) impure inline_ref {
|
|
37
|
+
int useDefaults = $setEpConfig.cl::get<bool>(md::SetEpConfig::useDefaults);
|
|
38
|
+
int sendMsglibManager = $setEpConfig.cl::get<address>(md::SetEpConfig::sendMsglibManager);
|
|
39
|
+
int receiveMsglibManager = $setEpConfig.cl::get<address>(md::SetEpConfig::receiveMsglibManager);
|
|
40
|
+
int timeoutReceiveMsglibManager = $setEpConfig.cl::get<address>(md::SetEpConfig::timeoutReceiveMsglibManager);
|
|
41
|
+
int timeoutReceiveMsglibExpiry = $setEpConfig.cl::get<uint64>(md::SetEpConfig::timeoutReceiveMsglibExpiry);
|
|
42
|
+
|
|
43
|
+
return md::SetEpConfig::New(
|
|
44
|
+
useDefaults,
|
|
45
|
+
sendMsglibManager,
|
|
46
|
+
receiveMsglibManager,
|
|
47
|
+
timeoutReceiveMsglibManager,
|
|
48
|
+
timeoutReceiveMsglibExpiry
|
|
49
|
+
);
|
|
33
50
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#include "../baseInterface.fc";
|
|
2
|
+
#include "../classlib.fc";
|
|
2
3
|
#include "utils.fc";
|
|
3
4
|
|
|
4
5
|
const int action::event::NAME = "event"u;
|
|
@@ -15,7 +16,7 @@ int _getEventSink() impure inline;
|
|
|
15
16
|
;; @info Events in LZ contracts are internal messages to an event sink
|
|
16
17
|
;; where the resulting transaction always reverts
|
|
17
18
|
;; @non-terminal
|
|
18
|
-
cell action::event::New(int topic, cell $body, cell $initialStorage) inline method_id {
|
|
19
|
+
cell action::event::New(int topic, cell $body, cell $initialStorage) impure inline method_id {
|
|
19
20
|
return cl::declare(
|
|
20
21
|
action::event::NAME,
|
|
21
22
|
unsafeTuple([
|
|
@@ -26,10 +27,24 @@ cell action::event::New(int topic, cell $body, cell $initialStorage) inline meth
|
|
|
26
27
|
);
|
|
27
28
|
}
|
|
28
29
|
|
|
30
|
+
const int action::event::_headerInfoBits = _BASIC_HEADER_WIDTH + (_FIELD_INFO_WIDTH * 3);
|
|
31
|
+
const int action::event::_headerFillerBits = _HEADER_WIDTH - action::event::_headerInfoBits;
|
|
32
|
+
const int action::event::_headerInfo = 7850279558805522911016931325;
|
|
33
|
+
|
|
34
|
+
cell action::event::build(int topic, cell $body, cell $initialStorage) impure inline method_id {
|
|
35
|
+
return begin_cell()
|
|
36
|
+
.store_uint(action::event::_headerInfo, action::event::_headerInfoBits) ;; header info
|
|
37
|
+
.store_ones(action::event::_headerFillerBits) ;; header filler
|
|
38
|
+
.store_uint256(topic)
|
|
39
|
+
.store_ref($body)
|
|
40
|
+
.store_ref($initialStorage)
|
|
41
|
+
.end_cell();
|
|
42
|
+
}
|
|
43
|
+
|
|
29
44
|
tuple action::event::create(int topic, cell $body, cell $initialStorage) inline {
|
|
30
45
|
return unsafeTuple([
|
|
31
46
|
action::event::NAME,
|
|
32
|
-
action::event::
|
|
47
|
+
action::event::build(topic, $body, $initialStorage)
|
|
33
48
|
]);
|
|
34
49
|
}
|
|
35
50
|
|