Compare commits
10 commits
b483b3a17a
...
f36077e8d8
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f36077e8d8 | ||
|
|
679dff9b3a | ||
|
|
d50cd7da7c | ||
|
|
100827213e | ||
|
|
cbffafaf51 | ||
|
|
bd3120fabd | ||
|
|
21a92fc235 | ||
|
|
f1cbf11c74 | ||
|
|
7c6ccac3ed | ||
|
|
914631adcb |
31 changed files with 1155 additions and 1368 deletions
14
.gitleaks.toml
Normal file
14
.gitleaks.toml
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
# Sulkta gitleaks allowlist for this repo (a fork of txpipe/pallas).
|
||||
# These paths hold UPSTREAM Cardano public test fixtures — the mainnet Byron
|
||||
# genesis, CBOR/native-script test vectors — whose high-entropy hex strings
|
||||
# false-positive as "generic-api-key". They are public on-chain / test data
|
||||
# present in every pallas clone. NOT secrets.
|
||||
[extend]
|
||||
useDefault = true
|
||||
|
||||
[allowlist]
|
||||
description = "Upstream Cardano public test fixtures (not secrets)"
|
||||
paths = [
|
||||
'''test_data/''',
|
||||
'''.*\.native$''',
|
||||
]
|
||||
323
CHANGELOG.md
323
CHANGELOG.md
|
|
@ -1,6 +1,311 @@
|
|||
<a name="unreleased"></a>
|
||||
## [Unreleased]
|
||||
|
||||
|
||||
<a name="v0.32.0"></a>
|
||||
## [v0.32.0] - 2024-12-29
|
||||
### Chore
|
||||
- apply new lint warnings from latest clippy ([#561](https://github.com/txpipe/pallas/issues/561))
|
||||
- fix examples after latest refactors ([#560](https://github.com/txpipe/pallas/issues/560))
|
||||
- **deps:** update utxorpc-spec to v0.15 ([#568](https://github.com/txpipe/pallas/issues/568))
|
||||
- **math:** replace malachite lib with dashu ([#542](https://github.com/txpipe/pallas/issues/542))
|
||||
- **utxorpc:** update spec to v0.14 and update redeemer mapper ([#559](https://github.com/txpipe/pallas/issues/559))
|
||||
|
||||
### Feat
|
||||
- **applying:** include main constants in pparams ([#565](https://github.com/txpipe/pallas/issues/565))
|
||||
- **configs:** allow clone for genesis file structs ([#528](https://github.com/txpipe/pallas/issues/528))
|
||||
- **network:** implement `GetFilteredDelegationsAndRewardAccounts` query ([#552](https://github.com/txpipe/pallas/issues/552))
|
||||
- **network:** implement get_utxo_whole query ([#564](https://github.com/txpipe/pallas/issues/564))
|
||||
- **network:** implement get stake pool parameters query ([#554](https://github.com/txpipe/pallas/issues/554))
|
||||
- **network:** implement GetUTxOByTxIn state query ([#550](https://github.com/txpipe/pallas/issues/550))
|
||||
- **traverse:** introduce small QoL improvements ([#567](https://github.com/txpipe/pallas/issues/567))
|
||||
- **traverse:** implement MultiEraValue.into_conway ([#545](https://github.com/txpipe/pallas/issues/545))
|
||||
- **txbuilder:** allow cloning of relevant structs ([#558](https://github.com/txpipe/pallas/issues/558))
|
||||
- **utxorpc:** add execution cost prices to parameter mapper ([#555](https://github.com/txpipe/pallas/issues/555))
|
||||
|
||||
### Fix
|
||||
- **network:** adjust PoolDistr & ProtocolParam structs used for state queries ([#551](https://github.com/txpipe/pallas/issues/551))
|
||||
- **traverse:** don't mess with Byron update epoch ([#566](https://github.com/txpipe/pallas/issues/566))
|
||||
- **txbuilder:** support adding signatures to Conway transactions ([#553](https://github.com/txpipe/pallas/issues/553))
|
||||
|
||||
|
||||
<a name="v0.31.0"></a>
|
||||
## [v0.31.0] - 2024-11-04
|
||||
### Build
|
||||
- **deps:** update itertools requirement from 0.12.1 to 0.13.0 ([#459](https://github.com/txpipe/pallas/issues/459))
|
||||
- **deps:** update utxorpc-spec requirement from 0.3.0 to 0.4.4 ([#425](https://github.com/txpipe/pallas/issues/425))
|
||||
- **deps:** update base64 requirement from 0.21.2 to 0.22.0 ([#417](https://github.com/txpipe/pallas/issues/417))
|
||||
- **deps:** update rocksdb requirement from 0.21.0 to 0.22.0 ([#403](https://github.com/txpipe/pallas/issues/403))
|
||||
- **deps:** update itertools requirement from 0.10.5 to 0.12.1 ([#390](https://github.com/txpipe/pallas/issues/390))
|
||||
- **deps:** update minicbor requirement from 0.19 to 0.20 ([#337](https://github.com/txpipe/pallas/issues/337))
|
||||
|
||||
### Chore
|
||||
- fix lint warnings ([#339](https://github.com/txpipe/pallas/issues/339))
|
||||
- remove rolldb from repo ([#537](https://github.com/txpipe/pallas/issues/537))
|
||||
- update root crate re-exports ([#536](https://github.com/txpipe/pallas/issues/536))
|
||||
- Improve network tracing messages ([#237](https://github.com/txpipe/pallas/issues/237))
|
||||
- Fix lint warnings for all targets ([#240](https://github.com/txpipe/pallas/issues/240))
|
||||
- Use gasket dep from crates.io ([#249](https://github.com/txpipe/pallas/issues/249))
|
||||
- upgrade gasket to v0.3.0 ([#255](https://github.com/txpipe/pallas/issues/255))
|
||||
- upgrade to gasket v0.4 ([#256](https://github.com/txpipe/pallas/issues/256))
|
||||
- undo upstream crate experiment ([#258](https://github.com/txpipe/pallas/issues/258))
|
||||
- fix lint warnings and outdated tests ([#475](https://github.com/txpipe/pallas/issues/475))
|
||||
- fix clippy warnings ([#262](https://github.com/txpipe/pallas/issues/262))
|
||||
- improve ImmutableDB error handling ([#426](https://github.com/txpipe/pallas/issues/426))
|
||||
- fix lint warnings ([#470](https://github.com/txpipe/pallas/issues/470))
|
||||
- split unstable features into independent flags ([#469](https://github.com/txpipe/pallas/issues/469))
|
||||
- fix pending code formatting ([#270](https://github.com/txpipe/pallas/issues/270))
|
||||
- apply lint recommendations ([#458](https://github.com/txpipe/pallas/issues/458))
|
||||
- fix lint warning ([#283](https://github.com/txpipe/pallas/issues/283))
|
||||
- move txbuilder to stable feature ([#451](https://github.com/txpipe/pallas/issues/451))
|
||||
- include configs in main crate ([#299](https://github.com/txpipe/pallas/issues/299))
|
||||
- fix new lint warnings ([#400](https://github.com/txpipe/pallas/issues/400))
|
||||
- update utxorpc-spec to 0.3.0 ([#399](https://github.com/txpipe/pallas/issues/399))
|
||||
- fix lint warnings across the board ([#374](https://github.com/txpipe/pallas/issues/374))
|
||||
- fix code formatting ([#363](https://github.com/txpipe/pallas/issues/363))
|
||||
- update mini-protocol pdf README link ([#301](https://github.com/txpipe/pallas/issues/301))
|
||||
- fix lint warnings ([#330](https://github.com/txpipe/pallas/issues/330))
|
||||
- use new method for github dark mode images ([#538](https://github.com/txpipe/pallas/issues/538))
|
||||
- **applying:** prepare pparams for folding logic ([#438](https://github.com/txpipe/pallas/issues/438))
|
||||
- **deps:** update NamedPipes related deps ([#336](https://github.com/txpipe/pallas/issues/336))
|
||||
- **deps:** use cryptoxide sha3 instead of depending on sha3 crate ([#452](https://github.com/txpipe/pallas/issues/452))
|
||||
- **interop:** bump u5c to v0.11.0 ([#519](https://github.com/txpipe/pallas/issues/519))
|
||||
- **interop:** bump u5c spec to v0.9 ([#503](https://github.com/txpipe/pallas/issues/503))
|
||||
- **interop:** update u5c spec to v0.8.0 ([#493](https://github.com/txpipe/pallas/issues/493))
|
||||
- **interop:** update u5c spec to v0.7.0 ([#489](https://github.com/txpipe/pallas/issues/489))
|
||||
- **interop:** update u5c specs to v0.6 ([#485](https://github.com/txpipe/pallas/issues/485))
|
||||
- **math:** initialize pallas-math crate ([#474](https://github.com/txpipe/pallas/issues/474))
|
||||
- **traverse:** make era enum serializable ([#467](https://github.com/txpipe/pallas/issues/467))
|
||||
- **traverse:** Improve API ergonomics ([#233](https://github.com/txpipe/pallas/issues/233))
|
||||
- **txbuilder:** export ExUnits to make them accessible from outside ([#497](https://github.com/txpipe/pallas/issues/497))
|
||||
- **txbuilder:** fix lint warnings ([#343](https://github.com/txpipe/pallas/issues/343))
|
||||
- **wallet:** fix lint warnings ([#344](https://github.com/txpipe/pallas/issues/344))
|
||||
|
||||
### Ci
|
||||
- skip gmp dep until we can build on windows ([#476](https://github.com/txpipe/pallas/issues/476))
|
||||
- run Rust check on multiple OS ([#286](https://github.com/txpipe/pallas/issues/286))
|
||||
|
||||
### Doc
|
||||
- **applying:** add ShelleyMA tests description ([#356](https://github.com/txpipe/pallas/issues/356))
|
||||
|
||||
### Docs
|
||||
- update readme with latest crate structure ([#539](https://github.com/txpipe/pallas/issues/539))
|
||||
- define security policy ([#464](https://github.com/txpipe/pallas/issues/464))
|
||||
- Small crate readme tweaks
|
||||
- **applying:** document Byron tx validations ([#311](https://github.com/txpipe/pallas/issues/311))
|
||||
- **network:** Add chain-sync client docs ([#252](https://github.com/txpipe/pallas/issues/252))
|
||||
- **network:** Document BlockFetch client ([#251](https://github.com/txpipe/pallas/issues/251))
|
||||
|
||||
### Feat
|
||||
- generate genesis utxos from genesis file ([#59](https://github.com/txpipe/pallas/issues/59))
|
||||
- Add client/server use_channel variants ([#228](https://github.com/txpipe/pallas/issues/228))
|
||||
- improve access to genesis utxos ([#302](https://github.com/txpipe/pallas/issues/302))
|
||||
- Allow creation of secret key from bytes ([#224](https://github.com/txpipe/pallas/issues/224))
|
||||
- add support for Conway config and params traverse ([#521](https://github.com/txpipe/pallas/issues/521))
|
||||
- Move flat en/de from aiken to pallas ([#303](https://github.com/txpipe/pallas/issues/303))
|
||||
- Make the underlying TxBody type generic
|
||||
- introduce UTxO RPC interop ([#260](https://github.com/txpipe/pallas/issues/260))
|
||||
- add handshake with query for n2c ([#266](https://github.com/txpipe/pallas/issues/266))
|
||||
- scaffold Byron phase-1 validations ([#300](https://github.com/txpipe/pallas/issues/300))
|
||||
- introduce RollDB ([#307](https://github.com/txpipe/pallas/issues/307))
|
||||
- introduce conway primitives ([#290](https://github.com/txpipe/pallas/issues/290))
|
||||
- introduce wallet crate for ed25519-bip32 key management ([#342](https://github.com/txpipe/pallas/issues/342))
|
||||
- implement GetCBOR local state query ([#413](https://github.com/txpipe/pallas/issues/413))
|
||||
- Add constants for known miniprotocols
|
||||
- Introduce Upstream crate ([#230](https://github.com/txpipe/pallas/issues/230))
|
||||
- add Babbage phase-1 validations ([#405](https://github.com/txpipe/pallas/issues/405))
|
||||
- add a simple Crawler example ([#453](https://github.com/txpipe/pallas/issues/453))
|
||||
- introduce transaction builder crate ([#338](https://github.com/txpipe/pallas/issues/338))
|
||||
- add Conway 2024-03 CDDL conformity ([#424](https://github.com/txpipe/pallas/issues/424))
|
||||
- Migrate to asynchronous I/O ([#241](https://github.com/txpipe/pallas/issues/241))
|
||||
- add helper to create bootstrap addresses ([#269](https://github.com/txpipe/pallas/issues/269))
|
||||
- implement `GetCurrentPParams` local state query ([#322](https://github.com/txpipe/pallas/issues/322))
|
||||
- **addresses:** Derive Hash on Address ([#235](https://github.com/txpipe/pallas/issues/235))
|
||||
- **applying:** implement Alonzo phase-1 validations ([#380](https://github.com/txpipe/pallas/issues/380))
|
||||
- **applying:** implement ShelleyMA phase-1 validations ([#354](https://github.com/txpipe/pallas/issues/354))
|
||||
- **applying:** add support for preview / preprod networks ([#422](https://github.com/txpipe/pallas/issues/422))
|
||||
- **applying:** add remaining validations for Byron era ([#325](https://github.com/txpipe/pallas/issues/325))
|
||||
- **applying:** validate all inputs in UTxO set ([#324](https://github.com/txpipe/pallas/issues/324))
|
||||
- **applying:** add cert and native script validation for ShelleyMA ([#510](https://github.com/txpipe/pallas/issues/510))
|
||||
- **applying:** check non-empty set of inputs and outputs ([#312](https://github.com/txpipe/pallas/issues/312))
|
||||
- **codec:** add utility for untyped CBOR fragments ([#327](https://github.com/txpipe/pallas/issues/327))
|
||||
- **codec:** improve KeyValuePairs ergonomics ([#515](https://github.com/txpipe/pallas/issues/515))
|
||||
- **configs:** add serde for Alonzo genesis file ([#436](https://github.com/txpipe/pallas/issues/436))
|
||||
- **configs:** add Shelley config structs ([#359](https://github.com/txpipe/pallas/issues/359))
|
||||
- **crypto:** Add Key Evolving Signatures (KES)
|
||||
- **crypto:** add extra types and conversions ([#517](https://github.com/txpipe/pallas/issues/517))
|
||||
- **crypto:** add Blake2b hasher for 20-bytes digests ([#416](https://github.com/txpipe/pallas/issues/416))
|
||||
- **hardano:** implement immutable db chunk parsing ([#328](https://github.com/txpipe/pallas/issues/328))
|
||||
- **hardano:** implement search for the immutabledb reader ([#372](https://github.com/txpipe/pallas/issues/372))
|
||||
- **hardano:** enable async for read_blocks_from_point iterator ([#379](https://github.com/txpipe/pallas/issues/379))
|
||||
- **hardano:** add fuzzy block search by slot in Immutable db ([#484](https://github.com/txpipe/pallas/issues/484))
|
||||
- **interop:** add block mapping to u5c ([#261](https://github.com/txpipe/pallas/issues/261))
|
||||
- **interop:** implement u5c pparams mapping ([#504](https://github.com/txpipe/pallas/issues/504))
|
||||
- **interop:** introduce field-mask context for u5c ([#502](https://github.com/txpipe/pallas/issues/502))
|
||||
- **interop:** map u5c Conway structs ([#511](https://github.com/txpipe/pallas/issues/511))
|
||||
- **interop:** re-export utxorpc spec to unify downstream versions ([#448](https://github.com/txpipe/pallas/issues/448))
|
||||
- **interop:** add ledger context for utxorpc mapping logic ([#450](https://github.com/txpipe/pallas/issues/450))
|
||||
- **math:** add support for some math functions ([#483](https://github.com/txpipe/pallas/issues/483))
|
||||
- **network:** add sanchonet compatibility ([#355](https://github.com/txpipe/pallas/issues/355))
|
||||
- **network:** implement GetUTxOByAddress local state query ([#341](https://github.com/txpipe/pallas/issues/341))
|
||||
- **network:** implement stake distribution local state query ([#340](https://github.com/txpipe/pallas/issues/340))
|
||||
- **network:** add cbor decoder for HardForkQuery ([#335](https://github.com/txpipe/pallas/issues/335))
|
||||
- **network:** implement windows named pipes connections ([#279](https://github.com/txpipe/pallas/issues/279))
|
||||
- **network:** implement LocalTxSubmission client ([#289](https://github.com/txpipe/pallas/issues/289))
|
||||
- **network:** add tx submission and tx monitor clients to network facades ([#442](https://github.com/txpipe/pallas/issues/442))
|
||||
- **network:** implement chain sync server side ([#277](https://github.com/txpipe/pallas/issues/277))
|
||||
- **network:** implement `GetChainBlockNo` local state query ([#441](https://github.com/txpipe/pallas/issues/441))
|
||||
- **network:** implement background keep-alive loop ([#427](https://github.com/txpipe/pallas/issues/427))
|
||||
- **network:** scaffold local state query server ([#280](https://github.com/txpipe/pallas/issues/280))
|
||||
- **network:** add server side of blockfetch miniprotocol ([#275](https://github.com/txpipe/pallas/issues/275))
|
||||
- **network:** update n2n handshake versions & add keepalive miniprotocol ([#362](https://github.com/txpipe/pallas/issues/362))
|
||||
- **network:** implement split read / write for NamedPipe bearer ([#371](https://github.com/txpipe/pallas/issues/371))
|
||||
- **network:** implement server side KeepAlive ([#376](https://github.com/txpipe/pallas/issues/376))
|
||||
- **network:** implement `GetGenesisConfig` local state query ([#407](https://github.com/txpipe/pallas/issues/407))
|
||||
- **network:** add an extra ergonomic method for n2c chainsync ([#439](https://github.com/txpipe/pallas/issues/439))
|
||||
- **network:** implement stake snapshot local state query ([#394](https://github.com/txpipe/pallas/issues/394))
|
||||
- **network:** add server-side facades ([#282](https://github.com/txpipe/pallas/issues/282))
|
||||
- **primitives:** derive Eq on relevant structs ([#446](https://github.com/txpipe/pallas/issues/446))
|
||||
- **rolldb:** allow crawl from intersect options ([#404](https://github.com/txpipe/pallas/issues/404))
|
||||
- **rolldb:** allow optionally overlap of WAL over immutable chain ([#419](https://github.com/txpipe/pallas/issues/419))
|
||||
- **rolldb:** add method to check if db is empty ([#352](https://github.com/txpipe/pallas/issues/352))
|
||||
- **traverse:** add network id to genesis values ([#272](https://github.com/txpipe/pallas/issues/272))
|
||||
- **traverse:** prioritize Conway for tx decoding heuristics ([#527](https://github.com/txpipe/pallas/issues/527))
|
||||
- **traverse:** improve protocol update access ([#360](https://github.com/txpipe/pallas/issues/360))
|
||||
- **traverse:** expose tx update field ([#313](https://github.com/txpipe/pallas/issues/313))
|
||||
- **traverse:** introduce MultiEraValue ([#516](https://github.com/txpipe/pallas/issues/516))
|
||||
- **traverse:** improve native asset access ([#259](https://github.com/txpipe/pallas/issues/259))
|
||||
- **traverse:** track original era for tx outputs ([#447](https://github.com/txpipe/pallas/issues/447))
|
||||
- **traverse:** Introduce time helpers ([#234](https://github.com/txpipe/pallas/issues/234))
|
||||
- **traverse:** Expose aux data scripts ([#232](https://github.com/txpipe/pallas/issues/232))
|
||||
- **traverse:** Decode Conway block headers properly ([#466](https://github.com/txpipe/pallas/issues/466))
|
||||
- **txbuilder:** compute ScriptDataHash including edge cases ([#525](https://github.com/txpipe/pallas/issues/525))
|
||||
- **txbuilder:** expose independent output builder ([#522](https://github.com/txpipe/pallas/issues/522))
|
||||
- **upstream:** Make output generic by adapter ([#236](https://github.com/txpipe/pallas/issues/236))
|
||||
- **wallet:** implement HD private keys & encrypted wrapper ([#358](https://github.com/txpipe/pallas/issues/358))
|
||||
|
||||
### Fix
|
||||
- support multiple pools in stake snapshot query ([#396](https://github.com/txpipe/pallas/issues/396))
|
||||
- Make upstream worker easy to connect ([#246](https://github.com/txpipe/pallas/issues/246))
|
||||
- Handle bearer I/O errors ([#247](https://github.com/txpipe/pallas/issues/247))
|
||||
- back-merge v0.18.1 hotfix ([#254](https://github.com/txpipe/pallas/issues/254))
|
||||
- ignore duplicate consumed inputs ([#257](https://github.com/txpipe/pallas/issues/257))
|
||||
- fix builds on windows platform ([#263](https://github.com/txpipe/pallas/issues/263))
|
||||
- use u64 instead of i64 for unit interval and rational numerator ([#268](https://github.com/txpipe/pallas/issues/268))
|
||||
- allow extra bytes when decoding base address ([#420](https://github.com/txpipe/pallas/issues/420))
|
||||
- remove math from root crate ([#541](https://github.com/txpipe/pallas/issues/541))
|
||||
- contemplate legacy tx outputs in utxo by address query ([#386](https://github.com/txpipe/pallas/issues/386))
|
||||
- make rolldb an optional dependency ([#329](https://github.com/txpipe/pallas/issues/329))
|
||||
- exclude large data files blocking crate publish
|
||||
- favor Babbage over Conway for tx decoding ([#389](https://github.com/txpipe/pallas/issues/389))
|
||||
- fix conditional code for windows builds ([#334](https://github.com/txpipe/pallas/issues/334))
|
||||
- relax CBOR decoding of Conway protocol params update ([#473](https://github.com/txpipe/pallas/issues/473))
|
||||
- return witness objects for conway era multieratx ([#346](https://github.com/txpipe/pallas/issues/346))
|
||||
- add txbuilder to unstable feature gate ([#349](https://github.com/txpipe/pallas/issues/349))
|
||||
- correct datum kind for set_datum_hash ([#350](https://github.com/txpipe/pallas/issues/350))
|
||||
- update pallas-applying to work with keepraw native scripts ([#370](https://github.com/txpipe/pallas/issues/370))
|
||||
- add missing READMEs for crate publish
|
||||
- fix unable to build and sign txs ([#345](https://github.com/txpipe/pallas/issues/345))
|
||||
- add missing Cargo metadata required for publish
|
||||
- **addresses:** relax length check during parsing ([#491](https://github.com/txpipe/pallas/issues/491))
|
||||
- **addresses:** check length before decoding ([#377](https://github.com/txpipe/pallas/issues/377))
|
||||
- **applying:** fix tx size calculation ([#443](https://github.com/txpipe/pallas/issues/443))
|
||||
- **applying:** contemplate fee rules for genesis UTxOs ([#332](https://github.com/txpipe/pallas/issues/332))
|
||||
- **applying:** define specific dependency versions
|
||||
- **applying:** use correct cost model for Conway ([#508](https://github.com/txpipe/pallas/issues/508))
|
||||
- **applying:** add missing Conway pparams variant ([#507](https://github.com/txpipe/pallas/issues/507))
|
||||
- **codec:** Fix flat encoding and decoding of arbitrarily size integers ([#378](https://github.com/txpipe/pallas/issues/378))
|
||||
- **configs:** parse directly into rational numbers ([#437](https://github.com/txpipe/pallas/issues/437))
|
||||
- **crypto:** remove modules with non-published deps ([#540](https://github.com/txpipe/pallas/issues/540))
|
||||
- **hardano:** exclude last chunk file during immutable db read ([#454](https://github.com/txpipe/pallas/issues/454))
|
||||
- **hardano:** remove panics from immutable db parsing ([#351](https://github.com/txpipe/pallas/issues/351))
|
||||
- **interop:** use correct input order to match redeemers ([#487](https://github.com/txpipe/pallas/issues/487))
|
||||
- **interop:** map missing u5c redeemers ([#490](https://github.com/txpipe/pallas/issues/490))
|
||||
- **interop:** support Conway pparams mapping to u5c ([#509](https://github.com/txpipe/pallas/issues/509))
|
||||
- **interop:** skip conway certs in u5c ([#498](https://github.com/txpipe/pallas/issues/498))
|
||||
- **interop:** check for spend purpose when matching redeemers ([#486](https://github.com/txpipe/pallas/issues/486))
|
||||
- **math:** update once_cell::Lazy -> std::sync::LazyLock
|
||||
- **math:** fix edge cases of ln and pow
|
||||
- **network:** add missing feature gate flag to tokio dependency ([#333](https://github.com/txpipe/pallas/issues/333))
|
||||
- **network:** set so_linger socket option to match cardano-node ([#369](https://github.com/txpipe/pallas/issues/369))
|
||||
- **network:** relax connect args lifetime ([#367](https://github.com/txpipe/pallas/issues/367))
|
||||
- **network:** demux using one mpsc channel per miniprotocol ([#366](https://github.com/txpipe/pallas/issues/366))
|
||||
- **network:** add tcp_nodelay to bearer ([#365](https://github.com/txpipe/pallas/issues/365))
|
||||
- **network:** use correct client state transition for n2n txsub ([#348](https://github.com/txpipe/pallas/issues/348))
|
||||
- **network:** handle end of list in tx monitor response ([#305](https://github.com/txpipe/pallas/issues/305))
|
||||
- **network:** expose missing members in facades ([#468](https://github.com/txpipe/pallas/issues/468))
|
||||
- **network:** use initiatorOnlyDiffusionMode correctly after spec fix ([#384](https://github.com/txpipe/pallas/issues/384))
|
||||
- **network:** add missing rt feature for tokio
|
||||
- **network:** skip unix listener on windows ([#287](https://github.com/txpipe/pallas/issues/287))
|
||||
- **network:** fix bad codec for tx monitoring messages ([#298](https://github.com/txpipe/pallas/issues/298))
|
||||
- **network:** make facade members public ([#285](https://github.com/txpipe/pallas/issues/285))
|
||||
- **primitives:** expose hidden struct fields in Conway ([#501](https://github.com/txpipe/pallas/issues/501))
|
||||
- **primitives:** skip nonempty invariant check ([#506](https://github.com/txpipe/pallas/issues/506))
|
||||
- **primitives:** handle conway extreme param updates ([#462](https://github.com/txpipe/pallas/issues/462))
|
||||
- **primitives:** contemplate Conway's CBOR `set` tag ([#421](https://github.com/txpipe/pallas/issues/421))
|
||||
- **primitives:** patch remaining Conway issues ([#505](https://github.com/txpipe/pallas/issues/505))
|
||||
- **rolldb:** fix find wal sequence semantics ([#310](https://github.com/txpipe/pallas/issues/310))
|
||||
- **traverse:** fix conway txs not returning reference inputs ([#388](https://github.com/txpipe/pallas/issues/388))
|
||||
- **traverse:** fix well-known genesis values for preprod / preview ([#284](https://github.com/txpipe/pallas/issues/284))
|
||||
- **traverse:** add missing tx field getters for Conway ([#392](https://github.com/txpipe/pallas/issues/392))
|
||||
- **traverse:** use Conway types in places they are meant to ([#499](https://github.com/txpipe/pallas/issues/499))
|
||||
- **txbuilder:** don't include empty redeemers in Conway txs ([#532](https://github.com/txpipe/pallas/issues/532))
|
||||
- **txbuilder:** sign transactions using Conway era ([#531](https://github.com/txpipe/pallas/issues/531))
|
||||
- **upstream:** Use sync read for chunk dequeue ([#239](https://github.com/txpipe/pallas/issues/239))
|
||||
- **utxorpc:** map missing struct values ([#387](https://github.com/txpipe/pallas/issues/387))
|
||||
|
||||
### Refactor
|
||||
- support roundtrip encoding for script data hash components ([#526](https://github.com/txpipe/pallas/issues/526))
|
||||
- Re-organize and clean-up pallas-primitives ([#523](https://github.com/txpipe/pallas/issues/523))
|
||||
- Improve network module naming ([#245](https://github.com/txpipe/pallas/issues/245))
|
||||
- Merge multiplexer & miniprotocols into single crate ([#244](https://github.com/txpipe/pallas/issues/244))
|
||||
- **applying:** unify approach for protocol params access ([#432](https://github.com/txpipe/pallas/issues/432))
|
||||
- **interop:** use stateful mapper for u5 ([#460](https://github.com/txpipe/pallas/issues/460))
|
||||
- **interop:** use batching for utxorpc ledger interface ([#472](https://github.com/txpipe/pallas/issues/472))
|
||||
- **network:** split bearer into read/write ([#364](https://github.com/txpipe/pallas/issues/364))
|
||||
- **network:** simplify local state mini-protocol implementation ([#326](https://github.com/txpipe/pallas/issues/326))
|
||||
- **network:** don't treat rejected txs as submit protocol errors ([#306](https://github.com/txpipe/pallas/issues/306))
|
||||
- **traverse:** Unify mint and output asset artifacts ([#231](https://github.com/txpipe/pallas/issues/231))
|
||||
|
||||
### Release
|
||||
- v0.21.0 ([#375](https://github.com/txpipe/pallas/issues/375))
|
||||
|
||||
### Test
|
||||
- **hardano:** contemplate skip of last chunk in immutable read ([#457](https://github.com/txpipe/pallas/issues/457))
|
||||
- **hardano:** fix failing tests on CI context ([#429](https://github.com/txpipe/pallas/issues/429))
|
||||
- **hardano:** discover snapshots by inspecting test_data dir ([#428](https://github.com/txpipe/pallas/issues/428))
|
||||
|
||||
### BREAKING CHANGE
|
||||
|
||||
the `validate` fn signature has changed to support these changes
|
||||
|
||||
---------
|
||||
|
||||
The signature for Bearer.accept_tcp now returns the bearer, and the address that connected.
|
||||
|
||||
This can, for example, be used to implement allow and deny lists for accepting or rejecting incoming connections.
|
||||
|
||||
* Return the remote address from accept_unix
|
||||
|
||||
* cargo fmt
|
||||
|
||||
* Fix comment formatting
|
||||
|
||||
|
||||
<a name="v0.18.3"></a>
|
||||
## [v0.18.3] - 2024-10-23
|
||||
### Fix
|
||||
- update n2n version table ([#530](https://github.com/txpipe/pallas/issues/530))
|
||||
- use u64 instead of i64 for unit interval and rational numerator ([#268](https://github.com/txpipe/pallas/issues/268))
|
||||
- **primitives:** Handle U8 and U16 in value serialization
|
||||
|
||||
|
||||
<a name="v0.30.2"></a>
|
||||
## [v0.30.2] - 2024-09-08
|
||||
### Feat
|
||||
- **interop:** map u5c Conway structs ([#511](https://github.com/txpipe/pallas/issues/511))
|
||||
|
||||
|
||||
<a name="v0.30.1"></a>
|
||||
## [v0.30.1] - 2024-08-25
|
||||
### Fix
|
||||
|
|
@ -962,11 +1267,11 @@ handshake, chainsync, localstate and blockfetch mini-protocols changed the API s
|
|||
- **miniprotocols:** Use pure functions for state machines ([#84](https://github.com/txpipe/pallas/issues/84))
|
||||
|
||||
|
||||
<a name="pallas-miniprotocols@0.7.1"></a>
|
||||
## [pallas-miniprotocols@0.7.1] - 2022-03-16
|
||||
|
||||
<a name="pallas-codec@0.7.1"></a>
|
||||
## [pallas-codec@0.7.1] - 2022-03-16
|
||||
|
||||
<a name="pallas-miniprotocols@0.7.1"></a>
|
||||
## [pallas-miniprotocols@0.7.1] - 2022-03-16
|
||||
### Fix
|
||||
- **miniprotocols:** Handle regression related to multi-msg payloads ([#76](https://github.com/txpipe/pallas/issues/76))
|
||||
|
||||
|
|
@ -1251,7 +1556,11 @@ handshake, chainsync, localstate and blockfetch mini-protocols changed the API s
|
|||
- apply fmt to entire workspace
|
||||
|
||||
|
||||
[Unreleased]: https://github.com/txpipe/pallas/compare/v0.30.1...HEAD
|
||||
[Unreleased]: https://github.com/txpipe/pallas/compare/v0.32.0...HEAD
|
||||
[v0.32.0]: https://github.com/txpipe/pallas/compare/v0.31.0...v0.32.0
|
||||
[v0.31.0]: https://github.com/txpipe/pallas/compare/v0.18.3...v0.31.0
|
||||
[v0.18.3]: https://github.com/txpipe/pallas/compare/v0.30.2...v0.18.3
|
||||
[v0.30.2]: https://github.com/txpipe/pallas/compare/v0.30.1...v0.30.2
|
||||
[v0.30.1]: https://github.com/txpipe/pallas/compare/v0.30.0...v0.30.1
|
||||
[v0.30.0]: https://github.com/txpipe/pallas/compare/v0.29.0...v0.30.0
|
||||
[v0.29.0]: https://github.com/txpipe/pallas/compare/v0.28.0...v0.29.0
|
||||
|
|
@ -1306,9 +1615,9 @@ handshake, chainsync, localstate and blockfetch mini-protocols changed the API s
|
|||
[v0.9.0-alpha.0]: https://github.com/txpipe/pallas/compare/v0.8.0...v0.9.0-alpha.0
|
||||
[v0.8.0]: https://github.com/txpipe/pallas/compare/v0.8.0-alpha.1...v0.8.0
|
||||
[v0.8.0-alpha.1]: https://github.com/txpipe/pallas/compare/v0.8.0-alpha.0...v0.8.0-alpha.1
|
||||
[v0.8.0-alpha.0]: https://github.com/txpipe/pallas/compare/pallas-miniprotocols@0.7.1...v0.8.0-alpha.0
|
||||
[pallas-miniprotocols@0.7.1]: https://github.com/txpipe/pallas/compare/pallas-codec@0.7.1...pallas-miniprotocols@0.7.1
|
||||
[pallas-codec@0.7.1]: https://github.com/txpipe/pallas/compare/v0.7.0...pallas-codec@0.7.1
|
||||
[v0.8.0-alpha.0]: https://github.com/txpipe/pallas/compare/pallas-codec@0.7.1...v0.8.0-alpha.0
|
||||
[pallas-codec@0.7.1]: https://github.com/txpipe/pallas/compare/pallas-miniprotocols@0.7.1...pallas-codec@0.7.1
|
||||
[pallas-miniprotocols@0.7.1]: https://github.com/txpipe/pallas/compare/v0.7.0...pallas-miniprotocols@0.7.1
|
||||
[v0.7.0]: https://github.com/txpipe/pallas/compare/v0.7.0-alpha.1...v0.7.0
|
||||
[v0.7.0-alpha.1]: https://github.com/txpipe/pallas/compare/v0.7.0-alpha.0...v0.7.0-alpha.1
|
||||
[v0.7.0-alpha.0]: https://github.com/txpipe/pallas/compare/pallas-primitives@0.6.4...v0.7.0-alpha.0
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ use pallas::{
|
|||
facades::NodeClient,
|
||||
miniprotocols::{
|
||||
chainsync,
|
||||
localstate::queries_v16::{self, Addr, Addrs, StakeAddr, TransactionInput},
|
||||
localstate::queries_v16::{self, Addr, Addrs, Pools, StakeAddr, TransactionInput},
|
||||
Point, PRE_PRODUCTION_MAGIC,
|
||||
},
|
||||
},
|
||||
|
|
@ -66,6 +66,19 @@ async fn do_localstate_query(client: &mut NodeClient) {
|
|||
.unwrap();
|
||||
info!("result: {:?}", result);
|
||||
|
||||
let pool_id1 = "fdb5834ba06eb4baafd50550d2dc9b3742d2c52cc5ee65bf8673823b";
|
||||
let pool_id1 = Bytes::from_str(pool_id1).unwrap();
|
||||
let pool_id2 = "1e3105f23f2ac91b3fb4c35fa4fe301421028e356e114944e902005b";
|
||||
let pool_id2 = Bytes::from_str(pool_id2).unwrap();
|
||||
let mut pools: Pools = BTreeSet::new();
|
||||
pools.insert(pool_id1);
|
||||
pools.insert(pool_id2);
|
||||
|
||||
let result = queries_v16::get_stake_pool_params(client, era, pools.into())
|
||||
.await
|
||||
.unwrap();
|
||||
info!("result: {:?}", result);
|
||||
|
||||
let result = queries_v16::get_block_epoch_number(client, era)
|
||||
.await
|
||||
.unwrap();
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
[package]
|
||||
name = "pallas-addresses"
|
||||
description = "Ergonomic library to work with different Cardano addresses"
|
||||
version = "0.31.0"
|
||||
version = "0.32.1"
|
||||
edition = "2021"
|
||||
repository = "https://github.com/txpipe/pallas"
|
||||
homepage = "https://github.com/txpipe/pallas"
|
||||
|
|
@ -12,8 +12,8 @@ authors = ["Santiago Carmuega <santiago@carmuega.me>"]
|
|||
|
||||
[dependencies]
|
||||
hex = "0.4.3"
|
||||
pallas-crypto = { version = "=0.31.0", path = "../pallas-crypto" }
|
||||
pallas-codec = { version = "=0.31.0", path = "../pallas-codec" }
|
||||
pallas-crypto = { version = "=0.32.1", path = "../pallas-crypto" }
|
||||
pallas-codec = { version = "=0.32.1", path = "../pallas-codec" }
|
||||
base58 = "0.2.0"
|
||||
bech32 = "0.9.1"
|
||||
thiserror = "1.0"
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
[package]
|
||||
name = "pallas-applying"
|
||||
description = "Logic for validating and applying new blocks and txs to the chain state"
|
||||
version = "0.31.0"
|
||||
version = "0.32.1"
|
||||
edition = "2021"
|
||||
repository = "https://github.com/MaicoLeberle/pallas"
|
||||
homepage = "https://github.com/MaicoLeberle/pallas"
|
||||
|
|
@ -13,13 +13,14 @@ authors = ["Maico Leberle <maico.leberle@gmail.com>"]
|
|||
doctest = false
|
||||
|
||||
[dependencies]
|
||||
pallas-addresses = { version = "=0.31.0", path = "../pallas-addresses" }
|
||||
pallas-codec = { version = "=0.31.0", path = "../pallas-codec" }
|
||||
pallas-crypto = { version = "=0.31.0", path = "../pallas-crypto" }
|
||||
pallas-primitives = { version = "=0.31.0", path = "../pallas-primitives" }
|
||||
pallas-traverse = { version = "=0.31.0", path = "../pallas-traverse" }
|
||||
pallas-addresses = { version = "=0.32.1", path = "../pallas-addresses" }
|
||||
pallas-codec = { version = "=0.32.1", path = "../pallas-codec" }
|
||||
pallas-crypto = { version = "=0.32.1", path = "../pallas-crypto" }
|
||||
pallas-primitives = { version = "=0.32.1", path = "../pallas-primitives" }
|
||||
pallas-traverse = { version = "=0.32.1", path = "../pallas-traverse" }
|
||||
rand = "0.8"
|
||||
hex = "0.4"
|
||||
chrono = "0.4.39"
|
||||
|
||||
[dev-dependencies]
|
||||
hex = "0.4"
|
||||
|
|
|
|||
|
|
@ -21,6 +21,28 @@ pub enum MultiEraProtocolParameters {
|
|||
}
|
||||
|
||||
impl MultiEraProtocolParameters {
|
||||
pub fn system_start(&self) -> chrono::DateTime<chrono::FixedOffset> {
|
||||
match self {
|
||||
MultiEraProtocolParameters::Byron(ByronProtParams { start_time, .. }) => {
|
||||
chrono::DateTime::from_timestamp(*start_time as i64, 0)
|
||||
.expect("valid timestamp")
|
||||
.fixed_offset()
|
||||
}
|
||||
MultiEraProtocolParameters::Shelley(ShelleyProtParams { system_start, .. }) => {
|
||||
*system_start
|
||||
}
|
||||
MultiEraProtocolParameters::Alonzo(AlonzoProtParams { system_start, .. }) => {
|
||||
*system_start
|
||||
}
|
||||
MultiEraProtocolParameters::Babbage(BabbageProtParams { system_start, .. }) => {
|
||||
*system_start
|
||||
}
|
||||
MultiEraProtocolParameters::Conway(ConwayProtParams { system_start, .. }) => {
|
||||
*system_start
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn protocol_version(&self) -> usize {
|
||||
match self {
|
||||
MultiEraProtocolParameters::Byron(ByronProtParams {
|
||||
|
|
@ -45,11 +67,56 @@ impl MultiEraProtocolParameters {
|
|||
}) => *x as usize,
|
||||
}
|
||||
}
|
||||
|
||||
const FIVE_DAYS_IN_SECONDS: u64 = 5 * 24 * 60 * 60;
|
||||
|
||||
pub fn epoch_length(&self) -> u64 {
|
||||
match self {
|
||||
MultiEraProtocolParameters::Byron(ByronProtParams { slot_duration, .. }) => {
|
||||
// TODO: research if Byron epoch length is actually hardcoded or if you can get
|
||||
// it from genesis files somehow
|
||||
Self::FIVE_DAYS_IN_SECONDS / (*slot_duration / 1000)
|
||||
}
|
||||
MultiEraProtocolParameters::Shelley(ShelleyProtParams { epoch_length, .. }) => {
|
||||
*epoch_length
|
||||
}
|
||||
MultiEraProtocolParameters::Alonzo(AlonzoProtParams { epoch_length, .. }) => {
|
||||
*epoch_length
|
||||
}
|
||||
MultiEraProtocolParameters::Babbage(BabbageProtParams { epoch_length, .. }) => {
|
||||
*epoch_length
|
||||
}
|
||||
MultiEraProtocolParameters::Conway(ConwayProtParams { epoch_length, .. }) => {
|
||||
*epoch_length
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn slot_length(&self) -> u64 {
|
||||
match self {
|
||||
MultiEraProtocolParameters::Byron(ByronProtParams { slot_duration, .. }) => {
|
||||
*slot_duration / 1000
|
||||
}
|
||||
MultiEraProtocolParameters::Shelley(ShelleyProtParams { slot_length, .. }) => {
|
||||
*slot_length
|
||||
}
|
||||
MultiEraProtocolParameters::Alonzo(AlonzoProtParams { slot_length, .. }) => {
|
||||
*slot_length
|
||||
}
|
||||
MultiEraProtocolParameters::Babbage(BabbageProtParams { slot_length, .. }) => {
|
||||
*slot_length
|
||||
}
|
||||
MultiEraProtocolParameters::Conway(ConwayProtParams { slot_length, .. }) => {
|
||||
*slot_length
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct ByronProtParams {
|
||||
pub block_version: (u16, u16, u8),
|
||||
pub start_time: u64,
|
||||
pub script_version: u16,
|
||||
pub slot_duration: u64,
|
||||
pub max_block_size: u64,
|
||||
|
|
@ -69,6 +136,9 @@ pub struct ByronProtParams {
|
|||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct ShelleyProtParams {
|
||||
pub system_start: chrono::DateTime<chrono::FixedOffset>,
|
||||
pub epoch_length: u64,
|
||||
pub slot_length: u64,
|
||||
pub minfee_a: u32,
|
||||
pub minfee_b: u32,
|
||||
pub max_block_body_size: u32,
|
||||
|
|
@ -90,6 +160,9 @@ pub struct ShelleyProtParams {
|
|||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct AlonzoProtParams {
|
||||
pub system_start: chrono::DateTime<chrono::FixedOffset>,
|
||||
pub epoch_length: u64,
|
||||
pub slot_length: u64,
|
||||
pub minfee_a: u32,
|
||||
pub minfee_b: u32,
|
||||
pub max_block_body_size: u32,
|
||||
|
|
@ -118,6 +191,9 @@ pub struct AlonzoProtParams {
|
|||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct BabbageProtParams {
|
||||
pub system_start: chrono::DateTime<chrono::FixedOffset>,
|
||||
pub epoch_length: u64,
|
||||
pub slot_length: u64,
|
||||
pub minfee_a: u32,
|
||||
pub minfee_b: u32,
|
||||
pub max_block_body_size: u32,
|
||||
|
|
@ -146,6 +222,9 @@ pub struct BabbageProtParams {
|
|||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct ConwayProtParams {
|
||||
pub system_start: chrono::DateTime<chrono::FixedOffset>,
|
||||
pub epoch_length: u64,
|
||||
pub slot_length: u64,
|
||||
pub minfee_a: u32,
|
||||
pub minfee_b: u32,
|
||||
pub max_block_body_size: u32,
|
||||
|
|
|
|||
|
|
@ -2558,6 +2558,9 @@ mod alonzo_tests {
|
|||
|
||||
fn mk_params_epoch_334() -> AlonzoProtParams {
|
||||
AlonzoProtParams {
|
||||
system_start: chrono::DateTime::parse_from_rfc3339("2017-09-23T21:44:51Z").unwrap(),
|
||||
epoch_length: 432000,
|
||||
slot_length: 1,
|
||||
minfee_a: 44,
|
||||
minfee_b: 155381,
|
||||
max_block_body_size: 65536,
|
||||
|
|
@ -2633,6 +2636,9 @@ mod alonzo_tests {
|
|||
|
||||
fn mk_params_epoch_300() -> AlonzoProtParams {
|
||||
AlonzoProtParams {
|
||||
system_start: chrono::DateTime::parse_from_rfc3339("2017-09-23T21:44:51Z").unwrap(),
|
||||
epoch_length: 432000,
|
||||
slot_length: 1,
|
||||
minfee_a: 44,
|
||||
minfee_b: 155381,
|
||||
max_block_body_size: 81920,
|
||||
|
|
|
|||
|
|
@ -2369,6 +2369,9 @@ mod babbage_tests {
|
|||
|
||||
fn mk_mainnet_params_epoch_365() -> BabbageProtParams {
|
||||
BabbageProtParams {
|
||||
system_start: chrono::DateTime::parse_from_rfc3339("2017-09-23T21:44:51Z").unwrap(),
|
||||
epoch_length: 432000,
|
||||
slot_length: 1,
|
||||
minfee_a: 44,
|
||||
minfee_b: 155381,
|
||||
max_block_body_size: 90112,
|
||||
|
|
@ -2445,6 +2448,9 @@ mod babbage_tests {
|
|||
|
||||
fn mk_mainnet_params_epoch_380() -> BabbageProtParams {
|
||||
BabbageProtParams {
|
||||
system_start: chrono::DateTime::parse_from_rfc3339("2022-10-25T00:00:00Z").unwrap(),
|
||||
epoch_length: 432000,
|
||||
slot_length: 1,
|
||||
minfee_a: 44,
|
||||
minfee_b: 155381,
|
||||
max_block_body_size: 90112,
|
||||
|
|
@ -2697,6 +2703,9 @@ mod babbage_tests {
|
|||
|
||||
fn mk_preview_params_epoch_30() -> BabbageProtParams {
|
||||
BabbageProtParams {
|
||||
system_start: chrono::DateTime::parse_from_rfc3339("2022-10-25T00:00:00Z").unwrap(),
|
||||
epoch_length: 432000,
|
||||
slot_length: 1,
|
||||
minfee_a: 44,
|
||||
minfee_b: 155381,
|
||||
max_block_body_size: 90112,
|
||||
|
|
@ -2787,6 +2796,9 @@ mod babbage_tests {
|
|||
|
||||
fn mk_preprod_params_epoch_100() -> BabbageProtParams {
|
||||
BabbageProtParams {
|
||||
system_start: chrono::DateTime::parse_from_rfc3339("2017-09-23T21:44:51Z").unwrap(),
|
||||
epoch_length: 432000,
|
||||
slot_length: 1,
|
||||
minfee_a: 44,
|
||||
minfee_b: 155381,
|
||||
max_block_body_size: 90112,
|
||||
|
|
|
|||
|
|
@ -24,6 +24,45 @@ use std::vec::Vec;
|
|||
mod byron_tests {
|
||||
use super::*;
|
||||
|
||||
macro_rules! hardcoded_environment_values {
|
||||
($($key:ident = $value:expr),*) => {
|
||||
{
|
||||
#[allow(unused_mut)]
|
||||
let mut pparams = ByronProtParams {
|
||||
block_version: (1, 0, 0),
|
||||
start_time: 1506203091,
|
||||
script_version: 0,
|
||||
slot_duration: 20000,
|
||||
max_block_size: 2000000,
|
||||
max_header_size: 2000000,
|
||||
max_tx_size: 4096,
|
||||
max_proposal_size: 700,
|
||||
mpc_thd: 20000000000000,
|
||||
heavy_del_thd: 300000000000,
|
||||
update_vote_thd: 1000000000000,
|
||||
update_proposal_thd: 100000000000000,
|
||||
update_implicit: 10000,
|
||||
soft_fork_rule: (900000000000000, 600000000000000, 50000000000000),
|
||||
summand: 155381,
|
||||
multiplier: 44,
|
||||
unlock_stake_epoch: 18446744073709551615,
|
||||
};
|
||||
|
||||
$(
|
||||
pparams.$key = $value;
|
||||
)*
|
||||
|
||||
Environment {
|
||||
prot_params: MultiEraProtocolParameters::Byron(pparams),
|
||||
prot_magic: 764824073,
|
||||
block_slot: 6341,
|
||||
network_id: 1,
|
||||
acnt: None,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
// Transaction hash:
|
||||
// a9e4413a5fb61a7a43c7df006ffcaaf3f2ffc9541f54757023968c5a8f8294fd
|
||||
|
|
@ -38,30 +77,7 @@ mod byron_tests {
|
|||
19999000000,
|
||||
)],
|
||||
);
|
||||
let env: Environment = Environment {
|
||||
prot_params: MultiEraProtocolParameters::Byron(ByronProtParams {
|
||||
block_version: (1, 0, 0),
|
||||
script_version: 0,
|
||||
slot_duration: 20000,
|
||||
max_block_size: 2000000,
|
||||
max_header_size: 2000000,
|
||||
max_tx_size: 4096,
|
||||
max_proposal_size: 700,
|
||||
mpc_thd: 20000000000000,
|
||||
heavy_del_thd: 300000000000,
|
||||
update_vote_thd: 1000000000000,
|
||||
update_proposal_thd: 100000000000000,
|
||||
update_implicit: 10000,
|
||||
soft_fork_rule: (900000000000000, 600000000000000, 50000000000000),
|
||||
summand: 155381,
|
||||
multiplier: 44,
|
||||
unlock_stake_epoch: 18446744073709551615,
|
||||
}),
|
||||
prot_magic: 764824073,
|
||||
block_slot: 6341,
|
||||
network_id: 1,
|
||||
acnt: None,
|
||||
};
|
||||
let env: Environment = hardcoded_environment_values!();
|
||||
let mut cert_state: CertState = CertState::default();
|
||||
match validate_txs(&[metx], &env, &utxos, &mut cert_state) {
|
||||
Ok(()) => (),
|
||||
|
|
@ -83,30 +99,7 @@ mod byron_tests {
|
|||
19999000000,
|
||||
)],
|
||||
);
|
||||
let env: Environment = Environment {
|
||||
prot_params: MultiEraProtocolParameters::Byron(ByronProtParams {
|
||||
block_version: (1, 0, 0),
|
||||
script_version: 0,
|
||||
slot_duration: 20000,
|
||||
max_block_size: 2000000,
|
||||
max_header_size: 2000000,
|
||||
max_tx_size: 4096,
|
||||
max_proposal_size: 700,
|
||||
mpc_thd: 20000000000000,
|
||||
heavy_del_thd: 300000000000,
|
||||
update_vote_thd: 1000000000000,
|
||||
update_proposal_thd: 100000000000000,
|
||||
update_implicit: 10000,
|
||||
soft_fork_rule: (900000000000000, 600000000000000, 50000000000000),
|
||||
summand: 155381,
|
||||
multiplier: 44,
|
||||
unlock_stake_epoch: 18446744073709551615,
|
||||
}),
|
||||
prot_magic: 764824073,
|
||||
block_slot: 3241381,
|
||||
network_id: 1,
|
||||
acnt: None,
|
||||
};
|
||||
let env: Environment = hardcoded_environment_values!();
|
||||
let mut cert_state: CertState = CertState::default();
|
||||
match validate_txs(&[metx], &env, &utxos, &mut cert_state) {
|
||||
Ok(()) => (),
|
||||
|
|
@ -136,30 +129,7 @@ mod byron_tests {
|
|||
};
|
||||
mtxp.transaction = Decode::decode(&mut Decoder::new(tx_buf.as_slice()), &mut ()).unwrap();
|
||||
let metx: MultiEraTx = MultiEraTx::from_byron(&mtxp);
|
||||
let env: Environment = Environment {
|
||||
prot_params: MultiEraProtocolParameters::Byron(ByronProtParams {
|
||||
block_version: (1, 0, 0),
|
||||
script_version: 0,
|
||||
slot_duration: 20000,
|
||||
max_block_size: 2000000,
|
||||
max_header_size: 2000000,
|
||||
max_tx_size: 4096,
|
||||
max_proposal_size: 700,
|
||||
mpc_thd: 20000000000000,
|
||||
heavy_del_thd: 300000000000,
|
||||
update_vote_thd: 1000000000000,
|
||||
update_proposal_thd: 100000000000000,
|
||||
update_implicit: 10000,
|
||||
soft_fork_rule: (900000000000000, 600000000000000, 50000000000000),
|
||||
summand: 155381,
|
||||
multiplier: 44,
|
||||
unlock_stake_epoch: 18446744073709551615,
|
||||
}),
|
||||
prot_magic: 764824073,
|
||||
block_slot: 3241381,
|
||||
network_id: 1,
|
||||
acnt: None,
|
||||
};
|
||||
let env: Environment = hardcoded_environment_values!();
|
||||
let mut cert_state: CertState = CertState::default();
|
||||
match validate_txs(&[metx], &env, &utxos, &mut cert_state) {
|
||||
Ok(()) => panic!("Inputs set should not be empty"),
|
||||
|
|
@ -192,30 +162,7 @@ mod byron_tests {
|
|||
19999000000,
|
||||
)],
|
||||
);
|
||||
let env: Environment = Environment {
|
||||
prot_params: MultiEraProtocolParameters::Byron(ByronProtParams {
|
||||
block_version: (1, 0, 0),
|
||||
script_version: 0,
|
||||
slot_duration: 20000,
|
||||
max_block_size: 2000000,
|
||||
max_header_size: 2000000,
|
||||
max_tx_size: 4096,
|
||||
max_proposal_size: 700,
|
||||
mpc_thd: 20000000000000,
|
||||
heavy_del_thd: 300000000000,
|
||||
update_vote_thd: 1000000000000,
|
||||
update_proposal_thd: 100000000000000,
|
||||
update_implicit: 10000,
|
||||
soft_fork_rule: (900000000000000, 600000000000000, 50000000000000),
|
||||
summand: 155381,
|
||||
multiplier: 44,
|
||||
unlock_stake_epoch: 18446744073709551615,
|
||||
}),
|
||||
prot_magic: 764824073,
|
||||
block_slot: 3241381,
|
||||
network_id: 1,
|
||||
acnt: None,
|
||||
};
|
||||
let env: Environment = hardcoded_environment_values!();
|
||||
let mut cert_state: CertState = CertState::default();
|
||||
match validate_txs(&[metx], &env, &utxos, &mut cert_state) {
|
||||
Ok(()) => panic!("Outputs set should not be empty"),
|
||||
|
|
@ -233,30 +180,7 @@ mod byron_tests {
|
|||
let mtxp: MintedTxPayload = minted_tx_payload_from_cbor(&cbor_bytes);
|
||||
let metx: MultiEraTx = MultiEraTx::from_byron(&mtxp);
|
||||
let utxos: UTxOs = UTxOs::new();
|
||||
let env: Environment = Environment {
|
||||
prot_params: MultiEraProtocolParameters::Byron(ByronProtParams {
|
||||
block_version: (1, 0, 0),
|
||||
script_version: 0,
|
||||
slot_duration: 20000,
|
||||
max_block_size: 2000000,
|
||||
max_header_size: 2000000,
|
||||
max_tx_size: 4096,
|
||||
max_proposal_size: 700,
|
||||
mpc_thd: 20000000000000,
|
||||
heavy_del_thd: 300000000000,
|
||||
update_vote_thd: 1000000000000,
|
||||
update_proposal_thd: 100000000000000,
|
||||
update_implicit: 10000,
|
||||
soft_fork_rule: (900000000000000, 600000000000000, 50000000000000),
|
||||
summand: 155381,
|
||||
multiplier: 44,
|
||||
unlock_stake_epoch: 18446744073709551615,
|
||||
}),
|
||||
prot_magic: 764824073,
|
||||
block_slot: 3241381,
|
||||
network_id: 1,
|
||||
acnt: None,
|
||||
};
|
||||
let env: Environment = hardcoded_environment_values!();
|
||||
let mut cert_state: CertState = CertState::default();
|
||||
match validate_txs(&[metx], &env, &utxos, &mut cert_state) {
|
||||
Ok(()) => panic!("All inputs must be within the UTxO set"),
|
||||
|
|
@ -295,30 +219,7 @@ mod byron_tests {
|
|||
19999000000,
|
||||
)],
|
||||
);
|
||||
let env: Environment = Environment {
|
||||
prot_params: MultiEraProtocolParameters::Byron(ByronProtParams {
|
||||
block_version: (1, 0, 0),
|
||||
script_version: 0,
|
||||
slot_duration: 20000,
|
||||
max_block_size: 2000000,
|
||||
max_header_size: 2000000,
|
||||
max_tx_size: 4096,
|
||||
max_proposal_size: 700,
|
||||
mpc_thd: 20000000000000,
|
||||
heavy_del_thd: 300000000000,
|
||||
update_vote_thd: 1000000000000,
|
||||
update_proposal_thd: 100000000000000,
|
||||
update_implicit: 10000,
|
||||
soft_fork_rule: (900000000000000, 600000000000000, 50000000000000),
|
||||
summand: 155381,
|
||||
multiplier: 44,
|
||||
unlock_stake_epoch: 18446744073709551615,
|
||||
}),
|
||||
prot_magic: 764824073,
|
||||
block_slot: 3241381,
|
||||
network_id: 1,
|
||||
acnt: None,
|
||||
};
|
||||
let env: Environment = hardcoded_environment_values!();
|
||||
let mut cert_state: CertState = CertState::default();
|
||||
match validate_txs(&[metx], &env, &utxos, &mut cert_state) {
|
||||
Ok(()) => panic!("All outputs must contain lovelace"),
|
||||
|
|
@ -342,30 +243,8 @@ mod byron_tests {
|
|||
19999000000,
|
||||
)],
|
||||
);
|
||||
let env: Environment = Environment {
|
||||
prot_params: MultiEraProtocolParameters::Byron(ByronProtParams {
|
||||
block_version: (1, 0, 0),
|
||||
script_version: 0,
|
||||
slot_duration: 20000,
|
||||
max_block_size: 2000000,
|
||||
max_header_size: 2000000,
|
||||
max_tx_size: 4096,
|
||||
max_proposal_size: 700,
|
||||
mpc_thd: 20000000000000,
|
||||
heavy_del_thd: 300000000000,
|
||||
update_vote_thd: 1000000000000,
|
||||
update_proposal_thd: 100000000000000,
|
||||
update_implicit: 10000,
|
||||
soft_fork_rule: (900000000000000, 600000000000000, 50000000000000),
|
||||
summand: 1000,
|
||||
multiplier: 1000,
|
||||
unlock_stake_epoch: 18446744073709551615,
|
||||
}),
|
||||
prot_magic: 764824073,
|
||||
block_slot: 3241381,
|
||||
network_id: 1,
|
||||
acnt: None,
|
||||
};
|
||||
|
||||
let env: Environment = hardcoded_environment_values!(summand = 1000, multiplier = 1000);
|
||||
let mut cert_state: CertState = CertState::default();
|
||||
match validate_txs(&[metx], &env, &utxos, &mut cert_state) {
|
||||
Ok(()) => panic!("Fees should not be below minimum"),
|
||||
|
|
@ -389,30 +268,7 @@ mod byron_tests {
|
|||
19999000000,
|
||||
)],
|
||||
);
|
||||
let env: Environment = Environment {
|
||||
prot_params: MultiEraProtocolParameters::Byron(ByronProtParams {
|
||||
block_version: (1, 0, 0),
|
||||
script_version: 0,
|
||||
slot_duration: 20000,
|
||||
max_block_size: 2000000,
|
||||
max_header_size: 2000000,
|
||||
max_tx_size: 0,
|
||||
max_proposal_size: 700,
|
||||
mpc_thd: 20000000000000,
|
||||
heavy_del_thd: 300000000000,
|
||||
update_vote_thd: 1000000000000,
|
||||
update_proposal_thd: 100000000000000,
|
||||
update_implicit: 10000,
|
||||
soft_fork_rule: (900000000000000, 600000000000000, 50000000000000),
|
||||
summand: 155381,
|
||||
multiplier: 44,
|
||||
unlock_stake_epoch: 18446744073709551615,
|
||||
}),
|
||||
prot_magic: 764824073,
|
||||
block_slot: 3241381,
|
||||
network_id: 1,
|
||||
acnt: None,
|
||||
};
|
||||
let env: Environment = hardcoded_environment_values!(max_tx_size = 0);
|
||||
let mut cert_state: CertState = CertState::default();
|
||||
match validate_txs(&[metx], &env, &utxos, &mut cert_state) {
|
||||
Ok(()) => panic!("Transaction size cannot exceed protocol limit"),
|
||||
|
|
@ -444,30 +300,7 @@ mod byron_tests {
|
|||
19999000000,
|
||||
)],
|
||||
);
|
||||
let env: Environment = Environment {
|
||||
prot_params: MultiEraProtocolParameters::Byron(ByronProtParams {
|
||||
block_version: (1, 0, 0),
|
||||
script_version: 0,
|
||||
slot_duration: 20000,
|
||||
max_block_size: 2000000,
|
||||
max_header_size: 2000000,
|
||||
max_tx_size: 4096,
|
||||
max_proposal_size: 700,
|
||||
mpc_thd: 20000000000000,
|
||||
heavy_del_thd: 300000000000,
|
||||
update_vote_thd: 1000000000000,
|
||||
update_proposal_thd: 100000000000000,
|
||||
update_implicit: 10000,
|
||||
soft_fork_rule: (900000000000000, 600000000000000, 50000000000000),
|
||||
summand: 155381,
|
||||
multiplier: 44,
|
||||
unlock_stake_epoch: 18446744073709551615,
|
||||
}),
|
||||
prot_magic: 764824073,
|
||||
block_slot: 3241381,
|
||||
network_id: 1,
|
||||
acnt: None,
|
||||
};
|
||||
let env: Environment = hardcoded_environment_values!();
|
||||
let mut cert_state: CertState = CertState::default();
|
||||
match validate_txs(&[metx], &env, &utxos, &mut cert_state) {
|
||||
Ok(()) => panic!("All inputs must have a witness signature"),
|
||||
|
|
@ -508,30 +341,7 @@ mod byron_tests {
|
|||
19999000000,
|
||||
)],
|
||||
);
|
||||
let env: Environment = Environment {
|
||||
prot_params: MultiEraProtocolParameters::Byron(ByronProtParams {
|
||||
block_version: (1, 0, 0),
|
||||
script_version: 0,
|
||||
slot_duration: 20000,
|
||||
max_block_size: 2000000,
|
||||
max_header_size: 2000000,
|
||||
max_tx_size: 4096,
|
||||
max_proposal_size: 700,
|
||||
mpc_thd: 20000000000000,
|
||||
heavy_del_thd: 300000000000,
|
||||
update_vote_thd: 1000000000000,
|
||||
update_proposal_thd: 100000000000000,
|
||||
update_implicit: 10000,
|
||||
soft_fork_rule: (900000000000000, 600000000000000, 50000000000000),
|
||||
summand: 155381,
|
||||
multiplier: 44,
|
||||
unlock_stake_epoch: 18446744073709551615,
|
||||
}),
|
||||
prot_magic: 764824073,
|
||||
block_slot: 3241381,
|
||||
network_id: 1,
|
||||
acnt: None,
|
||||
};
|
||||
let env: Environment = hardcoded_environment_values!();
|
||||
let mut cert_state: CertState = CertState::default();
|
||||
match validate_txs(&[metx], &env, &utxos, &mut cert_state) {
|
||||
Ok(()) => panic!("Witness signature should verify the transaction"),
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -1,7 +1,7 @@
|
|||
[package]
|
||||
name = "pallas-codec"
|
||||
description = "Pallas common CBOR encoding interface and utilities"
|
||||
version = "0.31.0"
|
||||
version = "0.32.1"
|
||||
edition = "2021"
|
||||
repository = "https://github.com/txpipe/pallas"
|
||||
homepage = "https://github.com/txpipe/pallas"
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
[package]
|
||||
name = "pallas-configs"
|
||||
description = "Config structs and utilities matching the Haskell implementation"
|
||||
version = "0.31.0"
|
||||
version = "0.32.1"
|
||||
edition = "2021"
|
||||
repository = "https://github.com/txpipe/pallas"
|
||||
homepage = "https://github.com/txpipe/pallas"
|
||||
|
|
@ -12,10 +12,10 @@ authors = ["Santiago Carmuega <santiago@carmuega.me>"]
|
|||
|
||||
[dependencies]
|
||||
hex = "0.4.3"
|
||||
pallas-addresses = { version = "=0.31.0", path = "../pallas-addresses" }
|
||||
pallas-crypto = { version = "=0.31.0", path = "../pallas-crypto" }
|
||||
pallas-codec = { version = "=0.31.0", path = "../pallas-codec" }
|
||||
pallas-primitives = { version = "=0.31.0", path = "../pallas-primitives" }
|
||||
pallas-addresses = { version = "=0.32.1", path = "../pallas-addresses" }
|
||||
pallas-crypto = { version = "=0.32.1", path = "../pallas-crypto" }
|
||||
pallas-codec = { version = "=0.32.1", path = "../pallas-codec" }
|
||||
pallas-primitives = { version = "=0.32.1", path = "../pallas-primitives" }
|
||||
serde = { version = "1.0.136", optional = true, features = ["derive"] }
|
||||
serde_json = { version = "1.0.79", optional = true }
|
||||
base64 = "0.22.0"
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
[package]
|
||||
name = "pallas-crypto"
|
||||
description = "Cryptographic primitives for Cardano"
|
||||
version = "0.31.0"
|
||||
version = "0.32.1"
|
||||
edition = "2021"
|
||||
repository = "https://github.com/txpipe/pallas"
|
||||
homepage = "https://github.com/txpipe/pallas"
|
||||
|
|
@ -15,7 +15,7 @@ hex = "0.4"
|
|||
cryptoxide = { version = "0.4.4" }
|
||||
thiserror = "1.0"
|
||||
rand_core = "0.6"
|
||||
pallas-codec = { version = "=0.31.0", path = "../pallas-codec" }
|
||||
pallas-codec = { version = "=0.32.1", path = "../pallas-codec" }
|
||||
serde = "1.0.143"
|
||||
zeroize = "1.8.1"
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
[package]
|
||||
name = "pallas-hardano"
|
||||
description = "Pallas interoperability with the Haskel Cardano node implementation"
|
||||
version = "0.31.0"
|
||||
version = "0.32.1"
|
||||
edition = "2021"
|
||||
repository = "https://github.com/txpipe/pallas"
|
||||
homepage = "https://github.com/txpipe/pallas"
|
||||
|
|
@ -15,8 +15,8 @@ thiserror = "1.0.49"
|
|||
binary-layout = "3.2.0"
|
||||
tap = "1.0.1"
|
||||
tracing = "0.1.40"
|
||||
pallas-traverse = { version = "=0.31.0", path = "../pallas-traverse" }
|
||||
pallas-network = { version = "=0.31.0", path = "../pallas-network" }
|
||||
pallas-traverse = { version = "=0.32.1", path = "../pallas-traverse" }
|
||||
pallas-network = { version = "=0.32.1", path = "../pallas-network" }
|
||||
|
||||
[dev-dependencies]
|
||||
tracing-subscriber = "0.3.17"
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
[package]
|
||||
name = "pallas-math"
|
||||
description = "Mathematics functions for Cardano"
|
||||
version = "0.31.0"
|
||||
version = "0.32.1"
|
||||
edition = "2021"
|
||||
repository = "https://github.com/txpipe/pallas"
|
||||
homepage = "https://github.com/txpipe/pallas"
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
[package]
|
||||
name = "pallas-network"
|
||||
description = "Ouroboros networking stack using async IO"
|
||||
version = "0.31.0"
|
||||
version = "0.32.1"
|
||||
edition = "2021"
|
||||
repository = "https://github.com/txpipe/pallas"
|
||||
homepage = "https://github.com/txpipe/pallas"
|
||||
|
|
@ -14,8 +14,8 @@ authors = ["Santiago Carmuega <santiago@carmuega.me>", "Pi Lanningham <pi.lannin
|
|||
byteorder = "1.4.3"
|
||||
hex = "0.4.3"
|
||||
itertools = "0.13.0"
|
||||
pallas-codec = { version = "=0.31.0", path = "../pallas-codec" }
|
||||
pallas-crypto = { version = "=0.31.0", path = "../pallas-crypto" }
|
||||
pallas-codec = { version = "=0.32.1", path = "../pallas-codec" }
|
||||
pallas-crypto = { version = "=0.32.1", path = "../pallas-crypto" }
|
||||
rand = "0.8.5"
|
||||
socket2 = "0.5.5"
|
||||
thiserror = "1.0.31"
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ const PROTOCOL_V10: u64 = 10;
|
|||
const PROTOCOL_V11: u64 = 11;
|
||||
const PROTOCOL_V12: u64 = 12;
|
||||
const PROTOCOL_V13: u64 = 13;
|
||||
const PROTOCOL_V14: u64 = 14;
|
||||
|
||||
const PEER_SHARING_DISABLED: u8 = 0;
|
||||
|
||||
|
|
@ -99,6 +100,15 @@ impl VersionTable {
|
|||
Some(false),
|
||||
),
|
||||
),
|
||||
(
|
||||
PROTOCOL_V14,
|
||||
VersionData::new(
|
||||
network_magic,
|
||||
true,
|
||||
Some(PEER_SHARING_DISABLED),
|
||||
Some(false),
|
||||
),
|
||||
),
|
||||
]
|
||||
.into_iter()
|
||||
.collect::<HashMap<u64, VersionData>>();
|
||||
|
|
@ -135,6 +145,15 @@ impl VersionTable {
|
|||
Some(false),
|
||||
),
|
||||
),
|
||||
(
|
||||
PROTOCOL_V14,
|
||||
VersionData::new(
|
||||
network_magic,
|
||||
true,
|
||||
Some(PEER_SHARING_DISABLED),
|
||||
Some(false),
|
||||
),
|
||||
),
|
||||
]
|
||||
.into_iter()
|
||||
.collect::<HashMap<u64, VersionData>>();
|
||||
|
|
|
|||
|
|
@ -136,7 +136,7 @@ impl<'b> Decode<'b, ()> for BlockQuery {
|
|||
4 => Ok(Self::GetProposedPParamsUpdates),
|
||||
5 => Ok(Self::GetStakeDistribution),
|
||||
6 => Ok(Self::GetUTxOByAddress(d.decode()?)),
|
||||
// 7 => Ok(Self::GetUTxOWhole),
|
||||
7 => Ok(Self::GetUTxOWhole),
|
||||
// 8 => Ok(Self::DebugEpochState),
|
||||
9 => Ok(Self::GetCBOR(d.decode()?)),
|
||||
10 => Ok(Self::GetFilteredDelegationsAndRewardAccounts(d.decode()?)),
|
||||
|
|
@ -339,6 +339,29 @@ impl<C> minicbor::encode::Encode<C> for RationalNumber {
|
|||
}
|
||||
}
|
||||
|
||||
impl<'b, C> minicbor::decode::Decode<'b, C> for PoolIds {
|
||||
fn decode(d: &mut minicbor::Decoder<'b>, ctx: &mut C) -> Result<Self, minicbor::decode::Error> {
|
||||
d.tag()?;
|
||||
|
||||
Ok(PoolIds {
|
||||
hashes: d.decode_with(ctx)?,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
impl<C> minicbor::encode::Encode<C> for PoolIds {
|
||||
fn encode<W: minicbor::encode::Write>(
|
||||
&self,
|
||||
e: &mut minicbor::Encoder<W>,
|
||||
ctx: &mut C,
|
||||
) -> Result<(), minicbor::encode::Error<W::Error>> {
|
||||
e.tag(Tag::new(258))?;
|
||||
e.encode_with(self.hashes.clone(), ctx)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl<'b, C> minicbor::decode::Decode<'b, C> for TransactionOutput {
|
||||
fn decode(d: &mut minicbor::Decoder<'b>, ctx: &mut C) -> Result<Self, minicbor::decode::Error> {
|
||||
match d.datatype()? {
|
||||
|
|
|
|||
|
|
@ -1,17 +1,21 @@
|
|||
// TODO: this should move to pallas::ledger crate at some point
|
||||
|
||||
use pallas_crypto::hash::Hash;
|
||||
use std::collections::BTreeSet;
|
||||
use std::collections::{BTreeMap, BTreeSet};
|
||||
use std::hash::Hash as StdHash;
|
||||
// required for derive attrs to work
|
||||
use pallas_codec::minicbor::{self};
|
||||
|
||||
use pallas_codec::utils::{AnyUInt, Bytes, KeyValuePairs, TagWrap};
|
||||
use pallas_codec::utils::{AnyUInt, Bytes, KeyValuePairs, Nullable, TagWrap};
|
||||
use pallas_codec::{
|
||||
minicbor::{Decode, Encode},
|
||||
utils::AnyCbor,
|
||||
};
|
||||
|
||||
pub mod primitives;
|
||||
|
||||
pub use primitives::{PoolMetadata, Relay};
|
||||
|
||||
use crate::miniprotocols::Point;
|
||||
|
||||
use super::{Client, ClientError};
|
||||
|
|
@ -39,7 +43,7 @@ pub enum BlockQuery {
|
|||
GetRewardProvenance,
|
||||
GetUTxOByTxIn(TxIns),
|
||||
GetStakePools,
|
||||
GetStakePoolParams(AnyCbor),
|
||||
GetStakePoolParams(PoolIds),
|
||||
GetRewardInfoPools,
|
||||
GetPoolState(AnyCbor),
|
||||
GetStakeSnapshots(Pools),
|
||||
|
|
@ -197,6 +201,19 @@ pub struct StakeDistribution {
|
|||
pub pools: KeyValuePairs<Bytes, Pool>,
|
||||
}
|
||||
|
||||
/// The use of `BTreeMap`s as per [Pools] definition ensures that the hashes are
|
||||
/// in order (otherwise, the node will reject some queries).
|
||||
#[derive(Debug, PartialEq, Clone)]
|
||||
pub struct PoolIds {
|
||||
pub hashes: Pools,
|
||||
}
|
||||
|
||||
impl From<Pools> for PoolIds {
|
||||
fn from(hashes: Pools) -> Self {
|
||||
Self { hashes }
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Encode, Decode, PartialEq, Clone)]
|
||||
pub struct Pool {
|
||||
#[n(0)]
|
||||
|
|
@ -206,6 +223,39 @@ pub struct Pool {
|
|||
pub hashes: Bytes,
|
||||
}
|
||||
|
||||
// Essentially the `PoolRegistration` component of `Certificate` at
|
||||
// `pallas-primitives/src/alonzo/model.rs`, with types modified for the present
|
||||
// context
|
||||
#[derive(Debug, Encode, Decode, PartialEq, Clone)]
|
||||
pub struct PoolParams {
|
||||
#[n(0)]
|
||||
pub operator: Bytes,
|
||||
|
||||
#[n(1)]
|
||||
pub vrf_keyhash: Bytes,
|
||||
|
||||
#[n(2)]
|
||||
pub pledge: Coin,
|
||||
|
||||
#[n(3)]
|
||||
pub cost: Coin,
|
||||
|
||||
#[n(4)]
|
||||
pub margin: UnitInterval,
|
||||
|
||||
#[n(5)]
|
||||
pub reward_account: Addr,
|
||||
|
||||
#[n(6)]
|
||||
pub pool_owners: PoolIds,
|
||||
|
||||
#[n(7)]
|
||||
pub relays: Vec<Relay>,
|
||||
|
||||
#[n(8)]
|
||||
pub pool_metadata: Nullable<PoolMetadata>,
|
||||
}
|
||||
|
||||
/// Type used at [GenesisConfig], which is a fraction that is CBOR-encoded
|
||||
/// as an untagged array.
|
||||
#[derive(Debug, Encode, Decode, PartialEq, Clone)]
|
||||
|
|
@ -263,6 +313,8 @@ pub struct UTxOByAddress {
|
|||
|
||||
pub type UTxOByTxin = UTxOByAddress;
|
||||
|
||||
pub type UTxOWhole = UTxOByAddress;
|
||||
|
||||
// Bytes CDDL -> #6.121([ * #6.121([ *datum ]) ])
|
||||
pub type Datum = (Era, TagWrap<Bytes, 24>);
|
||||
|
||||
|
|
@ -504,6 +556,20 @@ pub async fn get_cbor(
|
|||
Ok(result)
|
||||
}
|
||||
|
||||
/// Get parameters for the given pools.
|
||||
pub async fn get_stake_pool_params(
|
||||
client: &mut Client,
|
||||
era: u16,
|
||||
pool_ids: PoolIds,
|
||||
) -> Result<BTreeMap<Bytes, PoolParams>, ClientError> {
|
||||
let query = BlockQuery::GetStakePoolParams(pool_ids);
|
||||
let query = LedgerQuery::BlockQuery(era, query);
|
||||
let query = Request::LedgerQuery(query);
|
||||
let result: (_,) = client.query(query).await?;
|
||||
|
||||
Ok(result.0)
|
||||
}
|
||||
|
||||
/// Get the genesis configuration for the given era.
|
||||
pub async fn get_genesis_config(
|
||||
client: &mut Client,
|
||||
|
|
@ -544,3 +610,13 @@ pub async fn get_utxo_by_txin(
|
|||
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
/// Get the /entire/ UTxO.
|
||||
pub async fn get_utxo_whole(client: &mut Client, era: u16) -> Result<UTxOWhole, ClientError> {
|
||||
let query = BlockQuery::GetUTxOWhole;
|
||||
let query = LedgerQuery::BlockQuery(era, query);
|
||||
let query = Request::LedgerQuery(query);
|
||||
let result = client.query(query).await?;
|
||||
|
||||
Ok(result)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,91 @@
|
|||
// Material brought from `pallas-primitives`
|
||||
// TODO: Refactor in order to avoid repetition.
|
||||
pub use pallas_codec::utils::{Bytes, Nullable};
|
||||
pub use pallas_crypto::hash::Hash;
|
||||
|
||||
use pallas_codec::minicbor::{self, Decode, Encode};
|
||||
|
||||
#[derive(Encode, Decode, Debug, PartialEq, Eq, Clone)]
|
||||
pub struct PoolMetadata {
|
||||
#[n(0)]
|
||||
pub url: String,
|
||||
|
||||
#[n(1)]
|
||||
pub hash: PoolMetadataHash,
|
||||
}
|
||||
|
||||
pub type PoolMetadataHash = Hash<32>;
|
||||
|
||||
pub type Port = u32;
|
||||
|
||||
pub type IPv4 = Bytes;
|
||||
|
||||
pub type IPv6 = Bytes;
|
||||
|
||||
pub type DnsName = String;
|
||||
|
||||
#[derive(Debug, PartialEq, Eq, Clone)]
|
||||
pub enum Relay {
|
||||
SingleHostAddr(Nullable<Port>, Nullable<IPv4>, Nullable<IPv6>),
|
||||
SingleHostName(Nullable<Port>, DnsName),
|
||||
MultiHostName(DnsName),
|
||||
}
|
||||
|
||||
// Move to `codec.rs`?
|
||||
impl<'b, C> minicbor::decode::Decode<'b, C> for Relay {
|
||||
fn decode(d: &mut minicbor::Decoder<'b>, ctx: &mut C) -> Result<Self, minicbor::decode::Error> {
|
||||
d.array()?;
|
||||
let variant = d.u16()?;
|
||||
|
||||
match variant {
|
||||
0 => Ok(Relay::SingleHostAddr(
|
||||
d.decode_with(ctx)?,
|
||||
d.decode_with(ctx)?,
|
||||
d.decode_with(ctx)?,
|
||||
)),
|
||||
1 => Ok(Relay::SingleHostName(
|
||||
d.decode_with(ctx)?,
|
||||
d.decode_with(ctx)?,
|
||||
)),
|
||||
2 => Ok(Relay::MultiHostName(d.decode_with(ctx)?)),
|
||||
_ => Err(minicbor::decode::Error::message(
|
||||
"invalid variant id for Relay",
|
||||
)),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<C> minicbor::encode::Encode<C> for Relay {
|
||||
fn encode<W: minicbor::encode::Write>(
|
||||
&self,
|
||||
e: &mut minicbor::Encoder<W>,
|
||||
ctx: &mut C,
|
||||
) -> Result<(), minicbor::encode::Error<W::Error>> {
|
||||
match self {
|
||||
Relay::SingleHostAddr(a, b, c) => {
|
||||
e.array(4)?;
|
||||
e.encode_with(0, ctx)?;
|
||||
e.encode_with(a, ctx)?;
|
||||
e.encode_with(b, ctx)?;
|
||||
e.encode_with(c, ctx)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
Relay::SingleHostName(a, b) => {
|
||||
e.array(3)?;
|
||||
e.encode_with(1, ctx)?;
|
||||
e.encode_with(a, ctx)?;
|
||||
e.encode_with(b, ctx)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
Relay::MultiHostName(a) => {
|
||||
e.array(2)?;
|
||||
e.encode_with(2, ctx)?;
|
||||
e.encode_with(a, ctx)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,9 +1,9 @@
|
|||
use hex::FromHex;
|
||||
use pallas_codec::utils::{AnyCbor, AnyUInt, Bytes, KeyValuePairs, TagWrap};
|
||||
use pallas_codec::utils::{AnyCbor, AnyUInt, Bytes, KeyValuePairs, Nullable, TagWrap};
|
||||
use pallas_crypto::hash::Hash;
|
||||
use pallas_network::miniprotocols::localstate::queries_v16::{
|
||||
self, Addr, Addrs, ChainBlockNumber, Fraction, GenesisConfig, RationalNumber, Snapshots,
|
||||
StakeAddr, Stakes, SystemStart, UnitInterval, Value,
|
||||
self, Addr, Addrs, ChainBlockNumber, Fraction, GenesisConfig, PoolMetadata, PoolParams,
|
||||
RationalNumber, Relay, Snapshots, StakeAddr, Stakes, SystemStart, UnitInterval, Value,
|
||||
};
|
||||
use pallas_network::{
|
||||
facades::{NodeClient, PeerClient, PeerServer},
|
||||
|
|
@ -23,10 +23,11 @@ use pallas_network::{
|
|||
multiplexer::{Bearer, Plexer},
|
||||
};
|
||||
use std::{
|
||||
collections::BTreeSet,
|
||||
collections::{BTreeMap, BTreeSet},
|
||||
fs,
|
||||
net::{Ipv4Addr, SocketAddrV4},
|
||||
path::Path,
|
||||
str::FromStr,
|
||||
time::Duration,
|
||||
};
|
||||
|
||||
|
|
@ -644,6 +645,79 @@ pub async fn local_state_query_server_and_client_happy_path() {
|
|||
|
||||
// server receives query from client
|
||||
|
||||
let query: Vec<u8> = match server.statequery().recv_while_acquired().await.unwrap() {
|
||||
ClientQueryRequest::Query(q) => q.unwrap(),
|
||||
x => panic!(
|
||||
"(While expecting `GetUTxOWhole`) \
|
||||
Unexpected message from client: {x:?}"
|
||||
),
|
||||
};
|
||||
|
||||
// CBOR got from preprod node. Mind the stripped `8203`.
|
||||
let cbor_query = Vec::<u8>::from_hex("8200820082068107").unwrap();
|
||||
|
||||
assert_eq!(query, cbor_query);
|
||||
assert_eq!(*server.statequery().state(), localstate::State::Querying);
|
||||
|
||||
let tx_hex = "1610F289E36C9D83C464F85A0AADD59101DDDB0E89592A92809D95D68D79EED9";
|
||||
let txbytes: [u8; 32] = hex::decode(tx_hex).unwrap().try_into().unwrap();
|
||||
let transaction_id_1 = Hash::from(txbytes);
|
||||
let index_1 = AnyUInt::MajorByte(2);
|
||||
let lovelace = AnyUInt::U32(12_419_537);
|
||||
let values_1 = localstate::queries_v16::TransactionOutput::Legacy(
|
||||
localstate::queries_v16::LegacyTransactionOutput {
|
||||
address: Bytes::from(
|
||||
hex::decode("60C0359EBB7D0688D79064BD118C99C8B87B5853E3AF59245BB97E84D2")
|
||||
.unwrap(),
|
||||
),
|
||||
amount: Value::Coin(lovelace),
|
||||
datum_hash: None,
|
||||
},
|
||||
);
|
||||
|
||||
let tx_hex = "A7BED2F5FCD72BA4CEFDA7C2CC94D119279A17D71BFFC4D90DD4272B93E8A88F";
|
||||
let txbytes: [u8; 32] = hex::decode(tx_hex).unwrap().try_into().unwrap();
|
||||
let transaction_id_2 = Hash::from(txbytes);
|
||||
let index_2 = AnyUInt::MajorByte(0);
|
||||
let lovelace = AnyUInt::U32(1_792_960);
|
||||
let hex_datum = "D8799FD8799F1AE06755BBFF1B00000193B36BC9F0FF";
|
||||
let datum = hex::decode(hex_datum).unwrap().into();
|
||||
let tag = TagWrap::<_, 24>::new(datum);
|
||||
let inline_datum = Some((1_u16, tag));
|
||||
let values_2 = localstate::queries_v16::TransactionOutput::Current(
|
||||
localstate::queries_v16::PostAlonsoTransactionOutput {
|
||||
address: Bytes::from(
|
||||
hex::decode("603F2728EC78EF8B0F356E91A5662FF3124ADD324A7B7F5AEED69362F4")
|
||||
.unwrap(),
|
||||
),
|
||||
amount: Value::Coin(lovelace),
|
||||
inline_datum,
|
||||
script_ref: None,
|
||||
},
|
||||
);
|
||||
|
||||
let utxos = KeyValuePairs::from(vec![
|
||||
(
|
||||
localstate::queries_v16::UTxO {
|
||||
transaction_id: transaction_id_1,
|
||||
index: index_1,
|
||||
},
|
||||
values_1,
|
||||
),
|
||||
(
|
||||
localstate::queries_v16::UTxO {
|
||||
transaction_id: transaction_id_2,
|
||||
index: index_2,
|
||||
},
|
||||
values_2,
|
||||
),
|
||||
]);
|
||||
|
||||
let result = AnyCbor::from_encode(localstate::queries_v16::UTxOWhole { utxo: utxos });
|
||||
server.statequery().send_result(result).await.unwrap();
|
||||
|
||||
// server receives query from client
|
||||
|
||||
let query: queries_v16::Request =
|
||||
match server.statequery().recv_while_acquired().await.unwrap() {
|
||||
ClientQueryRequest::Query(q) => q.into_decode().unwrap(),
|
||||
|
|
@ -1000,6 +1074,33 @@ pub async fn local_state_query_server_and_client_happy_path() {
|
|||
|
||||
assert_eq!(result, queries_v16::UTxOByAddress { utxo });
|
||||
|
||||
let request = AnyCbor::from_encode(localstate::queries_v16::Request::LedgerQuery(
|
||||
localstate::queries_v16::LedgerQuery::BlockQuery(
|
||||
6,
|
||||
localstate::queries_v16::BlockQuery::GetUTxOWhole,
|
||||
),
|
||||
));
|
||||
client.statequery().send_query(request).await.unwrap();
|
||||
|
||||
let result: Vec<u8> = client
|
||||
.statequery()
|
||||
.recv_while_querying()
|
||||
.await
|
||||
.unwrap()
|
||||
.unwrap();
|
||||
|
||||
let utxo = Vec::<u8>::from_hex(
|
||||
"81A28258201610F289E36C9D83C464F85A0AADD59101DDDB0E89592A92809D95D6\
|
||||
8D79EED90282581D60C0359EBB7D0688D79064BD118C99C8B87B5853E3AF59245B\
|
||||
B97E84D21A00BD81D1825820A7BED2F5FCD72BA4CEFDA7C2CC94D119279A17D71B\
|
||||
FFC4D90DD4272B93E8A88F00A300581D603F2728EC78EF8B0F356E91A5662FF312\
|
||||
4ADD324A7B7F5AEED69362F4011A001B5BC0028201D81856D8799FD8799F1AE067\
|
||||
55BBFF1B00000193B36BC9F0FF",
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
assert_eq!(result, utxo);
|
||||
|
||||
let request = AnyCbor::from_encode(queries_v16::Request::LedgerQuery(
|
||||
queries_v16::LedgerQuery::BlockQuery(5, queries_v16::BlockQuery::GetCurrentPParams),
|
||||
));
|
||||
|
|
@ -1175,6 +1276,181 @@ pub async fn local_state_query_server_and_client_happy_path() {
|
|||
tokio::try_join!(client, server).unwrap();
|
||||
}
|
||||
|
||||
#[cfg(unix)]
|
||||
#[tokio::test]
|
||||
pub async fn local_state_query_server_and_client_happy_path2() {
|
||||
let server = tokio::spawn({
|
||||
async move {
|
||||
// server setup
|
||||
let socket_path = Path::new("node2.socket");
|
||||
|
||||
if socket_path.exists() {
|
||||
fs::remove_file(socket_path).unwrap();
|
||||
}
|
||||
|
||||
let listener = UnixListener::bind(socket_path).unwrap();
|
||||
|
||||
let mut server = pallas_network::facades::NodeServer::accept(&listener, 0)
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
// wait for acquire request from client
|
||||
|
||||
let maybe_acquire = server.statequery().recv_while_idle().await.unwrap();
|
||||
|
||||
assert!(maybe_acquire.is_some());
|
||||
assert_eq!(*server.statequery().state(), localstate::State::Acquiring);
|
||||
|
||||
server.statequery().send_acquired().await.unwrap();
|
||||
|
||||
assert_eq!(*server.statequery().state(), localstate::State::Acquired);
|
||||
|
||||
// server receives query from client
|
||||
|
||||
let query: Vec<u8> = match server.statequery().recv_while_acquired().await.unwrap() {
|
||||
ClientQueryRequest::Query(q) => q.unwrap(),
|
||||
x => panic!(
|
||||
"While expecting `GetStakePoolParams`) \
|
||||
Unexpected message from client: {x:?}"
|
||||
),
|
||||
};
|
||||
|
||||
// CBOR got from preprod node. Mind the stripped `82038200`.
|
||||
let cbor_query = Vec::<u8>::from_hex(
|
||||
"820082068211d9010281581cfdb5834ba06eb4baafd50550d2dc9b3742d2c52cc5ee65bf8673823b",
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
assert_eq!(query, cbor_query);
|
||||
|
||||
assert_eq!(*server.statequery().state(), localstate::State::Querying);
|
||||
|
||||
let pool_id: Bytes =
|
||||
Vec::<u8>::from_hex("fdb5834ba06eb4baafd50550d2dc9b3742d2c52cc5ee65bf8673823b")
|
||||
.unwrap()
|
||||
.into();
|
||||
let operator = pool_id.clone();
|
||||
let vrf_keyhash = Vec::<u8>::from_hex(
|
||||
"2A6A3D82278A554E9C1777C427BF0397FAF5CD7734900752D698E57679CC523F",
|
||||
)
|
||||
.unwrap()
|
||||
.into();
|
||||
let reward_account =
|
||||
Vec::<u8>::from_hex("E01AEF81CBAB75DB2DE0FE3885332EBE67C34EB1ADBF43BB2408BA3981")
|
||||
.unwrap()
|
||||
.into();
|
||||
let pool_metadata: Nullable<PoolMetadata> = Some(PoolMetadata {
|
||||
url: "https://csouza.me/jp-pp.json".to_string(),
|
||||
hash: Hash::<32>::from_str(
|
||||
"C9623111188D0BF90E8305E40AA91A040D8036C7813A4ECA44E06FA0A1A893A6",
|
||||
)
|
||||
.unwrap(),
|
||||
})
|
||||
.into();
|
||||
let pool_params = PoolParams {
|
||||
operator,
|
||||
vrf_keyhash,
|
||||
pledge: AnyUInt::U64(5_000_000_000),
|
||||
cost: AnyUInt::U32(340_000_000),
|
||||
margin: localstate::queries_v16::RationalNumber {
|
||||
numerator: 3,
|
||||
denominator: 40,
|
||||
},
|
||||
reward_account,
|
||||
pool_owners: BTreeSet::from([Bytes::from(
|
||||
Vec::<u8>::from_hex("1AEF81CBAB75DB2DE0FE3885332EBE67C34EB1ADBF43BB2408BA3981")
|
||||
.unwrap(),
|
||||
)])
|
||||
.into(),
|
||||
relays: vec![Relay::SingleHostName(
|
||||
Some(3001).into(),
|
||||
"preprod.junglestakepool.com".to_string(),
|
||||
)],
|
||||
pool_metadata,
|
||||
};
|
||||
// The map is inside a (singleton) array
|
||||
let result = AnyCbor::from_encode([BTreeMap::from([(pool_id, pool_params)])]);
|
||||
|
||||
server.statequery().send_result(result).await.unwrap();
|
||||
|
||||
assert_eq!(*server.statequery().state(), localstate::State::Acquired);
|
||||
|
||||
match server.statequery().recv_while_acquired().await.unwrap() {
|
||||
ClientQueryRequest::Release => (),
|
||||
x => panic!("unexpected message from client: {x:?}"),
|
||||
};
|
||||
|
||||
let next_request = server.statequery().recv_while_idle().await.unwrap();
|
||||
|
||||
assert!(next_request.is_none());
|
||||
assert_eq!(*server.statequery().state(), localstate::State::Done);
|
||||
}
|
||||
});
|
||||
|
||||
let client = tokio::spawn(async move {
|
||||
tokio::time::sleep(Duration::from_secs(1)).await;
|
||||
|
||||
// client setup
|
||||
let socket_path = "node2.socket";
|
||||
|
||||
let mut client = NodeClient::connect(socket_path, 0).await.unwrap();
|
||||
|
||||
// client sends acquire
|
||||
|
||||
client
|
||||
.statequery()
|
||||
.send_acquire(Some(Point::Origin))
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
client.statequery().recv_while_acquiring().await.unwrap();
|
||||
|
||||
assert_eq!(*client.statequery().state(), localstate::State::Acquired);
|
||||
|
||||
// client sends a BlockQuery
|
||||
|
||||
let pool_id1 = "fdb5834ba06eb4baafd50550d2dc9b3742d2c52cc5ee65bf8673823b";
|
||||
let pool_id1: Bytes = Vec::<u8>::from_hex(pool_id1).unwrap().into();
|
||||
let mut pools = BTreeSet::<Bytes>::new();
|
||||
pools.insert(pool_id1);
|
||||
|
||||
let request = AnyCbor::from_encode(localstate::queries_v16::LedgerQuery::BlockQuery(
|
||||
6,
|
||||
localstate::queries_v16::BlockQuery::GetStakePoolParams(pools.into()),
|
||||
));
|
||||
|
||||
client.statequery().send_query(request).await.unwrap();
|
||||
|
||||
let result: Vec<u8> = client
|
||||
.statequery()
|
||||
.recv_while_querying()
|
||||
.await
|
||||
.unwrap()
|
||||
.unwrap();
|
||||
// CBOR got from preprod node.
|
||||
let pool_params_cbor = Vec::<u8>::from_hex(
|
||||
"81a1581cfdb5834ba06eb4baafd50550d2dc9b3742d2c52cc5ee65bf8673823b8958\
|
||||
1cfdb5834ba06eb4baafd50550d2dc9b3742d2c52cc5ee65bf8673823b58202a6a3d\
|
||||
82278a554e9c1777c427bf0397faf5cd7734900752d698e57679cc523f1b00000001\
|
||||
2a05f2001a1443fd00d81e82031828581de01aef81cbab75db2de0fe3885332ebe67\
|
||||
c34eb1adbf43bb2408ba3981d9010281581c1aef81cbab75db2de0fe3885332ebe67\
|
||||
c34eb1adbf43bb2408ba3981818301190bb9781b70726570726f642e6a756e676c65\
|
||||
7374616b65706f6f6c2e636f6d82781c68747470733a2f2f63736f757a612e6d652f\
|
||||
6a702d70702e6a736f6e5820c9623111188d0bf90e8305e40aa91a040d8036c7813a\
|
||||
4eca44e06fa0a1a893a6",
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
assert_eq!(result, pool_params_cbor);
|
||||
|
||||
client.statequery().send_release().await.unwrap();
|
||||
|
||||
client.statequery().send_done().await.unwrap();
|
||||
});
|
||||
|
||||
tokio::try_join!(client, server).unwrap();
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
#[ignore]
|
||||
pub async fn txsubmission_server_and_client_happy_path_n2n() {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
[package]
|
||||
name = "pallas-primitives"
|
||||
description = "Ledger primitives and cbor codec for the different Cardano eras"
|
||||
version = "0.31.0"
|
||||
version = "0.32.1"
|
||||
edition = "2021"
|
||||
repository = "https://github.com/txpipe/pallas"
|
||||
homepage = "https://github.com/txpipe/pallas"
|
||||
|
|
@ -16,8 +16,8 @@ authors = [
|
|||
[dependencies]
|
||||
hex = "0.4.3"
|
||||
log = "0.4.14"
|
||||
pallas-crypto = { version = "=0.31.0", path = "../pallas-crypto" }
|
||||
pallas-codec = { version = "=0.31.0", path = "../pallas-codec" }
|
||||
pallas-crypto = { version = "=0.32.1", path = "../pallas-crypto" }
|
||||
pallas-codec = { version = "=0.32.1", path = "../pallas-codec" }
|
||||
base58 = "0.2.0"
|
||||
bech32 = "0.9.0"
|
||||
serde = { version = "1.0.136", optional = true, features = ["derive"] }
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
[package]
|
||||
name = "pallas-traverse"
|
||||
description = "Utilities to traverse over multi-era block data"
|
||||
version = "0.31.0"
|
||||
version = "0.32.1"
|
||||
edition = "2021"
|
||||
repository = "https://github.com/txpipe/pallas"
|
||||
homepage = "https://github.com/txpipe/pallas"
|
||||
|
|
@ -11,10 +11,10 @@ readme = "README.md"
|
|||
authors = ["Santiago Carmuega <santiago@carmuega.me>"]
|
||||
|
||||
[dependencies]
|
||||
pallas-primitives = { version = "=0.31.0", path = "../pallas-primitives" }
|
||||
pallas-addresses = { version = "=0.31.0", path = "../pallas-addresses" }
|
||||
pallas-crypto = { version = "=0.31.0", path = "../pallas-crypto" }
|
||||
pallas-codec = { version = "=0.31.0", path = "../pallas-codec" }
|
||||
pallas-primitives = { version = "=0.32.1", path = "../pallas-primitives" }
|
||||
pallas-addresses = { version = "=0.32.1", path = "../pallas-addresses" }
|
||||
pallas-crypto = { version = "=0.32.1", path = "../pallas-crypto" }
|
||||
pallas-codec = { version = "=0.32.1", path = "../pallas-codec" }
|
||||
hex = "0.4.3"
|
||||
thiserror = "1.0.31"
|
||||
paste = "1.0.14"
|
||||
|
|
|
|||
|
|
@ -183,9 +183,7 @@ impl<'b> MultiEraBlock<'b> {
|
|||
match self {
|
||||
MultiEraBlock::Byron(x) => {
|
||||
if let Some(up) = x.body.upd_payload.proposal.deref() {
|
||||
// TODO: this might be horribly wrong, I'm assuming that the activation epoch
|
||||
// for a Byron upgrade proposal is always current epoch + 1.
|
||||
let epoch = x.header.consensus_data.0.epoch + 1;
|
||||
let epoch = x.header.consensus_data.0.epoch;
|
||||
Some(MultiEraUpdate::Byron(
|
||||
epoch,
|
||||
Box::new(Cow::Owned(up.clone())),
|
||||
|
|
|
|||
|
|
@ -53,6 +53,18 @@ impl<'b> MultiEraRedeemer<'b> {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn into_conway_deprecated(&self) -> Option<conway::Redeemer> {
|
||||
match self {
|
||||
Self::AlonzoCompatible(_) => None,
|
||||
Self::Conway(x, y) => Some(conway::Redeemer {
|
||||
tag: x.tag,
|
||||
index: x.index,
|
||||
data: y.data.clone(),
|
||||
ex_units: y.ex_units,
|
||||
}),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn from_alonzo_compatible(redeemer: &'b alonzo::Redeemer) -> Self {
|
||||
Self::AlonzoCompatible(Box::new(Cow::Borrowed(redeemer)))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -199,9 +199,9 @@ impl<'b> MultiEraTx<'b> {
|
|||
|
||||
/// Return inputs as expected for processing
|
||||
///
|
||||
/// To process inputs we need a set (no duplicated) and lexicographical
|
||||
/// order (hash#idx). This function will take the raw inputs and apply the
|
||||
/// aforementioned cleanup changes.
|
||||
/// To process inputs we need a set (no duplicates) and lexicographical
|
||||
/// order (hash#idx). This function will take the raw inputs and apply a
|
||||
/// sort following these requirements.
|
||||
pub fn inputs_sorted_set(&self) -> Vec<MultiEraInput> {
|
||||
let mut raw = self.inputs();
|
||||
raw.sort_by_key(|x| x.lexicographical_key());
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ pub type DRepVotingThresholds = conway::DRepVotingThresholds;
|
|||
use crate::{Era, MultiEraUpdate};
|
||||
|
||||
impl<'b> MultiEraUpdate<'b> {
|
||||
pub fn decode_for_era(era: Era, cbor: &'b [u8]) -> Result<Self, minicbor::decode::Error> {
|
||||
pub fn decode_for_era(era: Era, cbor: &[u8]) -> Result<Self, minicbor::decode::Error> {
|
||||
match era {
|
||||
Era::Byron => {
|
||||
let (epoch, up) = minicbor::decode(cbor)?;
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
[package]
|
||||
name = "pallas-txbuilder"
|
||||
description = "An ergonomic Cardano transaction builder"
|
||||
version = "0.31.0"
|
||||
version = "0.32.1"
|
||||
edition = "2021"
|
||||
repository = "https://github.com/txpipe/pallas"
|
||||
homepage = "https://github.com/txpipe/pallas"
|
||||
|
|
@ -11,12 +11,12 @@ readme = "README.md"
|
|||
authors = ["Santiago Carmuega <santiago@carmuega.me>", "Cainã Costa <me@cfcosta.com>"]
|
||||
|
||||
[dependencies]
|
||||
pallas-codec = { path = "../pallas-codec", version = "=0.31.0" }
|
||||
pallas-crypto = { path = "../pallas-crypto", version = "=0.31.0" }
|
||||
pallas-primitives = { path = "../pallas-primitives", version = "=0.31.0" }
|
||||
pallas-traverse = { path = "../pallas-traverse", version = "=0.31.0" }
|
||||
pallas-addresses = { path = "../pallas-addresses", version = "=0.31.0" }
|
||||
pallas-wallet = { path = "../pallas-wallet", version = "=0.31.0" }
|
||||
pallas-codec = { path = "../pallas-codec", version = "=0.32.1" }
|
||||
pallas-crypto = { path = "../pallas-crypto", version = "=0.32.1" }
|
||||
pallas-primitives = { path = "../pallas-primitives", version = "=0.32.1" }
|
||||
pallas-traverse = { path = "../pallas-traverse", version = "=0.32.1" }
|
||||
pallas-addresses = { path = "../pallas-addresses", version = "=0.32.1" }
|
||||
pallas-wallet = { path = "../pallas-wallet", version = "=0.32.1" }
|
||||
serde = { version = "1.0.188", features = ["derive"] }
|
||||
serde_json = "1.0.107"
|
||||
thiserror = "1.0.44"
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
[package]
|
||||
name = "pallas-utxorpc"
|
||||
description = "Pallas interoperability with the UTxORPC spec"
|
||||
version = "0.31.0"
|
||||
version = "0.32.1"
|
||||
edition = "2021"
|
||||
repository = "https://github.com/txpipe/pallas"
|
||||
homepage = "https://github.com/txpipe/pallas"
|
||||
|
|
@ -12,16 +12,16 @@ authors = ["Santiago Carmuega <santiago@carmuega.me>"]
|
|||
|
||||
[dependencies]
|
||||
# utxorpc-spec = { path = "../../../utxorpc/spec/gen/rust" }
|
||||
utxorpc-spec = { version = "0.14.0" }
|
||||
utxorpc-spec = { version = "0.15.0" }
|
||||
|
||||
pallas-traverse = { version = "=0.31.0", path = "../pallas-traverse" }
|
||||
pallas-primitives = { version = "=0.31.0", path = "../pallas-primitives" }
|
||||
pallas-codec = { version = "=0.31.0", path = "../pallas-codec" }
|
||||
pallas-crypto = { version = "=0.31.0", path = "../pallas-crypto" }
|
||||
pallas-traverse = { version = "=0.32.1", path = "../pallas-traverse" }
|
||||
pallas-primitives = { version = "=0.32.1", path = "../pallas-primitives" }
|
||||
pallas-codec = { version = "=0.32.1", path = "../pallas-codec" }
|
||||
pallas-crypto = { version = "=0.32.1", path = "../pallas-crypto" }
|
||||
prost-types = "0.13.1"
|
||||
|
||||
# TODO: remove this dep once we have multiera params in traverse
|
||||
pallas-applying = { version = "=0.31.0", path = "../pallas-applying" }
|
||||
pallas-applying = { version = "=0.32.1", path = "../pallas-applying" }
|
||||
|
||||
[dev-dependencies]
|
||||
hex = "0.4.3"
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
[package]
|
||||
name = "pallas-wallet"
|
||||
description = "Cardano wallet utilities such as key generation"
|
||||
version = "0.31.0"
|
||||
version = "0.32.1"
|
||||
edition = "2021"
|
||||
repository = "https://github.com/txpipe/pallas"
|
||||
homepage = "https://github.com/txpipe/pallas"
|
||||
|
|
@ -12,7 +12,7 @@ authors = ["Santiago Carmuega <santiago@carmuega.me>"]
|
|||
|
||||
[dependencies]
|
||||
thiserror = "1.0.49"
|
||||
pallas-crypto = { version = "=0.31.0", path = "../pallas-crypto" }
|
||||
pallas-crypto = { version = "=0.32.1", path = "../pallas-crypto" }
|
||||
ed25519-bip32 = "0.4.1"
|
||||
bip39 = { version = "2.0.0", features = ["rand_core"] }
|
||||
cryptoxide = "0.4.4"
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
[package]
|
||||
name = "pallas"
|
||||
description = "Rust-native building blocks for the Cardano blockchain ecosystem."
|
||||
version = "0.31.0"
|
||||
version = "0.32.1"
|
||||
edition = "2021"
|
||||
repository = "https://github.com/txpipe/pallas"
|
||||
homepage = "https://github.com/txpipe/pallas"
|
||||
|
|
@ -11,18 +11,18 @@ readme = "../README.md"
|
|||
authors = ["Santiago Carmuega <santiago@carmuega.me>"]
|
||||
|
||||
[dependencies]
|
||||
pallas-network = { version = "=0.31.0", path = "../pallas-network/" }
|
||||
pallas-primitives = { version = "=0.31.0", path = "../pallas-primitives/" }
|
||||
pallas-traverse = { version = "=0.31.0", path = "../pallas-traverse/" }
|
||||
pallas-addresses = { version = "=0.31.0", path = "../pallas-addresses/" }
|
||||
pallas-crypto = { version = "=0.31.0", path = "../pallas-crypto/" }
|
||||
pallas-codec = { version = "=0.31.0", path = "../pallas-codec/" }
|
||||
pallas-utxorpc = { version = "=0.31.0", path = "../pallas-utxorpc/" }
|
||||
pallas-configs = { version = "=0.31.0", path = "../pallas-configs/" }
|
||||
pallas-txbuilder = { version = "=0.31.0", path = "../pallas-txbuilder/" }
|
||||
pallas-applying = { version = "=0.31.0", path = "../pallas-applying/", optional = true }
|
||||
pallas-wallet = { version = "=0.31.0", path = "../pallas-wallet/", optional = true }
|
||||
pallas-hardano = { version = "=0.31.0", path = "../pallas-hardano/", optional = true }
|
||||
pallas-network = { version = "=0.32.1", path = "../pallas-network/" }
|
||||
pallas-primitives = { version = "=0.32.1", path = "../pallas-primitives/" }
|
||||
pallas-traverse = { version = "=0.32.1", path = "../pallas-traverse/" }
|
||||
pallas-addresses = { version = "=0.32.1", path = "../pallas-addresses/" }
|
||||
pallas-crypto = { version = "=0.32.1", path = "../pallas-crypto/" }
|
||||
pallas-codec = { version = "=0.32.1", path = "../pallas-codec/" }
|
||||
pallas-utxorpc = { version = "=0.32.1", path = "../pallas-utxorpc/" }
|
||||
pallas-configs = { version = "=0.32.1", path = "../pallas-configs/" }
|
||||
pallas-txbuilder = { version = "=0.32.1", path = "../pallas-txbuilder/" }
|
||||
pallas-applying = { version = "=0.32.1", path = "../pallas-applying/", optional = true }
|
||||
pallas-wallet = { version = "=0.32.1", path = "../pallas-wallet/", optional = true }
|
||||
pallas-hardano = { version = "=0.32.1", path = "../pallas-hardano/", optional = true }
|
||||
|
||||
[features]
|
||||
hardano = ["pallas-hardano"]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue