Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions contrib/test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,6 @@ fi

# Pin dependencies as required if we are using MSRV toolchain.
if cargo --version | grep "1\.41"; then
# can be removed with elementsd 0.8.0
cargo update -p zip --precise 0.5.6
# 1.0.157 uses syn 2.0 which requires edition 2018
cargo update -p serde --precise 1.0.156
# 1.0.108 uses `matches!` macro so does not work with Rust 1.41.1, bad `syn` no biscuit.
Expand Down
3 changes: 2 additions & 1 deletion elementsd-tests/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ edition = "2018"

[dependencies]
base64 = "0.13.0"
bitcoin30 = { package = "bitcoin", version = "0.30" }
elements = {path = "../"}
elementsd = "0.6.0"
elementsd = "0.8.0"
rand = "0.8"

14 changes: 8 additions & 6 deletions elementsd-tests/src/pset.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ extern crate rand;

use crate::{setup, Call};

use elements::bitcoin::{self, Address, Amount};
use bitcoin30::{self, Address, Amount};
use elements::bitcoin::hashes::hex::ToHex;
use elements::bitcoin::hashes::Hash;
use elements::encode::{deserialize, serialize};
Expand Down Expand Up @@ -60,7 +60,7 @@ fn tx_issuance() {
let value = elementsd.call(
"createpsbt",
&[
json!([{ "txid": prevout.txid, "vout": prevout.vout, "issuance_amount": 1000, "issuance_tokens": 1}]),
json!([{ "txid": prevout.txid.to_string(), "vout": prevout.vout, "issuance_amount": 1000, "issuance_tokens": 1}]),
json!([
{address_asset: "1000", "asset": asset_id.to_string(), "blinder_index": 0},
{address_reissuance: "1", "asset": reissuance_id.to_string(), "blinder_index": 0},
Expand All @@ -87,23 +87,25 @@ fn tx_issuance() {
fn tx_pegin() {
let (elementsd, bitcoind) = setup(true);
let bitcoind = bitcoind.unwrap();
let btc_addr = bitcoind.client.get_new_address(None, None).unwrap();
let btc_addr = bitcoind.client.get_new_address(None, None).unwrap()
.assume_checked();
let address_lbtc = elementsd.get_new_address();
bitcoind.client.generate_to_address(101, &btc_addr).unwrap();
let (pegin_address, claim_script) = elementsd.get_pegin_address();
let address = Address::from_str(&pegin_address).unwrap();
let address = Address::from_str(&pegin_address).unwrap()
.assume_checked();
let amount = Amount::from_sat(100_000_000);
let txid = bitcoind
.client
.send_to_address(&address, amount, None, None, None, None, None, None)
.unwrap();
let tx = bitcoind.client.get_raw_transaction(&txid, None).unwrap();
let tx_bytes = serialize(&tx);
let tx_bytes = bitcoin30::consensus::serialize(&tx);
let vout = tx
.output
.iter()
.position(|o| {
let addr = Address::from_script(&o.script_pubkey, bitcoin::Network::Regtest);
let addr = Address::from_script(&o.script_pubkey, bitcoin30::Network::Regtest);
addr.unwrap().to_string() == pegin_address
})
.unwrap();
Expand Down
8 changes: 6 additions & 2 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,16 @@
#![deny(unused_mut)]
#![deny(missing_docs)]

/// Re-export of bitcoin crate
pub extern crate bitcoin;
#[macro_use]
extern crate bitcoin_hashes as just_imported_for_the_macros;
extern crate slip21;
/// Re-export of slip21 crate
pub extern crate slip21;
/// Re-export of secp256k1-zkp crate
pub extern crate secp256k1_zkp;
#[cfg(feature = "serde")] #[macro_use] extern crate actual_serde as serde;
/// Re-export of serde crate
#[cfg(feature = "serde")] #[macro_use] pub extern crate actual_serde as serde;
#[cfg(all(test, feature = "serde"))] extern crate serde_test;

#[cfg(test)] extern crate rand;
Expand Down
13 changes: 13 additions & 0 deletions src/transaction.rs
Original file line number Diff line number Diff line change
Expand Up @@ -521,6 +521,9 @@ impl Decodable for TxIn {
}
if has_issuance {
issuance = AssetIssuance::consensus_decode(&mut d)?;
if issuance.is_null() {
return Err(encode::Error::ParseFailed("superfluous asset issuance"));
}
} else {
issuance = AssetIssuance::default();
}
Expand Down Expand Up @@ -2299,4 +2302,14 @@ mod tests {
");
assert!(tx.input[0].previous_output.is_null());
}

#[test]
fn superfluous_asset_issuance() {
let tx = Vec::<u8>::from_hex("1ae80068000109fee1000000000000000000000000000000000000000000000000000000000000005acf37f60000c7280028a7000000006e000000010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010115190000b9bfb80000000100000000d8d8d8d8d8d8d8d8d8d8d8d8d8d80000000000b8bfb8").unwrap();
if let encode::Error::ParseFailed("superfluous asset issuance") = Transaction::consensus_decode(&tx[..]).unwrap_err() {
// ok. FIXME replace this with matches! when we move to 1.48.0
} else {
panic!("Incorrect error for bad transaction");
}
}
}