check in MEV boost test script that payload gets unblinded (#3838)
This commit is contained in:
parent
aff53e962f
commit
19bf7f1599
|
@ -568,7 +568,7 @@ type
|
|||
ProduceBlockResponse* = DataEnclosedObject[phase0.BeaconBlock]
|
||||
ProduceBlockResponseV2* = ForkedBeaconBlock
|
||||
ProduceSyncCommitteeContributionResponse* = DataEnclosedObject[SyncCommitteeContribution]
|
||||
SubmitBlindedBlockResponse* = DataEnclosedObject[SignedBuilderBid]
|
||||
SubmitBlindedBlockResponse* = DataEnclosedObject[bellatrix.ExecutionPayload]
|
||||
|
||||
func `==`*(a, b: RestValidatorIndex): bool =
|
||||
uint64(a) == uint64(b)
|
||||
|
|
|
@ -1,60 +1,86 @@
|
|||
import
|
||||
unittest2,
|
||||
std/macros,
|
||||
chronos, presto/client, web3/ethtypes,
|
||||
../beacon_chain/spec/mev/rest_bellatrix_mev_calls,
|
||||
../tests/testutil
|
||||
../beacon_chain/spec/mev/rest_bellatrix_mev_calls
|
||||
|
||||
from ../beacon_chain/beacon_chain_db import DepositContractSnapshot
|
||||
from ../beacon_chain/eth1/eth1_monitor import
|
||||
Eth1Monitor, Web3DataProvider, asEth2Digest, ensureDataProvider,
|
||||
forkchoiceUpdated, getBlockByNumber, init, new
|
||||
from ../beacon_chain/networking/network_metadata import Eth1Network
|
||||
from ../beacon_chain/spec/helpers import compute_signing_root
|
||||
from ../beacon_chain/spec/datatypes/bellatrix import SignedBeaconBlock
|
||||
from ../beacon_chain/spec/helpers import compute_domain, compute_signing_root
|
||||
from ../tests/testdbutil import makeTestDB
|
||||
|
||||
suite "MEV tests":
|
||||
setup:
|
||||
const
|
||||
feeRecipient =
|
||||
Eth1Address.fromHex("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b")
|
||||
web3Url = "http://127.0.0.1:8551"
|
||||
restUrl = "http://127.0.0.1:28545"
|
||||
const
|
||||
feeRecipient =
|
||||
Eth1Address.fromHex("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b")
|
||||
web3Url = "http://127.0.0.1:8551"
|
||||
restUrl = "http://127.0.0.1:28545"
|
||||
|
||||
let
|
||||
db = makeTestDB(64)
|
||||
eth1Monitor = Eth1Monitor.init(
|
||||
defaultRuntimeConfig, db, nil, @[web3Url],
|
||||
none(DepositContractSnapshot), none(Eth1Network), false, none(seq[byte]))
|
||||
web3Provider = (waitFor Web3DataProvider.new(
|
||||
default(Eth1Address), web3Url, some(@[0xcdu8, 0xcau8, 0xe4u8, 0xecu8, 0x6au8, 0x3du8, 0x0bu8, 0x4bu8, 0x97u8, 0x00u8, 0x21u8, 0x21u8, 0xb0u8, 0x5bu8, 0x22u8, 0xe2u8, 0xd6u8, 0xd5u8, 0x7fu8, 0xaau8, 0x51u8, 0x53u8, 0x84u8, 0x5fu8, 0xe0u8, 0x4fu8, 0x06u8, 0xb5u8, 0xf3u8, 0xadu8, 0xc4u8, 0x0bu8]))).get
|
||||
restClient = RestClientRef.new(restUrl).get
|
||||
privKey = ValidatorPrivKey.init(
|
||||
"0x066e3bdc0415530e5c7fed6382d5c822c192b620203cf669903e1810a8c67d06")
|
||||
pubKey = privKey.toPubKey.toPubKey
|
||||
proc main() {.async.} =
|
||||
let
|
||||
db = makeTestDB(64)
|
||||
elMonitor = Eth1Monitor.init(
|
||||
defaultRuntimeConfig, db, nil, @[web3Url],
|
||||
none(DepositContractSnapshot), none(Eth1Network), false, none(seq[byte]))
|
||||
web3Provider = (await Web3DataProvider.new(
|
||||
default(Eth1Address), web3Url, some(@[0xcdu8, 0xcau8, 0xe4u8, 0xecu8, 0x6au8, 0x3du8, 0x0bu8, 0x4bu8, 0x97u8, 0x00u8, 0x21u8, 0x21u8, 0xb0u8, 0x5bu8, 0x22u8, 0xe2u8, 0xd6u8, 0xd5u8, 0x7fu8, 0xaau8, 0x51u8, 0x53u8, 0x84u8, 0x5fu8, 0xe0u8, 0x4fu8, 0x06u8, 0xb5u8, 0xf3u8, 0xadu8, 0xc4u8, 0x0bu8]))).get
|
||||
restClient = RestClientRef.new(restUrl).get
|
||||
privKey = ValidatorPrivKey.init(
|
||||
"0x066e3bdc0415530e5c7fed6382d5c822c192b620203cf669903e1810a8c67d06")
|
||||
pubKey = privKey.toPubKey.toPubKey
|
||||
|
||||
test "forkchoiceUpdated, getHeader, and submitBlindedBlock":
|
||||
waitFor eth1Monitor.ensureDataProvider()
|
||||
let
|
||||
existingBlock = waitFor web3Provider.getBlockByNumber(0)
|
||||
payloadId = waitFor eth1Monitor.forkchoiceUpdated(
|
||||
existingBlock.hash.asEth2Digest,
|
||||
existingBlock.hash.asEth2Digest,
|
||||
existingBlock.timestamp.uint64 + 12,
|
||||
ZERO_HASH.data, # Random
|
||||
feeRecipient)
|
||||
blindedHeader = waitFor restClient.getHeader(
|
||||
1.Slot, existingBlock.hash.asEth2Digest, pubKey)
|
||||
await elMonitor.ensureDataProvider()
|
||||
let
|
||||
existingBlock = await web3Provider.getBlockByNumber(0)
|
||||
payloadId = await elMonitor.forkchoiceUpdated(
|
||||
existingBlock.hash.asEth2Digest,
|
||||
existingBlock.hash.asEth2Digest,
|
||||
existingBlock.timestamp.uint64 + 12,
|
||||
ZERO_HASH.data, # Random
|
||||
feeRecipient)
|
||||
blindedHeader = await restClient.getHeader(
|
||||
1.Slot, existingBlock.hash.asEth2Digest, pubKey)
|
||||
|
||||
# construct block
|
||||
var blck: SignedBlindedBeaconBlock
|
||||
blck.message.body.execution_payload_header = blindedHeader.data.data.message.header
|
||||
var blck: SignedBlindedBeaconBlock
|
||||
blck.message.body.execution_payload_header =
|
||||
blindedHeader.data.data.message.header
|
||||
|
||||
# sign block
|
||||
let domain: Eth2Domain = [
|
||||
byte 0x00, 0x00, 0x00, 0x00, 0x8a, 0x02, 0x3a, 0x9e, 0x4a, 0xff, 0xbb, 0x25, 0x5a, 0x6b, 0x48, 0xae, 0x85, 0xcc, 0x4a, 0x7d, 0x1a, 0x1b, 0x9e, 0x8e, 0x68, 0x09, 0xfe, 0x9e, 0x48, 0x53, 0x5c, 0x01]
|
||||
blck.signature = blsSign(
|
||||
privKey,
|
||||
compute_signing_root(hash_tree_root(blck.message), domain).data).
|
||||
toValidatorSig
|
||||
# Can't be const:
|
||||
# https://github.com/nim-lang/Nim/issues/15952
|
||||
# https://github.com/nim-lang/Nim/issues/19969
|
||||
let mergeMockDomain = compute_domain(
|
||||
DOMAIN_BEACON_PROPOSER, defaultRuntimeConfig.BELLATRIX_FORK_VERSION)
|
||||
|
||||
let signedBuilderBid = waitFor restClient.submitBlindedBlock(blck)
|
||||
blck.signature = blsSign(
|
||||
privKey, compute_signing_root(
|
||||
hash_tree_root(blck.message), mergeMockDomain).data).toValidatorSig
|
||||
|
||||
let submitBlindedBlockResponse =
|
||||
await restClient.submitBlindedBlock(blck)
|
||||
doAssert submitBlindedBlockResponse.status == 200
|
||||
doAssert submitBlindedBlockResponse.data.data is ExecutionPayload
|
||||
|
||||
macro copyExecutionPayloadFields(a, b: untyped) =
|
||||
result = newStmtList()
|
||||
for name, value in fieldPairs(blck.message.body.execution_payload_header):
|
||||
if name != "transactions_root":
|
||||
result.add newAssignment(
|
||||
newDotExpr(a, ident(name)), newDotExpr(b, ident(name)))
|
||||
|
||||
var fullBlck: bellatrix.SignedBeaconBlock
|
||||
fullBlck.signature = blck.signature
|
||||
copyExecutionPayloadFields(
|
||||
fullBlck.message.body.execution_payload,
|
||||
blck.message.body.execution_payload_header)
|
||||
fullBlck.message.body.execution_payload.transactions =
|
||||
submitBlindedBlockResponse.data.data.transactions
|
||||
|
||||
doAssert hash_tree_root(fullBlck.message.body.execution_payload) ==
|
||||
hash_tree_root(blck.message.body.execution_payload_header)
|
||||
|
||||
echo fullBlck.message.body.execution_payload
|
||||
echo submitBlindedBlockResponse.data.data
|
||||
|
||||
waitFor main()
|
||||
|
|
Loading…
Reference in New Issue