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

test(rpc): Create a script that submits block proposals to zcashd #5944

Merged
merged 32 commits into from
Jan 18, 2023

Conversation

teor2345
Copy link
Contributor

@teor2345 teor2345 commented Jan 11, 2023

Motivation

We want to make sure that Zebra's getblocktemplate can be used to create valid blocks. This script creates a block proposal from a getblocktemplate response, and sends it to zcashd for checking.

Part of #5803, but we need multiple people to run the script a few times before we can close that ticket.

Depends-On: #5960

Merged dependencies:
Depends-On: #5925
Depends-On: #5953
Depends-On: #5884
Depends-On: #5961

Specifications

Block header:
https://zips.z.cash/protocol/protocol.pdf#blockheader

Block transactions:
https://developer.bitcoin.org/reference/block_chain.html#serialized-blocks

Complex Code or Requirements

This script uses the existing Rust implementation to turn a block template into a block proposal.

Solution

  • query a node using getblocktemplate
  • turn the results into a block proposal using an existing Rust function and utility binary
    • create a proposal for each valid time field
  • send that proposal to one or more nodes for checking

Review

This is ready for review, but it is failing due to some bugs in the getblocktemplate RPC implementation.

Reviewer Checklist

  • Will the PR name make sense to users?
    • Does it need extra CHANGELOG info? (new features, breaking changes, large changes)
  • Are the PR labels correct?
  • Does the code do what the ticket and PR says?
    • Does it change concurrent code, unsafe code, or consensus rules?
  • How do you know it works? Does it have tests?

Follow Up Work

Test actual mining on testnet, not just block proposals.

@teor2345 teor2345 force-pushed the zcash-test-block-template branch from e0f3631 to 188d19a Compare January 12, 2023 08:58
@teor2345 teor2345 changed the base branch from fix-testnet-difficulty to gbt-proposal-test January 12, 2023 08:59
@github-actions github-actions bot added the C-trivial Category: A trivial change that is not worth mentioning in the CHANGELOG label Jan 12, 2023
@teor2345 teor2345 force-pushed the zcash-test-block-template branch from 188d19a to d9b838d Compare January 13, 2023 05:46
@teor2345
Copy link
Contributor Author

@arya2 I am also seeing these errors for some block templates:

Proposal response from port  8232:
bad-txnmrklroot

So I think the bug might be in the getblocktemplate RPC's template mode.

@teor2345 teor2345 changed the title WIP: test(rpc): Create a script that submits block proposals to zcashd test(rpc): Create a script that submits block proposals to zcashd Jan 13, 2023
@mpguerra
Copy link
Contributor

mpguerra commented Jan 13, 2023

This seems like a really big change when compared with the title of the original issue and , which is to do a manual test to check that we can create valid blocks, and the title of the PR... It seems to me like what we're actually doing here is to implement the block proposal method. Edit: I see that this is also done in #5884 ?

It also seems to be touching a lot of code that we were going to try to keep as stable as possible pending the zebra audit...

In reviewing and merging this code I would like us to be mindful of this and evaluate whether the benefits of having this test outweigh the potential costs... could we use this code just for testing now and evaluate when might be a good time to merge?

@arya2
Copy link
Contributor

arya2 commented Jan 13, 2023

This seems like a really big change when compared with the title of the original issue and , which is to do a manual test to check that we can create valid blocks, and the title of the PR... It seems to me like what we're actually doing here is to implement the block proposal method. Edit: I see that this is also done in #5884 ?

It also seems to be touching a lot of code that we were going to try to keep as stable as possible pending the zebra audit...

It's more substantial than I would've imagined, but practically all of the changes appear to be test-related. It's a little different from #5884, because it's using zcashd's block proposal implementation.

@arya2
Copy link
Contributor

arya2 commented Jan 13, 2023

@arya2 I am also seeing these errors for some block templates:

Proposal response from port  8232:
bad-txnmrklroot

So I think the bug might be in the getblocktemplate RPC's template mode.

Silver lining: at least Zebra's getblocktemplate behaviour in proposal mode matches zcashd. 🥲

@teor2345
Copy link
Contributor Author

This seems like a really big change when compared with the title of the original issue and , which is to do a manual test to check that we can create valid blocks, and the title of the PR

This is a draft PR with a merge conflict, so the changes you see here don't represent what will be in the final PR. Let's re-evaluate once I've finished splitting the PR?

@teor2345 teor2345 force-pushed the zcash-test-block-template branch from d9b838d to 28f48b8 Compare January 16, 2023 00:56
@teor2345 teor2345 changed the base branch from gbt-proposal-test to base-zcash-test-block-template January 16, 2023 00:56
@teor2345 teor2345 force-pushed the zcash-test-block-template branch from 28f48b8 to bb437cc Compare January 16, 2023 01:02
@teor2345 teor2345 marked this pull request as ready for review January 16, 2023 01:02
@teor2345 teor2345 requested a review from a team as a code owner January 16, 2023 01:02
@teor2345 teor2345 requested review from arya2 and removed request for a team January 16, 2023 01:02
@teor2345 teor2345 self-assigned this Jan 16, 2023
@teor2345 teor2345 added A-dependencies Area: Dependency file updates A-consensus Area: Consensus rule updates P-High 🔥 C-testing Category: These are tests A-rpc Area: Remote Procedure Call interfaces labels Jan 16, 2023
@teor2345 teor2345 force-pushed the zcash-test-block-template branch from 4d9af88 to 7dec2ff Compare January 16, 2023 03:25
@codecov
Copy link

codecov bot commented Jan 16, 2023

Codecov Report

Merging #5944 (a295fae) into main (8c45196) will increase coverage by 0.11%.
The diff coverage is 0.00%.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #5944      +/-   ##
==========================================
+ Coverage   77.95%   78.07%   +0.11%     
==========================================
  Files         312      312              
  Lines       38988    38996       +8     
==========================================
+ Hits        30394    30447      +53     
+ Misses       8594     8549      -45     

@arya2
Copy link
Contributor

arya2 commented Jan 16, 2023

Mainnet test:

BLOCK_TEMPLATE_TO_PROPOSAL="cargo run --bin block-template-to-proposal --features getblocktemplate-rpcs" ZCASH_CLI=../zcash/src/zcash-cli ./zebra-utils/zcash-rpc-block-template-to-proposal 3000 8232
Checking getblocktemplate node release info...
Connected to zebrad (port 3000) for getblocktemplate { "mode": "template"  }

Checking proposal nodes release info...
Connected to zcashd (port 8232) for getblocktemplate { "mode": "proposal", "data": "..."  }

Checking zebrad template network and tip height...
Checking proposal nodes network and tip height...

getblocktemplate template request (zebrad port 3000):
getblocktemplate { "mode": "template"  }

Querying zebrad main chain at height >=1950841...

real    0m0.004s
user    0m0.003s
sys     0m0.000s
Block template data is in /tmp/tmp.PPDLXGIBeY.block-template-proposal/template-getblocktemplate-template.json

Turning the template into block proposal data using cargo run --bin block-template-to-proposal --features getblocktemplate-rpcs...
    Finished dev [unoptimized + debuginfo] target(s) in 0.15s
     Running `target/debug/block-template-to-proposal`
GetBlockTemplate { capabilities: ["proposal"], version: 4, .. }
Block proposal data is in /tmp/tmp.PPDLXGIBeY.block-template-proposal/proposal-data.json
04000000d96a ... 1c41d000000000000000000000000


getblocktemplate proposal submissions:
getblocktemplate { "mode": "proposal", "data": "..."  }


real    0m0.014s
user    0m0.003s
sys     0m0.000s

Proposal response from port  8232:

Full template:

GetBlockTemplate { 
    capabilities: ["proposal"],
    version: 4,
    previous_block_hash: GetBlockHash(block::Hash("000000000047f4d4280fe070fcfa7d924291d339c3ab15bfacebec9ecb316ad9")),
    block_commitments_hash: ChainHistoryBlockTxAuthCommitmentHash("86de498d33dd402834afdb2e8769b797eaf4e9110350b81f42451203e4ec4f41"),
    light_client_root_hash: ChainHistoryBlockTxAuthCommitmentHash("86de498d33dd402834afdb2e8769b797eaf4e9110350b81f42451203e4ec4f41"),
    final_sapling_root_hash: ChainHistoryBlockTxAuthCommitmentHash("86de498d33dd402834afdb2e8769b797eaf4e9110350b81f42451203e4ec4f41"),
    default_roots: DefaultRoots { 
        merkle_root: Root("dc1b60c85bdb0b8989b6bce4b9d8b73385bfb342b84613b51a52d3c484d8e16e"),
        chain_history_root: ChainHistoryMmrRootHash("50555b833a09861a7bc37d8e883dcbdd1453337c844138695b6b674b01a28128"),
        auth_data_root: AuthRoot("40d5dfb8cd8953a6ce067ba6eb0d6d2de1bda87b00dd8d1b3187849cb6924df4"),
        block_commitments_hash: ChainHistoryBlockTxAuthCommitmentHash("86de498d33dd402834afdb2e8769b797eaf4e9110350b81f42451203e4ec4f41")
    },
    transactions: [
        TransactionTemplate { 
            data: SerializedTransaction("0400008085202f890146c0109bf5faef0aa0b2b1f0958c4adeddfedffa4aa0c67d81394f370d65ed1b000000006b483045022100bb55bce9e274efd61e9d77aeea47614b7603d4be549dcdb569a91cf805472de302204d3db2f5338d30f8eda62954caf0055550ad60190e814d046576079a5a09ae5a012102b8e907605a71822e18e57a212ee5602edadb8f13e968acc16e0bdb9af1dda6d6ffffffff01d012f876210000001976a9143baf2c65ae0c9171d40b988df1459ebee092224b88ac00000000a1c41d000000000000000000000000"),
            hash: transaction::Hash("fda633b7b8967255553cf6c172b12df4cf9d8cbd6270a41c184436c8f5912ec0"),
            auth_digest: AuthDigest("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"),
            depends: [],
            fee: Amount<zebra_chain::amount::NonNegative>(10000),
            sigops: 1,
            required: false
        },
        TransactionTemplate { 
            data: SerializedTransaction("0400008085202f890179a5cae0221894a7eb9062f1c71056aab3bf4110aaf9c90665460f909b2e287b030000006a473044022064a4623f0d66321d679661d51e63e032e230755f87fa0abadbd07ce34b578ecd02204022f1250494d9df2cb5fc61c4f7637c3442c089d92e766494bc1424266719fa012103bd69095266ca90d7d1d0f6d44d63cd95b23b5b374dde6fba1856165217df35a5ffffffff02bc1311c2000000001976a914eca15bec7e30194da5927474b5614ce11bea4b8d88acc4ec473a010000001976a91437396874ac875d0439b81ab86c19b3ec169ebfcd88ac00000000000000000000000000000000000000"),
            hash: transaction::Hash("7f8df2001ad6001ed555ced57137c1567f89efb32f0d286ff2a12830b77e858a"),
            auth_digest: AuthDigest("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"),
            depends: [],
            fee: Amount<zebra_chain::amount::NonNegative>(2450),
            sigops: 2,
            required: false
        },
        TransactionTemplate { 
            data: SerializedTransaction("0400008085202f89018b8a6ba301107f247cce4bbdb8fc2edbdcf606f2c4e5e8dce17aaf0c1c0bde06000000006b483045022100c092523b1d98a99e520333542eebcdfc09b9c2a5a49c8ae4df99a86aa7028e7d0220150ec3e2cb74daea6a72a0b5ff5204c517f7f9a45929bb7e9cf0682bcfaea673012102f1be916ca8106bbe43d7322593a96986c46354653d3d2802621abacbf0cfcb9effffffff018066ee38330000001976a9143baf2c65ae0c9171d40b988df1459ebee092224b88ac00000000a1c41d000000000000000000000000"),
            hash: transaction::Hash("f628f7772961a01bde7bf55b05eac6f90c369cad8264244bf3b78227db168891"),
            auth_digest: AuthDigest("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"),
            depends: [],
            fee: Amount<zebra_chain::amount::NonNegative>(10000),
            sigops: 1,
            required: false 
        },
        TransactionTemplate { 
            data: SerializedTransaction("0400008085202f8901cdfb2aa6a40d4d3a423d66ac30e14e874e761ef4eb68dbd0479557e040be56bd300000006b483045022100c97ef88af8e5166acf2579c72c8ef49488c80fb54ce7951b06f9acdece550ffd022074eda311a92b19de12f1d20a94feb59639c7cf9346fd629d6702ab66ab9df3b30121025e29e036ef3af27b1c8869789a9b0b718d9824e7a0f1dfda6066c00bb742ce0dffffffff02ecfd3fed060000001976a914b112094423613d2773a7611a788aa9a03efdbdd988acee9c5234020000001976a91455b7c406698a68cd90c8b063463e3eab6397a2e188ac00000000000000000000000000000000000000"),
            hash: transaction::Hash("352bd971ba11e6744d3b57943db5715ab2834d066cad25fe8082ca71b46f8e9f"),
            auth_digest: AuthDigest("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"),
            depends: [],
            fee: Amount<zebra_chain::amount::NonNegative>(2450),
            sigops: 2,
            required: false
        },
        TransactionTemplate { 
            data: SerializedTransaction("0400008085202f8901edc4a7375e872bb341fb5e0a1bf1120679424bfae5a81d0581d6a0448728c112030000006a47304402205fe687edd593101ab14cde90cea18a0da63162d5851cd39cc61fbef2f4b7ce5e02202b10feaa348f9f799c2de81410ed27852f66da48082fb718fc5701381254fbcb012103be44db5bb4e994c65d5c1dc5a8ff5c2f09ed61b9361431e8c1d38aa5a3dee555ffffffff02358fa818000000001976a91485c779006a83e3c4341d9698e1b9fdbad1f35d6988ac632511c2000000001976a914eca15bec7e30194da5927474b5614ce11bea4b8d88ac00000000000000000000000000000000000000"),
            hash: transaction::Hash("32c672adecbbe10f435dd72885869c455cf1203b34a3dd34888b7d7b0807cf7b"),
            auth_digest: AuthDigest("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"),
            depends: [],
            fee: Amount<zebra_chain::amount::NonNegative>(2450),
            sigops: 2,
            required: false
        },
        
        TransactionTemplate { 
            data: SerializedTransaction("0400008085202f8905deec68cfc343149c30cfb4f3c4c77d0ffbfe8bb0b93cf7f6c5e8d6b255e1d325010000006b483045022100d0e7579db5611a30a32469919fa15a8b59cba5b552c5270fe816275e6bbed41102200e77ac5729d3aae979a7480a2fb1cbfa72d2269822141ee7f51bc2df1576a0a301210399017b60b8ad52c14bdb7b9e872d475a0cc202566a5500a162e8dba779a58f3effffffffabda17b3222e3500551f335d52929eaff659a2ccfafbe531bf88433ae488e12d0a0000006b483045022100dfaf7946067edb95751ad67fd5fa68985683100a91a44e346602333a421d8727022061265db09478ff98c51d7c83631498543e6bc33de5478909771303c8dec0dccd012103742d07bb91e3b34812807b3a669a3c31834ae030859f0ae024640c6acd348378ffffffff32bf328a32b113193049d637d8e4ff7105b31abc3f98d567ec2e0090334a9ebc4c0000006a47304402202239874372ec931e948b189b478f3148c86fdae63d5f71f0f56292eca589d39f022051208259fc6d0073a35ca8c25bc3b0c024ba5dba8cde348a0d885488ed9d20c00121030a86bed999d69229175331a1d7bd92cfa4b1c5113d7f28157b72b41c859b1cc0ffffffff32e47eb6a20895eda387be5d93fe461b2cab9da5918fdeff947cf39352072dee4a0000006a473044022020183f097b369558d9a3c5505c6c508815b2eaedbe9998b56868b39577ad900e02201043745172a0d3b9f62f2d49fadc2d3b1d9c88ee0a33e5a98e699cd321bf44c501210269ac58782b7494dd231040f71f9e7055167cde6bdfefc5359d62a87f59eb385affffffffc925722c5448bc31292ff25916aa2ed4ed8514c10ca81cc30dff1d6456f19f9c000000006b483045022100c6538ae13389e06c9249e7d0129307231d07500b579b859c422c7ce9a0ad728202202ae28ecdab0956eea57deb9dc70b20d330a1295b6a93499a7eba141b2d457d1d01210399017b60b8ad52c14bdb7b9e872d475a0cc202566a5500a162e8dba779a58f3effffffff010af0ed7f100000001976a9143baf2c65ae0c9171d40b988df1459ebee092224b88ac00000000a1c41d000000000000000000000000"),
            hash: transaction::Hash("ebd7dfebb9e6bb2d29fe047c90e35c19d4c5f54a3cf51e6347a2a2f92103e805"),
            auth_digest: AuthDigest("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"),
            depends: [],
            fee: Amount<zebra_chain::amount::NonNegative>(10000),
            sigops: 1,
            required: false
        },
    ],
    coinbase_txn: TransactionTemplate { 
        data: SerializedTransaction("0400008085202f89010000000000000000000000000000000000000000000000000000000000000000ffffffff05037ac41d00ffffffff0438c94d010000000017a9142e1fff58b8ec78077b50b7ffa2144267512b32bf876644e70e0000000017a9147d46a730d31f97b1930d3368a967c309bd4d136a8740787d010000000017a914931fec54c1fea86e574462cc32013f5400b8912987286bee000000000017a914d45cb1adffb5215a42720532a076f02c7c778c9087000000007ac41d000000000000000000000000"),
        hash: transaction::Hash("875bb7d74ebbf5e03427fae745c1879d51cc5168341e53485b36ce30fa3a2582"),
        auth_digest: AuthDigest("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"),
        depends: [],
        fee: Amount<zebra_chain::amount::NegativeOrZero>(-37350),
        sigops: 0,
        required: true
    },
    long_poll_id: LongPollId { 
        tip_height: 1950841,
        tip_hash_checksum: 844245495,
        max_timestamp: 1673902523,
        mempool_transaction_count: 10,
        mempool_transaction_content_checksum: 2047582634
    },
    target: ExpandedDifficulty("0000000001754700000000000000000000000000000000000000000000000000"),
    min_time: DateTime32 { 
        timestamp: 1673897124,
        calendar: 2023-01-16T19:25:24Z
    },
    mutable: [
        "time",
        "transactions",
        "prevblock"
    ],
    nonce_range: "00000000ffffffff",
    sigop_limit: 20000,
    size_limit: 2000000,
    cur_time: DateTime32 { 
        timestamp: 1673897545,
        calendar: 2023-01-16T19:32:25Z
    },
    bits: CompactDifficulty(0x1c017547, Some(ExpandedDifficulty("0000000001754700000000000000000000000000000000000000000000000000"))),
    height: 1950842,
    max_time: DateTime32 { 
        timestamp: 1673902523,
        calendar: 2023-01-16T20:55:23Z
    },
    submit_old: None 
}

