Compare commits
No commits in common. "master" and "rvv040" have entirely different histories.
15 changed files with 282 additions and 1428 deletions
79
CHANGELOG.md
79
CHANGELOG.md
|
@ -5,89 +5,18 @@ All notable changes to this project will be documented in this file.
|
|||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [0.6.2.1]
|
||||
|
||||
### Changed
|
||||
|
||||
- Modified the parsing of raw transactions for shielded outputs
|
||||
- Upgraded to GHC 9.6.5
|
||||
|
||||
## [0.6.2.0]
|
||||
|
||||
### Changed
|
||||
|
||||
- Performance enhancement for transaction creation
|
||||
|
||||
## [0.6.1.1]
|
||||
|
||||
### Added
|
||||
|
||||
- Type for transaction creation errors
|
||||
- Types for Sapling circuit parameters
|
||||
- Function to create transaction
|
||||
- Function to derive distinct transparent spending keys
|
||||
|
||||
### Changed
|
||||
|
||||
- Add `Read` instance for `Rseed`
|
||||
|
||||
## [0.6.1.0]
|
||||
|
||||
### Added
|
||||
|
||||
- Function to create a raw transaction
|
||||
- New types for transaction creation:
|
||||
- `Rseed`
|
||||
- `TransparentTxSpend`
|
||||
- `SaplingTxSpend`
|
||||
- `OrchardTxSpend`
|
||||
- `OutgoingNote`
|
||||
- Rust crates:
|
||||
- `secp256k1`
|
||||
- `jubjub`
|
||||
- `rand_core`
|
||||
|
||||
|
||||
### Changed
|
||||
|
||||
- `DecodedNote` type now includes a field for `rho` and one for `rseed`
|
||||
|
||||
## [0.6.0.0]
|
||||
|
||||
### Added
|
||||
|
||||
- Rust crates:
|
||||
- `sapling-crypto` 0.1.3
|
||||
|
||||
### Changed
|
||||
|
||||
- Modified handling of `ShieldedOutput`s based on new Rust crates
|
||||
- Upgraded Rust crates:
|
||||
- `orchard` to 0.7.1
|
||||
- `zcash_primitives` to 0.14.0
|
||||
- `zcash_client_backend` to 0.11.1
|
||||
|
||||
|
||||
## [0.5.5.4]
|
||||
|
||||
### Added
|
||||
|
||||
- Functions to update Sapling witnesses.
|
||||
- Functions to update Orchard witnesses.
|
||||
|
||||
## [0.5.5.3]
|
||||
|
||||
### Added
|
||||
|
||||
- Added function to generate an `ExchangeAddress` in Human Readable Format Using a `TransparentAddress` in HRF
|
||||
- `encodeExchangeAddress` a function to create a `ExchangeAddress` in HRF
|
||||
- `decodeExchangeAddress` a function to obtain a `TransparentAddress` object from an `ExchangeAddress` in HRF
|
||||
- Added new type `ExchangeAddress`
|
||||
- Added unction to generate an ExchangeAddress in Human Readable Format Using a TransparentAddress in HRF
|
||||
`encodeExchangeAddress` a function to create a ExchangeAddress in HRF
|
||||
`decodeExchangeAddress` a function to obtaina a TransparentAddress object from an ExchangeAddress in HRF
|
||||
- Added new type ExchangeAddress
|
||||
|
||||
### Fixed
|
||||
|
||||
- Orchard note nullifier calculation
|
||||
- Sapling spend field parsing
|
||||
|
||||
## [0.5.5.2]
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
packages: ./*.cabal
|
||||
|
||||
with-compiler: ghc-9.6.5
|
||||
with-compiler: ghc-9.4.8
|
||||
|
||||
source-repository-package
|
||||
type: git
|
||||
|
|
|
@ -1,40 +1,40 @@
|
|||
active-repositories: hackage.haskell.org:merge
|
||||
constraints: any.Cabal ==3.10.3.0,
|
||||
any.Cabal-syntax ==3.10.3.0,
|
||||
constraints: any.Cabal ==3.8.1.0,
|
||||
any.Cabal-syntax ==3.8.1.0,
|
||||
any.HUnit ==1.6.2.0,
|
||||
any.OneTuple ==0.4.2,
|
||||
any.OneTuple ==0.4.1.1,
|
||||
any.QuickCheck ==2.14.3,
|
||||
QuickCheck -old-random +templatehaskell,
|
||||
any.StateVar ==1.2.2,
|
||||
any.aeson ==2.2.3.0,
|
||||
any.aeson ==2.2.1.0,
|
||||
aeson +ordered-keymap,
|
||||
any.alex ==3.5.1.0,
|
||||
any.ansi-terminal ==1.1.1,
|
||||
any.ansi-terminal ==1.1,
|
||||
ansi-terminal -example,
|
||||
any.ansi-terminal-types ==1.1,
|
||||
any.appar ==0.1.8,
|
||||
any.array ==0.5.6.0,
|
||||
any.array ==0.5.4.0,
|
||||
any.asn1-encoding ==0.9.6,
|
||||
any.asn1-parse ==0.9.5,
|
||||
any.asn1-types ==0.3.4,
|
||||
any.assoc ==1.1.1,
|
||||
assoc -tagged,
|
||||
any.assoc ==1.1,
|
||||
assoc +tagged,
|
||||
any.async ==2.2.5,
|
||||
async -bench,
|
||||
any.attoparsec ==0.14.4,
|
||||
attoparsec -developer,
|
||||
any.attoparsec-aeson ==2.2.2.0,
|
||||
any.base ==4.18.2.1,
|
||||
any.base-orphans ==0.9.2,
|
||||
any.attoparsec-aeson ==2.2.0.1,
|
||||
any.base ==4.17.2.1,
|
||||
any.base-orphans ==0.9.1,
|
||||
any.base16 ==1.0,
|
||||
any.base16-bytestring ==1.0.2.0,
|
||||
any.base58-bytestring ==0.1.0,
|
||||
any.base64-bytestring ==1.2.1.0,
|
||||
any.basement ==0.0.16,
|
||||
any.bifunctors ==5.6.2,
|
||||
any.bifunctors ==5.6.1,
|
||||
bifunctors +tagged,
|
||||
any.binary ==0.8.9.1,
|
||||
any.binary-orphans ==1.0.5,
|
||||
any.binary-orphans ==1.0.4.1,
|
||||
any.bitvec ==1.1.5.0,
|
||||
bitvec +simd,
|
||||
any.blaze-builder ==0.4.2.3,
|
||||
|
@ -50,7 +50,6 @@ constraints: any.Cabal ==3.10.3.0,
|
|||
cborg +optimize-gmp,
|
||||
any.cereal ==0.5.8.3,
|
||||
cereal -bytestring-builder,
|
||||
any.character-ps ==0.1,
|
||||
any.colour ==2.3.6,
|
||||
any.comonad ==5.0.8,
|
||||
comonad +containers +distributive +indexed-traversable,
|
||||
|
@ -60,10 +59,10 @@ constraints: any.Cabal ==3.10.3.0,
|
|||
any.contravariant ==1.5.5,
|
||||
contravariant +semigroups +statevar +tagged,
|
||||
any.cookie ==0.5.0,
|
||||
any.crypton ==1.0.0,
|
||||
any.crypton ==0.34,
|
||||
crypton -check_alignment +integer-gmp -old_toolchain_inliner +support_aesni +support_deepseq +support_pclmuldq +support_rdrand -support_sse +use_target_attributes,
|
||||
any.crypton-connection ==0.4.1,
|
||||
any.crypton-x509 ==1.7.7,
|
||||
any.crypton-connection ==0.3.2,
|
||||
any.crypton-x509 ==1.7.6,
|
||||
any.crypton-x509-store ==1.6.9,
|
||||
any.crypton-x509-system ==1.6.7,
|
||||
any.crypton-x509-validation ==1.6.12,
|
||||
|
@ -74,47 +73,49 @@ constraints: any.Cabal ==3.10.3.0,
|
|||
any.data-default-instances-containers ==0.0.1,
|
||||
any.data-default-instances-dlist ==0.0.1,
|
||||
any.data-default-instances-old-locale ==0.0.1,
|
||||
any.data-fix ==0.3.3,
|
||||
any.deepseq ==1.4.8.1,
|
||||
any.directory ==1.3.8.4,
|
||||
any.data-fix ==0.3.2,
|
||||
any.deepseq ==1.4.8.0,
|
||||
any.directory ==1.3.7.1,
|
||||
any.distributive ==0.6.2.1,
|
||||
distributive +semigroups +tagged,
|
||||
any.dlist ==1.0,
|
||||
dlist -werror,
|
||||
any.entropy ==0.4.1.10,
|
||||
entropy -donotgetentropy,
|
||||
any.envy ==2.1.3.0,
|
||||
any.exceptions ==0.10.7,
|
||||
any.filepath ==1.4.300.1,
|
||||
any.envy ==2.1.2.0,
|
||||
any.exceptions ==0.10.5,
|
||||
any.filepath ==1.4.2.2,
|
||||
any.foldable1-classes-compat ==0.1,
|
||||
foldable1-classes-compat +tagged,
|
||||
any.foreign-rust ==0.1.0,
|
||||
any.generically ==0.1.1,
|
||||
any.generics-sop ==0.5.1.4,
|
||||
any.ghc-bignum ==1.3,
|
||||
any.ghc-boot-th ==9.6.5,
|
||||
any.ghc-prim ==0.10.0,
|
||||
any.ghc-boot-th ==9.4.8,
|
||||
any.ghc-prim ==0.9.1,
|
||||
any.half ==0.3.1,
|
||||
any.happy ==1.20.1.1,
|
||||
any.hashable ==1.4.7.0,
|
||||
hashable -arch-native +integer-gmp -random-initial-seed,
|
||||
any.hashable ==1.4.3.0,
|
||||
hashable +integer-gmp -random-initial-seed,
|
||||
any.haskell-lexer ==1.1.1,
|
||||
any.haskoin-core ==1.1.0,
|
||||
any.haskoin-core ==1.0.4,
|
||||
any.hexstring ==0.12.1.0,
|
||||
any.hourglass ==0.2.12,
|
||||
any.hsc2hs ==0.68.10,
|
||||
hsc2hs -in-ghc-tree,
|
||||
any.hspec ==2.11.9,
|
||||
any.hspec-core ==2.11.9,
|
||||
any.hspec-discover ==2.11.9,
|
||||
any.hspec ==2.11.7,
|
||||
any.hspec-core ==2.11.7,
|
||||
any.hspec-discover ==2.11.7,
|
||||
any.hspec-expectations ==0.8.4,
|
||||
any.http-client ==0.7.17,
|
||||
any.http-client ==0.7.16,
|
||||
http-client +network-uri,
|
||||
any.http-client-tls ==0.3.6.3,
|
||||
any.http-conduit ==2.3.8.3,
|
||||
http-conduit +aeson,
|
||||
any.http-types ==0.12.4,
|
||||
any.indexed-traversable ==0.1.4,
|
||||
any.indexed-traversable-instances ==0.1.2,
|
||||
any.integer-conversion ==0.1.1,
|
||||
any.indexed-traversable ==0.1.3,
|
||||
any.indexed-traversable-instances ==0.1.1.2,
|
||||
any.integer-conversion ==0.1.0.1,
|
||||
any.integer-gmp ==1.1,
|
||||
any.integer-logarithms ==1.0.3.1,
|
||||
integer-logarithms -check-bounds +integer-gmp,
|
||||
|
@ -125,21 +126,19 @@ constraints: any.Cabal ==3.10.3.0,
|
|||
memory +support_bytestring +support_deepseq,
|
||||
any.mime-types ==0.1.2.0,
|
||||
any.mono-traversable ==1.0.17.0,
|
||||
any.mtl ==2.3.1,
|
||||
any.mtl ==2.2.2,
|
||||
any.murmur3 ==1.0.5,
|
||||
any.network ==3.2.1.0,
|
||||
any.network ==3.1.4.0,
|
||||
network -devel,
|
||||
any.network-uri ==2.6.4.2,
|
||||
any.old-locale ==1.0.0.7,
|
||||
any.old-time ==1.1.0.4,
|
||||
any.os-string ==2.0.6,
|
||||
any.parsec ==3.1.16.1,
|
||||
any.pem ==0.2.4,
|
||||
any.pretty ==1.1.3.6,
|
||||
any.primitive ==0.9.0.0,
|
||||
any.process ==1.6.19.0,
|
||||
any.process ==1.6.18.0,
|
||||
any.quickcheck-io ==0.2.0,
|
||||
any.quickcheck-transformer ==0.3.1.2,
|
||||
any.random ==1.2.1.2,
|
||||
any.regex-base ==0.94.0.2,
|
||||
any.regex-compat ==0.95.2.1,
|
||||
|
@ -148,12 +147,12 @@ constraints: any.Cabal ==3.10.3.0,
|
|||
any.resourcet ==1.3.0,
|
||||
any.rts ==1.0.2,
|
||||
any.safe ==0.3.21,
|
||||
any.scientific ==0.3.8.0,
|
||||
scientific -integer-simple,
|
||||
any.secp256k1-haskell ==1.2.0,
|
||||
any.semialign ==1.3.1,
|
||||
any.scientific ==0.3.7.0,
|
||||
scientific -bytestring-builder -integer-simple,
|
||||
any.secp256k1-haskell ==1.1.0,
|
||||
any.semialign ==1.3,
|
||||
semialign +semigroupoids,
|
||||
any.semigroupoids ==6.0.1,
|
||||
any.semigroupoids ==6.0.0.1,
|
||||
semigroupoids +comonad +containers +contravariant +distributive +tagged +unordered-containers,
|
||||
any.serialise ==0.2.6.1,
|
||||
serialise +newtime15,
|
||||
|
@ -169,39 +168,40 @@ constraints: any.Cabal ==3.10.3.0,
|
|||
any.string-conversions ==0.4.0.1,
|
||||
any.tagged ==0.8.8,
|
||||
tagged +deepseq +transformers,
|
||||
any.template-haskell ==2.20.0.0,
|
||||
any.template-haskell ==2.19.0.0,
|
||||
any.text ==2.0.2,
|
||||
any.text-iso8601 ==0.1.1,
|
||||
any.text-short ==0.1.6,
|
||||
any.text-iso8601 ==0.1,
|
||||
any.text-short ==0.1.5,
|
||||
text-short -asserts,
|
||||
any.tf-random ==0.5,
|
||||
any.th-abstraction ==0.7.0.0,
|
||||
any.th-compat ==0.1.5,
|
||||
any.these ==1.2.1,
|
||||
any.th-abstraction ==0.6.0.0,
|
||||
any.th-compat ==0.1.4,
|
||||
any.these ==1.2,
|
||||
any.time ==1.12.2,
|
||||
any.time-compat ==1.9.7,
|
||||
any.tls ==2.1.0,
|
||||
any.time-compat ==1.9.6.1,
|
||||
time-compat -old-locale,
|
||||
any.tls ==2.0.1,
|
||||
tls -devel,
|
||||
any.transformers ==0.6.1.0,
|
||||
any.transformers ==0.5.6.2,
|
||||
any.transformers-compat ==0.7.2,
|
||||
transformers-compat -five +five-three -four +generic-deriving +mtl -three -two,
|
||||
any.typed-process ==0.2.11.1,
|
||||
any.unix ==2.8.4.0,
|
||||
any.unix-time ==0.4.15,
|
||||
any.unix ==2.7.3,
|
||||
any.unix-time ==0.4.12,
|
||||
any.unliftio-core ==0.2.1.0,
|
||||
any.unordered-containers ==0.2.20,
|
||||
unordered-containers -debug,
|
||||
any.utf8-string ==1.0.2,
|
||||
any.uuid-types ==1.0.6,
|
||||
any.uuid-types ==1.0.5.1,
|
||||
any.vector ==0.13.1.0,
|
||||
vector +boundschecks -internalchecks -unsafechecks -wall,
|
||||
any.vector-algorithms ==0.9.0.2,
|
||||
any.vector-algorithms ==0.9.0.1,
|
||||
vector-algorithms +bench +boundschecks -internalchecks -llvm +properties -unsafechecks,
|
||||
any.vector-stream ==0.1.0.1,
|
||||
any.void ==0.7.3,
|
||||
void -safe,
|
||||
any.wide-word ==0.1.6.0,
|
||||
any.witherable ==0.5,
|
||||
any.zlib ==0.7.1.0,
|
||||
any.witherable ==0.4.2,
|
||||
any.zlib ==0.7.0.0,
|
||||
zlib -bundled-c-zlib +non-blocking-ffi +pkg-config
|
||||
index-state: hackage.haskell.org 2024-07-01T20:28:56Z
|
||||
index-state: hackage.haskell.org 2024-03-06T20:26:39Z
|
||||
|
|
6
configure
vendored
6
configure
vendored
|
@ -1,5 +1,5 @@
|
|||
#!/bin/bash
|
||||
echo -e "\n"
|
||||
echo "export PKG_CONFIG_PATH=$(pwd)/librustzcash-wrapper/target/x86_64-unknown-linux-gnu/debug:\$PKG_CONFIG_PATH" | tee -a ~/.bashrc
|
||||
echo "export LD_LIBRARY_PATH=$(pwd)/librustzcash-wrapper/target/x86_64-unknown-linux-gnu/debug:\$LD_LIBRARY_PATH" | tee -a ~/.bashrc
|
||||
|
||||
echo "export PKG_CONFIG_PATH=$HOME/.local/share/zcash-haskell:\$PKG_CONFIG_PATH" | tee -a ~/.bashrc
|
||||
echo "export LD_LIBRARY_PATH=$HOME/.local/share/zcash-haskell:\$LD_LIBRARY_PATH" | tee -a ~/.bashrc
|
||||
source ~/.bashrc
|
||||
|
|
325
librustzcash-wrapper/Cargo.lock
generated
325
librustzcash-wrapper/Cargo.lock
generated
|
@ -88,27 +88,6 @@ version = "0.11.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d965446196e3b7decd44aa7ee49e31d630118f90ef12f97900f262eb915c951d"
|
||||
|
||||
[[package]]
|
||||
name = "bellman"
|
||||
version = "0.14.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9afceed28bac7f9f5a508bca8aeeff51cdfa4770c0b967ac55c621e2ddfd6171"
|
||||
dependencies = [
|
||||
"bitvec",
|
||||
"blake2s_simd",
|
||||
"byteorder",
|
||||
"crossbeam-channel",
|
||||
"ff",
|
||||
"group",
|
||||
"lazy_static",
|
||||
"log",
|
||||
"num_cpus",
|
||||
"pairing",
|
||||
"rand_core",
|
||||
"rayon",
|
||||
"subtle",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bincode"
|
||||
version = "1.3.3"
|
||||
|
@ -318,12 +297,6 @@ dependencies = [
|
|||
"tinyvec",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bumpalo"
|
||||
version = "3.15.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8ea184aa71bb362a1157c896979544cc23974e08fd265f29ea96b59f0b4a555b"
|
||||
|
||||
[[package]]
|
||||
name = "byteorder"
|
||||
version = "1.4.3"
|
||||
|
@ -495,15 +468,6 @@ dependencies = [
|
|||
"subtle",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "document-features"
|
||||
version = "0.2.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ef5282ad69563b5fc40319526ba27e0e7363d552a896f0297d54f767717f9b95"
|
||||
dependencies = [
|
||||
"litrs",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "either"
|
||||
version = "1.8.1"
|
||||
|
@ -709,19 +673,6 @@ dependencies = [
|
|||
"syn 1.0.109",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hdwallet"
|
||||
version = "0.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5a03ba7d4c9ea41552cd4351965ff96883e629693ae85005c501bb4b9e1c48a7"
|
||||
dependencies = [
|
||||
"lazy_static",
|
||||
"rand_core",
|
||||
"ring",
|
||||
"secp256k1",
|
||||
"thiserror",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "heck"
|
||||
version = "0.4.1"
|
||||
|
@ -760,9 +711,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "incrementalmerkletree"
|
||||
version = "0.5.1"
|
||||
version = "0.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "eb1872810fb725b06b8c153dde9e86f3ec26747b9b60096da7a869883b549cbe"
|
||||
checksum = "361c467824d4d9d4f284be4b2608800839419dccc4d4608f28345237fe354623"
|
||||
dependencies = [
|
||||
"either",
|
||||
]
|
||||
|
@ -815,15 +766,6 @@ dependencies = [
|
|||
"either",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "js-sys"
|
||||
version = "0.3.68"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "406cda4b368d531c842222cf9d2600a9a4acce8d29423695379c6868a143a9ee"
|
||||
dependencies = [
|
||||
"wasm-bindgen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "jubjub"
|
||||
version = "0.10.0"
|
||||
|
@ -865,12 +807,6 @@ version = "0.3.8"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
|
||||
|
||||
[[package]]
|
||||
name = "litrs"
|
||||
version = "0.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5"
|
||||
|
||||
[[package]]
|
||||
name = "log"
|
||||
version = "0.4.19"
|
||||
|
@ -999,9 +935,9 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
|
|||
|
||||
[[package]]
|
||||
name = "orchard"
|
||||
version = "0.7.1"
|
||||
version = "0.6.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1fb255c3ffdccd3c84fe9ebed72aef64fdc72e6a3e4180dd411002d47abaad42"
|
||||
checksum = "5d31e68534df32024dcc89a8390ec6d7bef65edd87d91b45cfb481a2eb2d77c5"
|
||||
dependencies = [
|
||||
"aes",
|
||||
"bitvec",
|
||||
|
@ -1023,8 +959,6 @@ dependencies = [
|
|||
"subtle",
|
||||
"tracing",
|
||||
"zcash_note_encryption",
|
||||
"zcash_spec",
|
||||
"zip32",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -1284,19 +1218,6 @@ dependencies = [
|
|||
"zeroize",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "redjubjub"
|
||||
version = "0.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7a60db2c3bc9c6fd1e8631fee75abc008841d27144be744951d6b9b75f9b569c"
|
||||
dependencies = [
|
||||
"rand_core",
|
||||
"reddsa",
|
||||
"serde",
|
||||
"thiserror",
|
||||
"zeroize",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "redox_syscall"
|
||||
version = "0.3.5"
|
||||
|
@ -1341,30 +1262,6 @@ version = "0.7.2"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78"
|
||||
|
||||
[[package]]
|
||||
name = "ring"
|
||||
version = "0.16.20"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
|
||||
dependencies = [
|
||||
"cc",
|
||||
"libc",
|
||||
"once_cell",
|
||||
"spin",
|
||||
"untrusted",
|
||||
"web-sys",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ripemd"
|
||||
version = "0.1.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f"
|
||||
dependencies = [
|
||||
"digest 0.10.7",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustix"
|
||||
version = "0.37.20"
|
||||
|
@ -1388,13 +1285,9 @@ dependencies = [
|
|||
"f4jumble",
|
||||
"haskell-ffi",
|
||||
"incrementalmerkletree",
|
||||
"jubjub",
|
||||
"nonempty",
|
||||
"orchard",
|
||||
"proc-macro2",
|
||||
"rand_core",
|
||||
"sapling-crypto",
|
||||
"secp256k1",
|
||||
"zcash_address 0.2.0",
|
||||
"zcash_client_backend",
|
||||
"zcash_note_encryption",
|
||||
|
@ -1402,62 +1295,12 @@ dependencies = [
|
|||
"zip32",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sapling-crypto"
|
||||
version = "0.1.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "02f4270033afcb0c74c5c7d59c73cfd1040367f67f224fe7ed9a919ae618f1b7"
|
||||
dependencies = [
|
||||
"aes",
|
||||
"bellman",
|
||||
"bitvec",
|
||||
"blake2b_simd",
|
||||
"blake2s_simd",
|
||||
"bls12_381",
|
||||
"byteorder",
|
||||
"document-features",
|
||||
"ff",
|
||||
"fpe",
|
||||
"group",
|
||||
"hex",
|
||||
"incrementalmerkletree",
|
||||
"jubjub",
|
||||
"lazy_static",
|
||||
"memuse",
|
||||
"rand",
|
||||
"rand_core",
|
||||
"redjubjub",
|
||||
"subtle",
|
||||
"tracing",
|
||||
"zcash_note_encryption",
|
||||
"zcash_spec",
|
||||
"zip32",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "scopeguard"
|
||||
version = "1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
|
||||
|
||||
[[package]]
|
||||
name = "secp256k1"
|
||||
version = "0.26.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4124a35fe33ae14259c490fd70fa199a32b9ce9502f2ee6bc4f81ec06fa65894"
|
||||
dependencies = [
|
||||
"secp256k1-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "secp256k1-sys"
|
||||
version = "0.8.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "70a129b9e9efbfb223753b9163c4ab3b13cff7fd9c7f010fbac25ab4099fa07e"
|
||||
dependencies = [
|
||||
"cc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "secrecy"
|
||||
version = "0.8.0"
|
||||
|
@ -1513,9 +1356,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "shardtree"
|
||||
version = "0.2.0"
|
||||
version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dbf20c7a2747d9083092e3a3eeb9a7ed75577ae364896bebbc5e0bdcd4e97735"
|
||||
checksum = "c19f96dde3a8693874f7e7c53d95616569b4009379a903789efbd448f4ea9cc7"
|
||||
dependencies = [
|
||||
"bitflags 2.4.2",
|
||||
"either",
|
||||
|
@ -1734,12 +1577,6 @@ dependencies = [
|
|||
"subtle",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "untrusted"
|
||||
version = "0.7.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
|
||||
|
||||
[[package]]
|
||||
name = "version_check"
|
||||
version = "0.9.4"
|
||||
|
@ -1752,70 +1589,6 @@ version = "0.11.0+wasi-snapshot-preview1"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
|
||||
|
||||
[[package]]
|
||||
name = "wasm-bindgen"
|
||||
version = "0.2.92"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"wasm-bindgen-macro",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wasm-bindgen-backend"
|
||||
version = "0.2.92"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da"
|
||||
dependencies = [
|
||||
"bumpalo",
|
||||
"log",
|
||||
"once_cell",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.32",
|
||||
"wasm-bindgen-shared",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wasm-bindgen-macro"
|
||||
version = "0.2.92"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726"
|
||||
dependencies = [
|
||||
"quote",
|
||||
"wasm-bindgen-macro-support",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wasm-bindgen-macro-support"
|
||||
version = "0.2.92"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.32",
|
||||
"wasm-bindgen-backend",
|
||||
"wasm-bindgen-shared",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wasm-bindgen-shared"
|
||||
version = "0.2.92"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96"
|
||||
|
||||
[[package]]
|
||||
name = "web-sys"
|
||||
version = "0.3.68"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "96565907687f7aceb35bc5fc03770a8a0471d82e479f25832f54a0e3f4b28446"
|
||||
dependencies = [
|
||||
"js-sys",
|
||||
"wasm-bindgen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "which"
|
||||
version = "4.4.0"
|
||||
|
@ -1827,28 +1600,6 @@ dependencies = [
|
|||
"once_cell",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "winapi"
|
||||
version = "0.3.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
|
||||
dependencies = [
|
||||
"winapi-i686-pc-windows-gnu",
|
||||
"winapi-x86_64-pc-windows-gnu",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "winapi-i686-pc-windows-gnu"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
|
||||
|
||||
[[package]]
|
||||
name = "winapi-x86_64-pc-windows-gnu"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
||||
|
||||
[[package]]
|
||||
name = "windows-sys"
|
||||
version = "0.48.0"
|
||||
|
@ -1950,27 +1701,24 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "zcash_client_backend"
|
||||
version = "0.11.1"
|
||||
version = "0.10.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "001ec65dc2828ee648dc6d29f0944d7a877fe68ad06e001a203c11770ab1b3d4"
|
||||
checksum = "d6a382af39be9ee5a3788157145c404b7cd19acc440903f6c34b09fb44f0e991"
|
||||
dependencies = [
|
||||
"base64",
|
||||
"bech32 0.9.1",
|
||||
"bls12_381",
|
||||
"bs58 0.5.0",
|
||||
"crossbeam-channel",
|
||||
"document-features",
|
||||
"group",
|
||||
"hex",
|
||||
"incrementalmerkletree",
|
||||
"memuse",
|
||||
"nom",
|
||||
"nonempty",
|
||||
"orchard",
|
||||
"percent-encoding",
|
||||
"prost",
|
||||
"rand_core",
|
||||
"rayon",
|
||||
"sapling-crypto",
|
||||
"secrecy",
|
||||
"shardtree",
|
||||
"subtle",
|
||||
|
@ -1980,10 +1728,8 @@ dependencies = [
|
|||
"which",
|
||||
"zcash_address 0.3.1",
|
||||
"zcash_encoding",
|
||||
"zcash_keys",
|
||||
"zcash_note_encryption",
|
||||
"zcash_primitives",
|
||||
"zip32",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -1996,29 +1742,6 @@ dependencies = [
|
|||
"nonempty",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zcash_keys"
|
||||
version = "0.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4f22d3407fdd6992b49f037f23862ab376be6013be6f2d0bc85948a635edc1f5"
|
||||
dependencies = [
|
||||
"bech32 0.9.1",
|
||||
"bls12_381",
|
||||
"bs58 0.5.0",
|
||||
"document-features",
|
||||
"group",
|
||||
"memuse",
|
||||
"nonempty",
|
||||
"rand_core",
|
||||
"sapling-crypto",
|
||||
"subtle",
|
||||
"tracing",
|
||||
"zcash_address 0.3.1",
|
||||
"zcash_encoding",
|
||||
"zcash_primitives",
|
||||
"zip32",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zcash_note_encryption"
|
||||
version = "0.4.0"
|
||||
|
@ -2034,49 +1757,35 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "zcash_primitives"
|
||||
version = "0.14.0"
|
||||
version = "0.13.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9070e084570bb78aed4f8d71fd6254492e62c87a5d01e084183980e98117092d"
|
||||
checksum = "d17e4c94ca8d69d2fcf2be97522da5732a580eb2125cda3b150761952f8df8e6"
|
||||
dependencies = [
|
||||
"aes",
|
||||
"bip0039",
|
||||
"bitvec",
|
||||
"blake2b_simd",
|
||||
"blake2s_simd",
|
||||
"bls12_381",
|
||||
"byteorder",
|
||||
"document-features",
|
||||
"equihash",
|
||||
"ff",
|
||||
"fpe",
|
||||
"group",
|
||||
"hdwallet",
|
||||
"hex",
|
||||
"incrementalmerkletree",
|
||||
"jubjub",
|
||||
"lazy_static",
|
||||
"memuse",
|
||||
"nonempty",
|
||||
"orchard",
|
||||
"rand",
|
||||
"rand_core",
|
||||
"redjubjub",
|
||||
"ripemd",
|
||||
"sapling-crypto",
|
||||
"secp256k1",
|
||||
"sha2 0.10.6",
|
||||
"subtle",
|
||||
"tracing",
|
||||
"zcash_address 0.3.1",
|
||||
"zcash_encoding",
|
||||
"zcash_note_encryption",
|
||||
"zcash_spec",
|
||||
"zip32",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zcash_spec"
|
||||
version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b7a3bf58b673cb3dacd8ae09ba345998923a197ab0da70d6239d8e8838949e9b"
|
||||
dependencies = [
|
||||
"blake2b_simd",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -2101,9 +1810,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "zip32"
|
||||
version = "0.1.1"
|
||||
version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4226d0aee9c9407c27064dfeec9d7b281c917de3374e1e5a2e2cfad9e09de19e"
|
||||
checksum = "d724a63be4dfb50b7f3617e542984e22e4b4a5b8ca5de91f55613152885e6b22"
|
||||
dependencies = [
|
||||
"blake2b_simd",
|
||||
"memuse",
|
||||
|
|
|
@ -11,18 +11,14 @@ f4jumble = "0.1"
|
|||
zcash_address = "0.2.0"
|
||||
borsh = "0.10"
|
||||
bech32 = "0.11"
|
||||
orchard = "0.7.1"
|
||||
orchard = "0.6.0"
|
||||
zcash_note_encryption = "0.4.0"
|
||||
zcash_primitives = { version = "0.14.0", features = ["transparent-inputs"]}
|
||||
zcash_client_backend = "0.11.1"
|
||||
sapling-crypto = "0.1.3"
|
||||
zcash_primitives = "0.13.0"
|
||||
zcash_client_backend = "0.10.0"
|
||||
zip32 = "0.1.0"
|
||||
proc-macro2 = "1.0.66"
|
||||
nonempty = "0.7.0"
|
||||
incrementalmerkletree = "0.5.0"
|
||||
secp256k1 = "0.26.0"
|
||||
jubjub = "0.10.0"
|
||||
rand_core = { version = "0.6.4", features = ["getrandom"]}
|
||||
|
||||
|
||||
[features]
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -96,7 +96,7 @@ import ZcashHaskell.Types
|
|||
|
||||
{# fun unsafe rust_wrapper_sapling_note_decrypt_v2 as rustWrapperSaplingNoteDecode
|
||||
{ toBorshVar* `BS.ByteString'&
|
||||
, toBorshVar* `ShieldedOutput'&
|
||||
, toBorshVar* `BS.ByteString'&
|
||||
, getVarBuffer `Buffer DecodedNote'&
|
||||
}
|
||||
-> `()'
|
||||
|
@ -104,7 +104,7 @@ import ZcashHaskell.Types
|
|||
|
||||
{# fun unsafe rust_wrapper_sapling_esk_decrypt as rustWrapperSaplingDecodeEsk
|
||||
{ toBorshVar* `BS.ByteString'&
|
||||
, toBorshVar* `ShieldedOutput'&
|
||||
, toBorshVar* `BS.ByteString'&
|
||||
, `Bool'
|
||||
, `Bool'
|
||||
, `Word64'
|
||||
|
@ -138,7 +138,7 @@ import ZcashHaskell.Types
|
|||
#}
|
||||
{# fun unsafe rust_wrapper_tx_parse as rustWrapperTxParse
|
||||
{ toBorshVar* `BS.ByteString'&
|
||||
, getVarBuffer `Buffer [ShieldedOutput]'&
|
||||
, getVarBuffer `Buffer [BS.ByteString]'&
|
||||
}
|
||||
-> `()'
|
||||
#}
|
||||
|
@ -259,36 +259,3 @@ import ZcashHaskell.Types
|
|||
}
|
||||
-> `Word64'
|
||||
#}
|
||||
|
||||
{# fun unsafe rust_wrapper_update_sapling_witness as rustWrapperUpdateSaplingWitness
|
||||
{ toBorshVar* `BS.ByteString'&
|
||||
, toBorshVar* `[BS.ByteString]'&
|
||||
, getVarBuffer `Buffer HexString'&
|
||||
}
|
||||
-> `()'
|
||||
#}
|
||||
|
||||
{# fun unsafe rust_wrapper_update_orchard_witness as rustWrapperUpdateOrchardWitness
|
||||
{ toBorshVar* `BS.ByteString'&
|
||||
, toBorshVar* `[BS.ByteString]'&
|
||||
, getVarBuffer `Buffer HexString'&
|
||||
}
|
||||
-> `()'
|
||||
#}
|
||||
|
||||
{# fun unsafe rust_wrapper_create_transaction as rustWrapperCreateTx
|
||||
{ toBorshVar* `BS.ByteString'&
|
||||
, toBorshVar* `BS.ByteString'&
|
||||
, toBorshVar* `[TransparentTxSpend]'&
|
||||
, toBorshVar* `[SaplingTxSpend]'&
|
||||
, toBorshVar* `[OrchardTxSpend]'&
|
||||
, toBorshVar* `[OutgoingNote]'&
|
||||
, toBorshVar* `BS.ByteString'&
|
||||
, toBorshVar* `BS.ByteString'&
|
||||
, `Bool'
|
||||
, `Word64'
|
||||
, `Bool'
|
||||
, getVarBuffer `Buffer HexString'&
|
||||
}
|
||||
-> `()'
|
||||
#}
|
||||
|
|
|
@ -28,7 +28,6 @@ import C.Zcash
|
|||
, rustWrapperReadOrchardWitness
|
||||
, rustWrapperUADecode
|
||||
, rustWrapperUfvkDecode
|
||||
, rustWrapperUpdateOrchardWitness
|
||||
)
|
||||
import qualified Data.ByteString as BS
|
||||
import qualified Data.ByteString.Char8 as C
|
||||
|
@ -220,9 +219,3 @@ getOrchardWitness tree =
|
|||
getOrchardNotePosition :: OrchardWitness -> Integer
|
||||
getOrchardNotePosition =
|
||||
fromIntegral . rustWrapperReadOrchardPosition . hexBytes . orchWit
|
||||
|
||||
updateOrchardWitness :: OrchardWitness -> [HexString] -> OrchardWitness
|
||||
updateOrchardWitness wit cmus =
|
||||
OrchardWitness $
|
||||
withPureBorshVarBuffer $
|
||||
rustWrapperUpdateOrchardWitness (toBytes $ orchWit wit) (map toBytes cmus)
|
||||
|
|
|
@ -18,11 +18,11 @@
|
|||
module ZcashHaskell.Sapling where
|
||||
|
||||
import C.Zcash
|
||||
( rustWrapperDecodeSaplingAddress
|
||||
, rustWrapperIsShielded
|
||||
( rustWrapperIsShielded
|
||||
, rustWrapperReadSaplingCommitmentTree
|
||||
, rustWrapperReadSaplingPosition
|
||||
, rustWrapperReadSaplingWitness
|
||||
, rustWrapperDecodeSaplingAddress
|
||||
, rustWrapperSaplingCheck
|
||||
, rustWrapperSaplingChgPaymentAddress
|
||||
, rustWrapperSaplingDecodeEsk
|
||||
|
@ -31,26 +31,25 @@ import C.Zcash
|
|||
, rustWrapperSaplingSpendingkey
|
||||
, rustWrapperSaplingVkDecode
|
||||
, rustWrapperTxParse
|
||||
, rustWrapperUpdateSaplingWitness
|
||||
)
|
||||
import Data.Aeson
|
||||
import qualified Data.ByteString as BS
|
||||
import qualified Data.ByteString.Char8 as C
|
||||
import Data.HexString (HexString(..), fromText, hexString, toBytes, toText)
|
||||
import qualified Data.Text as T
|
||||
import Data.HexString (HexString(..), fromText, hexString, toBytes, toText)
|
||||
import Data.Word
|
||||
import Foreign.Rust.Marshall.Variable
|
||||
( withPureBorshVarBuffer
|
||||
, withPureBorshVarBuffer
|
||||
)
|
||||
import ZcashHaskell.Types
|
||||
import ZcashHaskell.Types
|
||||
import ZcashHaskell.Utils (decodeBech32, encodeBech32, encodeBech32m)
|
||||
|
||||
-- | Check if given bytesting is a valid encoded shielded address
|
||||
isValidShieldedAddress :: BS.ByteString -> Bool
|
||||
isValidShieldedAddress = rustWrapperIsShielded
|
||||
|
||||
getShieldedOutputs :: HexString -> [ShieldedOutput]
|
||||
getShieldedOutputs :: HexString -> [BS.ByteString]
|
||||
getShieldedOutputs t = withPureBorshVarBuffer $ rustWrapperTxParse $ toBytes t
|
||||
|
||||
serializeShieldedOutput :: ShieldedOutput -> BS.ByteString
|
||||
|
@ -76,7 +75,7 @@ matchSaplingAddress :: BS.ByteString -> BS.ByteString -> Bool
|
|||
matchSaplingAddress = rustWrapperSaplingCheck
|
||||
|
||||
-- | Attempt to decode the given raw tx with the given Sapling viewing key
|
||||
decodeSaplingOutput :: BS.ByteString -> ShieldedOutput -> Maybe DecodedNote
|
||||
decodeSaplingOutput :: BS.ByteString -> BS.ByteString -> Maybe DecodedNote
|
||||
decodeSaplingOutput key out =
|
||||
case a_value decodedAction of
|
||||
0 -> Nothing
|
||||
|
@ -95,35 +94,12 @@ instance FromJSON RawTxResponse where
|
|||
c <- obj .: "confirmations"
|
||||
b <- obj .: "blocktime"
|
||||
sSpend <- obj .: "vShieldedSpend"
|
||||
sOut <- obj .: "vShieldedOutput"
|
||||
case o of
|
||||
Nothing ->
|
||||
pure $
|
||||
RawTxResponse
|
||||
i
|
||||
h
|
||||
sSpend
|
||||
(if not (null (sOut :: [Object]))
|
||||
then getShieldedOutputs h
|
||||
else [])
|
||||
[]
|
||||
ht
|
||||
c
|
||||
b
|
||||
pure $ RawTxResponse i h sSpend (getShieldedOutputs h) [] ht c b
|
||||
Just o' -> do
|
||||
a <- o' .: "actions"
|
||||
pure $
|
||||
RawTxResponse
|
||||
i
|
||||
h
|
||||
sSpend
|
||||
(if not (null sOut)
|
||||
then getShieldedOutputs h
|
||||
else [])
|
||||
a
|
||||
ht
|
||||
c
|
||||
b
|
||||
pure $ RawTxResponse i h sSpend (getShieldedOutputs h) a ht c b
|
||||
|
||||
-- | Attempt to decode the given raw tx with the given Sapling spending key
|
||||
decodeSaplingOutputEsk ::
|
||||
|
@ -142,7 +118,7 @@ decodeSaplingOutputEsk key out znet scope pos =
|
|||
withPureBorshVarBuffer $
|
||||
rustWrapperSaplingDecodeEsk
|
||||
(getBytes key)
|
||||
out
|
||||
(serializeShieldedOutput out)
|
||||
(scope == External)
|
||||
(znet == MainNet)
|
||||
(fromIntegral pos)
|
||||
|
@ -216,37 +192,32 @@ getSaplingNotePosition :: SaplingWitness -> Integer
|
|||
getSaplingNotePosition =
|
||||
fromIntegral . rustWrapperReadSaplingPosition . hexBytes . sapWit
|
||||
|
||||
updateSaplingWitness :: SaplingWitness -> [HexString] -> SaplingWitness
|
||||
updateSaplingWitness wit cmus =
|
||||
SaplingWitness $
|
||||
withPureBorshVarBuffer $
|
||||
rustWrapperUpdateSaplingWitness (toBytes $ sapWit wit) (map toBytes cmus)
|
||||
|
||||
-- | Encode a SaplingReceiver into HRF text
|
||||
encodeSaplingAddress :: ZcashNet -> SaplingReceiver -> Maybe T.Text
|
||||
encodeSaplingAddress net sr = do
|
||||
encodeSaplingAddress net sr = do
|
||||
case net of
|
||||
MainNet -> Just $ encodeBech32 (C.pack sapPaymentAddressHrp) (getBytes sr)
|
||||
MainNet ->
|
||||
Just $ encodeBech32 (C.pack sapPaymentAddressHrp) (getBytes sr)
|
||||
TestNet ->
|
||||
Just $ encodeBech32 (C.pack sapTestPaymentAddressHrp) (getBytes sr)
|
||||
|
||||
-- | Helper to get de Nework Id from FFI response
|
||||
getNetId :: [Word8] -> ZcashNet
|
||||
getNetId [x] = do
|
||||
case x of
|
||||
getNetId:: [Word8] -> ZcashNet
|
||||
getNetId [x] = do
|
||||
case x of
|
||||
1 -> MainNet
|
||||
2 -> TestNet
|
||||
2 -> TestNet
|
||||
|
||||
-- | decode a Sapling address
|
||||
decodeSaplingAddress :: BS.ByteString -> Maybe SaplingAddress
|
||||
decodeSaplingAddress sapling_address = do
|
||||
decodeSaplingAddress sapling_address = do
|
||||
if BS.length sa > 1
|
||||
then do
|
||||
let sa0 = BS.unpack sa
|
||||
Just $
|
||||
SaplingAddress (getNetId (take 1 sa0)) $
|
||||
SaplingReceiver (BS.pack (drop 1 sa0))
|
||||
Just $ SaplingAddress (getNetId (take 1 sa0))
|
||||
$ SaplingReceiver (BS.pack (drop 1 sa0))
|
||||
else Nothing
|
||||
where
|
||||
sa =
|
||||
withPureBorshVarBuffer $ rustWrapperDecodeSaplingAddress sapling_address
|
||||
where
|
||||
sa =
|
||||
withPureBorshVarBuffer $
|
||||
rustWrapperDecodeSaplingAddress sapling_address
|
||||
|
|
|
@ -21,9 +21,9 @@ import Crypto.Secp256k1
|
|||
import qualified Data.ByteArray as BA
|
||||
import qualified Data.ByteString as BS
|
||||
import Data.ByteString.Base58 (bitcoinAlphabet, decodeBase58, encodeBase58)
|
||||
import qualified Data.ByteString.Char8 as BC
|
||||
import Data.Char (chr)
|
||||
import Data.HexString
|
||||
import qualified Data.ByteString.Char8 as BC
|
||||
import Data.HexString
|
||||
import qualified Data.Text as T
|
||||
import qualified Data.Text.Encoding as E
|
||||
import Data.Word
|
||||
|
@ -31,7 +31,6 @@ import Haskoin.Address (Address(..))
|
|||
import qualified Haskoin.Crypto.Hash as H
|
||||
import Haskoin.Crypto.Keys.Extended
|
||||
import ZcashHaskell.Types
|
||||
|
||||
-- ( AccountId
|
||||
-- , CoinType(..)
|
||||
-- , Scope(..)
|
||||
|
@ -45,7 +44,7 @@ import ZcashHaskell.Types
|
|||
-- , getTransparentPrefix
|
||||
-- , getValue
|
||||
-- )
|
||||
import ZcashHaskell.Utils (decodeBech32, encodeBech32m)
|
||||
import ZcashHaskell.Utils( encodeBech32m, decodeBech32 )
|
||||
|
||||
-- | Required for `TransparentReceiver` encoding and decoding
|
||||
sha256 :: BS.ByteString -> BS.ByteString
|
||||
|
@ -101,22 +100,7 @@ genTransparentReceiver i scope xprvk = do
|
|||
ScriptAddress j -> return $ TransparentReceiver P2SH $ fromBinary j
|
||||
_anyOtherKind -> throwIO $ userError "Unsupported transparent address type"
|
||||
|
||||
-- | Generate a transparent receiver
|
||||
genTransparentSecretKey ::
|
||||
Int -- ^ The index of the address to be created
|
||||
-> Scope -- ^ `External` for wallet addresses or `Internal` for change addresses
|
||||
-> XPrvKey -- ^ The transparent private key
|
||||
-> IO TransparentSpendingKey
|
||||
genTransparentSecretKey i scope xprvk = do
|
||||
ioCtx <- createContext
|
||||
let s =
|
||||
case scope of
|
||||
External -> 0
|
||||
Internal -> 1
|
||||
let path = Deriv :/ s :/ fromIntegral i :: DerivPath
|
||||
return $ derivePath ioCtx path xprvk
|
||||
|
||||
-- | decode a Transparent Address in HRF and return a TransparentAddress object
|
||||
-- } decode a Transparent Address in HRF and return a TransparentAddress object
|
||||
decodeTransparentAddress :: BS.ByteString -> Maybe TransparentAddress
|
||||
decodeTransparentAddress taddress = do
|
||||
if BS.length taddress < 34
|
||||
|
@ -143,70 +127,60 @@ decodeTransparentAddress taddress = do
|
|||
189 ->
|
||||
Just $
|
||||
TransparentAddress MainNet $
|
||||
TransparentReceiver
|
||||
P2SH
|
||||
(fromRawBytes transparentReceiver)
|
||||
TransparentReceiver P2SH (fromRawBytes transparentReceiver)
|
||||
186 ->
|
||||
Just $
|
||||
TransparentAddress TestNet $
|
||||
TransparentReceiver
|
||||
P2SH
|
||||
(fromRawBytes transparentReceiver)
|
||||
TransparentReceiver P2SH (fromRawBytes transparentReceiver)
|
||||
184 ->
|
||||
Just $
|
||||
TransparentAddress MainNet $
|
||||
TransparentReceiver
|
||||
P2PKH
|
||||
(fromRawBytes transparentReceiver)
|
||||
TransparentReceiver P2PKH (fromRawBytes transparentReceiver)
|
||||
_ -> Nothing
|
||||
29 ->
|
||||
if sb == 37
|
||||
then Just $
|
||||
TransparentAddress TestNet $
|
||||
TransparentReceiver
|
||||
P2PKH
|
||||
(fromRawBytes transparentReceiver)
|
||||
TransparentReceiver P2PKH (fromRawBytes transparentReceiver)
|
||||
else Nothing
|
||||
_ -> Nothing
|
||||
|
||||
-- | Encode an Exchange Addresss into HRF from TransparentReceiver
|
||||
encodeExchangeAddress :: ZcashNet -> TransparentReceiver -> Maybe T.Text
|
||||
encodeExchangeAddress net tr = do
|
||||
encodeExchangeAddress:: ZcashNet -> TransparentReceiver -> Maybe T.Text
|
||||
encodeExchangeAddress net tr = do
|
||||
case (tr_type tr) of
|
||||
P2PKH -> do
|
||||
P2PKH -> do
|
||||
case net of
|
||||
MainNet -> do
|
||||
let vhash = encodeBech32m (BC.pack "tex") (toBytes (tr_bytes tr))
|
||||
Just vhash
|
||||
TestNet -> do
|
||||
TestNet -> do
|
||||
let vhash = encodeBech32m (BC.pack "textest") (toBytes (tr_bytes tr))
|
||||
Just vhash
|
||||
_ -> Nothing
|
||||
_ -> Nothing
|
||||
|
||||
-- | Decode an Exchange Address into a ExchangeAddress
|
||||
decodeExchangeAddress :: T.Text -> Maybe ExchangeAddress
|
||||
decodeExchangeAddress ex = do
|
||||
if (T.length ex) > 1
|
||||
then do
|
||||
let rawd = decodeBech32 (E.encodeUtf8 ex)
|
||||
let tMain = BS.unpack (BC.pack "tex")
|
||||
let tTest = BS.unpack (BC.pack "textest")
|
||||
let tFail = BS.unpack (BC.pack "fail")
|
||||
let hr = BS.unpack (hrp rawd)
|
||||
decodeExchangeAddress:: T.Text-> Maybe ExchangeAddress
|
||||
decodeExchangeAddress ex = do
|
||||
if (T.length ex ) > 1
|
||||
then do
|
||||
let rawd = decodeBech32 (E.encodeUtf8 ex)
|
||||
let tMain = BS.unpack (BC.pack "tex")
|
||||
let tTest = BS.unpack (BC.pack "textest")
|
||||
let tFail = BS.unpack (BC.pack "fail")
|
||||
let hr = BS.unpack (hrp rawd)
|
||||
if hr /= tFail
|
||||
then do
|
||||
let transparentReceiver = bytes rawd
|
||||
if hr == tMain
|
||||
if hr == tMain
|
||||
then Just $
|
||||
ExchangeAddress MainNet $
|
||||
TransparentReceiver P2PKH (fromRawBytes transparentReceiver)
|
||||
else do
|
||||
if hr == tTest
|
||||
else do
|
||||
if hr == tTest
|
||||
then Just $
|
||||
ExchangeAddress TestNet $
|
||||
TransparentReceiver
|
||||
P2PKH
|
||||
(fromRawBytes transparentReceiver)
|
||||
else Nothing
|
||||
TransparentReceiver P2PKH (fromRawBytes transparentReceiver)
|
||||
else Nothing
|
||||
else Nothing
|
||||
else Nothing
|
||||
else Nothing
|
|
@ -259,7 +259,7 @@ data RawTxResponse = RawTxResponse
|
|||
{ rt_id :: !HexString
|
||||
, rt_hex :: !HexString
|
||||
, rt_shieldedSpends :: ![ShieldedSpend]
|
||||
, rt_shieldedOutputs :: ![ShieldedOutput]
|
||||
, rt_shieldedOutputs :: ![BS.ByteString]
|
||||
, rt_orchardActions :: ![OrchardAction]
|
||||
, rt_blockheight :: !Integer
|
||||
, rt_confirmations :: !Integer
|
||||
|
@ -483,9 +483,10 @@ newtype SaplingReceiver =
|
|||
instance ToBytes SaplingReceiver where
|
||||
getBytes (SaplingReceiver s) = s
|
||||
|
||||
data SaplingAddress = SaplingAddress
|
||||
{ net_type :: !ZcashNet
|
||||
, sa_receiver :: !SaplingReceiver
|
||||
data SaplingAddress = SaplingAddress
|
||||
{
|
||||
net_type :: !ZcashNet
|
||||
, sa_receiver :: !SaplingReceiver
|
||||
} deriving (Eq, Prelude.Show, Read)
|
||||
|
||||
-- | Type to represent a Sapling Shielded Spend as provided by the @getrawtransaction@ RPC method
|
||||
|
@ -638,83 +639,11 @@ data DecodedNote = DecodedNote
|
|||
, a_recipient :: !BS.ByteString -- ^ The recipient Orchard receiver.
|
||||
, a_memo :: !BS.ByteString -- ^ The decoded shielded memo field.
|
||||
, a_nullifier :: !HexString -- ^ The calculated nullifier
|
||||
, a_rho :: !BS.ByteString
|
||||
, a_rseed :: !Rseed
|
||||
} deriving stock (Eq, Prelude.Show, GHC.Generic)
|
||||
deriving anyclass (SOP.Generic, SOP.HasDatatypeInfo)
|
||||
deriving anyclass (Data.Structured.Show)
|
||||
deriving (BorshSize, ToBorsh, FromBorsh) via AsStruct DecodedNote
|
||||
|
||||
data Rseed = Rseed
|
||||
{ rs_kind :: !Word8
|
||||
, rs_bytes :: !BS.ByteString
|
||||
} deriving stock (Eq, Prelude.Show, GHC.Generic, Read)
|
||||
deriving anyclass (SOP.Generic, SOP.HasDatatypeInfo)
|
||||
deriving anyclass (Data.Structured.Show)
|
||||
deriving (BorshSize, ToBorsh, FromBorsh) via AsStruct Rseed
|
||||
|
||||
data TransparentTxSpend = TransparentTxSpend
|
||||
{ ts_sk :: !BS.ByteString
|
||||
, ts_utxo :: !RawOutPoint
|
||||
, ts_coin :: !RawTxOut
|
||||
} deriving stock (Eq, Prelude.Show, GHC.Generic)
|
||||
deriving anyclass (SOP.Generic, SOP.HasDatatypeInfo)
|
||||
deriving anyclass (Data.Structured.Show)
|
||||
deriving (BorshSize, ToBorsh, FromBorsh) via AsStruct TransparentTxSpend
|
||||
|
||||
data SaplingTxSpend = SaplingTxSpend
|
||||
{ ss_sk :: !BS.ByteString
|
||||
, ss_note :: !DecodedNote
|
||||
, ss_iw :: !BS.ByteString
|
||||
} deriving stock (Eq, Prelude.Show, GHC.Generic)
|
||||
deriving anyclass (SOP.Generic, SOP.HasDatatypeInfo)
|
||||
deriving anyclass (Data.Structured.Show)
|
||||
deriving (BorshSize, ToBorsh, FromBorsh) via AsStruct SaplingTxSpend
|
||||
|
||||
data OrchardTxSpend = OrchardTxSpend
|
||||
{ ss_sk :: !BS.ByteString
|
||||
, ss_note :: !DecodedNote
|
||||
, ss_iw :: !BS.ByteString
|
||||
} deriving stock (Eq, Prelude.Show, GHC.Generic)
|
||||
deriving anyclass (SOP.Generic, SOP.HasDatatypeInfo)
|
||||
deriving anyclass (Data.Structured.Show)
|
||||
deriving (BorshSize, ToBorsh, FromBorsh) via AsStruct OrchardTxSpend
|
||||
|
||||
data OutgoingNote = OutgoingNote
|
||||
{ on_kind :: !Word8
|
||||
, on_key :: !BS.ByteString
|
||||
, on_recipient :: !BS.ByteString
|
||||
, on_amt :: !Word64
|
||||
, on_memo :: !BS.ByteString
|
||||
, on_chg :: !Bool
|
||||
} deriving stock (Eq, Prelude.Show, GHC.Generic)
|
||||
deriving anyclass (SOP.Generic, SOP.HasDatatypeInfo)
|
||||
deriving anyclass (Data.Structured.Show)
|
||||
deriving (BorshSize, ToBorsh, FromBorsh) via AsStruct OutgoingNote
|
||||
|
||||
newtype SaplingSpendParams = SaplingSpendParams
|
||||
{ sapSParams :: BS.ByteString
|
||||
} deriving newtype (Eq, Prelude.Show, Read)
|
||||
|
||||
newtype SaplingOutputParams = SaplingOutputParams
|
||||
{ sapOParams :: BS.ByteString
|
||||
} deriving newtype (Eq, Prelude.Show, Read)
|
||||
|
||||
data TxError
|
||||
= InsufficientFunds
|
||||
| ChangeRequired
|
||||
| Fee
|
||||
| Balance
|
||||
| TransparentBuild
|
||||
| SaplingBuild
|
||||
| OrchardBuild
|
||||
| OrchardSpend
|
||||
| OrchardRecipient
|
||||
| SaplingBuilderNotAvailable
|
||||
| OrchardBuilderNotAvailable
|
||||
| ZHError
|
||||
deriving (Eq, Prelude.Show, Read)
|
||||
|
||||
-- * Classes
|
||||
-- | Class to represent types with a bytestring representation
|
||||
class ToBytes a where
|
||||
|
|
|
@ -19,9 +19,8 @@ module ZcashHaskell.Utils where
|
|||
|
||||
import C.Zcash
|
||||
( rustWrapperBech32Decode
|
||||
, rustWrapperBech32Encode
|
||||
, rustWrapperBech32mEncode
|
||||
, rustWrapperCreateTx
|
||||
, rustWrapperBech32Encode
|
||||
, rustWrapperF4Jumble
|
||||
, rustWrapperF4UnJumble
|
||||
, rustWrapperTxRead
|
||||
|
@ -32,7 +31,7 @@ import Data.Aeson
|
|||
import Data.Binary.Get
|
||||
import qualified Data.ByteString as BS
|
||||
import qualified Data.ByteString.Lazy as LBS
|
||||
import Data.HexString (HexString(..), toBytes)
|
||||
import Data.HexString (HexString(..))
|
||||
import qualified Data.Text as T
|
||||
import qualified Data.Text.Encoding as E
|
||||
import Foreign.Rust.Marshall.Variable
|
||||
|
@ -122,54 +121,3 @@ readZebraTransaction hex =
|
|||
where
|
||||
rawTx = (withPureBorshVarBuffer . rustWrapperTxRead) $ hexBytes hex
|
||||
|
||||
createTransaction ::
|
||||
Maybe SaplingCommitmentTree -- ^ to obtain the Sapling anchor
|
||||
-> Maybe OrchardCommitmentTree -- ^ to obtain the Orchard anchor
|
||||
-> [TransparentTxSpend] -- ^ the list of transparent notes to spend
|
||||
-> [SaplingTxSpend] -- ^ the list of Sapling notes to spend
|
||||
-> [OrchardTxSpend] -- ^ the list of Orchard notes to spend
|
||||
-> [OutgoingNote] -- ^ the list of outgoing notes, including change notes
|
||||
-> SaplingSpendParams -- ^ the Sapling circuit spending parameters
|
||||
-> SaplingOutputParams -- ^ the Sapling circuit output parameters
|
||||
-> ZcashNet -- ^ the network to be used
|
||||
-> Int -- ^ target block height
|
||||
-> Bool -- ^ True to build, False to estimate fee
|
||||
-> Either TxError HexString
|
||||
createTransaction sapAnchor orchAnchor tSpend sSpend oSpend outgoing sParams oParams znet bh build =
|
||||
processResult $! txResult
|
||||
where
|
||||
processResult :: HexString -> Either TxError HexString
|
||||
processResult input =
|
||||
if BS.length (hexBytes input) > 1
|
||||
then Right input
|
||||
else case head (BS.unpack $ hexBytes input) of
|
||||
0 -> Left InsufficientFunds
|
||||
1 -> Left ChangeRequired
|
||||
2 -> Left Fee
|
||||
3 -> Left Balance
|
||||
4 -> Left TransparentBuild
|
||||
5 -> Left SaplingBuild
|
||||
6 -> Left OrchardBuild
|
||||
7 -> Left OrchardSpend
|
||||
8 -> Left OrchardRecipient
|
||||
9 -> Left SaplingBuilderNotAvailable
|
||||
10 -> Left OrchardBuilderNotAvailable
|
||||
_ -> Left ZHError
|
||||
txResult =
|
||||
withPureBorshVarBuffer $
|
||||
rustWrapperCreateTx
|
||||
(case sapAnchor of
|
||||
Nothing -> "0"
|
||||
Just sA -> toBytes $ sapTree sA)
|
||||
(case orchAnchor of
|
||||
Nothing -> "0"
|
||||
Just oA -> toBytes $ orchTree oA)
|
||||
tSpend
|
||||
sSpend
|
||||
oSpend
|
||||
outgoing
|
||||
(sapSParams sParams)
|
||||
(sapOParams oParams)
|
||||
(znet == MainNet)
|
||||
(fromIntegral bh)
|
||||
build
|
||||
|
|
98
test/Spec.hs
98
test/Spec.hs
File diff suppressed because one or more lines are too long
|
@ -5,7 +5,7 @@ cabal-version: 3.0
|
|||
-- see: https://github.com/sol/hpack
|
||||
|
||||
name: zcash-haskell
|
||||
version: 0.6.2.1
|
||||
version: 0.5.5.3
|
||||
synopsis: Utilities to interact with the Zcash blockchain
|
||||
description: Please see the README on the repo at <https://git.vergara.tech/Vergara_Tech/zcash-haskell#readme>
|
||||
category: Blockchain
|
||||
|
@ -58,7 +58,7 @@ library
|
|||
, binary
|
||||
, text
|
||||
, haskoin-core
|
||||
, secp256k1-haskell >= 1.1
|
||||
, secp256k1-haskell
|
||||
, utf8-string
|
||||
build-tool-depends:
|
||||
c2hs:c2hs
|
||||
|
|
Loading…
Reference in a new issue