@alephium/web3 1.4.0 → 1.5.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.
Files changed (106) hide show
  1. package/dist/alephium-web3.min.js +1 -1
  2. package/dist/alephium-web3.min.js.map +1 -1
  3. package/dist/src/address/address.js +5 -5
  4. package/dist/src/api/api-alephium.d.ts +1 -1
  5. package/dist/src/api/api-alephium.js +1 -1
  6. package/dist/src/codec/array-codec.d.ts +4 -12
  7. package/dist/src/codec/array-codec.js +15 -28
  8. package/dist/src/codec/asset-output-codec.d.ts +6 -11
  9. package/dist/src/codec/asset-output-codec.js +32 -71
  10. package/dist/src/codec/bigint-codec.d.ts +2 -1
  11. package/dist/src/codec/bigint-codec.js +14 -2
  12. package/dist/src/codec/bytestring-codec.d.ts +6 -11
  13. package/dist/src/codec/bytestring-codec.js +9 -23
  14. package/dist/src/codec/codec.d.ts +54 -5
  15. package/dist/src/codec/codec.js +112 -14
  16. package/dist/src/codec/compact-int-codec.d.ts +65 -44
  17. package/dist/src/codec/compact-int-codec.js +222 -204
  18. package/dist/src/codec/contract-codec.d.ts +5 -8
  19. package/dist/src/codec/contract-codec.js +15 -29
  20. package/dist/src/codec/contract-output-codec.d.ts +4 -10
  21. package/dist/src/codec/contract-output-codec.js +20 -40
  22. package/dist/src/codec/contract-output-ref-codec.d.ts +2 -8
  23. package/dist/src/codec/contract-output-ref-codec.js +7 -17
  24. package/dist/src/codec/either-codec.d.ts +8 -15
  25. package/dist/src/codec/either-codec.js +5 -46
  26. package/dist/src/codec/index.d.ts +4 -3
  27. package/dist/src/codec/index.js +7 -4
  28. package/dist/src/codec/input-codec.d.ts +4 -10
  29. package/dist/src/codec/input-codec.js +11 -46
  30. package/dist/src/codec/instr-codec.d.ts +633 -40
  31. package/dist/src/codec/instr-codec.js +1040 -434
  32. package/dist/src/codec/int-as-4bytes-codec.d.ts +7 -0
  33. package/dist/src/codec/{signed-int-codec.js → int-as-4bytes-codec.js} +6 -12
  34. package/dist/src/codec/lockup-script-codec.d.ts +23 -26
  35. package/dist/src/codec/lockup-script-codec.js +12 -58
  36. package/dist/src/codec/method-codec.d.ts +6 -18
  37. package/dist/src/codec/method-codec.js +20 -48
  38. package/dist/src/codec/option-codec.d.ts +8 -13
  39. package/dist/src/codec/option-codec.js +14 -32
  40. package/dist/src/codec/output-codec.d.ts +2 -2
  41. package/dist/src/codec/output-codec.js +1 -1
  42. package/dist/src/codec/reader.d.ts +8 -0
  43. package/dist/src/codec/reader.js +48 -0
  44. package/dist/src/codec/script-codec.d.ts +6 -14
  45. package/dist/src/codec/script-codec.js +6 -22
  46. package/dist/src/codec/signature-codec.d.ts +4 -12
  47. package/dist/src/codec/signature-codec.js +3 -15
  48. package/dist/src/codec/timestamp-codec.d.ts +8 -0
  49. package/dist/src/codec/timestamp-codec.js +39 -0
  50. package/dist/src/codec/token-codec.d.ts +3 -10
  51. package/dist/src/codec/token-codec.js +6 -24
  52. package/dist/src/codec/transaction-codec.d.ts +6 -11
  53. package/dist/src/codec/transaction-codec.js +24 -49
  54. package/dist/src/codec/unlock-script-codec.d.ts +25 -36
  55. package/dist/src/codec/unlock-script-codec.js +26 -147
  56. package/dist/src/codec/unsigned-tx-codec.d.ts +8 -14
  57. package/dist/src/codec/unsigned-tx-codec.js +24 -66
  58. package/dist/src/codec/val.d.ts +27 -0
  59. package/dist/src/codec/val.js +33 -0
  60. package/dist/src/contract/contract.js +6 -6
  61. package/dist/src/contract/index.d.ts +1 -0
  62. package/dist/src/contract/index.js +1 -0
  63. package/dist/src/contract/ralph.d.ts +0 -4
  64. package/dist/src/contract/ralph.js +50 -179
  65. package/dist/src/contract/script-simulator.d.ts +27 -0
  66. package/dist/src/contract/script-simulator.js +757 -0
  67. package/dist/src/exchange/exchange.js +1 -1
  68. package/package.json +3 -4
  69. package/src/address/address.ts +8 -8
  70. package/src/api/api-alephium.ts +1 -1
  71. package/src/codec/array-codec.ts +16 -34
  72. package/src/codec/asset-output-codec.ts +38 -83
  73. package/src/codec/bigint-codec.ts +16 -2
  74. package/src/codec/bytestring-codec.ts +10 -28
  75. package/src/codec/codec.ts +121 -15
  76. package/src/codec/compact-int-codec.ts +230 -207
  77. package/src/codec/contract-codec.ts +20 -33
  78. package/src/codec/contract-output-codec.ts +22 -48
  79. package/src/codec/contract-output-ref-codec.ts +6 -17
  80. package/src/codec/either-codec.ts +4 -53
  81. package/src/codec/index.ts +4 -3
  82. package/src/codec/input-codec.ts +14 -36
  83. package/src/codec/instr-codec.ts +1229 -455
  84. package/src/codec/{signed-int-codec.ts → int-as-4bytes-codec.ts} +6 -10
  85. package/src/codec/lockup-script-codec.ts +28 -76
  86. package/src/codec/method-codec.ts +23 -61
  87. package/src/codec/option-codec.ts +13 -36
  88. package/src/codec/output-codec.ts +2 -2
  89. package/src/codec/reader.ts +56 -0
  90. package/src/codec/script-codec.ts +9 -31
  91. package/src/codec/signature-codec.ts +3 -18
  92. package/src/codec/timestamp-codec.ts +42 -0
  93. package/src/codec/token-codec.ts +7 -26
  94. package/src/codec/transaction-codec.ts +29 -58
  95. package/src/codec/unlock-script-codec.ts +44 -171
  96. package/src/codec/unsigned-tx-codec.ts +34 -63
  97. package/src/codec/val.ts +40 -0
  98. package/src/contract/contract.ts +9 -13
  99. package/src/contract/index.ts +1 -0
  100. package/src/contract/ralph.ts +76 -172
  101. package/src/contract/script-simulator.ts +838 -0
  102. package/src/exchange/exchange.ts +1 -1
  103. package/dist/src/codec/long-codec.d.ts +0 -8
  104. package/dist/src/codec/long-codec.js +0 -55
  105. package/dist/src/codec/signed-int-codec.d.ts +0 -8
  106. package/src/codec/long-codec.ts +0 -58
@@ -15,477 +15,1251 @@ GNU Lesser General Public License for more details.
15
15
  You should have received a copy of the GNU Lesser General Public License
16
16
  along with the library. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
- import { Parser } from 'binary-parser'
19
- import { ArrayCodec, DecodedArray } from './array-codec'
20
- import { compactUnsignedIntCodec, compactSignedIntCodec, DecodedCompactInt } from './compact-int-codec'
21
- import { ByteString, byteStringCodec } from './bytestring-codec'
18
+ // auto-generated, do not edit
19
+ import { ArrayCodec } from './array-codec'
20
+ import { i256Codec, u256Codec, i32Codec } from './compact-int-codec'
21
+ import { ByteString, byteStringCodec, byteStringsCodec } from './bytestring-codec'
22
22
  import { LockupScript, lockupScriptCodec } from './lockup-script-codec'
