neo_solidity/ir/context/builtins/
syscalls.rs

1fn resolve_syscalls_member(member: &str) -> Option<BuiltinCall> {
2    match member {
3        "contractCall" => Some(BuiltinCall::ContractCall),
4        "contractCallWithFlags" => Some(BuiltinCall::ContractCallWithFlags),
5        "getCallFlags" => Some(BuiltinCall::Syscall(
6            "System.Contract.GetCallFlags".to_string(),
7        )),
8        // Neo N3 contract management is implemented via the native ContractManagement contract.
9        // Keep compatibility with older devpack helpers that model these as syscalls.
10        "contractCreate" => Some(BuiltinCall::DeployContract),
11        "contractUpdate" => Some(BuiltinCall::NativeCall {
12            contract: NativeContract::ContractManagement,
13            method: "update".to_string(),
14        }),
15        "contractDestroy" => Some(BuiltinCall::NativeCall {
16            contract: NativeContract::ContractManagement,
17            method: "destroy".to_string(),
18        }),
19        "createStandardAccount" => Some(BuiltinCall::Syscall(
20            "System.Contract.CreateStandardAccount".to_string(),
21        )),
22        "createMultisigAccount" => Some(BuiltinCall::Syscall(
23            "System.Contract.CreateMultisigAccount".to_string(),
24        )),
25        "notify" => Some(BuiltinCall::NotifySerialized),
26        "getCurrentIndex" => Some(BuiltinCall::NativeCall {
27            contract: NativeContract::Ledger,
28            method: "currentIndex".to_string(),
29        }),
30        "getCurrentHash" => Some(BuiltinCall::NativeCall {
31            contract: NativeContract::Ledger,
32            method: "currentHash".to_string(),
33        }),
34        "getBlock" => Some(BuiltinCall::NativeCall {
35            contract: NativeContract::Ledger,
36            method: "getBlock".to_string(),
37        }),
38        "getTransaction" => Some(BuiltinCall::NativeCall {
39            contract: NativeContract::Ledger,
40            method: "getTransaction".to_string(),
41        }),
42        "getTransactionHeight" => Some(BuiltinCall::NativeCall {
43            contract: NativeContract::Ledger,
44            method: "getTransactionHeight".to_string(),
45        }),
46        "getTransactionFromBlock" => Some(BuiltinCall::NativeCall {
47            contract: NativeContract::Ledger,
48            method: "getTransactionFromBlock".to_string(),
49        }),
50        "getTransactionSigners" => Some(BuiltinCall::NativeCall {
51            contract: NativeContract::Ledger,
52            method: "getTransactionSigners".to_string(),
53        }),
54        "getTransactionVMState" => Some(BuiltinCall::NativeCall {
55            contract: NativeContract::Ledger,
56            method: "getTransactionVMState".to_string(),
57        }),
58        "getExecutingScriptHash" => Some(BuiltinCall::Syscall(
59            "System.Runtime.GetExecutingScriptHash".to_string(),
60        )),
61        "getCallingScriptHash" => Some(BuiltinCall::Syscall(
62            "System.Runtime.GetCallingScriptHash".to_string(),
63        )),
64        "getEntryScriptHash" => Some(BuiltinCall::Syscall(
65            "System.Runtime.GetEntryScriptHash".to_string(),
66        )),
67        "getScriptContainer" => Some(BuiltinCall::Syscall(
68            "System.Runtime.GetScriptContainer".to_string(),
69        )),
70        "loadScript" => Some(BuiltinCall::Syscall("System.Runtime.LoadScript".to_string())),
71        "getStorageContext" => Some(BuiltinCall::Syscall("System.Storage.GetContext".to_string())),
72        "getReadOnlyStorageContext" => Some(BuiltinCall::Syscall(
73            "System.Storage.GetReadOnlyContext".to_string(),
74        )),
75        "storageAsReadOnly" => Some(BuiltinCall::Syscall(
76            "System.Storage.AsReadOnly".to_string(),
77        )),
78        "storageGet" => Some(BuiltinCall::Syscall("System.Storage.Get".to_string())),
79        "storagePut" => Some(BuiltinCall::Syscall("System.Storage.Put".to_string())),
80        "storageDelete" => Some(BuiltinCall::Syscall("System.Storage.Delete".to_string())),
81        "storageFind" => Some(BuiltinCall::Syscall("System.Storage.Find".to_string())),
82        "storageGetLocal" => Some(BuiltinCall::Syscall("System.Storage.Local.Get".to_string())),
83        "storagePutLocal" => Some(BuiltinCall::Syscall("System.Storage.Local.Put".to_string())),
84        "storageDeleteLocal" => Some(BuiltinCall::Syscall(
85            "System.Storage.Local.Delete".to_string(),
86        )),
87        "storageFindLocal" => Some(BuiltinCall::Syscall("System.Storage.Local.Find".to_string())),
88        "checkWitness" => Some(BuiltinCall::Syscall("System.Runtime.CheckWitness".to_string())),
89        "getTime" => Some(BuiltinCall::Syscall("System.Runtime.GetTime".to_string())),
90        "gasLeft" => Some(BuiltinCall::Syscall("System.Runtime.GasLeft".to_string())),
91        "getPlatform" => Some(BuiltinCall::Syscall("System.Runtime.Platform".to_string())),
92        "getTrigger" => Some(BuiltinCall::Syscall("System.Runtime.GetTrigger".to_string())),
93        "getNotifications" => Some(BuiltinCall::Syscall(
94            "System.Runtime.GetNotifications".to_string(),
95        )),
96        "log" => Some(BuiltinCall::Syscall("System.Runtime.Log".to_string())),
97        "getCurrentSigners" => Some(BuiltinCall::Syscall(
98            "System.Runtime.CurrentSigners".to_string(),
99        )),
100        "checkSig" => Some(BuiltinCall::Syscall("System.Crypto.CheckSig".to_string())),
101        "checkMultisig" => Some(BuiltinCall::Syscall(
102            "System.Crypto.CheckMultisig".to_string(),
103        )),
104        "sha256" => Some(BuiltinCall::NativeCall {
105            contract: NativeContract::CryptoLib,
106            method: "sha256".to_string(),
107        }),
108        "ripemd160" => Some(BuiltinCall::NativeCall {
109            contract: NativeContract::CryptoLib,
110            method: "ripemd160".to_string(),
111        }),
112        "verifyWithECDsa" => Some(BuiltinCall::NativeCall {
113            contract: NativeContract::CryptoLib,
114            method: "verifyWithECDsa".to_string(),
115        }),
116        "murmur32" => Some(BuiltinCall::NativeCall {
117            contract: NativeContract::CryptoLib,
118            method: "murmur32".to_string(),
119        }),
120        "keccak256" => Some(BuiltinCall::NativeCall {
121            contract: NativeContract::CryptoLib,
122            method: "keccak256".to_string(),
123        }),
124        "recoverSecp256K1" => Some(BuiltinCall::NativeCall {
125            contract: NativeContract::CryptoLib,
126            method: "recoverSecp256K1".to_string(),
127        }),
128        "verifyWithEd25519" => Some(BuiltinCall::NativeCall {
129            contract: NativeContract::CryptoLib,
130            method: "verifyWithEd25519".to_string(),
131        }),
132        "bls12381Serialize" => Some(BuiltinCall::NativeCall {
133            contract: NativeContract::CryptoLib,
134            method: "bls12381Serialize".to_string(),
135        }),
136        "bls12381Deserialize" => Some(BuiltinCall::NativeCall {
137            contract: NativeContract::CryptoLib,
138            method: "bls12381Deserialize".to_string(),
139        }),
140        "bls12381Equal" => Some(BuiltinCall::NativeCall {
141            contract: NativeContract::CryptoLib,
142            method: "bls12381Equal".to_string(),
143        }),
144        "bls12381Add" => Some(BuiltinCall::NativeCall {
145            contract: NativeContract::CryptoLib,
146            method: "bls12381Add".to_string(),
147        }),
148        "bls12381Mul" => Some(BuiltinCall::NativeCall {
149            contract: NativeContract::CryptoLib,
150            method: "bls12381Mul".to_string(),
151        }),
152        "bls12381Pairing" => Some(BuiltinCall::NativeCall {
153            contract: NativeContract::CryptoLib,
154            method: "bls12381Pairing".to_string(),
155        }),
156        "serialize" => Some(BuiltinCall::NativeCall {
157            contract: NativeContract::StdLib,
158            method: "serialize".to_string(),
159        }),
160        "deserialize" => Some(BuiltinCall::NativeCall {
161            contract: NativeContract::StdLib,
162            method: "deserialize".to_string(),
163        }),
164        "itoa" => Some(BuiltinCall::NativeCall {
165            contract: NativeContract::StdLib,
166            method: "itoa".to_string(),
167        }),
168        "atoi" => Some(BuiltinCall::NativeCall {
169            contract: NativeContract::StdLib,
170            method: "atoi".to_string(),
171        }),
172        "jsonSerialize" => Some(BuiltinCall::NativeCall {
173            contract: NativeContract::StdLib,
174            method: "jsonSerialize".to_string(),
175        }),
176        "jsonDeserialize" => Some(BuiltinCall::NativeCall {
177            contract: NativeContract::StdLib,
178            method: "jsonDeserialize".to_string(),
179        }),
180        "base64Encode" => Some(BuiltinCall::NativeCall {
181            contract: NativeContract::StdLib,
182            method: "base64Encode".to_string(),
183        }),
184        "base64Decode" => Some(BuiltinCall::NativeCall {
185            contract: NativeContract::StdLib,
186            method: "base64Decode".to_string(),
187        }),
188        "base64UrlEncode" => Some(BuiltinCall::NativeCall {
189            contract: NativeContract::StdLib,
190            method: "base64UrlEncode".to_string(),
191        }),
192        "base64UrlDecode" => Some(BuiltinCall::NativeCall {
193            contract: NativeContract::StdLib,
194            method: "base64UrlDecode".to_string(),
195        }),
196        "base58Encode" => Some(BuiltinCall::NativeCall {
197            contract: NativeContract::StdLib,
198            method: "base58Encode".to_string(),
199        }),
200        "base58Decode" => Some(BuiltinCall::NativeCall {
201            contract: NativeContract::StdLib,
202            method: "base58Decode".to_string(),
203        }),
204        "base58CheckEncode" => Some(BuiltinCall::NativeCall {
205            contract: NativeContract::StdLib,
206            method: "base58CheckEncode".to_string(),
207        }),
208        "base58CheckDecode" => Some(BuiltinCall::NativeCall {
209            contract: NativeContract::StdLib,
210            method: "base58CheckDecode".to_string(),
211        }),
212        "hexEncode" => Some(BuiltinCall::NativeCall {
213            contract: NativeContract::StdLib,
214            method: "hexEncode".to_string(),
215        }),
216        "hexDecode" => Some(BuiltinCall::NativeCall {
217            contract: NativeContract::StdLib,
218            method: "hexDecode".to_string(),
219        }),
220        "memoryCompare" => Some(BuiltinCall::NativeCall {
221            contract: NativeContract::StdLib,
222            method: "memoryCompare".to_string(),
223        }),
224        "memorySearch" => Some(BuiltinCall::NativeCall {
225            contract: NativeContract::StdLib,
226            method: "memorySearch".to_string(),
227        }),
228        "stringSplit" => Some(BuiltinCall::NativeCall {
229            contract: NativeContract::StdLib,
230            method: "stringSplit".to_string(),
231        }),
232        "strLen" => Some(BuiltinCall::NativeCall {
233            contract: NativeContract::StdLib,
234            method: "strLen".to_string(),
235        }),
236        "iteratorNext" => Some(BuiltinCall::Syscall("System.Iterator.Next".to_string())),
237        "iteratorValue" => Some(BuiltinCall::Syscall("System.Iterator.Value".to_string())),
238        "getCurrentRandom" => Some(BuiltinCall::Syscall("System.Runtime.GetRandom".to_string())),
239        "getNetwork" => Some(BuiltinCall::Syscall("System.Runtime.GetNetwork".to_string())),
240        "getAddressVersion" => Some(BuiltinCall::Syscall(
241            "System.Runtime.GetAddressVersion".to_string(),
242        )),
243        "burnGas" => Some(BuiltinCall::Syscall("System.Runtime.BurnGas".to_string())),
244        "getInvocationCounter" => Some(BuiltinCall::Syscall(
245            "System.Runtime.GetInvocationCounter".to_string(),
246        )),
247        "getFeePerByte" => Some(BuiltinCall::NativeCall {
248            contract: NativeContract::Policy,
249            method: "getFeePerByte".to_string(),
250        }),
251        "getExecFeeFactor" => Some(BuiltinCall::NativeCall {
252            contract: NativeContract::Policy,
253            method: "getExecFeeFactor".to_string(),
254        }),
255        "getExecPicoFeeFactor" => Some(BuiltinCall::NativeCall {
256            contract: NativeContract::Policy,
257            method: "getExecPicoFeeFactor".to_string(),
258        }),
259        "getStoragePrice" => Some(BuiltinCall::NativeCall {
260            contract: NativeContract::Policy,
261            method: "getStoragePrice".to_string(),
262        }),
263        "getMillisecondsPerBlock" => Some(BuiltinCall::NativeCall {
264            contract: NativeContract::Policy,
265            method: "getMillisecondsPerBlock".to_string(),
266        }),
267        "getMaxValidUntilBlockIncrement" => Some(BuiltinCall::NativeCall {
268            contract: NativeContract::Policy,
269            method: "getMaxValidUntilBlockIncrement".to_string(),
270        }),
271        "getMaxTraceableBlocks" => Some(BuiltinCall::NativeCall {
272            contract: NativeContract::Policy,
273            method: "getMaxTraceableBlocks".to_string(),
274        }),
275        "getAttributeFee" => Some(BuiltinCall::NativeCall {
276            contract: NativeContract::Policy,
277            method: "getAttributeFee".to_string(),
278        }),
279        "isBlocked" => Some(BuiltinCall::NativeCall {
280            contract: NativeContract::Policy,
281            method: "isBlocked".to_string(),
282        }),
283        "oracleRequest" => Some(BuiltinCall::NativeCall {
284            contract: NativeContract::Oracle,
285            method: "request".to_string(),
286        }),
287        "getOraclePrice" => Some(BuiltinCall::NativeCall {
288            contract: NativeContract::Oracle,
289            method: "getPrice".to_string(),
290        }),
291        "getDesignatedByRole" => Some(BuiltinCall::NativeCall {
292            contract: NativeContract::RoleManagement,
293            method: "getDesignatedByRole".to_string(),
294        }),
295        "hasRole" => None,
296        "getContractScript" => Some(BuiltinCall::GetContractScript),
297        "contractExists" => Some(BuiltinCall::NativeCall {
298            contract: NativeContract::ContractManagement,
299            method: "isContract".to_string(),
300        }),
301        _ => None,
302    }
303}