Full hex-encoded and serialized block proposal data:

04000000d96a31cb9eecebacbf15abc339d39142927dfafc70e00f28d4f4470000000000dc1b60c85bdb0b8989b6bce4b9d8b73385bfb342b84613b51a52d3c484d8e16e414fece4031245421fb8500311e9f4ea97b769872edbaf342840dd338d49de8649a6c5634775011c0000000000000000000000000000000000000000000000000000000000000000fd4005000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070400008085202f89010000000000000000000000000000000000000000000000000000000000000000ffffffff05037ac41d00ffffffff0438c94d010000000017a9142e1fff58b8ec78077b50b7ffa2144267512b32bf876644e70e0000000017a9147d46a730d31f97b1930d3368a967c309bd4d136a8740787d010000000017a914931fec54c1fea86e574462cc32013f5400b8912987286bee000000000017a914d45cb1adffb5215a42720532a076f02c7c778c9087000000007ac41d0000000000000000000000000400008085202f890146c0109bf5faef0aa0b2b1f0958c4adeddfedffa4aa0c67d81394f370d65ed1b000000006b483045022100bb55bce9e274efd61e9d77aeea47614b7603d4be549dcdb569a91cf805472de302204d3db2f5338d30f8eda62954caf0055550ad60190e814d046576079a5a09ae5a012102b8e907605a71822e18e57a212ee5602edadb8f13e968acc16e0bdb9af1dda6d6ffffffff01d012f876210000001976a9143baf2c65ae0c9171d40b988df1459ebee092224b88ac00000000a1c41d0000000000000000000000000400008085202f890179a5cae0221894a7eb9062f1c71056aab3bf4110aaf9c90665460f909b2e287b030000006a473044022064a4623f0d66321d679661d51e63e032e230755f87fa0abadbd07ce34b578ecd02204022f1250494d9df2cb5fc61c4f7637c3442c089d92e766494bc1424266719fa012103bd69095266ca90d7d1d0f6d44d63cd95b23b5b374dde6fba1856165217df35a5ffffffff02bc1311c2000000001976a914eca15bec7e30194da5927474b5614ce11bea4b8d88acc4ec473a010000001976a91437396874ac875d0439b81ab86c19b3ec169ebfcd88ac000000000000000000000000000000000000000400008085202f89018b8a6ba301107f247cce4bbdb8fc2edbdcf606f2c4e5e8dce17aaf0c1c0bde06000000006b483045022100c092523b1d98a99e520333542eebcdfc09b9c2a5a49c8ae4df99a86aa7028e7d0220150ec3e2cb74daea6a72a0b5ff5204c517f7f9a45929bb7e9cf0682bcfaea673012102f1be916ca8106bbe43d7322593a96986c46354653d3d2802621abacbf0cfcb9effffffff018066ee38330000001976a9143baf2c65ae0c9171d40b988df1459ebee092224b88ac00000000a1c41d0000000000000000000000000400008085202f8901cdfb2aa6a40d4d3a423d66ac30e14e874e761ef4eb68dbd0479557e040be56bd300000006b483045022100c97ef88af8e5166acf2579c72c8ef49488c80fb54ce7951b06f9acdece550ffd022074eda311a92b19de12f1d20a94feb59639c7cf9346fd629d6702ab66ab9df3b30121025e29e036ef3af27b1c8869789a9b0b718d9824e7a0f1dfda6066c00bb742ce0dffffffff02ecfd3fed060000001976a914b112094423613d2773a7611a788aa9a03efdbdd988acee9c5234020000001976a91455b7c406698a68cd90c8b063463e3eab6397a2e188ac000000000000000000000000000000000000000400008085202f8901edc4a7375e872bb341fb5e0a1bf1120679424bfae5a81d0581d6a0448728c112030000006a47304402205fe687edd593101ab14cde90cea18a0da63162d5851cd39cc61fbef2f4b7ce5e02202b10feaa348f9f799c2de81410ed27852f66da48082fb718fc5701381254fbcb012103be44db5bb4e994c65d5c1dc5a8ff5c2f09ed61b9361431e8c1d38aa5a3dee555ffffffff02358fa818000000001976a91485c779006a83e3c4341d9698e1b9fdbad1f35d6988ac632511c2000000001976a914eca15bec7e30194da5927474b5614ce11bea4b8d88ac000000000000000000000000000000000000000400008085202f8905deec68cfc343149c30cfb4f3c4c77d0ffbfe8bb0b93cf7f6c5e8d6b255e1d325010000006b483045022100d0e7579db5611a30a32469919fa15a8b59cba5b552c5270fe816275e6bbed41102200e77ac5729d3aae979a7480a2fb1cbfa72d2269822141ee7f51bc2df1576a0a301210399017b60b8ad52c14bdb7b9e872d475a0cc202566a5500a162e8dba779a58f3effffffffabda17b3222e3500551f335d52929eaff659a2ccfafbe531bf88433ae488e12d0a0000006b483045022100dfaf7946067edb95751ad67fd5fa68985683100a91a44e346602333a421d8727022061265db09478ff98c51d7c83631498543e6bc33de5478909771303c8dec0dccd012103742d07bb91e3b34812807b3a669a3c31834ae030859f0ae024640c6acd348378ffffffff32bf328a32b113193049d637d8e4ff7105b31abc3f98d567ec2e0090334a9ebc4c0000006a47304402202239874372ec931e948b189b478f3148c86fdae63d5f71f0f56292eca589d39f022051208259fc6d0073a35ca8c25bc3b0c024ba5dba8cde348a0d885488ed9d20c00121030a86bed999d69229175331a1d7bd92cfa4b1c5113d7f28157b72b41c859b1cc0ffffffff32e47eb6a20895eda387be5d93fe461b2cab9da5918fdeff947cf39352072dee4a0000006a473044022020183f097b369558d9a3c5505c6c508815b2eaedbe9998b56868b39577ad900e02201043745172a0d3b9f62f2d49fadc2d3b1d9c88ee0a33e5a98e699cd321bf44c501210269ac58782b7494dd231040f71f9e7055167cde6bdfefc5359d62a87f59eb385affffffffc925722c5448bc31292ff25916aa2ed4ed8514c10ca81cc30dff1d6456f19f9c000000006b483045022100c6538ae13389e06c9249e7d0129307231d07500b579b859c422c7ce9a0ad728202202ae28ecdab0956eea57deb9dc70b20d330a1295b6a93499a7eba141b2d457d1d01210399017b60b8ad52c14bdb7b9e872d475a0cc202566a5500a162e8dba779a58f3effffffff010af0ed7f100000001976a9143baf2c65ae0c9171d40b988df1459ebee092224b88ac00000000a1c41d000000000000000000000000

@teor2345 teor2345 force-pushed the zcash-test-block-template branch from f4deb90 to a295fae Compare January 17, 2023 22:53
@teor2345
Copy link
Contributor Author

I think this might need a rebase now that all of its dependencies have merged.

I made a mistake with yesterday's rebase, and forgot to change the upstream branch. (When you do git rebase --onto, it doesn't change the upstream branch!)

@teor2345 teor2345 requested a review from arya2 January 17, 2023 22:55
mergify bot added a commit that referenced this pull request Jan 18, 2023
@mergify mergify bot merged commit 6a06cbf into main Jan 18, 2023
@mergify mergify bot deleted the zcash-test-block-template branch January 18, 2023 02:11
@oxarbitrage oxarbitrage mentioned this pull request Jan 29, 2023
36 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-consensus Area: Consensus rule updates A-dependencies Area: Dependency file updates A-rpc Area: Remote Procedure Call interfaces C-testing Category: These are tests C-trivial Category: A trivial change that is not worth mentioning in the CHANGELOG
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants