Release v0.5.0
The first release of the specification that should help in versioning of the protocol documentation. It is compatible with the beta 5 network.
Since it is the first release, it has no highlighted changes yet. The future releases will try to describe significant modifications to the protocol.
What's Changed
- Register approach by @shahankhatch in #1
- Add initial transaction format by @adlerjohn in #6
- Major changes and refactor by @adlerjohn in #7
- Add some crypto precompiles by @adlerjohn in #8
- Add multiply immediate opcode by @adlerjohn in #9
- Add opcodes to extend and shrink call frame stack. by @adlerjohn in #17
- Add memory allocation opcode. by @adlerjohn in #18
- Conditional jumps by @adlerjohn in #19
- Add opcodes for memory copy and compare. by @adlerjohn in #20
- Bunch of clarifications around the VM itself by @adlerjohn in #23
- Specify call and call frames by @adlerjohn in #24
- Add a readme description and organize files by @adlerjohn in #25
- Fix ownership base value for return values by @adlerjohn in #26
- Subsume special registers into regular registers by @adlerjohn in #28
- Fix transaction hash to be 32 bytes instead of uint64. by @adlerjohn in #29
- Fix wording for block hashes of negative-height blocks. by @adlerjohn in #30
- Fix pointer register naming by @adlerjohn in #31
- Minor fixes to crypto opcodes and add Merkle trees by @adlerjohn in #32
- Remove redundant combo arithmetic opcodes by @adlerjohn in #33
- Basic cleanup contract opcodes by @adlerjohn in #34
- Fix the register names used for SB and SW by @adlerjohn in #36
- Use last byte instead of first byte for SB by @adlerjohn in #37
- Define input predicate verification by @adlerjohn in #39
- Fix byte sizes in call frame to be aligned to words. by @adlerjohn in #42
- Cleanup description of special registers. by @adlerjohn in #44
- Add script and predicate data fields. by @adlerjohn in #43
- Fix predicate jump constraints by @adlerjohn in #45
- Specify intial transaction validity and standardness rules by @adlerjohn in #46
- Remove halt opcode by @adlerjohn in #48
- Add a one reserved register by @adlerjohn in #49
- Add NOT opcode by @adlerjohn in #50
- Bound the cost of all operations that operate on variable memory by @adlerjohn in #51
- Remove non-immediate jumps by @adlerjohn in #52
- Remove non-immediate jump references from predicate restrictions by @adlerjohn in #56
- Add operations that are easy to verify by @adlerjohn in #57
- Guarantee transaction length is invariant by @adlerjohn in #59
- Fix description of immediate multiples of 6 bits by @adlerjohn in #61
- Add variable output types by @adlerjohn in #60
- Add conditional contract output by @adlerjohn in #62
- Specify contexts by @adlerjohn in #63
- Make LOG be a no-op with params by @adlerjohn in #66
- Add error flags and overflow/underflow semantics by @adlerjohn in #67
- Improve and simplify gas accounting by @adlerjohn in #68
- Clarify some cases of how pc is advanced by @adlerjohn in #69
- Handle verify opcodes based on context by @adlerjohn in #70
- Specify panic logic by @adlerjohn in #71
- Add transfer opcode by @adlerjohn in #74
- Support forwarding coins with CALL by @adlerjohn in #76
- Add global gas register than only decrements. by @adlerjohn in #77
- Add unsafe math flag by @adlerjohn in #78
- Fix balance logic for transfers by @adlerjohn in #79
- Math flag fixes and improvements by @adlerjohn in #80
- Fix gas deduction on out-of-gas to only deduct from context gas by @adlerjohn in #81
- Add new transaction type to create contract by @adlerjohn in #83
- Restrict max created contract size by @adlerjohn in #84
- Refactor specs repo by @adlerjohn in #87
- Forbid writing to a reserved register by @adlerjohn in #91
- Add opcode to zero out memory by @adlerjohn in #92
- Fix opcodes to be ordered alphabetically. by @adlerjohn in #93
- Separate vm and protocols specs by @adlerjohn in #94
- Document tx lifecycle better by @adlerjohn in #95
- Add checks for input/output bounds. by @adlerjohn in #96
- Add LOADCODE opcode by @adlerjohn in #97
- Add explicit handling of unknown opcode by @adlerjohn in #98
- Cleanup and update readme by @adlerjohn in #99
- Add check for stack and heap collision for LOADCODE by @adlerjohn in #100
- Add withdrawal output type by @adlerjohn in #103
- Misc typo fixes by @adlerjohn in #104
- Enable fee collection by @adlerjohn in #107
- Chore: fix header size of withdrawal by @adlerjohn in #110
- Include bytecode as witness data for create contract tx by @adlerjohn in #113
- Add more metadata to inputs for easier fraud proofs by @adlerjohn in #114
- Move contract ID computation by @adlerjohn in #116
- Support native tokens by @adlerjohn in #117
- Add unconditional transfer opcode by @adlerjohn in #120
- Fix exp overflow width by @adlerjohn in #122
- Minor fixes by @adlerjohn in #123
- Fix VM init stack offset by @adlerjohn in #124
- Support loading of static contract code by @adlerjohn in #125
- Fix offset calculation for stack start initialization by @adlerjohn in #126
- Fix code root description by @adlerjohn in #128
- Rename opcode registers to ABCD by @adlerjohn in #131
- Add mint and burn opcodes by @adlerjohn in #132
- Define linting and formatting rules by @adlerjohn in #133
- Add markdown link checker CI by @adlerjohn in #136
- Make maturity fields 32 bits by @adlerjohn in #137
- Specify access lists by @adlerjohn in #140
- Add check for correctly-sized signature witness by @adlerjohn in #139
- Add check for correct contract ID by @adlerjohn in #138
- Add compressed transaction format by @adlerjohn in #135
- Fix balance type on VM init to be 8 bytes instead of 8 bits. by @adlerjohn in #142
- Fix spacing for panic conditions for LB and LW. by @adlerjohn in #143
- Fix color and contract ID compression by @adlerjohn in #144
- Fix formatting of bitwise or. by @adlerjohn in #154
- Change JNZI to JNEI. by @adlerjohn in #153
- Change CFE opcode to CFEI, which uses an immediate value to extend memory. by @sezna in #156
- Fix SUBI to use immediate. by @adlerjohn in #157
- Add MOVE opcode by @adlerjohn in #158
- Update opcodes ToC. by @adlerjohn in #160
- Clarify that crypto and other opcodes advance pc. by @adlerjohn in #161
- Explicitly set high bits of immediate value on logical ops to 0. by @adlerjohn in #162
- Rename 32-byte storage ops to "quad word" by @adlerjohn in #166
- Add immediate memory clear op. by @adlerjohn in #165
- Rename opcodes to fit in 4 chars by @adlerjohn in #167
- Forbid memcopy range overlap. by @adlerjohn in #168
- Fix missed register re-naming. by @adlerjohn in #170
- Explicit ecrecover error description by @adlerjohn in #171
- Opcodes for tx inputs, outputs, and witnesses by @adlerjohn in #172
- Reduce max static contracts to
255
by @adlerjohn in #173 - Fix wording for predicate init by @adlerjohn in #174
- Fix contract output init for predicates by @adlerjohn in #175
- Fix stack pointer init by @adlerjohn in #176
- Fix burn to use color instead of contract by @adlerjohn in #177
- Fix broken link format by @adlerjohn in #179
- Fix mint and burn color offset by @adlerjohn in #178
- Make
LW
andSW
immediates be multiples of word size by @adlerjohn in #180 - Add LOGD instruction by @adlerjohn in #184
- Add less than instruction by @adlerjohn in #186
- Add RETD instruction by @adlerjohn in #187
- Clarify that SWW clobbers last 24 bytes with zeroes by @adlerjohn in #185
- Check balance from sending contract instead of receiving contract by @adlerjohn in #188
- Fix typo in italics by @adlerjohn in #189
- Fix mint and burn to use current contract ID by @adlerjohn in #190
- Init heap pointer at top instead of frame pointer by @adlerjohn in #191
- Change call parameters and return values by @adlerjohn in #193
- Fix minor typo by @adlerjohn in #195
- Spec receipts by @adlerjohn in #196
- fixes typo in tx validity
sum_outputs
by @endophysics in #197 - Misc typo fixes by @adlerjohn in #199
- ABI spec by @digorithm in #194
- Add ABI link to README and change opcodes link by @digorithm in #203
- clarify that create transaction must have exactly one contractCreated… by @simonr0204 in #207
- Add support to custom types in the JSON ABI spec by @digorithm in #206
- Init receipts root to zero. by @adlerjohn in #210
- Add memory copy immedate instruction by @adlerjohn in #209
- Specify
GM
instruction by @adlerjohn in #211 - Make static contracts list of TXO pointers by @adlerjohn in #212
- Clarify that CCP op is only used for reading code by @Dentosal in #215
- Fix typo on LDC by @adlerjohn in #216
- Fix typo in
srwq
andswwq
by @sezna in #218 - Minor edit to remove bit about call frames returning assigned range, by @nfurfaro in #219
- Tx access opcodes panic if $rA is reserved by @wolflo in #221
- Fix naming script hash -> predicate hash by @adlerjohn in #222
- Add
ScriptResult
receipt type by @wolflo in #224 - Increase max ram to 64 MiB by @adlerjohn in #223
- Add
PanicReason
toScriptResult
by @vlopes11 in #227 - Add BAL balance opcode by @wolflo in #226
- Fix formatting of panic reasons by @wolflo in #229
- Add
Opcode
halfword to encoded panic reason by @vlopes11 in #230 - Fixes a small typo. by @nfurfaro in #235
- Update JSON ABI for custom types by @digorithm in #239
- Docs: Update BMST specs to include leaf fee within leaf digest by @bvrooman in #237
- Simply input checks by @adlerjohn in #247
- Move compressed tx format to Ethereum-specific directory by @adlerjohn in #248
- Fix revert to revert contracts and variable outputs properly by @adlerjohn in #250
- Forbid more than one change output per color by @adlerjohn in #252
- On revert, use initial free balance. by @adlerjohn in #251
- Add TXO pointers to inputs by @adlerjohn in #249
- Replace hashes input UtxoId with pair of tx_id,output_index by @rakita in #253
- Remove enshrined panic reason by @adlerjohn in #256
- Name readme title after Ethereum yellow paper by @adlerjohn in #257
- Require at least one coin input. by @adlerjohn in #258
- Color -> asset ID. by @adlerjohn in #259
- Formatting refactor of types by @adlerjohn in #260
- add byte pricing independent of gas price by @Voxelot in #263
- Refactor readme title by @adlerjohn in #265
- Add rule to verify predicate hash by @adlerjohn in #266
- Remove bal init for scripts. by @adlerjohn in #269
- Transclude signature spec. by @adlerjohn in #267
- Clarify that witness data is not part of tx ID. by @adlerjohn in #268
- Convert txo pointer to tx pointer. by @adlerjohn in #275
- Initial contract storage by @adlerjohn in #276
- Re-add gas fields to contract creation tx. by @adlerjohn in #274
- bytePrice validation by @rakita in #281
- Update Array ABI spec by @QuinnLee in #283
- Always append a result receipt on revert. by @adlerjohn in #288
- Clarify registers used in CALL. by @adlerjohn in #290
- Maximum number of initial storage slots. by @adlerjohn in #291
- Fix reg ID typo in CALL by @adlerjohn in #292
- Adding a missing square bracket by @mohammadfawaz in #294
- ScriptResult Error on Revert by @Voxelot in #293
- Add MOVI instruction. by @adlerjohn in #296
- Fix typos by @adlerjohn in #299
- fix: use
uint32
type for allmaturity
fields by @iqdecay in #300 - Add jump-if-not-zero instruction. by @adlerjohn in #306
- docs: give the meaning of
MEM[x, y]
by @iqdecay in #307 - update: tuples have components by @QuinnLee in #304
- docs: add specs for function signature encoding with custom types by @iqdecay in #315
- Specify deposit IDs by @pixelcircuits in #314
- Update predicate root definition in specs by @vlopes11 in #321
- Remove compressed tx format. by @adlerjohn in #326
- Minor whitespace fix. by @adlerjohn in #331
- Fix
$of
forSLL
/SLLI
. by @adlerjohn in #334 - Order initial storage slot keys. by @adlerjohn in #329
- Fix
balanceOfStart
usage. by @adlerjohn in #327 - Clarify revert on panic. by @adlerjohn in #328
- Remove static contracts from tx. by @adlerjohn in #332
- Remove byte price. by @adlerjohn in #333
- Specify exp result value on overflow. by @adlerjohn in #335
- Remove SLDC instruction. by @adlerjohn in #330
- Rename opcodes to instruction set. by @adlerjohn in #336
- Second half of renaming opcodes to instructions. by @adlerjohn in #337
- Add dynamic jump instructions. by @adlerjohn in #338
- Expanding the section on enum ABI encoding with more exmaples by @mohammadfawaz in #341
- Rename native -> base by @adlerjohn in #345
- Remove reference to Ethereum. by @adlerjohn in #344
- Add gas price factor. by @adlerjohn in #343
- Clarify how the function selector is computed using a table and a more complex example by @mohammadfawaz in #350
- renamed predicate hash to root by @pixelcircuits in #349
- Specify JSON format for storage initializers by @mohammadfawaz in #352
- Encoding of each type in JSON ABI and other enhancements by @mohammadfawaz in #351
- Make readme intro blazingly fast by @adlerjohn in #354
- New messaging specification (replacing old deposit/withdrawal spec) by @pixelcircuits in #318
- Deny dynamic JMP/JNE backwards jumps in predicates by @Dentosal in #359
- Typo in Output Message ID by @Braqzen in #361
- Remove unused links from readme toc by @pixelcircuits in #364
- Update input message nonce by @pixelcircuits in #366
- Add instructions to get tx fields by @adlerjohn in #353
- Format tables and toc by @adlerjohn in #370
- Get currently-verifying predicate. by @adlerjohn in #373
- Added more validity for messages by @pixelcircuits in #371
- Remove
CIMV
andCTMV
. by @adlerjohn in #368 - Check script and predicate / data lengths. by @adlerjohn in #372
- Bullet pointed receipts in
/specs/protocol/abi.md
should be clickable links which take you directly to each section by @Braqzen in #379 - Change the bullet points to headings in
/specs/protocol/abi.md
so that they can be clicked and used as direct links by @Braqzen in #377 - Formalize Double-spend Validation by @Voxelot in #383
- changed col param name by @pixelcircuits in #386
- Type arguments in the JSON ABI and the function selector by @mohammadfawaz in #382
- fix eager rounding, including missing byte costs in resultant fee by @Voxelot in #384
- fix: fix argument name in example by @iqdecay in #388
- Fix the JSON ABI of the complex example by @mohammadfawaz in #391
- Docs: Add SMT test spec and test fixtures by @bvrooman in #389
- Remove separate transaction access instructions by @Dentosal in #393
- Fix
GTF_INPUT_MESSAGE_NONCE
to use word instead of bytes. by @adlerjohn in #398 - Add timestamp instruction. by @adlerjohn in #396
- Create markdown-lint.yml by @adlerjohn in #397
- Removed owner from input messages by @pixelcircuits in #400
- Update tx_format.md by @xgreenx in #403
- Add mint transaction type. by @adlerjohn in #406
- Improve wording for alu intructions flags by @nfurfaro in #408
- Add contractId field to panic receipt by @Voxelot in #409
- Specify block header by @adlerjohn in #405
- Sequential Reads and Set/Unset status Register in #414
- Update the ABI spec with the new JSON ABI format by @mohammadfawaz in #416
- Address PR Comments from 414 in #417
- Add clear sequential word command in #415
- Added
TxPointer
toMint
transaction by @xgreenx in #423 - set rB to false if any storage slot in the requested range is unset by @Voxelot in #424
- Write sequential storage slots with previous status in #422
- Move specs into an
mdbook
. Add CI for deploying. by @mitchmindtree in #425 - Configuration-time constants in the ABI by @mohammadfawaz in #419
- Use u32 for PoA block height by @Voxelot in #431
- Split
abi.md
into multiple files by @AlicanC in #433 - Fix redirect by @AlicanC in #434
- Minor enhancement to storage instructions + various nits by @mohammadfawaz in #432
- Bring back argument encoding by @mohammadfawaz in #437
- fixed improper range description on SRWQ in #445
- Add
messagesTypes
to the JSON ABI by @mohammadfawaz in #444 - Add function attributes to JSON ABI by @anton-trunov in #447
- Improve wording on usage of flags
F_UNSAFEMATH
&F_WRAPPING
by @nfurfaro in #441 - Annotate VM instructions with their effects by @anton-trunov in #427
- Addressing comments from PR #437 by @mohammadfawaz in #452
- Reserve undefined flags, and panic if setting them is attempted by @Dentosal in #457
- Make message retryable and not spendable on gas by @pixelcircuits in #443
- specify coinbase validity rules by @Voxelot in #442
- Make LDC clobber the stack. by @adlerjohn in #460
- Add cname for gh-pages by @Voxelot in #463
- Make
$hp
point to immediately after usable memory. by @adlerjohn in #464 - Add nested call limit by @Dentosal in #465
- Changes for predicate gas metering in #448
- Chain Identifier by @Voxelot in #462
- Make $hp point to the first available byte, instead of the one before it by @Dentosal in #466
- Remove the
messageId
field from the MessageOut Receipt by @xgreenx in #467 - Document the panic conditions of logd by @Dentosal in #468
- add dynamic cfe & cfs by @Voxelot in #471
- Conditional jumps only check for address validity if the condition is true by @Dentosal in #469
- Make
Nonce
as 32 bytes array by @xgreenx in #472 - Remove nested call limit by @Dentosal in #473
- Add relative jump opcodes by @Dentosal in #470
- Update gas initialization for predicate estimation in #474
- clarify the description of the coinbase instruction by @Voxelot in #477
- Clarify flag behaviour regarding panics by @Dentosal in #485
- Wideint instructions by @Dentosal in #483
- Bitshift should discard overflow by @Dentosal in #486
- increase code root merkle leaf size to 16KiB by @Voxelot in #476
- Actualize the specification for inputs with the implementation by @xgreenx in #487
- Add link to Predicate page by @dmihal in #494
- Minor fix of the vm initialization description by @xgreenx in #493
- Hash the SMT leaf key to prevent tree structure manipulation by @xgreenx in #496
- refactor: remove nested folders in nav by @sarahschwartz in #497
- Clarify the gas forwarded field in call receipt by @Dentosal in #501
- Fix typo in instruction-set.md by @bitzoic in #502
- Fix broken links by @Dentosal in #500
- Use correct mnemonics for jnef and jneb instructions by @Dentosal in #503
- Add ED25519 and Secp256r1 by @SilentCicero in #484
- Add scattered push/pop operations by @Dentosal in #499
- docs: Add Merkle tree specs to cryptographic primitives by @bvrooman in #504
- Do not restore $hp when returning from a context by @Dentosal in #506
- Remove unused MEM_MAX_ACCESS_SIZE by @Dentosal in #508
- Granular Asset Minting by @SilentCicero in #491
- update docs CI by @sarahschwartz in #507
ecr
opcode is no longer supported by @Braqzen in #513- Change mint tx format and coinbase rules to mitigate dust accumulation by @Voxelot in #511
- docs: polish "balanceOfStart" explanation by @PaulRBerg in #516
- Minor simplification to
Mint
transaction after the implementation by @xgreenx in #518 - Remove CHAIN_ID from predicate ID calculation by @dmihal in #519
- Add ECAL instruction by @Dentosal in #523
- specs: add encoding specs for vectors, tuples and u128/u256 by @iqdecay in #520
- docs: Specify max transaction size by @bvrooman in #525
- Transaction Policies by @Voxelot in #514
- Add memory executability permissions by @Dentosal in #530
- Limit the number of receipts to u16::MAX by @Dentosal in #535
- Charge for new storage slots by @Dentosal in #536
- Some clarification after implementation by @xgreenx in #533
- Introduce intrinsic fees for transaction validation beyond script & byte costs by @Voxelot in #529
- docs: configure spell check by @sarahschwartz in #539
New Contributors
- @shahankhatch made their first contribution in #1
- @adlerjohn made their first contribution in #6
- @sezna made their first contribution in #156
- @endophysics made their first contribution in #197
- @digorithm made their first contribution in #194
- @simonr0204 made their first contribution in #207
- @Dentosal made their first contribution in #215
- @nfurfaro made their first contribution in #219
- @wolflo made their first contribution in #221
- @vlopes11 made their first contribution in #227
- @bvrooman made their first contribution in #237
- @rakita made their first contribution in #253
- @QuinnLee made their first contribution in #283
- @mohammadfawaz made their first contribution in #294
- @iqdecay made their first contribution in #300
- @pixelcircuits made their first contribution in #314
- @Braqzen made their first contribution in #361
- @xgreenx made their first contribution in #403
- @mitchmindtree made their first contribution in #425
- @AlicanC made their first contribution in #433
- @anton-trunov made their first contribution in #447
- @dmihal made their first contribution in #494
- @sarahschwartz made their first contribution in #497
- @bitzoic made their first contribution in #502
- @SilentCicero made their first contribution in #484
- @PaulRBerg made their first contribution in #516
Full Changelog: https://github.com/FuelLabs/fuel-specs/commits/v0.5.0