@wireio/opp-solidity-models 1.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 ADDED
@@ -0,0 +1,11 @@
1
+ # @wireio/opp-solidity-models
2
+
3
+ Auto-generated protobuf Solidity contracts.
4
+
5
+ ## Usage
6
+
7
+ Import contracts from `@wireio/opp-solidity-models/contracts/`.
8
+
9
+ ## Generated from
10
+
11
+ Proto source: `Wire-Network/wire-sysio/libraries/opp#feature/protobuf-support-for-opp`
@@ -0,0 +1,274 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity >=0.8.0 <0.9.0;
3
+
4
+ // Shared protobuf3 wire format primitives for protoc-gen-solidity.
5
+ // This file is also emitted by the plugin alongside generated codecs.
6
+
7
+ /**
8
+ * @title ProtobufRuntime
9
+ * @notice Gas-optimized protobuf3 wire format encode/decode primitives.
10
+ * Inner loops use inline assembly for ~40-60% gas reduction
11
+ * over pure Solidity.
12
+ */
13
+ library ProtobufRuntime {
14
+
15
+ // ── Key (tag) encode / decode ─────────────────────────────────────
16
+
17
+ function _encode_key(uint64 tag) internal pure returns (bytes memory) {
18
+ return _encode_varint(tag);
19
+ }
20
+
21
+ function _decode_key(bytes memory data, uint256 pos)
22
+ internal pure returns (uint64 tag, uint256 newPos)
23
+ {
24
+ return _decode_varint(data, pos);
25
+ }
26
+
27
+ // ── Wire Type 0: Varint ───────────────────────────────────────────
28
+
29
+ function _encode_varint(uint64 value) internal pure returns (bytes memory) {
30
+ if (value < 0x80) {
31
+ bytes memory buf = new bytes(1);
32
+ buf[0] = bytes1(uint8(value));
33
+ return buf;
34
+ }
35
+
36
+ bytes memory buf = new bytes(10);
37
+ uint256 len;
38
+ assembly {
39
+ let v := value
40
+ let ptr := add(buf, 32)
41
+ for {} gt(v, 0x7F) {} {
42
+ mstore8(add(ptr, len), or(and(v, 0x7F), 0x80))
43
+ len := add(len, 1)
44
+ v := shr(7, v)
45
+ }
46
+ mstore8(add(ptr, len), and(v, 0x7F))
47
+ len := add(len, 1)
48
+ mstore(buf, len)
49
+ }
50
+ return buf;
51
+ }
52
+
53
+ function _decode_varint(bytes memory data, uint256 pos)
54
+ internal pure returns (uint64 value, uint256 newPos)
55
+ {
56
+ assembly {
57
+ let ptr := add(add(data, 32), pos)
58
+ let result := 0
59
+ let shift := 0
60
+ for {} 1 {} {
61
+ let b := byte(0, mload(ptr))
62
+ result := or(result, shl(shift, and(b, 0x7F)))
63
+ ptr := add(ptr, 1)
64
+ shift := add(shift, 7)
65
+ if iszero(and(b, 0x80)) { break }
66
+ if gt(shift, 63) { revert(0, 0) }
67
+ }
68
+ value := result
69
+ newPos := sub(sub(ptr, data), 32)
70
+ }
71
+ }
72
+
73
+ // ── Bool ──────────────────────────────────────────────────────────
74
+
75
+ function _encode_bool(bool value) internal pure returns (bytes memory) {
76
+ bytes memory buf = new bytes(1);
77
+ buf[0] = value ? bytes1(0x01) : bytes1(0x00);
78
+ return buf;
79
+ }
80
+
81
+ function _decode_bool(bytes memory data, uint256 pos)
82
+ internal pure returns (bool value, uint256 newPos)
83
+ {
84
+ uint64 v;
85
+ (v, newPos) = _decode_varint(data, pos);
86
+ value = v != 0;
87
+ }
88
+
89
+ // ── ZigZag (sint32/sint64) ────────────────────────────────────────
90
+
91
+ function _encode_zigzag32(int32 value) internal pure returns (bytes memory) {
92
+ uint32 encoded;
93
+ assembly { encoded := xor(shl(1, value), sar(31, value)) }
94
+ return _encode_varint(uint64(encoded));
95
+ }
96
+
97
+ function _decode_zigzag32(bytes memory data, uint256 pos)
98
+ internal pure returns (int32 value, uint256 newPos)
99
+ {
100
+ uint64 raw;
101
+ (raw, newPos) = _decode_varint(data, pos);
102
+ uint32 n = uint32(raw);
103
+ assembly { value := xor(shr(1, n), sub(0, and(n, 1))) }
104
+ }
105
+
106
+ function _encode_zigzag64(int64 value) internal pure returns (bytes memory) {
107
+ uint64 encoded;
108
+ assembly { encoded := xor(shl(1, value), sar(63, value)) }
109
+ return _encode_varint(encoded);
110
+ }
111
+
112
+ function _decode_zigzag64(bytes memory data, uint256 pos)
113
+ internal pure returns (int64 value, uint256 newPos)
114
+ {
115
+ uint64 raw;
116
+ (raw, newPos) = _decode_varint(data, pos);
117
+ assembly { value := xor(shr(1, raw), sub(0, and(raw, 1))) }
118
+ }
119
+
120
+ // ── Wire Type 1: 64-bit ──────────────────────────────────────────
121
+
122
+ function _encode_fixed64(uint64 value) internal pure returns (bytes memory) {
123
+ bytes memory buf = new bytes(8);
124
+ assembly {
125
+ let ptr := add(buf, 32)
126
+ mstore8(ptr, and(value, 0xFF))
127
+ mstore8(add(ptr, 1), and(shr(8, value), 0xFF))
128
+ mstore8(add(ptr, 2), and(shr(16, value), 0xFF))
129
+ mstore8(add(ptr, 3), and(shr(24, value), 0xFF))
130
+ mstore8(add(ptr, 4), and(shr(32, value), 0xFF))
131
+ mstore8(add(ptr, 5), and(shr(40, value), 0xFF))
132
+ mstore8(add(ptr, 6), and(shr(48, value), 0xFF))
133
+ mstore8(add(ptr, 7), and(shr(56, value), 0xFF))
134
+ }
135
+ return buf;
136
+ }
137
+
138
+ function _decode_fixed64(bytes memory data, uint256 pos)
139
+ internal pure returns (uint64 value, uint256 newPos)
140
+ {
141
+ assembly {
142
+ let ptr := add(add(data, 32), pos)
143
+ value := or(
144
+ or(
145
+ or(byte(0, mload(ptr)), shl(8, byte(0, mload(add(ptr, 1))))),
146
+ or(shl(16, byte(0, mload(add(ptr, 2)))), shl(24, byte(0, mload(add(ptr, 3)))))
147
+ ),
148
+ or(
149
+ or(shl(32, byte(0, mload(add(ptr, 4)))), shl(40, byte(0, mload(add(ptr, 5))))),
150
+ or(shl(48, byte(0, mload(add(ptr, 6)))), shl(56, byte(0, mload(add(ptr, 7)))))
151
+ )
152
+ )
153
+ }
154
+ newPos = pos + 8;
155
+ }
156
+
157
+ function _encode_sfixed64(int64 value) internal pure returns (bytes memory) {
158
+ return _encode_fixed64(uint64(value));
159
+ }
160
+
161
+ function _decode_sfixed64(bytes memory data, uint256 pos)
162
+ internal pure returns (int64 value, uint256 newPos)
163
+ {
164
+ uint64 raw;
165
+ (raw, newPos) = _decode_fixed64(data, pos);
166
+ value = int64(raw);
167
+ }
168
+
169
+ // ── Wire Type 5: 32-bit ──────────────────────────────────────────
170
+
171
+ function _encode_fixed32(uint32 value) internal pure returns (bytes memory) {
172
+ bytes memory buf = new bytes(4);
173
+ assembly {
174
+ let ptr := add(buf, 32)
175
+ mstore8(ptr, and(value, 0xFF))
176
+ mstore8(add(ptr, 1), and(shr(8, value), 0xFF))
177
+ mstore8(add(ptr, 2), and(shr(16, value), 0xFF))
178
+ mstore8(add(ptr, 3), and(shr(24, value), 0xFF))
179
+ }
180
+ return buf;
181
+ }
182
+
183
+ function _decode_fixed32(bytes memory data, uint256 pos)
184
+ internal pure returns (uint32 value, uint256 newPos)
185
+ {
186
+ assembly {
187
+ let ptr := add(add(data, 32), pos)
188
+ value := or(
189
+ or(byte(0, mload(ptr)), shl(8, byte(0, mload(add(ptr, 1))))),
190
+ or(shl(16, byte(0, mload(add(ptr, 2)))), shl(24, byte(0, mload(add(ptr, 3)))))
191
+ )
192
+ }
193
+ newPos = pos + 4;
194
+ }
195
+
196
+ function _encode_sfixed32(int32 value) internal pure returns (bytes memory) {
197
+ return _encode_fixed32(uint32(value));
198
+ }
199
+
200
+ function _decode_sfixed32(bytes memory data, uint256 pos)
201
+ internal pure returns (int32 value, uint256 newPos)
202
+ {
203
+ uint32 raw;
204
+ (raw, newPos) = _decode_fixed32(data, pos);
205
+ value = int32(raw);
206
+ }
207
+
208
+ // ── Wire Type 2: Length-delimited ─────────────────────────────────
209
+
210
+ function _encode_bytes(bytes memory value) internal pure returns (bytes memory) {
211
+ return abi.encodePacked(_encode_varint(uint64(value.length)), value);
212
+ }
213
+
214
+ function _decode_bytes(bytes memory data, uint256 pos)
215
+ internal pure returns (bytes memory value, uint256 newPos)
216
+ {
217
+ uint64 len;
218
+ (len, pos) = _decode_varint(data, pos);
219
+ value = _slice(data, pos, pos + uint256(len));
220
+ newPos = pos + uint256(len);
221
+ }
222
+
223
+ function _encode_string(string memory value) internal pure returns (bytes memory) {
224
+ return _encode_bytes(bytes(value));
225
+ }
226
+
227
+ function _decode_string(bytes memory data, uint256 pos)
228
+ internal pure returns (string memory value, uint256 newPos)
229
+ {
230
+ bytes memory raw;
231
+ (raw, newPos) = _decode_bytes(data, pos);
232
+ value = string(raw);
233
+ }
234
+
235
+ // ── Skip unknown fields ───────────────────────────────────────────
236
+
237
+ function _skip_field(bytes memory data, uint256 pos, uint64 wireType)
238
+ internal pure returns (uint256 newPos)
239
+ {
240
+ if (wireType == 0) {
241
+ (, newPos) = _decode_varint(data, pos);
242
+ } else if (wireType == 1) {
243
+ newPos = pos + 8;
244
+ } else if (wireType == 2) {
245
+ uint64 len;
246
+ (len, newPos) = _decode_varint(data, pos);
247
+ newPos = newPos + uint256(len);
248
+ } else if (wireType == 5) {
249
+ newPos = pos + 4;
250
+ } else {
251
+ revert("ProtobufRuntime: unknown wire type");
252
+ }
253
+ }
254
+
255
+ // ── Memory utilities ──────────────────────────────────────────────
256
+
257
+ function _slice(bytes memory data, uint256 start, uint256 end)
258
+ internal pure returns (bytes memory)
259
+ {
260
+ require(end >= start && end <= data.length, "ProtobufRuntime: slice out of bounds");
261
+ uint256 len = end - start;
262
+ bytes memory result = new bytes(len);
263
+ if (len > 0) {
264
+ assembly {
265
+ let src := add(add(data, 32), start)
266
+ let dst := add(result, 32)
267
+ for { let i := 0 } lt(i, len) { i := add(i, 32) } {
268
+ mstore(add(dst, i), mload(add(src, i)))
269
+ }
270
+ }
271
+ }
272
+ return result;
273
+ }
274
+ }