Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix outpoint serialization issues #287

Merged
merged 5 commits into from
Oct 30, 2024
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: 1 addition & 1 deletion packages/client/tests/data/full_169.json
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@
"cached": false
},
"block_height": 9,
"median_time_past": 1231471428,
"median_time_past": 1231470988,
"is_coinbase": true
},
"witness": []
Expand Down
34 changes: 17 additions & 17 deletions packages/client/tests/data/utreexo_169.json
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@
"cached": false
},
"block_height": 9,
"median_time_past": 1231471428,
"median_time_past": 1231470988,
"is_coinbase": true
},
"witness": []
Expand Down Expand Up @@ -128,37 +128,37 @@
"roots": [
{
"variant_id": 0,
"value": 2243729579132454921815355740493841076889575709816526684999662912394274975584
"value": 1075667171590848154982556435125102517390553068689710620455153660349876510186
},
null,
null,
{
"variant_id": 0,
"value": 2261147245204776368334862529741319780868768593345793617211117537122266238577
"value": 1545231468516220002373273797559461807914970524111940849750328803582855936171
},
null,
{
"variant_id": 0,
"value": 1478944086323777945936459676941601959769102822055825304629072181687547875531
"value": 1377893971144855926456275647843230957136416614121223440964512004900657355746
},
null,
{
"variant_id": 0,
"value": 619721724166206394862378867028287088626965757449429663146230416403718619093
"value": 2789527937826812553983355805324006356113540169680511206602120580468925994144
},
null
]
},
"proofs": [
{
"proof": [
274817076080541397502696906861536371115695596063526833550058573072108749115,
1259176147345751145191111662219840526356501226618672639406065326898135902264,
1848169735107995159136156318494866770346290350559572574934907975254450481704,
2706681913355105973250866982294192611208835262570818334870601840808848384459,
2214630919606246947408368640763197246751208900324012684012261556337212626757,
1101985322418033002091130704802558308187225122297992534396475623983004812420,
2729277592763167786852222424289031376235136104897643593004420518718352940231
1341831566043387106325844845909158799402866001662974927108069625603583971480,
1443675700228503369543683218943466499245617322985505154945738943716743694265,
519646392377825945466547611274092870030802470736981675895864465165188803020,
3219090166904938598688939525052593187314786152670445479780817128254606574061,
3429608730564493038725327726731886582242605618763607208860625722555112702870,
1464346753344216951108436013919475968846135803696833681088250234646995926893,
2059532798546650597701371553400476891060690283065963625811202716166665983015
],
"leaf_index": 8
}
Expand All @@ -167,26 +167,26 @@
"roots": [
{
"variant_id": 0,
"value": 2843980787531725946792369479988202437986876451050335501296002525043057800822
"value": 2798110709967837858515372760817606172577565229842771835911030873647893889774
},
{
"variant_id": 0,
"value": 3259667504329439104864108759538360061214302036282299607930636468007761714215
"value": 143588888139305297948079116321466646636133238970252601366055285460885727445
},
null,
{
"variant_id": 0,
"value": 2261147245204776368334862529741319780868768593345793617211117537122266238577
"value": 1545231468516220002373273797559461807914970524111940849750328803582855936171
},
null,
{
"variant_id": 0,
"value": 1478944086323777945936459676941601959769102822055825304629072181687547875531
"value": 1377893971144855926456275647843230957136416614121223440964512004900657355746
},
null,
{
"variant_id": 0,
"value": 1597678775304253472610727607736636075835427473969519327752899884098801800240
"value": 72427602467111712670190708647558062003041829148690045408562661193902370953
},
null
]
Expand Down
64 changes: 52 additions & 12 deletions packages/consensus/src/types/transaction.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -221,8 +221,8 @@ impl TxOutDisplay of Display<TxOut> {

#[cfg(test)]
mod tests {
use super::{OutPoint, OutPointTrait, TxOut, HashStateTrait, HashStateExTrait};
use utils::hash::{DigestTrait};
use super::{OutPoint, TxOut, HashStateTrait, HashStateExTrait, OutPointTrait};
use utils::hex::{hex_to_hash_rev, from_hex};
use core::poseidon::PoseidonTrait;

fn hash(tx: @TxOut) -> felt252 {
Expand Down Expand Up @@ -256,24 +256,64 @@ mod tests {
assert_ne!(hash(@tx1), hash(@tx_with_value_changed));
}

#[derive(Debug, Drop, Default)]
pub struct HashState {
pub value: Array<felt252>
}

impl HashStateImpl of HashStateTrait<HashState> {
fn update(self: HashState, value: felt252) -> HashState {
let mut new_value = self.value;
new_value.append(value);
HashState { value: new_value }
}

fn finalize(self: HashState) -> felt252 {
0
}
}

#[test]
pub fn test_outpoint_poseidon_hash() {
let mut test_outpoint = OutPoint {
txid: DigestTrait::new([1, 2, 3, 4, 5, 6, 7, 8]),
vout: 2,
// https://learnmeabitcoin.com/explorer/tx/0437cd7f8525ceed2324359c2d0ba26006d92d856a9c20fa0241106ee5a597c9#output-0
let mut coinbase_9_utxo = OutPoint {
txid: hex_to_hash_rev(
"0437cd7f8525ceed2324359c2d0ba26006d92d856a9c20fa0241106ee5a597c9"
),
vout: 0,
data: TxOut {
value: 50_u64,
pk_script: @"410411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3ac",
value: 5000000000,
pk_script: @from_hex(
"410411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3ac"
),
cached: false,
},
block_height: 9,
median_time_past: 1650000000,
is_coinbase: false,
median_time_past: 1231470988,
is_coinbase: true,
};

let mut state: HashState = Default::default();
state = state.update_with(coinbase_9_utxo);

let expected: Array<felt252> = array![
5606656307511680658662848977137541728,
9103019671783490751638296454939121609,
0,
5000000000,
2,
114873147639302600539941532864842037771792291166958548649371950632810924198,
255491345418700057264349667014908841246825595399329019948869966327385048054,
372388307884,
5,
9,
1231470988,
1
];
assert_eq!(expected, state.value);

let hash = coinbase_9_utxo.hash();
assert_eq!(
test_outpoint.hash(),
3426256427357770988835517595549266311441229240020614569376880225204214993534
761592244424273723796345514960638980240531938129162865626185984897576522513, hash
);
}
}
13 changes: 4 additions & 9 deletions packages/consensus/src/types/utxo_set.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -76,13 +76,7 @@ pub impl UtxoSetImpl of UtxoSetTrait {
fn finalize(ref self: UtxoSet) -> Result<(), ByteArray> {
if self.num_cached != 0 {
Result::Err("There are unprocessed cached outputs")
} // TODO: uncomment when utreexo is enabled
// else if self.leaves_to_add.len() != 0 {
// Result::Err("There are unprocessed leaves to add")
// } else if self.leaves_to_delete.len() != 0 {
// Result::Err("There are unprocessed leaves to delete")
// }
else {
} else {
Result::Ok(())
}
}
Expand Down Expand Up @@ -210,7 +204,7 @@ mod tests {
cached: false
},
block_height: 9,
median_time_past: 1231473279,
median_time_past: 1231470988,
is_coinbase: true
}
}
Expand All @@ -220,7 +214,8 @@ mod tests {
fn test_poseidon1() {
let outpoint: OutPoint = get_outpoint();
let outpoint_hash = PoseidonTrait::new().update_with(outpoint).finalize();
let expected: felt252 = 0x3945D2584EE5EF0B482B70CD63E0E8CD18827CB348F839D1E6EB8ECBB2B397D;
let expected: felt252 =
761592244424273723796345514960638980240531938129162865626185984897576522513;
assert_eq!(outpoint_hash, expected);
}
}
Empty file modified scripts/data/format_args.py
100644 → 100755
Empty file.
19 changes: 13 additions & 6 deletions scripts/data/generate_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -208,12 +208,17 @@ def resolve_outpoint(input: dict):
"""
tx = request_rpc("getrawtransaction", [input["txid"], True])
block = request_rpc("getblockheader", [tx["blockhash"]])
# Time-based relative lock-times are measured from the
# smallest allowed timestamp of the block containing the
# txout being spent, which is the median time past of the
# block prior.
prev_block = request_rpc("getblockheader", [block["previousblockhash"]])
return {
"txid": input["txid"],
"vout": input["vout"],
"data": format_output(tx["vout"][input["vout"]]),
"block_height": block["height"],
"median_time_past": block["mediantime"],
"median_time_past": prev_block["mediantime"],
m-kus marked this conversation as resolved.
Show resolved Hide resolved
"is_coinbase": tx["vin"][0].get("coinbase") is not None,
}

Expand Down Expand Up @@ -290,10 +295,10 @@ def next_chain_state(current_state: dict, new_block: dict) -> dict:
"""Computes the next chain state given the current state and a new block."""
next_state = new_block.copy()

# Update prev_timestamps
next_state["prev_timestamps"] = current_state["prev_timestamps"][1:] + [
new_block["time"]
]
# We need to recalculate the prev_timestamps field given the previous chain state
# and all the blocks we applied to it
prev_timestamps = current_state["prev_timestamps"] + [new_block["time"]]
next_state["prev_timestamps"] = prev_timestamps[-11:]

# Update epoch start time
if new_block["height"] % 2016 == 0:
Expand Down Expand Up @@ -392,7 +397,9 @@ def generate_data(

if mode == "utreexo":
utreexo_data = UtreexoData()
result["utreexo"] = utreexo_data.apply_blocks(blocks)
result["utreexo"] = utreexo_data.apply_blocks(
blocks, int(chain_state["mediantime"])
)
result["blocks"] = [result["blocks"][-1]]
if num_blocks > 1:
result["chain_state"] = format_chain_state(prev_chain_state)
Expand Down
Loading
Loading