All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
Unreleased - ReleaseDate
0.15.0 - 2022-03-08
- Construct ErgoStateContext using last block headers #450;
AvlTree.remove#436;AvlTree.update#443;ReducedTransactionimplementation according to EIP-19 #442AvlTree.getandAvlTree.getMany#445;AvlTree.contains[#437] (ergoplatform#437);LastBlockUtxoRootHash#452;ExtPubKeyandDerivationPathwith BIP-32,44 and soft derivation support for Ledger #448;- Modulo binary op #460;
treeLookuppredefined function #459;createAvlTreepredefined function #466;ScorexSerializable, serialization framework of the ergo node #485;Wallet::from_mnemonic#492;- Peer management for p2p networking #493;
- C/Swift(iOS, macOS) bindings for ergo-lib #468;
- wallet extended secret key derivation #498;
- transaction serialization in Wasm API 506;
- support for
(Int, Int),Coll[Coll[Byte]],Coll[Int]andBigInttypes in constant conversion in Wasm API; - mnemonic generation #505;
- arithmetic operations and polynomial interpolation over Galois fields GF(2^192) #496;
- Merkle tree support #521;
- NiPoPoW proof verification #517;
- distributed signatures support #470;
- fix
elem_tpeinAppendandSliceevaluation #455 - fix
CollKind::elem_tpe#457; - fix a bug with self box lookup in TransactionContext and added checks for box resolution in tx inputs and data_inputs #462;
- audit and remove unwraps and panics in ergo-lib #467;
- fix missing ContextExtenion support #458;
- make
BoxSelection::boxesof non-empty type #471; - check for allowed ops in
Coll.flatMaplambda #472; - missing
SGlobal.xor,groupGeneratormethod eval #523;
0.14.0 - 2021-10-07
Headerproperties #433;PreHeaderproperties #435;AvlTreeproperties #432;AvlTree.insert#413;SubstConstants#410;Box.bytesWithoutRef#409;Downcast#408;Address::P2SHsupport #407;Context.selfBoxIndex#405;- Ensure JSON parsing for explorer API #398;
Box.bytes#390;- add (Coll[Byte], Coll[Byte]) and (Long, Long) support for Constant conversion in JS #386;
- add
ErgoBox::serialized_additional_registers()in Wasm #387; - add
Transaction::from_unsigned_tx()to construct from unsigned tx + proofs #387; - extract distinct token ids on tx serialization and expose as
UnsignedTransaction::distinct_token_ids()in Wasm #387; - add
to_bytes()forBoxValueandTokenAmountin Wasm #387; Constant::sigma_serialize_bytes(),ContextExtension::sigma_serialize_bytes()in Wasm #387;TokenId::as_bytes()andBoxId::as_bytes()in Wasm #387;- add (Coll[Byte], Coll[Byte]) and (Long, Long) support for Constant conversion in JS #386;
- Serialization for
SigmaBooleantypes #341; - Diffie-Hellman tuples support in sigma protocol #315;
Coll.zip#350;BigInt256256-bit BigInt #325;- Logical XOR #349;
groupGeneratorglobal variable #340;GroupElement.getEncodedmethod for GroupElement #335;NegateIR node for GroupElement #334;ExponentiateIR node for GroupElement #321;- WASM
to_js_eip12()(alongto_json()) that encodes JSON according to EIP-12 (similar to JSON byto_json(), but box value and token amount encodes as strings to avoid accuracy loss in JS) #346; Coll.slice#309;- Byte-wise XOR for byte arrays #310;
Constant::from_i64_str_arrayandto_i64_str_arrayforColl[Long]encoding #311;Coll.append#308;MultiplyGroupIR node for GroupElement #316;SubstConstIR node and serialization [#318] (ergoplatform#318);- Better Debug print for EC point #319;
Constant::from_ecpoint_bytesto Wasm API #324;Constant::to/from_ergo_boxto Wasm API #397;
- WASM
to_json()returns string (instead ofJsValue) to avoid silent accuracy loss on JS object -> text conversion on JS side #346; SigmaSerializable:sigma_serialize_bytesmade failible (returnsResult) #328;ErgoBox::new,from_box_candidatemade failible (returnsResult) #328;ErgoTree::new,template_bytes,to_base16_bytesmade failible (returnsResult) #328;Transaction::newmade failible (returnsResult) #328;- WASM
ErgoBox::new,byte_to_signmade failible (returnsResult) #328; - WASM
ErgoTree::to_bytes,to_base16_bytesmade failible (returnsResult) #328; ErgoTree::to_bytes()renamed toErgoTree::sigma_serialize_bytes()in Wasm #387;ErgoBoxand other types that it uses moved toergotree_ircrate and re-exported inergo_lib::ergotree_ir#397;
- Switched to
ThreadRngCSPRNG for source of randomness in sigma protocol #315; SigmaSerializable:sigma_serializeerrors are extended beyondio::Error#328;ergotree-ir::mir::constant::constant_placeholdermodule is public;ErgoTree::set_constantis removed in favor ofErgoTree::with_constantwith an added check for matching constant type#323;- Eliminate and ban panics (unwrap, panic!, todo!, etc) in
sigma-ser,ergotree-irandergotree-interpretercrates #328, #344;
0.13.3 - 2021-06-11
- Implement CalcSha256 op for byte arrays #303;
- Parsing of
UnsignedTransactionfrom JSON #304;
0.13.2 - 2021-06-09
- AND, OR conjecture support in sigma protocol #226;
- Support for ErgoTree header v1 with tree size #281;
- Add support for explorer v1 JSON format parsing for
BlockHeader::votes#285; - Add bitwise binary operators (&|^) #290;
- make
ergotree_ir::serialization::constant_storemodule public; Peekabletrait is removed insigma_sercrate #284;
- change
MINER_PUBKEYtype toColl[Byte]#291; - Make BigInt arithmetic ops check for 256-bit overflow #294;
- Fix numeric negation to give an error on overflow #294;
0.13.1 - 2021-05-28
- Fix VQL encoding/decoding for signed ints in ranges i32::MIN..-1073741825 and 1073741824..i32::MAX #263;
0.13.0 - 2021-05-26
- add
ErgoTree::template_bytes#274;
- encode/decode
UnsignedTransactionwithoutidand usingErgoBoxCandidateforoutputsinstead ofErgoBox#275;
0.12.0 - 2021-05-20
- add
Transaction::outputs()returningErgoBoxes#267;
- rename
Transaction::outputs()andUnsignedTransaction::outputs()tooutput_candidates()in WASM (both returnErgoBoxCandidates) #267;
- fix input box lookup on tx signing#268;
0.11.0 - 2021-05-19
ByteArrayToLongByteArrayToBigIntLongToByteArrayIR nodes #244;ErgoTree::constants_len,get_constant,set_constantAPI for accessing the constants list inErgoTree#261;
0.10.0 - 2021-04-22
- Add MinerPubKey and Global as global variables #232;
- Implement parser and evaluator for DH tuple #233;
- Add method descriptions for SContext (serialization) #235
- Implement GetVar #236
- Implement Atleast IR node (serialization) #237
- Implementation of Deserialize{Context,Register} (serialization) #239
- WASM: fix DataInput construction, ErgoStateContext construction from parsed JSON block headers #238
- Explicitly handle errors in SMethod::from_ids & and PropertyCall deserialization #231;
- Fix flatmap method & GET_VAR opcode #234;
0.9.0 - 2021-04-09
Coll.indexOf,flatMap,forallIR nodes (evaluation, serialization) #220;- Complete types serialization implementation #223;
Tupleconstructor evaluation and serialization #223;- Type unification (
SMethodspecialization) #225; SigmaAnd,SigmaOrserialization #225;Contract::ergo_tree()in WASM API;decodePointIR node (evaluation and serialization) #227;
0.8.0 - 2021-03-22
proveDlog,box.creationInfo,Box.id,Coll.exists,SigmaProp.propBytes,Option.isDefined,Option.getOrElseIR nodes (evaluation, serialization) #209;Box.R0..R3register access #213;-negation for numeric types evaluation and serialization #214;- BigInt values support, arithmetic operations (
+, -, *, /),-negation,Upcast#216;
0.7.0 - 2021-03-03
- ErgoScript compiler pipeline draft (
ergoscript-compilercrate) and added a feature(default) "compiler" inergo-libwith compiler exposed viaContract::compile(source); ErgoTree:to_base16_bytes()returns Base16-encoded serialized bytes;
- Extract Ergotree IR with serialization from
ergo-libcrate intoergotree-ircrate; - Extract ErgoTree IR interpreter from
ergo-libcrate intoergotree-interpretercrate;
0.5.1 - 2021-02-17
- Explorer v1 API support for box register parsing #197;
0.5.0 - 2021-02-04
CalcBlake2b256IR node evaluation and serialization #179;- Arith ops (
+, -, *, /) IR node evaluation and serialization #181; - Comparison ops (
>, >=, <, <=) IR node evaluation and serialization #182; AND,Collection(collection declaration),BinAndIR nodes evaluation and serialization #183;Or,BinOrIR nodes evaluation and serialization #184;LogicalNotIR nodes evaluation and serialization #185;Map,FilterIR nodes evaluation and serialization #186;BoolToSigmaProp,If,Min,MaxIR nodes evaluation and serialization #187;ByIndex,Box.tokensIR nodes evaluation and serialization #188;
0.4.4 - 2021-01-20
BlockValue,ValDef,ValUse,FuncValue,ApplyIR nodes evaluation and serialization #171;SimpleBoxSelector: sort inputs by target tokens and skip inputs that does not have target tokens #175;Fold(collection),ExtractAmount(Box.value),SelectField(tuple field access) IR nodes evaluation and serialization #173
0.4.3 - 2021-01-15
SType::STuple()andValue::Tup()types to store tuples. Implemented serialization, conversion between Rust types andConstant(Value,SType) #166;EQ(==),NEQ(!=)implementation #166;
0.4.2 - 2020-12-21
- Interpreter: Box.Rx properties (get register value), OptionGet #163;
- Interpreter: added global vars (
INPUTS,OUTPUTS,SELF,HEIGHT),Contextproperties (dataInputs) #155; - Explorer API v1 format parsing for box.additionalRegisters #161;
0.4.1 - 2020-11-19
- Support for parsing ErgoBox transaction id from
txIdJSON field name;
0.4.0 - 2020-11-19
- Support for parsing ErgoBox id also from "id" JSON field name #134
- Address::p2pk_from_pk_bytes to make an Address from serialized PK #136
- Address::from_str to parse an Address without checking the network prefix #136
- Address::recreate_from_ergo_tree to re-create the address from ErgoTree (built from the address) #146
- NetworkAddress to store Address + NetworkPrefix #146
- Move and changed visibility of various modules(input, data_input, prover_result, etc.) #135
- Add Context parameter to Prover::prove, Verifier::verify #139
- Move all transaction-related parameters into TransactionContext parameter in Wallet::sign_transaction #139
- Move Constant export from crate root to constant module (ast::constant) and made eval module private #142
- Make SType public #142
0.3.0 - 2020-11-04
- Add value extraction API for Constant (e.g i64::try_extract_from(constant)) #111.
- Implement From for DataInput #113.
- Add data inputs to TxBuilder #115.
- Read/Write register values in ErgoBox, ErgoBoxCandidate #116.
- Add tokens support in TxBuilder and ErgoBoxCandidateBuilder #118.
- Implement JSON encoding/decoding for UnsignedTransaction #123.
- Add TxBuilder::estimate_tx_size_bytes() to get estimated serialized transaction size in bytes after signing (assuming P2PK box spending); tx_builder::SUGGESTED_TX_FEE constant with "default" current tx fee used lately (1100000 nanoERGs); #128.
- Add checks when minting token for minting token exclusivity and registers overwrite #129.
- Add transaction validity checks in TxBuilder #130.
- Use TokenAmount instead of u64 in sum_tokens*() #130.
- Add TokenAmount::checked*() ops #130.
- Add I64::as_num() in WASM bindings #130
- box_id, box_value and register modules made private in ergo_box module and all types are re-exported from ergo_box module itself #131.
0.2.0 - 2020-10-06
- Binary serialization;
- JSON serialization;
- Box, Transaction building;
- Transaction signing (P2PK only);
- ErgoTree constant values conversion.