Multidelivery, forwarding tests work + Relayer engine fix!

This commit is contained in:
derpy-duck 2023-02-13 20:02:53 +00:00 committed by chase-45
parent 249145af86
commit f5c1fe3a7b
3 changed files with 87 additions and 22 deletions

View File

@ -92,17 +92,30 @@ contract MockRelayerIntegration is IWormholeReceiver {
function sendMessagesWithFurtherInstructions(
bytes[] memory messages,
FurtherInstructions memory furtherInstructions,
uint16 targetChainId,
address destination,
address refundAddress,
uint256 applicationBudget,
uint32 nonce
uint16[] memory chains,
uint256[] memory computeBudgets
) public payable {
for(uint16 i=0; i<messages.length; i++) {
wormhole.publishMessage{value: wormhole.messageFee()}(nonce, messages[i], 200);
wormhole.publishMessage{value: wormhole.messageFee()}(1, messages[i], 200);
}
wormhole.publishMessage{value: wormhole.messageFee()}(nonce, encodeFurtherInstructions(furtherInstructions), 200);
executeSend(targetChainId, destination, refundAddress, applicationBudget, nonce);
wormhole.publishMessage{value: wormhole.messageFee()}(1, encodeFurtherInstructions(furtherInstructions), 200);
ICoreRelayer.DeliveryRequest[] memory requests = new ICoreRelayer.DeliveryRequest[](chains.length);
for(uint16 i=0; i<chains.length; i++) {
requests[i] = ICoreRelayer.DeliveryRequest({
targetChain: chains[i],
targetAddress: registeredContracts[chains[i]],
refundAddress: registeredContracts[chains[i]],
computeBudget: computeBudgets[i],
applicationBudget: 0,
relayParameters: relayer.getDefaultRelayParams()
});
}
ICoreRelayer.DeliveryRequestsContainer memory container = ICoreRelayer.DeliveryRequestsContainer({
payloadId: 1,
requests: requests,
relayProviderAddress: address(relayer.getDefaultRelayProvider())
});
relayer.requestMultidelivery{value: (msg.value - wormhole.messageFee()*(1 + messages.length))}(container, 1);
}
function executeSend(

View File

@ -4,31 +4,31 @@
"relayProviders": [
{
"chainId": 2,
"address": "0x59a13b07fE44Aa7221Fd6C55A3E8df26d4E37a65"
"address": "0x027e4121d4675465E8029F09511D813c3476Ebf5"
},
{
"chainId": 4,
"address": "0x3e5399049a779489000583dD0d14576D0472Fe94"
"address": "0x13331A9E619b4e016f35f29dF84c1b14675fE33D"
}
],
"coreRelayers": [
{
"chainId": 2,
"address": "0x32e02F2934824ec085298E2B4e0e07935Ec6DaeC"
"address": "0xaa8751Df9FC4b9424831Fb361F0C14096FC0C204"
},
{
"chainId": 4,
"address": "0xa69F4c9F17e4C90138c55279aAF1917352D435C7"
"address": "0xbbf69673e44988D2FD7D878eDbD1cDDa1A70fAB7"
}
],
"mockIntegrations": [
{
"chainId": 2,
"address": "0x3Cc7B9a386410858B412B00B13264654F68364Ed"
"address": "0x01c4052ac7EEF0cbDdc83F3780149D52D4174776"
},
{
"chainId": 4,
"address": "0xba5b7E64bae1f953816B9f3a7de6B5b5378F9Fb8"
"address": "0x7fcFA6cE32bF1F20337bD6AA6805EF28A04e906f"
}
]
}

View File

@ -71,7 +71,7 @@ describe("Core Relayer Integration Test - Two Chains", () => {
console.log(`Sent message: ${arbitraryPayload}`)
const value = await sourceCoreRelayer.quoteGasDeliveryFee(
targetChain.chainId,
1000000,
500000,
await sourceCoreRelayer.getDefaultRelayProvider()
)
console.log(`Quoted gas delivery fee: ${value}`)
@ -88,7 +88,7 @@ describe("Core Relayer Integration Test - Two Chains", () => {
await new Promise((resolve) => {
setTimeout(() => {
resolve(0)
}, 1000)
}, 2000)
})
console.log("Checking if message was relayed")
@ -127,11 +127,8 @@ describe("Core Relayer Integration Test - Two Chains", () => {
const tx = await sourceMockIntegration.sendMessagesWithFurtherInstructions(
[arbitraryPayload1],
furtherInstructions,
targetChain.chainId,
targetMockIntegrationAddress,
targetMockIntegrationAddress,
0,
1,
[targetChain.chainId],
[value.add(extraForwardingValue)],
{ value: value.add(extraForwardingValue), gasLimit: 500000 }
)
console.log("Sent delivery request!")
@ -141,7 +138,7 @@ describe("Core Relayer Integration Test - Two Chains", () => {
await new Promise((resolve) => {
setTimeout(() => {
resolve(0)
}, 2000)
}, 4000)
})
console.log("Checking if message was relayed")
@ -158,4 +155,59 @@ describe("Core Relayer Integration Test - Two Chains", () => {
console.log(`Received message on source: ${message2}`)
expect(message2).to.equal(arbitraryPayload2)
})
it("Executes a multidelivery", async () => {
const arbitraryPayload1 = ethers.utils.hexlify(
ethers.utils.toUtf8Bytes(generateRandomString(32))
)
console.log(`Sent message: ${arbitraryPayload1}`)
const value1 = await sourceCoreRelayer.quoteGasDeliveryFee(
sourceChain.chainId,
500000,
await sourceCoreRelayer.getDefaultRelayProvider()
)
const value2 = await sourceCoreRelayer.quoteGasDeliveryFee(
targetChain.chainId,
500000,
await sourceCoreRelayer.getDefaultRelayProvider()
)
console.log(`Quoted gas delivery fee: ${value1.add(value2)}`)
const furtherInstructions: MockRelayerIntegration.FurtherInstructionsStruct = {
keepSending: false,
newMessages: [],
chains: [],
gasLimits: [],
}
const tx = await sourceMockIntegration.sendMessagesWithFurtherInstructions(
[arbitraryPayload1],
furtherInstructions,
[sourceChain.chainId, targetChain.chainId],
[value1, value2],
{ value: value1.add(value2), gasLimit: 500000 }
)
console.log("Sent delivery request!")
const rx = await tx.wait()
console.log("Message confirmed!")
await new Promise((resolve) => {
setTimeout(() => {
resolve(0)
}, 4000)
})
console.log("Checking if first message was relayed")
const message1 = await sourceMockIntegration.getMessage()
console.log(
`Sent message: ${arbitraryPayload1}`
)
console.log(`Received message: ${message1}`)
expect(message1).to.equal(arbitraryPayload1)
console.log("Checking if second message was relayed")
const message2 = await targetMockIntegration.getMessage()
console.log(`Sent message: ${arbitraryPayload1}`)
console.log(`Received message: ${message2}`)
expect(message2).to.equal(arbitraryPayload1)
})
})