23
- import { Codec } from './codec'
24
- import { signedIntCodec } from './signed-int-codec'
25
-
26
- const byteStringArrayCodec = new ArrayCodec(byteStringCodec)
27
-
28
- // eslint-disable-next-line
29
- export interface InstrValue { }
30
- export interface InstrValueWithIndex extends InstrValue {
31
- index: number
23
+ import { byteCodec, Codec } from './codec'
24
+ import { intAs4BytesCodec } from './int-as-4bytes-codec'
25
+ import { Reader } from './reader'
26
+ export type Instr =
27
+ | { name: 'CallLocal'; code: 0x00; index: number }
28
+ | { name: 'CallExternal'; code: 0x01; index: number }
29
+ | { name: 'Return'; code: 0x02 }
30
+ | { name: 'ConstTrue'; code: 0x03 }
31
+ | { name: 'ConstFalse'; code: 0x04 }
32
+ | { name: 'I256Const0'; code: 0x05 }
33
+ | { name: 'I256Const1'; code: 0x06 }
34
+ | { name: 'I256Const2'; code: 0x07 }
35
+ | { name: 'I256Const3'; code: 0x08 }
36
+ | { name: 'I256Const4'; code: 0x09 }
37
+ | { name: 'I256Const5'; code: 0x0a }
38
+ | { name: 'I256ConstN1'; code: 0x0b }
39
+ | { name: 'U256Const0'; code: 0x0c }
40
+ | { name: 'U256Const1'; code: 0x0d }
41
+ | { name: 'U256Const2'; code: 0x0e }
42
+ | { name: 'U256Const3'; code: 0x0f }
43
+ | { name: 'U256Const4'; code: 0x10 }
44
+ | { name: 'U256Const5'; code: 0x11 }
45
+ | { name: 'I256Const'; code: 0x12; value: bigint }
46
+ | { name: 'U256Const'; code: 0x13; value: bigint }
47
+ | { name: 'BytesConst'; code: 0x14; value: ByteString }
48
+ | { name: 'AddressConst'; code: 0x15; value: LockupScript }
49
+ | { name: 'LoadLocal'; code: 0x16; index: number }
50
+ | { name: 'StoreLocal'; code: 0x17; index: number }
51
+ | { name: 'Pop'; code: 0x18 }
52
+ | { name: 'BoolNot'; code: 0x19 }
53
+ | { name: 'BoolAnd'; code: 0x1a }
54
+ | { name: 'BoolOr'; code: 0x1b }
55
+ | { name: 'BoolEq'; code: 0x1c }
56
+ | { name: 'BoolNeq'; code: 0x1d }
57
+ | { name: 'BoolToByteVec'; code: 0x1e }
58
+ | { name: 'I256Add'; code: 0x1f }
59
+ | { name: 'I256Sub'; code: 0x20 }
60
+ | { name: 'I256Mul'; code: 0x21 }
61
+ | { name: 'I256Div'; code: 0x22 }
62
+ | { name: 'I256Mod'; code: 0x23 }
63
+ | { name: 'I256Eq'; code: 0x24 }
64
+ | { name: 'I256Neq'; code: 0x25 }
65
+ | { name: 'I256Lt'; code: 0x26 }
66
+ | { name: 'I256Le'; code: 0x27 }
67
+ | { name: 'I256Gt'; code: 0x28 }
68
+ | { name: 'I256Ge'; code: 0x29 }
69
+ | { name: 'U256Add'; code: 0x2a }
70
+ | { name: 'U256Sub'; code: 0x2b }
71
+ | { name: 'U256Mul'; code: 0x2c }
72
+ | { name: 'U256Div'; code: 0x2d }
73
+ | { name: 'U256Mod'; code: 0x2e }
74
+ | { name: 'U256Eq'; code: 0x2f }
75
+ | { name: 'U256Neq'; code: 0x30 }
76
+ | { name: 'U256Lt'; code: 0x31 }
77
+ | { name: 'U256Le'; code: 0x32 }
78
+ | { name: 'U256Gt'; code: 0x33 }
79
+ | { name: 'U256Ge'; code: 0x34 }
80
+ | { name: 'U256ModAdd'; code: 0x35 }
81
+ | { name: 'U256ModSub'; code: 0x36 }
82
+ | { name: 'U256ModMul'; code: 0x37 }
83
+ | { name: 'U256BitAnd'; code: 0x38 }
84
+ | { name: 'U256BitOr'; code: 0x39 }
85
+ | { name: 'U256Xor'; code: 0x3a }
86
+ | { name: 'U256SHL'; code: 0x3b }
87
+ | { name: 'U256SHR'; code: 0x3c }
88
+ | { name: 'I256ToU256'; code: 0x3d }
89
+ | { name: 'I256ToByteVec'; code: 0x3e }
90
+ | { name: 'U256ToI256'; code: 0x3f }
91
+ | { name: 'U256ToByteVec'; code: 0x40 }
92
+ | { name: 'ByteVecEq'; code: 0x41 }
93
+ | { name: 'ByteVecNeq'; code: 0x42 }
94
+ | { name: 'ByteVecSize'; code: 0x43 }
95
+ | { name: 'ByteVecConcat'; code: 0x44 }
96
+ | { name: 'AddressEq'; code: 0x45 }
97
+ | { name: 'AddressNeq'; code: 0x46 }
98
+ | { name: 'AddressToByteVec'; code: 0x47 }
99
+ | { name: 'IsAssetAddress'; code: 0x48 }
100
+ | { name: 'IsContractAddress'; code: 0x49 }
101
+ | { name: 'Jump'; code: 0x4a; offset: number }
102
+ | { name: 'IfTrue'; code: 0x4b; offset: number }
103
+ | { name: 'IfFalse'; code: 0x4c; offset: number }
104
+ | { name: 'Assert'; code: 0x4d }
105
+ | { name: 'Blake2b'; code: 0x4e }
106
+ | { name: 'Keccak256'; code: 0x4f }
107
+ | { name: 'Sha256'; code: 0x50 }
108
+ | { name: 'Sha3'; code: 0x51 }
109
+ | { name: 'VerifyTxSignature'; code: 0x52 }
110
+ | { name: 'VerifySecP256K1'; code: 0x53 }
111
+ | { name: 'VerifyED25519'; code: 0x54 }
112
+ | { name: 'NetworkId'; code: 0x55 }
113
+ | { name: 'BlockTimeStamp'; code: 0x56 }
114
+ | { name: 'BlockTarget'; code: 0x57 }
115
+ | { name: 'TxId'; code: 0x58 }
116
+ | { name: 'TxInputAddressAt'; code: 0x59 }
117
+ | { name: 'TxInputsSize'; code: 0x5a }
118
+ | { name: 'VerifyAbsoluteLocktime'; code: 0x5b }
119
+ | { name: 'VerifyRelativeLocktime'; code: 0x5c }
120
+ | { name: 'Log1'; code: 0x5d }
121
+ | { name: 'Log2'; code: 0x5e }
122
+ | { name: 'Log3'; code: 0x5f }
123
+ | { name: 'Log4'; code: 0x60 }
124
+ | { name: 'Log5'; code: 0x61 }
125
+ | { name: 'ByteVecSlice'; code: 0x62 }
126
+ | { name: 'ByteVecToAddress'; code: 0x63 }
127
+ | { name: 'Encode'; code: 0x64 }
128
+ | { name: 'Zeros'; code: 0x65 }
129
+ | { name: 'U256To1Byte'; code: 0x66 }
130
+ | { name: 'U256To2Byte'; code: 0x67 }
131
+ | { name: 'U256To4Byte'; code: 0x68 }
132
+ | { name: 'U256To8Byte'; code: 0x69 }
133
+ | { name: 'U256To16Byte'; code: 0x6a }
134
+ | { name: 'U256To32Byte'; code: 0x6b }
135
+ | { name: 'U256From1Byte'; code: 0x6c }
136
+ | { name: 'U256From2Byte'; code: 0x6d }
137
+ | { name: 'U256From4Byte'; code: 0x6e }
138
+ | { name: 'U256From8Byte'; code: 0x6f }
139
+ | { name: 'U256From16Byte'; code: 0x70 }
140
+ | { name: 'U256From32Byte'; code: 0x71 }
141
+ | { name: 'EthEcRecover'; code: 0x72 }
142
+ | { name: 'Log6'; code: 0x73 }
143
+ | { name: 'Log7'; code: 0x74 }
144
+ | { name: 'Log8'; code: 0x75 }
145
+ | { name: 'Log9'; code: 0x76 }
146
+ | { name: 'ContractIdToAddress'; code: 0x77 }
147
+ | { name: 'LoadLocalByIndex'; code: 0x78 }
148
+ | { name: 'StoreLocalByIndex'; code: 0x79 }
149
+ | { name: 'Dup'; code: 0x7a }
150
+ | { name: 'AssertWithErrorCode'; code: 0x7b }
151
+ | { name: 'Swap'; code: 0x7c }
152
+ | { name: 'BlockHash'; code: 0x7d }
153
+ | { name: 'DEBUG'; code: 0x7e; stringParts: ByteString[] }
154
+ | { name: 'TxGasPrice'; code: 0x7f }
155
+ | { name: 'TxGasAmount'; code: 0x80 }
156
+ | { name: 'TxGasFee'; code: 0x81 }
157
+ | { name: 'I256Exp'; code: 0x82 }
158
+ | { name: 'U256Exp'; code: 0x83 }
159
+ | { name: 'U256ModExp'; code: 0x84 }
160
+ | { name: 'VerifyBIP340Schnorr'; code: 0x85 }
161
+ | { name: 'GetSegregatedSignature'; code: 0x86 }
162
+ | { name: 'MulModN'; code: 0x87 }
163
+ | { name: 'AddModN'; code: 0x88 }
164
+ | { name: 'U256ToString'; code: 0x89 }
165
+ | { name: 'I256ToString'; code: 0x8a }
166
+ | { name: 'BoolToString'; code: 0x8b }
167
+ | { name: 'GroupOfAddress'; code: 0x8c }
168
+ | { name: 'LoadMutField'; code: 0xa0; index: number }
169
+ | { name: 'StoreMutField'; code: 0xa1; index: number }
170
+ | { name: 'ApproveAlph'; code: 0xa2 }
171
+ | { name: 'ApproveToken'; code: 0xa3 }
172
+ | { name: 'AlphRemaining'; code: 0xa4 }
173
+ | { name: 'TokenRemaining'; code: 0xa5 }
174
+ | { name: 'IsPaying'; code: 0xa6 }
175
+ | { name: 'TransferAlph'; code: 0xa7 }
176
+ | { name: 'TransferAlphFromSelf'; code: 0xa8 }
177
+ | { name: 'TransferAlphToSelf'; code: 0xa9 }
178
+ | { name: 'TransferToken'; code: 0xaa }
179
+ | { name: 'TransferTokenFromSelf'; code: 0xab }
180
+ | { name: 'TransferTokenToSelf'; code: 0xac }
181
+ | { name: 'CreateContract'; code: 0xad }
182
+ | { name: 'CreateContractWithToken'; code: 0xae }
183
+ | { name: 'CopyCreateContract'; code: 0xaf }
184
+ | { name: 'DestroySelf'; code: 0xb0 }
185
+ | { name: 'SelfContractId'; code: 0xb1 }
186
+ | { name: 'SelfAddress'; code: 0xb2 }
187
+ | { name: 'CallerContractId'; code: 0xb3 }
188
+ | { name: 'CallerAddress'; code: 0xb4 }
189
+ | { name: 'IsCalledFromTxScript'; code: 0xb5 }
190
+ | { name: 'CallerInitialStateHash'; code: 0xb6 }
191
+ | { name: 'CallerCodeHash'; code: 0xb7 }
192
+ | { name: 'ContractInitialStateHash'; code: 0xb8 }
193
+ | { name: 'ContractCodeHash'; code: 0xb9 }
194
+ | { name: 'MigrateSimple'; code: 0xba }
195
+ | { name: 'MigrateWithFields'; code: 0xbb }
196
+ | { name: 'CopyCreateContractWithToken'; code: 0xbc }
197
+ | { name: 'BurnToken'; code: 0xbd }
198
+ | { name: 'LockApprovedAssets'; code: 0xbe }
199
+ | { name: 'CreateSubContract'; code: 0xbf }
200
+ | { name: 'CreateSubContractWithToken'; code: 0xc0 }
201
+ | { name: 'CopyCreateSubContract'; code: 0xc1 }
202
+ | { name: 'CopyCreateSubContractWithToken'; code: 0xc2 }
203
+ | { name: 'LoadMutFieldByIndex'; code: 0xc3 }
204
+ | { name: 'StoreMutFieldByIndex'; code: 0xc4 }
205
+ | { name: 'ContractExists'; code: 0xc5 }
206
+ | { name: 'CreateContractAndTransferToken'; code: 0xc6 }
207
+ | { name: 'CopyCreateContractAndTransferToken'; code: 0xc7 }
208
+ | { name: 'CreateSubContractAndTransferToken'; code: 0xc8 }
209
+ | { name: 'CopyCreateSubContractAndTransferToken'; code: 0xc9 }
210
+ | { name: 'NullContractAddress'; code: 0xca }
211
+ | { name: 'SubContractId'; code: 0xcb }
212
+ | { name: 'SubContractIdOf'; code: 0xcc }
213
+ | { name: 'ALPHTokenId'; code: 0xcd }
214
+ | { name: 'LoadImmField'; code: 0xce; index: number }
215
+ | { name: 'LoadImmFieldByIndex'; code: 0xcf }
216
+ | { name: 'PayGasFee'; code: 0xd0 }
217
+ | { name: 'MinimalContractDeposit'; code: 0xd1 }
218
+ | { name: 'CreateMapEntry'; code: 0xd2; immFieldsNum: number; mutFieldsNum: number }
219
+ | { name: 'MethodSelector'; code: 0xd3; selector: number }
220
+ | { name: 'CallExternalBySelector'; code: 0xd4; selector: number }
221
+ export const CallLocalCode = 0x00
222
+ export const CallExternalCode = 0x01
223
+ export const I256ConstCode = 0x12
224
+ export const U256ConstCode = 0x13
225
+ export const BytesConstCode = 0x14
226
+ export const AddressConstCode = 0x15
227
+ export const LoadLocalCode = 0x16
228
+ export const StoreLocalCode = 0x17
229
+ export const JumpCode = 0x4a
230
+ export const IfTrueCode = 0x4b
231
+ export const IfFalseCode = 0x4c
232
+ export const DEBUGCode = 0x7e
233
+ export const LoadMutFieldCode = 0xa0
234
+ export const StoreMutFieldCode = 0xa1
235
+ export const LoadImmFieldCode = 0xce
236
+ export const CreateMapEntryCode = 0xd2
237
+ export const MethodSelectorCode = 0xd3
238
+ export const CallExternalBySelectorCode = 0xd4
239
+ export const CallLocal: (index: number) => Instr = (index: number) => {
240
+ return { name: 'CallLocal', code: 0x00, index }
32
241
  }
33
- export interface InstrValueWithCompactInt extends InstrValue {
34
- value: DecodedCompactInt
242
+ export const CallExternal: (index: number) => Instr = (index: number) => {
243
+ return { name: 'CallExternal', code: 0x01, index }
35
244
  }
36
-
37
- export interface ByteStringConst extends InstrValue {
38
- value: ByteString
245
+ export const Return: Instr = { name: 'Return', code: 0x02 }
246
+ export const ConstTrue: Instr = { name: 'ConstTrue', code: 0x03 }
247
+ export const ConstFalse: Instr = { name: 'ConstFalse', code: 0x04 }
248
+ export const I256Const0: Instr = { name: 'I256Const0', code: 0x05 }
249
+ export const I256Const1: Instr = { name: 'I256Const1', code: 0x06 }
250
+ export const I256Const2: Instr = { name: 'I256Const2', code: 0x07 }
251
+ export const I256Const3: Instr = { name: 'I256Const3', code: 0x08 }
252
+ export const I256Const4: Instr = { name: 'I256Const4', code: 0x09 }
253
+ export const I256Const5: Instr = { name: 'I256Const5', code: 0x0a }
254
+ export const I256ConstN1: Instr = { name: 'I256ConstN1', code: 0x0b }
255
+ export const U256Const0: Instr = { name: 'U256Const0', code: 0x0c }
256
+ export const U256Const1: Instr = { name: 'U256Const1', code: 0x0d }
257
+ export const U256Const2: Instr = { name: 'U256Const2', code: 0x0e }
258
+ export const U256Const3: Instr = { name: 'U256Const3', code: 0x0f }
259
+ export const U256Const4: Instr = { name: 'U256Const4', code: 0x10 }
260
+ export const U256Const5: Instr = { name: 'U256Const5', code: 0x11 }
261
+ export const I256Const: (value: bigint) => Instr = (value: bigint) => {
262
+ return { name: 'I256Const', code: 0x12, value }
39
263
  }
40
- export interface AddressConst extends InstrValue {
41
- value: LockupScript
264
+ export const U256Const: (value: bigint) => Instr = (value: bigint) => {
265
+ return { name: 'U256Const', code: 0x13, value }
42
266
  }
43
- export interface Debug extends InstrValue {
44
- stringParts: DecodedArray<ByteString>
267
+ export const BytesConst: (value: ByteString) => Instr = (value: ByteString) => {
268
+ return { name: 'BytesConst', code: 0x14, value }
45
269
  }
46
- export interface CreateMapEntryValue extends InstrValue {
47
- immFields: number
48
- mutFields: number
270
+ export const AddressConst: (value: LockupScript) => Instr = (value: LockupScript) => {
271
+ return { name: 'AddressConst', code: 0x15, value }
49
272
  }
50
- export interface Instr {
51
- code: number
52
- value: InstrValue
273
+ export const LoadLocal: (index: number) => Instr = (index: number) => {
274
+ return { name: 'LoadLocal', code: 0x16, index }
275
+ }
276
+ export const StoreLocal: (index: number) => Instr = (index: number) => {
277
+ return { name: 'StoreLocal', code: 0x17, index }
278
+ }
279
+ export const Pop: Instr = { name: 'Pop', code: 0x18 }
280
+ export const BoolNot: Instr = { name: 'BoolNot', code: 0x19 }
281
+ export const BoolAnd: Instr = { name: 'BoolAnd', code: 0x1a }
282
+ export const BoolOr: Instr = { name: 'BoolOr', code: 0x1b }
283
+ export const BoolEq: Instr = { name: 'BoolEq', code: 0x1c }
284
+ export const BoolNeq: Instr = { name: 'BoolNeq', code: 0x1d }
285
+ export const BoolToByteVec: Instr = { name: 'BoolToByteVec', code: 0x1e }
286
+ export const I256Add: Instr = { name: 'I256Add', code: 0x1f }
287
+ export const I256Sub: Instr = { name: 'I256Sub', code: 0x20 }
288
+ export const I256Mul: Instr = { name: 'I256Mul', code: 0x21 }
289
+ export const I256Div: Instr = { name: 'I256Div', code: 0x22 }
290
+ export const I256Mod: Instr = { name: 'I256Mod', code: 0x23 }
291
+ export const I256Eq: Instr = { name: 'I256Eq', code: 0x24 }
292
+ export const I256Neq: Instr = { name: 'I256Neq', code: 0x25 }
293
+ export const I256Lt: Instr = { name: 'I256Lt', code: 0x26 }
294
+ export const I256Le: Instr = { name: 'I256Le', code: 0x27 }
295
+ export const I256Gt: Instr = { name: 'I256Gt', code: 0x28 }
296
+ export const I256Ge: Instr = { name: 'I256Ge', code: 0x29 }
297
+ export const U256Add: Instr = { name: 'U256Add', code: 0x2a }
298
+ export const U256Sub: Instr = { name: 'U256Sub', code: 0x2b }
299
+ export const U256Mul: Instr = { name: 'U256Mul', code: 0x2c }
300
+ export const U256Div: Instr = { name: 'U256Div', code: 0x2d }
301
+ export const U256Mod: Instr = { name: 'U256Mod', code: 0x2e }
302
+ export const U256Eq: Instr = { name: 'U256Eq', code: 0x2f }
303
+ export const U256Neq: Instr = { name: 'U256Neq', code: 0x30 }
304
+ export const U256Lt: Instr = { name: 'U256Lt', code: 0x31 }
305
+ export const U256Le: Instr = { name: 'U256Le', code: 0x32 }
306
+ export const U256Gt: Instr = { name: 'U256Gt', code: 0x33 }
307
+ export const U256Ge: Instr = { name: 'U256Ge', code: 0x34 }
308
+ export const U256ModAdd: Instr = { name: 'U256ModAdd', code: 0x35 }
309
+ export const U256ModSub: Instr = { name: 'U256ModSub', code: 0x36 }
310
+ export const U256ModMul: Instr = { name: 'U256ModMul', code: 0x37 }
311
+ export const U256BitAnd: Instr = { name: 'U256BitAnd', code: 0x38 }
312
+ export const U256BitOr: Instr = { name: 'U256BitOr', code: 0x39 }
313
+ export const U256Xor: Instr = { name: 'U256Xor', code: 0x3a }
314
+ export const U256SHL: Instr = { name: 'U256SHL', code: 0x3b }
315
+ export const U256SHR: Instr = { name: 'U256SHR', code: 0x3c }
316
+ export const I256ToU256: Instr = { name: 'I256ToU256', code: 0x3d }
317
+ export const I256ToByteVec: Instr = { name: 'I256ToByteVec', code: 0x3e }
318
+ export const U256ToI256: Instr = { name: 'U256ToI256', code: 0x3f }
319
+ export const U256ToByteVec: Instr = { name: 'U256ToByteVec', code: 0x40 }
320
+ export const ByteVecEq: Instr = { name: 'ByteVecEq', code: 0x41 }
321
+ export const ByteVecNeq: Instr = { name: 'ByteVecNeq', code: 0x42 }
322
+ export const ByteVecSize: Instr = { name: 'ByteVecSize', code: 0x43 }
323
+ export const ByteVecConcat: Instr = { name: 'ByteVecConcat', code: 0x44 }
324
+ export const AddressEq: Instr = { name: 'AddressEq', code: 0x45 }
325
+ export const AddressNeq: Instr = { name: 'AddressNeq', code: 0x46 }
326
+ export const AddressToByteVec: Instr = { name: 'AddressToByteVec', code: 0x47 }
327
+ export const IsAssetAddress: Instr = { name: 'IsAssetAddress', code: 0x48 }
328
+ export const IsContractAddress: Instr = { name: 'IsContractAddress', code: 0x49 }
329
+ export const Jump: (offset: number) => Instr = (offset: number) => {
330
+ return { name: 'Jump', code: 0x4a, offset }
331
+ }
332
+ export const IfTrue: (offset: number) => Instr = (offset: number) => {
333
+ return { name: 'IfTrue', code: 0x4b, offset }
334
+ }
335
+ export const IfFalse: (offset: number) => Instr = (offset: number) => {
336
+ return { name: 'IfFalse', code: 0x4c, offset }
337
+ }
338
+ export const Assert: Instr = { name: 'Assert', code: 0x4d }
339
+ export const Blake2b: Instr = { name: 'Blake2b', code: 0x4e }
340
+ export const Keccak256: Instr = { name: 'Keccak256', code: 0x4f }
341
+ export const Sha256: Instr = { name: 'Sha256', code: 0x50 }
342
+ export const Sha3: Instr = { name: 'Sha3', code: 0x51 }
343
+ export const VerifyTxSignature: Instr = { name: 'VerifyTxSignature', code: 0x52 }
344
+ export const VerifySecP256K1: Instr = { name: 'VerifySecP256K1', code: 0x53 }
345
+ export const VerifyED25519: Instr = { name: 'VerifyED25519', code: 0x54 }
346
+ export const NetworkId: Instr = { name: 'NetworkId', code: 0x55 }
347
+ export const BlockTimeStamp: Instr = { name: 'BlockTimeStamp', code: 0x56 }
348
+ export const BlockTarget: Instr = { name: 'BlockTarget', code: 0x57 }
349
+ export const TxId: Instr = { name: 'TxId', code: 0x58 }
350
+ export const TxInputAddressAt: Instr = { name: 'TxInputAddressAt', code: 0x59 }
351
+ export const TxInputsSize: Instr = { name: 'TxInputsSize', code: 0x5a }
352
+ export const VerifyAbsoluteLocktime: Instr = { name: 'VerifyAbsoluteLocktime', code: 0x5b }
353
+ export const VerifyRelativeLocktime: Instr = { name: 'VerifyRelativeLocktime', code: 0x5c }
354
+ export const Log1: Instr = { name: 'Log1', code: 0x5d }
355
+ export const Log2: Instr = { name: 'Log2', code: 0x5e }
356
+ export const Log3: Instr = { name: 'Log3', code: 0x5f }
357
+ export const Log4: Instr = { name: 'Log4', code: 0x60 }
358
+ export const Log5: Instr = { name: 'Log5', code: 0x61 }
359
+ export const ByteVecSlice: Instr = { name: 'ByteVecSlice', code: 0x62 }
360
+ export const ByteVecToAddress: Instr = { name: 'ByteVecToAddress', code: 0x63 }
361
+ export const Encode: Instr = { name: 'Encode', code: 0x64 }
362
+ export const Zeros: Instr = { name: 'Zeros', code: 0x65 }
363
+ export const U256To1Byte: Instr = { name: 'U256To1Byte', code: 0x66 }
364
+ export const U256To2Byte: Instr = { name: 'U256To2Byte', code: 0x67 }
365
+ export const U256To4Byte: Instr = { name: 'U256To4Byte', code: 0x68 }
366
+ export const U256To8Byte: Instr = { name: 'U256To8Byte', code: 0x69 }
367
+ export const U256To16Byte: Instr = { name: 'U256To16Byte', code: 0x6a }
368
+ export const U256To32Byte: Instr = { name: 'U256To32Byte', code: 0x6b }
369
+ export const U256From1Byte: Instr = { name: 'U256From1Byte', code: 0x6c }
370
+ export const U256From2Byte: Instr = { name: 'U256From2Byte', code: 0x6d }
371
+ export const U256From4Byte: Instr = { name: 'U256From4Byte', code: 0x6e }
372
+ export const U256From8Byte: Instr = { name: 'U256From8Byte', code: 0x6f }
373
+ export const U256From16Byte: Instr = { name: 'U256From16Byte', code: 0x70 }
374
+ export const U256From32Byte: Instr = { name: 'U256From32Byte', code: 0x71 }
375
+ export const EthEcRecover: Instr = { name: 'EthEcRecover', code: 0x72 }
376
+ export const Log6: Instr = { name: 'Log6', code: 0x73 }
377
+ export const Log7: Instr = { name: 'Log7', code: 0x74 }
378
+ export const Log8: Instr = { name: 'Log8', code: 0x75 }
379
+ export const Log9: Instr = { name: 'Log9', code: 0x76 }
380
+ export const ContractIdToAddress: Instr = { name: 'ContractIdToAddress', code: 0x77 }
381
+ export const LoadLocalByIndex: Instr = { name: 'LoadLocalByIndex', code: 0x78 }
382
+ export const StoreLocalByIndex: Instr = { name: 'StoreLocalByIndex', code: 0x79 }
383
+ export const Dup: Instr = { name: 'Dup', code: 0x7a }
384
+ export const AssertWithErrorCode: Instr = { name: 'AssertWithErrorCode', code: 0x7b }
385
+ export const Swap: Instr = { name: 'Swap', code: 0x7c }
386
+ export const BlockHash: Instr = { name: 'BlockHash', code: 0x7d }
387
+ export const DEBUG: (stringParts: ByteString[]) => Instr = (stringParts: ByteString[]) => {
388
+ return { name: 'DEBUG', code: 0x7e, stringParts }
389
+ }
390
+ export const TxGasPrice: Instr = { name: 'TxGasPrice', code: 0x7f }
391
+ export const TxGasAmount: Instr = { name: 'TxGasAmount', code: 0x80 }
392
+ export const TxGasFee: Instr = { name: 'TxGasFee', code: 0x81 }
393
+ export const I256Exp: Instr = { name: 'I256Exp', code: 0x82 }
394
+ export const U256Exp: Instr = { name: 'U256Exp', code: 0x83 }
395
+ export const U256ModExp: Instr = { name: 'U256ModExp', code: 0x84 }
396
+ export const VerifyBIP340Schnorr: Instr = { name: 'VerifyBIP340Schnorr', code: 0x85 }
397
+ export const GetSegregatedSignature: Instr = { name: 'GetSegregatedSignature', code: 0x86 }
398
+ export const MulModN: Instr = { name: 'MulModN', code: 0x87 }
399
+ export const AddModN: Instr = { name: 'AddModN', code: 0x88 }
400
+ export const U256ToString: Instr = { name: 'U256ToString', code: 0x89 }
401
+ export const I256ToString: Instr = { name: 'I256ToString', code: 0x8a }
402
+ export const BoolToString: Instr = { name: 'BoolToString', code: 0x8b }
403
+ export const GroupOfAddress: Instr = { name: 'GroupOfAddress', code: 0x8c }
404
+ export const LoadMutField: (index: number) => Instr = (index: number) => {
405
+ return { name: 'LoadMutField', code: 0xa0, index }
406
+ }
407
+ export const StoreMutField: (index: number) => Instr = (index: number) => {
408
+ return { name: 'StoreMutField', code: 0xa1, index }
409
+ }
410
+ export const ApproveAlph: Instr = { name: 'ApproveAlph', code: 0xa2 }
411
+ export const ApproveToken: Instr = { name: 'ApproveToken', code: 0xa3 }
412
+ export const AlphRemaining: Instr = { name: 'AlphRemaining', code: 0xa4 }
413
+ export const TokenRemaining: Instr = { name: 'TokenRemaining', code: 0xa5 }
414
+ export const IsPaying: Instr = { name: 'IsPaying', code: 0xa6 }
415
+ export const TransferAlph: Instr = { name: 'TransferAlph', code: 0xa7 }
416
+ export const TransferAlphFromSelf: Instr = { name: 'TransferAlphFromSelf', code: 0xa8 }
417
+ export const TransferAlphToSelf: Instr = { name: 'TransferAlphToSelf', code: 0xa9 }
418
+ export const TransferToken: Instr = { name: 'TransferToken', code: 0xaa }
419
+ export const TransferTokenFromSelf: Instr = { name: 'TransferTokenFromSelf', code: 0xab }
420
+ export const TransferTokenToSelf: Instr = { name: 'TransferTokenToSelf', code: 0xac }
421
+ export const CreateContract: Instr = { name: 'CreateContract', code: 0xad }
422
+ export const CreateContractWithToken: Instr = { name: 'CreateContractWithToken', code: 0xae }
423
+ export const CopyCreateContract: Instr = { name: 'CopyCreateContract', code: 0xaf }
424
+ export const DestroySelf: Instr = { name: 'DestroySelf', code: 0xb0 }
425
+ export const SelfContractId: Instr = { name: 'SelfContractId', code: 0xb1 }
426
+ export const SelfAddress: Instr = { name: 'SelfAddress', code: 0xb2 }
427
+ export const CallerContractId: Instr = { name: 'CallerContractId', code: 0xb3 }
428
+ export const CallerAddress: Instr = { name: 'CallerAddress', code: 0xb4 }
429
+ export const IsCalledFromTxScript: Instr = { name: 'IsCalledFromTxScript', code: 0xb5 }
430
+ export const CallerInitialStateHash: Instr = { name: 'CallerInitialStateHash', code: 0xb6 }
431
+ export const CallerCodeHash: Instr = { name: 'CallerCodeHash', code: 0xb7 }
432
+ export const ContractInitialStateHash: Instr = { name: 'ContractInitialStateHash', code: 0xb8 }
433
+ export const ContractCodeHash: Instr = { name: 'ContractCodeHash', code: 0xb9 }
434
+ export const MigrateSimple: Instr = { name: 'MigrateSimple', code: 0xba }
435
+ export const MigrateWithFields: Instr = { name: 'MigrateWithFields', code: 0xbb }
436
+ export const CopyCreateContractWithToken: Instr = { name: 'CopyCreateContractWithToken', code: 0xbc }
437
+ export const BurnToken: Instr = { name: 'BurnToken', code: 0xbd }
438
+ export const LockApprovedAssets: Instr = { name: 'LockApprovedAssets', code: 0xbe }
439
+ export const CreateSubContract: Instr = { name: 'CreateSubContract', code: 0xbf }
440
+ export const CreateSubContractWithToken: Instr = { name: 'CreateSubContractWithToken', code: 0xc0 }
441
+ export const CopyCreateSubContract: Instr = { name: 'CopyCreateSubContract', code: 0xc1 }
442
+ export const CopyCreateSubContractWithToken: Instr = { name: 'CopyCreateSubContractWithToken', code: 0xc2 }
443
+ export const LoadMutFieldByIndex: Instr = { name: 'LoadMutFieldByIndex', code: 0xc3 }
444
+ export const StoreMutFieldByIndex: Instr = { name: 'StoreMutFieldByIndex', code: 0xc4 }
445
+ export const ContractExists: Instr = { name: 'ContractExists', code: 0xc5 }
446
+ export const CreateContractAndTransferToken: Instr = { name: 'CreateContractAndTransferToken', code: 0xc6 }
447
+ export const CopyCreateContractAndTransferToken: Instr = { name: 'CopyCreateContractAndTransferToken', code: 0xc7 }
448
+ export const CreateSubContractAndTransferToken: Instr = { name: 'CreateSubContractAndTransferToken', code: 0xc8 }
449
+ export const CopyCreateSubContractAndTransferToken: Instr = {
450
+ name: 'CopyCreateSubContractAndTransferToken',
451
+ code: 0xc9
452
+ }
453
+ export const NullContractAddress: Instr = { name: 'NullContractAddress', code: 0xca }
454
+ export const SubContractId: Instr = { name: 'SubContractId', code: 0xcb }
455
+ export const SubContractIdOf: Instr = { name: 'SubContractIdOf', code: 0xcc }
456
+ export const ALPHTokenId: Instr = { name: 'ALPHTokenId', code: 0xcd }
457
+ export const LoadImmField: (index: number) => Instr = (index: number) => {
458
+ return { name: 'LoadImmField', code: 0xce, index }
459
+ }
460
+ export const LoadImmFieldByIndex: Instr = { name: 'LoadImmFieldByIndex', code: 0xcf }
461
+ export const PayGasFee: Instr = { name: 'PayGasFee', code: 0xd0 }
462
+ export const MinimalContractDeposit: Instr = { name: 'MinimalContractDeposit', code: 0xd1 }
463
+ export const CreateMapEntry: (immFieldsNum: number, mutFieldsNum: number) => Instr = (
464
+ immFieldsNum: number,
465
+ mutFieldsNum: number
466
+ ) => {
467
+ return { name: 'CreateMapEntry', code: 0xd2, immFieldsNum, mutFieldsNum }
53
468
  }
54
-
55
- export const CallLocal = (index: number): Instr => ({ code: 0x00, value: { index } })
56
- export const CallExternal = (index: number): Instr => ({ code: 0x01, value: { index } })
57
- export const Return: Instr = { code: 0x02, value: {} }
58
- export const ConstTrue: Instr = { code: 0x03, value: {} }
59
- export const ConstFalse: Instr = { code: 0x04, value: {} }
60
- export const I256Const0: Instr = { code: 0x05, value: {} }
61
- export const I256Const1: Instr = { code: 0x06, value: {} }
62
- export const I256Const2: Instr = { code: 0x07, value: {} }
63
- export const I256Const3: Instr = { code: 0x08, value: {} }
64
- export const I256Const4: Instr = { code: 0x09, value: {} }
65
- export const I256Const5: Instr = { code: 0x0a, value: {} }
66
- export const I256ConstN1: Instr = { code: 0x0b, value: {} }
67
- export const U256Const0: Instr = { code: 0x0c, value: {} }
68
- export const U256Const1: Instr = { code: 0x0d, value: {} }
69
- export const U256Const2: Instr = { code: 0x0e, value: {} }
70
- export const U256Const3: Instr = { code: 0x0f, value: {} }
71
- export const U256Const4: Instr = { code: 0x10, value: {} }
72
- export const U256Const5: Instr = { code: 0x11, value: {} }
73
- export const I256Const = (value: DecodedCompactInt): Instr => ({ code: 0x12, value: { value } })
74
- export const U256Const = (value: DecodedCompactInt): Instr => ({ code: 0x13, value: { value } })
75
- export const ByteConst = (value: ByteString): Instr => ({ code: 0x14, value: { value } })
76
- export const AddressConst = (value: LockupScript): Instr => ({ code: 0x15, value: { value } })
77
- export const LoadLocal = (index: number): Instr => ({ code: 0x16, value: { index } })
78
- export const StoreLocal = (index: number): Instr => ({ code: 0x17, value: { index } })
79
- export const Pop: Instr = { code: 0x18, value: {} }
80
- export const BoolNot: Instr = { code: 0x19, value: {} }
81
- export const BoolAnd: Instr = { code: 0x1a, value: {} }
82
- export const BoolOr: Instr = { code: 0x1b, value: {} }
83
- export const BoolEq: Instr = { code: 0x1c, value: {} }
84
- export const BoolNeq: Instr = { code: 0x1d, value: {} }
85
- export const BoolToByteVec: Instr = { code: 0x1e, value: {} }
86
- export const I256Add: Instr = { code: 0x1f, value: {} }
87
- export const I256Sub: Instr = { code: 0x20, value: {} }
88
- export const I256Mul: Instr = { code: 0x21, value: {} }
89
- export const I256Div: Instr = { code: 0x22, value: {} }
90
- export const I256Mod: Instr = { code: 0x23, value: {} }
91
- export const I256Eq: Instr = { code: 0x24, value: {} }
92
- export const I256Neq: Instr = { code: 0x25, value: {} }
93
- export const I256Lt: Instr = { code: 0x26, value: {} }
94
- export const I256Le: Instr = { code: 0x27, value: {} }
95
- export const I256Gt: Instr = { code: 0x28, value: {} }
96
- export const I256Ge: Instr = { code: 0x29, value: {} }
97
- export const U256Add: Instr = { code: 0x2a, value: {} }
98
- export const U256Sub: Instr = { code: 0x2b, value: {} }
99
- export const U256Mul: Instr = { code: 0x2c, value: {} }
100
- export const U256Div: Instr = { code: 0x2d, value: {} }
101
- export const U256Mod: Instr = { code: 0x2e, value: {} }
102
- export const U256Eq: Instr = { code: 0x2f, value: {} }
103
- export const U256Neq: Instr = { code: 0x30, value: {} }
104
- export const U256Lt: Instr = { code: 0x31, value: {} }
105
- export const U256Le: Instr = { code: 0x32, value: {} }
106
- export const U256Gt: Instr = { code: 0x33, value: {} }
107
- export const U256Ge: Instr = { code: 0x34, value: {} }
108
- export const U256ModAdd: Instr = { code: 0x35, value: {} }
109
- export const U256ModSub: Instr = { code: 0x36, value: {} }
110
- export const U256ModMul: Instr = { code: 0x37, value: {} }
111
- export const U256BitAnd: Instr = { code: 0x38, value: {} }
112
- export const U256BitOr: Instr = { code: 0x39, value: {} }
113
- export const U256Xor: Instr = { code: 0x3a, value: {} }
114
- export const U256SHL: Instr = { code: 0x3b, value: {} }
115
- export const U256SHR: Instr = { code: 0x3c, value: {} }
116
- export const I256ToU256: Instr = { code: 0x3d, value: {} }
117
- export const I256ToByteVec: Instr = { code: 0x3e, value: {} }
118
- export const U256ToI256: Instr = { code: 0x3f, value: {} }
119
- export const U256ToByteVec: Instr = { code: 0x40, value: {} }
120
- export const ByteVecEq: Instr = { code: 0x41, value: {} }
121
- export const ByteVecNeq: Instr = { code: 0x42, value: {} }
122
- export const ByteVecSize: Instr = { code: 0x43, value: {} }
123
- export const ByteVecConcat: Instr = { code: 0x44, value: {} }
124
- export const AddressEq: Instr = { code: 0x45, value: {} }
125
- export const AddressNeq: Instr = { code: 0x46, value: {} }
126
- export const AddressToByteVec: Instr = { code: 0x47, value: {} }
127
- export const IsAssetAddress: Instr = { code: 0x48, value: {} }
128
- export const IsContractAddress: Instr = { code: 0x49, value: {} }
129
- export const Jump = (value: DecodedCompactInt): Instr => ({ code: 0x4a, value })
130
- export const IfTrue = (value: DecodedCompactInt): Instr => ({ code: 0x4b, value })
131
- export const IfFalse = (value: DecodedCompactInt): Instr => ({ code: 0x4c, value: { value } })
132
- export const Assert: Instr = { code: 0x4d, value: {} }
133
- export const Blake2b: Instr = { code: 0x4e, value: {} }
134
- export const Keccak256: Instr = { code: 0x4f, value: {} }
135
- export const Sha256: Instr = { code: 0x50, value: {} }
136
- export const Sha3: Instr = { code: 0x51, value: {} }
137
- export const VerifyTxSignature: Instr = { code: 0x52, value: {} }
138
- export const VerifySecP256K1: Instr = { code: 0x53, value: {} }
139
- export const VerifyED25519: Instr = { code: 0x54, value: {} }
140
- export const NetworkId: Instr = { code: 0x55, value: {} }
141
- export const BlockTimeStamp: Instr = { code: 0x56, value: {} }
142
- export const BlockTarget: Instr = { code: 0x57, value: {} }
143
- export const TxId: Instr = { code: 0x58, value: {} }
144
- export const TxInputAddressAt: Instr = { code: 0x59, value: {} }
145
- export const TxInputsSize: Instr = { code: 0x5a, value: {} }
146
- export const VerifyAbsoluteLocktime: Instr = { code: 0x5b, value: {} }
147
- export const VerifyRelativeLocktime: Instr = { code: 0x5c, value: {} }
148
- export const Log1: Instr = { code: 0x5d, value: {} }
149
- export const Log2: Instr = { code: 0x5e, value: {} }
150
- export const Log3: Instr = { code: 0x5f, value: {} }
151
- export const Log4: Instr = { code: 0x60, value: {} }
152
- export const Log5: Instr = { code: 0x61, value: {} }
153
- export const ByteVecSlice: Instr = { code: 0x62, value: {} }
154
- export const ByteVecToAddress: Instr = { code: 0x63, value: {} }
155
- export const Encode: Instr = { code: 0x64, value: {} }
156
- export const Zeros: Instr = { code: 0x65, value: {} }
157
- export const U256To1Byte: Instr = { code: 0x66, value: {} }
158
- export const U256To2Byte: Instr = { code: 0x67, value: {} }
159
- export const U256To4Byte: Instr = { code: 0x68, value: {} }
160
- export const U256To8Byte: Instr = { code: 0x69, value: {} }
161
- export const U256To16Byte: Instr = { code: 0x6a, value: {} }
162
- export const U256To32Byte: Instr = { code: 0x6b, value: {} }
163
- export const U256From1Byte: Instr = { code: 0x6c, value: {} }
164
- export const U256From2Byte: Instr = { code: 0x6d, value: {} }
165
- export const U256From4Byte: Instr = { code: 0x6e, value: {} }
166
- export const U256From8Byte: Instr = { code: 0x6f, value: {} }
167
- export const U256From16Byte: Instr = { code: 0x70, value: {} }
168
- export const U256From32Byte: Instr = { code: 0x71, value: {} }
169
- export const EthEcRecover: Instr = { code: 0x72, value: {} }
170
- export const Log6: Instr = { code: 0x73, value: {} }
171
- export const Log7: Instr = { code: 0x74, value: {} }
172
- export const Log8: Instr = { code: 0x75, value: {} }
173
- export const Log9: Instr = { code: 0x76, value: {} }
174
- export const ContractIdToAddress: Instr = { code: 0x77, value: {} }
175
- export const LoadLocalByIndex: Instr = { code: 0x78, value: {} }
176
- export const StoreLocalByIndex: Instr = { code: 0x79, value: {} }
177
- export const Dup: Instr = { code: 0x7a, value: {} }
178
- export const AssertWithErrorCode: Instr = { code: 0x7b, value: {} }
179
- export const Swap: Instr = { code: 0x7c, value: {} }
180
- export const BlockHash: Instr = { code: 0x7d, value: {} }
181
- export const DEBUG = (stringParts: DecodedArray<ByteString>): Instr => ({ code: 0x7e, value: { stringParts } })
182
- export const TxGasPrice: Instr = { code: 0x7f, value: {} }
183
- export const TxGasAmount: Instr = { code: 0x80, value: {} }
184
- export const TxGasFee: Instr = { code: 0x81, value: {} }
185
- export const I256Exp: Instr = { code: 0x82, value: {} }
186
- export const U256Exp: Instr = { code: 0x83, value: {} }
187
- export const U256ModExp: Instr = { code: 0x84, value: {} }
188
- export const VerifyBIP340Schnorr: Instr = { code: 0x85, value: {} }
189
- export const GetSegragatedSignature: Instr = { code: 0x86, value: {} }
190
- export const MulModN: Instr = { code: 0x87, value: {} }
191
- export const AddModN: Instr = { code: 0x88, value: {} }
192
- export const U256ToString: Instr = { code: 0x89, value: {} }
193
- export const I256ToString: Instr = { code: 0x8a, value: {} }
194
- export const BoolToString: Instr = { code: 0x8b, value: {} }
195
- export const GroupOfAddress: Instr = { code: 0x8c, value: {} }
196
- export const LoadMutField = (index: number): Instr => ({ code: 0xa0, value: { index } })
197
- export const StoreMutField = (index: number): Instr => ({ code: 0xa1, value: { index } })
198
- export const ApproveAlph: Instr = { code: 0xa2, value: {} }
199
- export const ApproveToken: Instr = { code: 0xa3, value: {} }
200
- export const AlphRemaining: Instr = { code: 0xa4, value: {} }
201
- export const TokenRemaining: Instr = { code: 0xa5, value: {} }
202
- export const IsPaying: Instr = { code: 0xa6, value: {} }
203
- export const TransferAlph: Instr = { code: 0xa7, value: {} }
204
- export const TransferAlphFromSelf: Instr = { code: 0xa8, value: {} }
205
- export const TransferAlphToSelf: Instr = { code: 0xa9, value: {} }
206
- export const TransferToken: Instr = { code: 0xaa, value: {} }
207
- export const TransferTokenFromSelf: Instr = { code: 0xab, value: {} }
208
- export const TransferTokenToSelf: Instr = { code: 0xac, value: {} }
209
- export const CreateContract: Instr = { code: 0xad, value: {} }
210
- export const CreateContractWithToken: Instr = { code: 0xae, value: {} }
211
- export const CopyCreateContract: Instr = { code: 0xaf, value: {} }
212
- export const DestroySelf: Instr = { code: 0xb0, value: {} }
213
- export const SelfContractId: Instr = { code: 0xb1, value: {} }
214
- export const SelfAddress: Instr = { code: 0xb2, value: {} }
215
- export const CallerContractId: Instr = { code: 0xb3, value: {} }
216
- export const CallerAddress: Instr = { code: 0xb4, value: {} }
217
- export const IsCallerFromTxScript: Instr = { code: 0xb5, value: {} }
218
- export const CallerInitialStateHash: Instr = { code: 0xb6, value: {} }
219
- export const CallerCodeHash: Instr = { code: 0xb7, value: {} }
220
- export const ContractInitialStateHash: Instr = { code: 0xb8, value: {} }
221
- export const ContractInitialCodeHash: Instr = { code: 0xb9, value: {} }
222
- export const MigrateSimple: Instr = { code: 0xba, value: {} }
223
- export const MigrateWithFields: Instr = { code: 0xbb, value: {} }
224
- export const CopyCreateContractWithToken: Instr = { code: 0xbc, value: {} }
225
- export const BurnToken: Instr = { code: 0xbd, value: {} }
226
- export const LockApprovedAssets: Instr = { code: 0xbe, value: {} }
227
- export const CreateSubContract: Instr = { code: 0xbf, value: {} }
228
- export const CreateSubContractWithToken: Instr = { code: 0xc0, value: {} }
229
- export const CopyCreateSubContract: Instr = { code: 0xc1, value: {} }
230
- export const CopyCreateSubContractWithToken: Instr = { code: 0xc2, value: {} }
231
- export const LoadMutFieldByIndex: Instr = { code: 0xc3, value: {} }
232
- export const StoreMutFieldByIndex: Instr = { code: 0xc4, value: {} }
233
- export const ContractExists: Instr = { code: 0xc5, value: {} }
234
- export const CreateContractAndTransferToken: Instr = { code: 0xc6, value: {} }
235
- export const CopyCreateContractAndTransferToken: Instr = { code: 0xc7, value: {} }
236
- export const CreateSubContractAndTransferToken: Instr = { code: 0xc8, value: {} }
237
- export const CopyCreateSubContractAndTransferToken: Instr = { code: 0xc9, value: {} }
238
- export const NullContractAddress: Instr = { code: 0xca, value: {} }
239
- export const SubContractId: Instr = { code: 0xcb, value: {} }
240
- export const SubContractIdOf: Instr = { code: 0xcc, value: {} }
241
- export const AlphTokenId: Instr = { code: 0xcd, value: {} }
242
- export const LoadImmField = (index: number): Instr => ({ code: 0xce, value: { index } })
243
- export const LoadImmFieldByIndex: Instr = { code: 0xcf, value: {} }
244
- export const PayGasFee: Instr = { code: 0xd0, value: {} }
245
- export const MinimalContractDeposit: Instr = { code: 0xd1, value: {} }
246
- export const CreateMapEntry: (immFields: number, mutFields: number) => Instr = (
247
- immFields: number,
248
- mutFields: number
249
- ) => ({ code: 0xd2, value: { immFields, mutFields } })
250
469
  export const MethodSelector: (selector: number) => Instr = (selector: number) => {
251
- return { code: 0xd3, value: { index: selector } }
470
+ return { name: 'MethodSelector', code: 0xd3, selector }
252
471
  }
253
472
  export const CallExternalBySelector: (selector: number) => Instr = (selector: number) => {
254
- return { code: 0xd4, value: { index: selector } }
473
+ return { name: 'CallExternalBySelector', code: 0xd4, selector }
255
474
  }
256
-
257
- export class InstrCodec implements Codec<Instr> {
258
- parser = Parser.start()
259
- .uint8('code')
260
- .choice('value', {
261
- tag: 'code',
262
- choices: {
263
- 0x00: Parser.start().uint8('index'), // CallLocal
264
- 0x01: Parser.start().uint8('index'), // CallExternal
265
- [Return.code]: Parser.start(),
266
- [ConstTrue.code]: Parser.start(),
267
- [ConstFalse.code]: Parser.start(),
268
- [I256Const0.code]: Parser.start(),
269
- [I256Const1.code]: Parser.start(),
270
- [I256Const2.code]: Parser.start(),
271
- [I256Const3.code]: Parser.start(),
272
- [I256Const4.code]: Parser.start(),
273
- [I256Const5.code]: Parser.start(),
274
- [I256ConstN1.code]: Parser.start(),
275
- [U256Const0.code]: Parser.start(),
276
- [U256Const1.code]: Parser.start(),
277
- [U256Const2.code]: Parser.start(),
278
- [U256Const3.code]: Parser.start(),
279
- [U256Const4.code]: Parser.start(),
280
- [U256Const5.code]: Parser.start(),
281
- 0x12: Parser.start().nest('value', { type: compactSignedIntCodec.parser }),
282
- 0x13: Parser.start().nest('value', { type: compactUnsignedIntCodec.parser }),
283
- 0x14: Parser.start().nest('value', { type: byteStringCodec.parser }),
284
- 0x15: Parser.start().nest('value', { type: lockupScriptCodec.parser }),
285
- 0x16: Parser.start().uint8('index'),
286
- 0x17: Parser.start().uint8('index'),
287
- [Pop.code]: Parser.start(),
288
- [BoolNot.code]: Parser.start(),
289
- [BoolAnd.code]: Parser.start(),
290
- [BoolOr.code]: Parser.start(),
291
- [BoolEq.code]: Parser.start(),
292
- [BoolNeq.code]: Parser.start(),
293
- [BoolToByteVec.code]: Parser.start(),
294
- [I256Add.code]: Parser.start(),
295
- [I256Sub.code]: Parser.start(),
296
- [I256Mul.code]: Parser.start(),
297
- [I256Div.code]: Parser.start(),
298
- [I256Mod.code]: Parser.start(),
299
- [I256Eq.code]: Parser.start(),
300
- [I256Neq.code]: Parser.start(),
301
- [I256Lt.code]: Parser.start(),
302
- [I256Le.code]: Parser.start(),
303
- [I256Gt.code]: Parser.start(),
304
- [I256Ge.code]: Parser.start(),
305
- [U256Add.code]: Parser.start(),
306
- [U256Sub.code]: Parser.start(),
307
- [U256Mul.code]: Parser.start(),
308
- [U256Div.code]: Parser.start(),
309
- [U256Mod.code]: Parser.start(),
310
- [U256Eq.code]: Parser.start(),
311
- [U256Neq.code]: Parser.start(),
312
- [U256Lt.code]: Parser.start(),
313
- [U256Le.code]: Parser.start(),
314
- [U256Gt.code]: Parser.start(),
315
- [U256Ge.code]: Parser.start(),
316
- [U256ModAdd.code]: Parser.start(),
317
- [U256ModSub.code]: Parser.start(),
318
- [U256ModMul.code]: Parser.start(),
319
- [U256BitAnd.code]: Parser.start(),
320
- [U256BitOr.code]: Parser.start(),
321
- [U256Xor.code]: Parser.start(),
322
- [U256SHL.code]: Parser.start(),
323
- [U256SHR.code]: Parser.start(),
324
- [I256ToU256.code]: Parser.start(),
325
- [I256ToByteVec.code]: Parser.start(),
326
- [U256ToI256.code]: Parser.start(),
327
- [U256ToByteVec.code]: Parser.start(),
328
- [ByteVecEq.code]: Parser.start(),
329
- [ByteVecNeq.code]: Parser.start(),
330
- [ByteVecSize.code]: Parser.start(),
331
- [ByteVecConcat.code]: Parser.start(),
332
- [AddressEq.code]: Parser.start(),
333
- [AddressNeq.code]: Parser.start(),
334
- [AddressToByteVec.code]: Parser.start(),
335
- [IsAssetAddress.code]: Parser.start(),
336
- [IsContractAddress.code]: Parser.start(),
337
- 0x4a: Parser.start().nest('value', { type: compactUnsignedIntCodec.parser }), // Jump
338
- 0x4b: Parser.start().nest('value', { type: compactUnsignedIntCodec.parser }), // IfTrue
339
- 0x4c: Parser.start().nest('value', { type: compactUnsignedIntCodec.parser }), // IfFalse
340
- [Assert.code]: Parser.start(),
341
- [Blake2b.code]: Parser.start(),
342
- [Keccak256.code]: Parser.start(),
343
- [Sha256.code]: Parser.start(),
344
- [Sha3.code]: Parser.start(),
345
- [VerifyTxSignature.code]: Parser.start(),
346
- [VerifySecP256K1.code]: Parser.start(),
347
- [VerifyED25519.code]: Parser.start(),
348
- [NetworkId.code]: Parser.start(),
349
- [BlockTimeStamp.code]: Parser.start(),
350
- [BlockTarget.code]: Parser.start(),
351
- [TxId.code]: Parser.start(),
352
- [TxInputAddressAt.code]: Parser.start(),
353
- [TxInputsSize.code]: Parser.start(),
354
- [VerifyAbsoluteLocktime.code]: Parser.start(),
355
- [VerifyRelativeLocktime.code]: Parser.start(),
356
- [Log1.code]: Parser.start(),
357
- [Log2.code]: Parser.start(),
358
- [Log3.code]: Parser.start(),
359
- [Log4.code]: Parser.start(),
360
- [Log5.code]: Parser.start(),
361
- [ByteVecSlice.code]: Parser.start(),
362
- [ByteVecToAddress.code]: Parser.start(),
363
- [Encode.code]: Parser.start(),
364
- [Zeros.code]: Parser.start(),
365
- [U256To1Byte.code]: Parser.start(),
366
- [U256To2Byte.code]: Parser.start(),
367
- [U256To4Byte.code]: Parser.start(),
368
- [U256To8Byte.code]: Parser.start(),
369
- [U256To16Byte.code]: Parser.start(),
370
- [U256To32Byte.code]: Parser.start(),
371
- [U256From1Byte.code]: Parser.start(),
372
- [U256From2Byte.code]: Parser.start(),
373
- [U256From4Byte.code]: Parser.start(),
374
- [U256From8Byte.code]: Parser.start(),
375
- [U256From16Byte.code]: Parser.start(),
376
- [U256From32Byte.code]: Parser.start(),
377
- [EthEcRecover.code]: Parser.start(),
378
- [Log6.code]: Parser.start(),
379
- [Log7.code]: Parser.start(),
380
- [Log8.code]: Parser.start(),
381
- [Log9.code]: Parser.start(),
382
- [ContractIdToAddress.code]: Parser.start(),
383
- [LoadLocalByIndex.code]: Parser.start(),
384
- [StoreLocalByIndex.code]: Parser.start(),
385
- [Dup.code]: Parser.start(),
386
- [AssertWithErrorCode.code]: Parser.start(),
387
- [Swap.code]: Parser.start(),
388
- [BlockHash.code]: Parser.start(),
389
- 0x7e: Parser.start().nest('stringParts', { type: byteStringArrayCodec.parser }), // DEBUG
390
- [TxGasPrice.code]: Parser.start(),
391
- [TxGasAmount.code]: Parser.start(),
392
- [TxGasFee.code]: Parser.start(),
393
- [I256Exp.code]: Parser.start(),
394
- [U256Exp.code]: Parser.start(),
395
- [U256ModExp.code]: Parser.start(),
396
- [VerifyBIP340Schnorr.code]: Parser.start(),
397
- [GetSegragatedSignature.code]: Parser.start(),
398
- [MulModN.code]: Parser.start(),
399
- [AddModN.code]: Parser.start(),
400
- [U256ToString.code]: Parser.start(),
401
- [I256ToString.code]: Parser.start(),
402
- [BoolToString.code]: Parser.start(),
403
- [GroupOfAddress.code]: Parser.start(),
404
- 0xa0: Parser.start().uint8('index'),
405
- 0xa1: Parser.start().uint8('index'),
406
- [ApproveAlph.code]: Parser.start(),
407
- [ApproveToken.code]: Parser.start(),
408
- [AlphRemaining.code]: Parser.start(),
409
- [TokenRemaining.code]: Parser.start(),
410
- [IsPaying.code]: Parser.start(),
411
- [TransferAlph.code]: Parser.start(),
412
- [TransferAlphFromSelf.code]: Parser.start(),
413
- [TransferAlphToSelf.code]: Parser.start(),
414
- [TransferToken.code]: Parser.start(),
415
- [TransferTokenFromSelf.code]: Parser.start(),
416
- [TransferTokenToSelf.code]: Parser.start(),
417
- [CreateContract.code]: Parser.start(),
418
- [CreateContractWithToken.code]: Parser.start(),
419
- [CopyCreateContract.code]: Parser.start(),
420
- [DestroySelf.code]: Parser.start(),
421
- [SelfContractId.code]: Parser.start(),
422
- [SelfAddress.code]: Parser.start(),
423
- [CallerContractId.code]: Parser.start(),
424
- [CallerAddress.code]: Parser.start(),
425
- [IsCallerFromTxScript.code]: Parser.start(),
426
- [CallerInitialStateHash.code]: Parser.start(),
427
- [CallerCodeHash.code]: Parser.start(),
428
- [ContractInitialStateHash.code]: Parser.start(),
429
- [ContractInitialCodeHash.code]: Parser.start(),
430
- [MigrateSimple.code]: Parser.start(),
431
- [MigrateWithFields.code]: Parser.start(),
432
- [CopyCreateContractWithToken.code]: Parser.start(),
433
- [BurnToken.code]: Parser.start(),
434
- [LockApprovedAssets.code]: Parser.start(),
435
- [CreateSubContract.code]: Parser.start(),
436
- [CreateSubContractWithToken.code]: Parser.start(),
437
- [CopyCreateSubContract.code]: Parser.start(),
438
- [CopyCreateSubContractWithToken.code]: Parser.start(),
439
- [LoadMutFieldByIndex.code]: Parser.start(),
440
- [StoreMutFieldByIndex.code]: Parser.start(),
441
- [ContractExists.code]: Parser.start(),
442
- [CreateContractAndTransferToken.code]: Parser.start(),
443
- [CopyCreateContractAndTransferToken.code]: Parser.start(),
444
- [CreateSubContractAndTransferToken.code]: Parser.start(),
445
- [CopyCreateSubContractAndTransferToken.code]: Parser.start(),
446
- [NullContractAddress.code]: Parser.start(),
447
- [SubContractId.code]: Parser.start(),
448
- [SubContractIdOf.code]: Parser.start(),
449
- [AlphTokenId.code]: Parser.start(),
450
- 0xce: Parser.start().uint8('index'),
451
- [LoadImmFieldByIndex.code]: Parser.start(),
452
- [PayGasFee.code]: Parser.start(),
453
- [MinimalContractDeposit.code]: Parser.start(),
454
- 0xd2: Parser.start().uint8('immFields').uint8('mutFields'),
455
- 0xd3: Parser.start().int32('index'),
456
- 0xd4: Parser.start().int32('index')
457
- }
458
- })
459
-
475
+ export class InstrCodec extends Codec<Instr> {
460
476
  encode(instr: Instr): Uint8Array {
461
- const instrValue = instr.value
462
- const result = [instr.code]
463
- const instrsWithIndex = [0x00, 0x01, 0x16, 0x17, 0xa0, 0xa1, 0xce]
464
- const instrsWithCompactInt = [0x12, 0x13, 0x4a, 0x4b, 0x4c]
465
- if (instr.code === 0x14) {
466
- result.push(...byteStringCodec.encode((instrValue as ByteStringConst).value))
467
- } else if (instr.code === 0x15) {
468
- result.push(...lockupScriptCodec.encode((instrValue as AddressConst).value))
469
- } else if (instr.code === 0x7e) {
470
- result.push(...byteStringArrayCodec.encode((instrValue as Debug).stringParts.value))
471
- } else if (instrsWithCompactInt.includes(instr.code)) {
472
- result.push(...compactUnsignedIntCodec.encode((instrValue as InstrValueWithCompactInt).value))
473
- } else if (instrsWithIndex.includes(instr.code)) {
474
- result.push((instrValue as InstrValueWithIndex).index)
475
- } else if (instr.code === 0xd2) {
476
- const value = instrValue as CreateMapEntryValue
477
- result.push(value.immFields, value.mutFields)
478
- } else if (instr.code === 0xd3 || instr.code === 0xd4) {
479
- result.push(...signedIntCodec.encode((instrValue as InstrValueWithIndex).index))
477
+ switch (instr.name) {
478
+ case 'CallLocal':
479
+ return new Uint8Array([0x00, ...byteCodec.encode(instr.index)])
480
+ case 'CallExternal':
481
+ return new Uint8Array([0x01, ...byteCodec.encode(instr.index)])
482
+ case 'Return':
483
+ return new Uint8Array([0x02])
484
+ case 'ConstTrue':
485
+ return new Uint8Array([0x03])
486
+ case 'ConstFalse':
487
+ return new Uint8Array([0x04])
488
+ case 'I256Const0':
489
+ return new Uint8Array([0x05])
490
+ case 'I256Const1':
491
+ return new Uint8Array([0x06])
492
+ case 'I256Const2':
493
+ return new Uint8Array([0x07])
494
+ case 'I256Const3':
495
+ return new Uint8Array([0x08])
496
+ case 'I256Const4':
497
+ return new Uint8Array([0x09])
498
+ case 'I256Const5':
499
+ return new Uint8Array([0x0a])
500
+ case 'I256ConstN1':
501
+ return new Uint8Array([0x0b])
502
+ case 'U256Const0':
503
+ return new Uint8Array([0x0c])
504
+ case 'U256Const1':
505
+ return new Uint8Array([0x0d])
506
+ case 'U256Const2':
507
+ return new Uint8Array([0x0e])
508
+ case 'U256Const3':
509
+ return new Uint8Array([0x0f])
510
+ case 'U256Const4':
511
+ return new Uint8Array([0x10])
512
+ case 'U256Const5':
513
+ return new Uint8Array([0x11])
514
+ case 'I256Const':
515
+ return new Uint8Array([0x12, ...i256Codec.encode(instr.value)])
516
+ case 'U256Const':
517
+ return new Uint8Array([0x13, ...u256Codec.encode(instr.value)])
518
+ case 'BytesConst':
519
+ return new Uint8Array([0x14, ...byteStringCodec.encode(instr.value)])
520
+ case 'AddressConst':
521
+ return new Uint8Array([0x15, ...lockupScriptCodec.encode(instr.value)])
522
+ case 'LoadLocal':
523
+ return new Uint8Array([0x16, ...byteCodec.encode(instr.index)])
524
+ case 'StoreLocal':
525
+ return new Uint8Array([0x17, ...byteCodec.encode(instr.index)])
526
+ case 'Pop':
527
+ return new Uint8Array([0x18])
528
+ case 'BoolNot':
529
+ return new Uint8Array([0x19])
530
+ case 'BoolAnd':
531
+ return new Uint8Array([0x1a])
532
+ case 'BoolOr':
533
+ return new Uint8Array([0x1b])
534
+ case 'BoolEq':
535
+ return new Uint8Array([0x1c])
536
+ case 'BoolNeq':
537
+ return new Uint8Array([0x1d])
538
+ case 'BoolToByteVec':
539
+ return new Uint8Array([0x1e])
540
+ case 'I256Add':
541
+ return new Uint8Array([0x1f])
542
+ case 'I256Sub':
543
+ return new Uint8Array([0x20])
544
+ case 'I256Mul':
545
+ return new Uint8Array([0x21])
546
+ case 'I256Div':
547
+ return new Uint8Array([0x22])
548
+ case 'I256Mod':
549
+ return new Uint8Array([0x23])
550
+ case 'I256Eq':
551
+ return new Uint8Array([0x24])
552
+ case 'I256Neq':
553
+ return new Uint8Array([0x25])
554
+ case 'I256Lt':
555
+ return new Uint8Array([0x26])
556
+ case 'I256Le':
557
+ return new Uint8Array([0x27])
558
+ case 'I256Gt':
559
+ return new Uint8Array([0x28])
560
+ case 'I256Ge':
561
+ return new Uint8Array([0x29])
562
+ case 'U256Add':
563
+ return new Uint8Array([0x2a])
564
+ case 'U256Sub':
565
+ return new Uint8Array([0x2b])
566
+ case 'U256Mul':
567
+ return new Uint8Array([0x2c])
568
+ case 'U256Div':
569
+ return new Uint8Array([0x2d])
570
+ case 'U256Mod':
571
+ return new Uint8Array([0x2e])
572
+ case 'U256Eq':
573
+ return new Uint8Array([0x2f])
574
+ case 'U256Neq':
575
+ return new Uint8Array([0x30])
576
+ case 'U256Lt':
577
+ return new Uint8Array([0x31])
578
+ case 'U256Le':
579
+ return new Uint8Array([0x32])
580
+ case 'U256Gt':
581
+ return new Uint8Array([0x33])
582
+ case 'U256Ge':
583
+ return new Uint8Array([0x34])
584
+ case 'U256ModAdd':
585
+ return new Uint8Array([0x35])
586
+ case 'U256ModSub':
587
+ return new Uint8Array([0x36])
588
+ case 'U256ModMul':
589
+ return new Uint8Array([0x37])
590
+ case 'U256BitAnd':
591
+ return new Uint8Array([0x38])
592
+ case 'U256BitOr':
593
+ return new Uint8Array([0x39])
594
+ case 'U256Xor':
595
+ return new Uint8Array([0x3a])
596
+ case 'U256SHL':
597
+ return new Uint8Array([0x3b])
598
+ case 'U256SHR':
599
+ return new Uint8Array([0x3c])
600
+ case 'I256ToU256':
601
+ return new Uint8Array([0x3d])
602
+ case 'I256ToByteVec':
603
+ return new Uint8Array([0x3e])
604
+ case 'U256ToI256':
605
+ return new Uint8Array([0x3f])
606
+ case 'U256ToByteVec':
607
+ return new Uint8Array([0x40])
608
+ case 'ByteVecEq':
609
+ return new Uint8Array([0x41])
610
+ case 'ByteVecNeq':
611
+ return new Uint8Array([0x42])
612
+ case 'ByteVecSize':
613
+ return new Uint8Array([0x43])
614
+ case 'ByteVecConcat':
615
+ return new Uint8Array([0x44])
616
+ case 'AddressEq':
617
+ return new Uint8Array([0x45])
618
+ case 'AddressNeq':
619
+ return new Uint8Array([0x46])
620
+ case 'AddressToByteVec':
621
+ return new Uint8Array([0x47])
622
+ case 'IsAssetAddress':
623
+ return new Uint8Array([0x48])
624
+ case 'IsContractAddress':
625
+ return new Uint8Array([0x49])
626
+ case 'Jump':
627
+ return new Uint8Array([0x4a, ...i32Codec.encode(instr.offset)])
628
+ case 'IfTrue':
629
+ return new Uint8Array([0x4b, ...i32Codec.encode(instr.offset)])
630
+ case 'IfFalse':
631
+ return new Uint8Array([0x4c, ...i32Codec.encode(instr.offset)])
632
+ case 'Assert':
633
+ return new Uint8Array([0x4d])
634
+ case 'Blake2b':
635
+ return new Uint8Array([0x4e])
636
+ case 'Keccak256':
637
+ return new Uint8Array([0x4f])
638
+ case 'Sha256':
639
+ return new Uint8Array([0x50])
640
+ case 'Sha3':
641
+ return new Uint8Array([0x51])
642
+ case 'VerifyTxSignature':
643
+ return new Uint8Array([0x52])
644
+ case 'VerifySecP256K1':
645
+ return new Uint8Array([0x53])
646
+ case 'VerifyED25519':
647
+ return new Uint8Array([0x54])
648
+ case 'NetworkId':
649
+ return new Uint8Array([0x55])
650
+ case 'BlockTimeStamp':
651
+ return new Uint8Array([0x56])
652
+ case 'BlockTarget':
653
+ return new Uint8Array([0x57])
654
+ case 'TxId':
655
+ return new Uint8Array([0x58])
656
+ case 'TxInputAddressAt':
657
+ return new Uint8Array([0x59])
658
+ case 'TxInputsSize':
659
+ return new Uint8Array([0x5a])
660
+ case 'VerifyAbsoluteLocktime':
661
+ return new Uint8Array([0x5b])
662
+ case 'VerifyRelativeLocktime':
663
+ return new Uint8Array([0x5c])
664
+ case 'Log1':
665
+ return new Uint8Array([0x5d])
666
+ case 'Log2':
667
+ return new Uint8Array([0x5e])
668
+ case 'Log3':
669
+ return new Uint8Array([0x5f])
670
+ case 'Log4':
671
+ return new Uint8Array([0x60])
672
+ case 'Log5':
673
+ return new Uint8Array([0x61])
674
+ case 'ByteVecSlice':
675
+ return new Uint8Array([0x62])
676
+ case 'ByteVecToAddress':
677
+ return new Uint8Array([0x63])
678
+ case 'Encode':
679
+ return new Uint8Array([0x64])
680
+ case 'Zeros':
681
+ return new Uint8Array([0x65])
682
+ case 'U256To1Byte':
683
+ return new Uint8Array([0x66])
684
+ case 'U256To2Byte':
685
+ return new Uint8Array([0x67])
686
+ case 'U256To4Byte':
687
+ return new Uint8Array([0x68])
688
+ case 'U256To8Byte':
689
+ return new Uint8Array([0x69])
690
+ case 'U256To16Byte':
691
+ return new Uint8Array([0x6a])
692
+ case 'U256To32Byte':
693
+ return new Uint8Array([0x6b])
694
+ case 'U256From1Byte':
695
+ return new Uint8Array([0x6c])
696
+ case 'U256From2Byte':
697
+ return new Uint8Array([0x6d])
698
+ case 'U256From4Byte':
699
+ return new Uint8Array([0x6e])
700
+ case 'U256From8Byte':
701
+ return new Uint8Array([0x6f])
702
+ case 'U256From16Byte':
703
+ return new Uint8Array([0x70])
704
+ case 'U256From32Byte':
705
+ return new Uint8Array([0x71])
706
+ case 'EthEcRecover':
707
+ return new Uint8Array([0x72])
708
+ case 'Log6':
709
+ return new Uint8Array([0x73])
710
+ case 'Log7':
711
+ return new Uint8Array([0x74])
712
+ case 'Log8':
713
+ return new Uint8Array([0x75])
714
+ case 'Log9':
715
+ return new Uint8Array([0x76])
716
+ case 'ContractIdToAddress':
717
+ return new Uint8Array([0x77])
718
+ case 'LoadLocalByIndex':
719
+ return new Uint8Array([0x78])
720
+ case 'StoreLocalByIndex':
721
+ return new Uint8Array([0x79])
722
+ case 'Dup':
723
+ return new Uint8Array([0x7a])
724
+ case 'AssertWithErrorCode':
725
+ return new Uint8Array([0x7b])
726
+ case 'Swap':
727
+ return new Uint8Array([0x7c])
728
+ case 'BlockHash':
729
+ return new Uint8Array([0x7d])
730
+ case 'DEBUG':
731
+ return new Uint8Array([0x7e, ...byteStringsCodec.encode(instr.stringParts)])
732
+ case 'TxGasPrice':
733
+ return new Uint8Array([0x7f])
734
+ case 'TxGasAmount':
735
+ return new Uint8Array([0x80])
736
+ case 'TxGasFee':
737
+ return new Uint8Array([0x81])
738
+ case 'I256Exp':
739
+ return new Uint8Array([0x82])
740
+ case 'U256Exp':
741
+ return new Uint8Array([0x83])
742
+ case 'U256ModExp':
743
+ return new Uint8Array([0x84])
744
+ case 'VerifyBIP340Schnorr':
745
+ return new Uint8Array([0x85])
746
+ case 'GetSegregatedSignature':
747
+ return new Uint8Array([0x86])
748
+ case 'MulModN':
749
+ return new Uint8Array([0x87])
750
+ case 'AddModN':
751
+ return new Uint8Array([0x88])
752
+ case 'U256ToString':
753
+ return new Uint8Array([0x89])
754
+ case 'I256ToString':
755
+ return new Uint8Array([0x8a])
756
+ case 'BoolToString':
757
+ return new Uint8Array([0x8b])
758
+ case 'GroupOfAddress':
759
+ return new Uint8Array([0x8c])
760
+ case 'LoadMutField':
761
+ return new Uint8Array([0xa0, ...byteCodec.encode(instr.index)])
762
+ case 'StoreMutField':
763
+ return new Uint8Array([0xa1, ...byteCodec.encode(instr.index)])
764
+ case 'ApproveAlph':
765
+ return new Uint8Array([0xa2])
766
+ case 'ApproveToken':
767
+ return new Uint8Array([0xa3])
768
+ case 'AlphRemaining':
769
+ return new Uint8Array([0xa4])
770
+ case 'TokenRemaining':
771
+ return new Uint8Array([0xa5])
772
+ case 'IsPaying':
773
+ return new Uint8Array([0xa6])
774
+ case 'TransferAlph':
775
+ return new Uint8Array([0xa7])
776
+ case 'TransferAlphFromSelf':
777
+ return new Uint8Array([0xa8])
778
+ case 'TransferAlphToSelf':
779
+ return new Uint8Array([0xa9])
780
+ case 'TransferToken':
781
+ return new Uint8Array([0xaa])
782
+ case 'TransferTokenFromSelf':
783
+ return new Uint8Array([0xab])
784
+ case 'TransferTokenToSelf':
785
+ return new Uint8Array([0xac])
786
+ case 'CreateContract':
787
+ return new Uint8Array([0xad])
788
+ case 'CreateContractWithToken':
789
+ return new Uint8Array([0xae])
790
+ case 'CopyCreateContract':
791
+ return new Uint8Array([0xaf])
792
+ case 'DestroySelf':
793
+ return new Uint8Array([0xb0])
794
+ case 'SelfContractId':
795
+ return new Uint8Array([0xb1])
796
+ case 'SelfAddress':
797
+ return new Uint8Array([0xb2])
798
+ case 'CallerContractId':
799
+ return new Uint8Array([0xb3])
800
+ case 'CallerAddress':
801
+ return new Uint8Array([0xb4])
802
+ case 'IsCalledFromTxScript':
803
+ return new Uint8Array([0xb5])
804
+ case 'CallerInitialStateHash':
805
+ return new Uint8Array([0xb6])
806
+ case 'CallerCodeHash':
807
+ return new Uint8Array([0xb7])
808
+ case 'ContractInitialStateHash':
809
+ return new Uint8Array([0xb8])
810
+ case 'ContractCodeHash':
811
+ return new Uint8Array([0xb9])
812
+ case 'MigrateSimple':
813
+ return new Uint8Array([0xba])
814
+ case 'MigrateWithFields':
815
+ return new Uint8Array([0xbb])
816
+ case 'CopyCreateContractWithToken':
817
+ return new Uint8Array([0xbc])
818
+ case 'BurnToken':
819
+ return new Uint8Array([0xbd])
820
+ case 'LockApprovedAssets':
821
+ return new Uint8Array([0xbe])
822
+ case 'CreateSubContract':
823
+ return new Uint8Array([0xbf])
824
+ case 'CreateSubContractWithToken':
825
+ return new Uint8Array([0xc0])
826
+ case 'CopyCreateSubContract':
827
+ return new Uint8Array([0xc1])
828
+ case 'CopyCreateSubContractWithToken':
829
+ return new Uint8Array([0xc2])
830
+ case 'LoadMutFieldByIndex':
831
+ return new Uint8Array([0xc3])
832
+ case 'StoreMutFieldByIndex':
833
+ return new Uint8Array([0xc4])
834
+ case 'ContractExists':
835
+ return new Uint8Array([0xc5])
836
+ case 'CreateContractAndTransferToken':
837
+ return new Uint8Array([0xc6])
838
+ case 'CopyCreateContractAndTransferToken':
839
+ return new Uint8Array([0xc7])
840
+ case 'CreateSubContractAndTransferToken':
841
+ return new Uint8Array([0xc8])
842
+ case 'CopyCreateSubContractAndTransferToken':
843
+ return new Uint8Array([0xc9])
844
+ case 'NullContractAddress':
845
+ return new Uint8Array([0xca])
846
+ case 'SubContractId':
847
+ return new Uint8Array([0xcb])
848
+ case 'SubContractIdOf':
849
+ return new Uint8Array([0xcc])
850
+ case 'ALPHTokenId':
851
+ return new Uint8Array([0xcd])
852
+ case 'LoadImmField':
853
+ return new Uint8Array([0xce, ...byteCodec.encode(instr.index)])
854
+ case 'LoadImmFieldByIndex':
855
+ return new Uint8Array([0xcf])
856
+ case 'PayGasFee':
857
+ return new Uint8Array([0xd0])
858
+ case 'MinimalContractDeposit':
859
+ return new Uint8Array([0xd1])
860
+ case 'CreateMapEntry':
861
+ return new Uint8Array([0xd2, ...byteCodec.encode(instr.immFieldsNum), ...byteCodec.encode(instr.mutFieldsNum)])
862
+ case 'MethodSelector':
863
+ return new Uint8Array([0xd3, ...intAs4BytesCodec.encode(instr.selector)])
864
+ case 'CallExternalBySelector':
865
+ return new Uint8Array([0xd4, ...intAs4BytesCodec.encode(instr.selector)])
480
866
  }
481
-
482
- return new Uint8Array(result)
483
867
  }
484
-
485
- decode(input: Uint8Array): Instr {
486
- return this.parser.parse(input)
868
+ _decode(input: Reader): Instr {
869
+ const code = input.consumeByte()
870
+ switch (code) {
871
+ case 0x00:
872
+ return CallLocal(byteCodec._decode(input))
873
+ case 0x01:
874
+ return CallExternal(byteCodec._decode(input))
875
+ case 0x02:
876
+ return Return
877
+ case 0x03:
878
+ return ConstTrue
879
+ case 0x04:
880
+ return ConstFalse
881
+ case 0x05:
882
+ return I256Const0
883
+ case 0x06:
884
+ return I256Const1
885
+ case 0x07:
886
+ return I256Const2
887
+ case 0x08:
888
+ return I256Const3
889
+ case 0x09:
890
+ return I256Const4
891
+ case 0x0a:
892
+ return I256Const5
893
+ case 0x0b:
894
+ return I256ConstN1
895
+ case 0x0c:
896
+ return U256Const0
897
+ case 0x0d:
898
+ return U256Const1
899
+ case 0x0e:
900
+ return U256Const2
901
+ case 0x0f:
902
+ return U256Const3
903
+ case 0x10:
904
+ return U256Const4
905
+ case 0x11:
906
+ return U256Const5
907
+ case 0x12:
908
+ return I256Const(i256Codec._decode(input))
909
+ case 0x13:
910
+ return U256Const(u256Codec._decode(input))
911
+ case 0x14:
912
+ return BytesConst(byteStringCodec._decode(input))
913
+ case 0x15:
914
+ return AddressConst(lockupScriptCodec._decode(input))
915
+ case 0x16:
916
+ return LoadLocal(byteCodec._decode(input))
917
+ case 0x17:
918
+ return StoreLocal(byteCodec._decode(input))
919
+ case 0x18:
920
+ return Pop
921
+ case 0x19:
922
+ return BoolNot
923
+ case 0x1a:
924
+ return BoolAnd
925
+ case 0x1b:
926
+ return BoolOr
927
+ case 0x1c:
928
+ return BoolEq
929
+ case 0x1d:
930
+ return BoolNeq
931
+ case 0x1e:
932
+ return BoolToByteVec
933
+ case 0x1f:
934
+ return I256Add
935
+ case 0x20:
936
+ return I256Sub
937
+ case 0x21:
938
+ return I256Mul
939
+ case 0x22:
940
+ return I256Div
941
+ case 0x23:
942
+ return I256Mod
943
+ case 0x24:
944
+ return I256Eq
945
+ case 0x25:
946
+ return I256Neq
947
+ case 0x26:
948
+ return I256Lt
949
+ case 0x27:
950
+ return I256Le
951
+ case 0x28:
952
+ return I256Gt
953
+ case 0x29:
954
+ return I256Ge
955
+ case 0x2a:
956
+ return U256Add
957
+ case 0x2b:
958
+ return U256Sub
959
+ case 0x2c:
960
+ return U256Mul
961
+ case 0x2d:
962
+ return U256Div
963
+ case 0x2e:
964
+ return U256Mod
965
+ case 0x2f:
966
+ return U256Eq
967
+ case 0x30:
968
+ return U256Neq
969
+ case 0x31:
970
+ return U256Lt
971
+ case 0x32:
972
+ return U256Le
973
+ case 0x33:
974
+ return U256Gt
975
+ case 0x34:
976
+ return U256Ge
977
+ case 0x35:
978
+ return U256ModAdd
979
+ case 0x36:
980
+ return U256ModSub
981
+ case 0x37:
982
+ return U256ModMul
983
+ case 0x38:
984
+ return U256BitAnd
985
+ case 0x39:
986
+ return U256BitOr
987
+ case 0x3a:
988
+ return U256Xor
989
+ case 0x3b:
990
+ return U256SHL
991
+ case 0x3c:
992
+ return U256SHR
993
+ case 0x3d:
994
+ return I256ToU256
995
+ case 0x3e:
996
+ return I256ToByteVec
997
+ case 0x3f:
998
+ return U256ToI256
999
+ case 0x40:
1000
+ return U256ToByteVec
1001
+ case 0x41:
1002
+ return ByteVecEq
1003
+ case 0x42:
1004
+ return ByteVecNeq
1005
+ case 0x43:
1006
+ return ByteVecSize
1007
+ case 0x44:
1008
+ return ByteVecConcat
1009
+ case 0x45:
1010
+ return AddressEq
1011
+ case 0x46:
1012
+ return AddressNeq
1013
+ case 0x47:
1014
+ return AddressToByteVec
1015
+ case 0x48:
1016
+ return IsAssetAddress
1017
+ case 0x49:
1018
+ return IsContractAddress
1019
+ case 0x4a:
1020
+ return Jump(i32Codec._decode(input))
1021
+ case 0x4b:
1022
+ return IfTrue(i32Codec._decode(input))
1023
+ case 0x4c:
1024
+ return IfFalse(i32Codec._decode(input))
1025
+ case 0x4d:
1026
+ return Assert
1027
+ case 0x4e:
1028
+ return Blake2b
1029
+ case 0x4f:
1030
+ return Keccak256
1031
+ case 0x50:
1032
+ return Sha256
1033
+ case 0x51:
1034
+ return Sha3
1035
+ case 0x52:
1036
+ return VerifyTxSignature
1037
+ case 0x53:
1038
+ return VerifySecP256K1
1039
+ case 0x54:
1040
+ return VerifyED25519
1041
+ case 0x55:
1042
+ return NetworkId
1043
+ case 0x56:
1044
+ return BlockTimeStamp
1045
+ case 0x57:
1046
+ return BlockTarget
1047
+ case 0x58:
1048
+ return TxId
1049
+ case 0x59:
1050
+ return TxInputAddressAt
1051
+ case 0x5a:
1052
+ return TxInputsSize
1053
+ case 0x5b:
1054
+ return VerifyAbsoluteLocktime
1055
+ case 0x5c:
1056
+ return VerifyRelativeLocktime
1057
+ case 0x5d:
1058
+ return Log1
1059
+ case 0x5e:
1060
+ return Log2
1061
+ case 0x5f:
1062
+ return Log3
1063
+ case 0x60:
1064
+ return Log4
1065
+ case 0x61:
1066
+ return Log5
1067
+ case 0x62:
1068
+ return ByteVecSlice
1069
+ case 0x63:
1070
+ return ByteVecToAddress
1071
+ case 0x64:
1072
+ return Encode
1073
+ case 0x65:
1074
+ return Zeros
1075
+ case 0x66:
1076
+ return U256To1Byte
1077
+ case 0x67:
1078
+ return U256To2Byte
1079
+ case 0x68:
1080
+ return U256To4Byte
1081
+ case 0x69:
1082
+ return U256To8Byte
1083
+ case 0x6a:
1084
+ return U256To16Byte
1085
+ case 0x6b:
1086
+ return U256To32Byte
1087
+ case 0x6c:
1088
+ return U256From1Byte
1089
+ case 0x6d:
1090
+ return U256From2Byte
1091
+ case 0x6e:
1092
+ return U256From4Byte
1093
+ case 0x6f:
1094
+ return U256From8Byte
1095
+ case 0x70:
1096
+ return U256From16Byte
1097
+ case 0x71:
1098
+ return U256From32Byte
1099
+ case 0x72:
1100
+ return EthEcRecover
1101
+ case 0x73:
1102
+ return Log6
1103
+ case 0x74:
1104
+ return Log7
1105
+ case 0x75:
1106
+ return Log8
1107
+ case 0x76:
1108
+ return Log9
1109
+ case 0x77:
1110
+ return ContractIdToAddress
1111
+ case 0x78:
1112
+ return LoadLocalByIndex
1113
+ case 0x79:
1114
+ return StoreLocalByIndex
1115
+ case 0x7a:
1116
+ return Dup
1117
+ case 0x7b:
1118
+ return AssertWithErrorCode
1119
+ case 0x7c:
1120
+ return Swap
1121
+ case 0x7d:
1122
+ return BlockHash
1123
+ case 0x7e:
1124
+ return DEBUG(byteStringsCodec._decode(input))
1125
+ case 0x7f:
1126
+ return TxGasPrice
1127
+ case 0x80:
1128
+ return TxGasAmount
1129
+ case 0x81:
1130
+ return TxGasFee
1131
+ case 0x82:
1132
+ return I256Exp
1133
+ case 0x83:
1134
+ return U256Exp
1135
+ case 0x84:
1136
+ return U256ModExp
1137
+ case 0x85:
1138
+ return VerifyBIP340Schnorr
1139
+ case 0x86:
1140
+ return GetSegregatedSignature
1141
+ case 0x87:
1142
+ return MulModN
1143
+ case 0x88:
1144
+ return AddModN
1145
+ case 0x89:
1146
+ return U256ToString
1147
+ case 0x8a:
1148
+ return I256ToString
1149
+ case 0x8b:
1150
+ return BoolToString
1151
+ case 0x8c:
1152
+ return GroupOfAddress
1153
+ case 0xa0:
1154
+ return LoadMutField(byteCodec._decode(input))
1155
+ case 0xa1:
1156
+ return StoreMutField(byteCodec._decode(input))
1157
+ case 0xa2:
1158
+ return ApproveAlph
1159
+ case 0xa3:
1160
+ return ApproveToken
1161
+ case 0xa4:
1162
+ return AlphRemaining
1163
+ case 0xa5:
1164
+ return TokenRemaining
1165
+ case 0xa6:
1166
+ return IsPaying
1167
+ case 0xa7:
1168
+ return TransferAlph
1169
+ case 0xa8:
1170
+ return TransferAlphFromSelf
1171
+ case 0xa9:
1172
+ return TransferAlphToSelf
1173
+ case 0xaa:
1174
+ return TransferToken
1175
+ case 0xab:
1176
+ return TransferTokenFromSelf
1177
+ case 0xac:
1178
+ return TransferTokenToSelf
1179
+ case 0xad:
1180
+ return CreateContract
1181
+ case 0xae:
1182
+ return CreateContractWithToken
1183
+ case 0xaf:
1184
+ return CopyCreateContract
1185
+ case 0xb0:
1186
+ return DestroySelf
1187
+ case 0xb1:
1188
+ return SelfContractId
1189
+ case 0xb2:
1190
+ return SelfAddress
1191
+ case 0xb3:
1192
+ return CallerContractId
1193
+ case 0xb4:
1194
+ return CallerAddress
1195
+ case 0xb5:
1196
+ return IsCalledFromTxScript
1197
+ case 0xb6:
1198
+ return CallerInitialStateHash
1199
+ case 0xb7:
1200
+ return CallerCodeHash
1201
+ case 0xb8:
1202
+ return ContractInitialStateHash
1203
+ case 0xb9:
1204
+ return ContractCodeHash
1205
+ case 0xba:
1206
+ return MigrateSimple
1207
+ case 0xbb:
1208
+ return MigrateWithFields
1209
+ case 0xbc:
1210
+ return CopyCreateContractWithToken
1211
+ case 0xbd:
1212
+ return BurnToken
1213
+ case 0xbe:
1214
+ return LockApprovedAssets
1215
+ case 0xbf:
1216
+ return CreateSubContract
1217
+ case 0xc0:
1218
+ return CreateSubContractWithToken
1219
+ case 0xc1:
1220
+ return CopyCreateSubContract
1221
+ case 0xc2:
1222
+ return CopyCreateSubContractWithToken
1223
+ case 0xc3:
1224
+ return LoadMutFieldByIndex
1225
+ case 0xc4:
1226
+ return StoreMutFieldByIndex
1227
+ case 0xc5:
1228
+ return ContractExists
1229
+ case 0xc6:
1230
+ return CreateContractAndTransferToken
1231
+ case 0xc7:
1232
+ return CopyCreateContractAndTransferToken
1233
+ case 0xc8:
1234
+ return CreateSubContractAndTransferToken
1235
+ case 0xc9:
1236
+ return CopyCreateSubContractAndTransferToken
1237
+ case 0xca:
1238
+ return NullContractAddress
1239
+ case 0xcb:
1240
+ return SubContractId
1241
+ case 0xcc:
1242
+ return SubContractIdOf
1243
+ case 0xcd:
1244
+ return ALPHTokenId
1245
+ case 0xce:
1246
+ return LoadImmField(byteCodec._decode(input))
1247
+ case 0xcf:
1248
+ return LoadImmFieldByIndex
1249
+ case 0xd0:
1250
+ return PayGasFee
1251
+ case 0xd1:
1252
+ return MinimalContractDeposit
1253
+ case 0xd2:
1254
+ return CreateMapEntry(byteCodec._decode(input), byteCodec._decode(input))
1255
+ case 0xd3:
1256
+ return MethodSelector(intAs4BytesCodec._decode(input))
1257
+ case 0xd4:
1258
+ return CallExternalBySelector(intAs4BytesCodec._decode(input))
1259
+ default:
1260
+ throw new Error(`Unknown instr code: ${code}`)
1261
+ }
487
1262
  }
488
1263
  }
489
-
490
1264
  export const instrCodec = new InstrCodec()
491
1265
  export const instrsCodec = new ArrayCodec<Instr>(instrCodec)