Forge tests pass!
This commit is contained in:
parent
346df2e017
commit
b8db370dde
|
@ -35,7 +35,7 @@ Generic relayers consist of three components:
|
|||
|
||||
## Detailed Design
|
||||
|
||||
The interface to the Generic Relayer can be found [here](https://github.com/certusone/generic-relayer/blob/relayer/ethereum/contracts/interfaces/ICoreRelayer.sol)
|
||||
The interface to the Generic Relayer can be found [here](https://github.com/certusone/generic-relayer/blob/relayer/ethereum/contracts/interfaces/IWormholeRelayer.sol)
|
||||
|
||||
## Local Node Tests
|
||||
|
||||
|
|
|
@ -731,13 +731,22 @@ contract TestCoreRelayer is Test {
|
|||
}
|
||||
}
|
||||
|
||||
event InvalidRedelivery(
|
||||
bytes32 indexed redeliveryVaaHash,
|
||||
event Delivery(
|
||||
address indexed recipientContract,
|
||||
uint16 sourceChain,
|
||||
uint64 indexed sequence
|
||||
uint16 indexed sourceChain,
|
||||
uint64 indexed sequence,
|
||||
bytes32 deliveryVaaHash,
|
||||
uint8 status
|
||||
);
|
||||
|
||||
enum DeliveryStatus {
|
||||
SUCCESS,
|
||||
RECEIVER_FAILURE,
|
||||
FORWARD_REQUEST_FAILURE,
|
||||
FORWARD_REQUEST_SUCCESS,
|
||||
INVALID_REDELIVERY
|
||||
}
|
||||
|
||||
function testRevertRedeliveryErrors(
|
||||
GasParameters memory gasParams,
|
||||
FeeParameters memory feeParams,
|
||||
|
@ -882,7 +891,7 @@ contract TestCoreRelayer is Test {
|
|||
|
||||
bytes32 redeliveryVmHash = relayerWormhole.parseVM(stack.redeliveryVM).hash;
|
||||
vm.expectEmit(true, true, true, true, address(setup.target.coreRelayer));
|
||||
emit InvalidRedelivery(redeliveryVmHash, address(setup.target.integration), setup.sourceChainId, 1);
|
||||
emit Delivery(address(setup.target.integration), setup.sourceChainId, 1, redeliveryVmHash, uint8(DeliveryStatus.INVALID_REDELIVERY));
|
||||
setup.target.coreRelayerFull.redeliverSingle{value: stack.budget}(stack.package);
|
||||
|
||||
uint16 differentChainId = 2;
|
||||
|
@ -891,7 +900,7 @@ contract TestCoreRelayer is Test {
|
|||
}
|
||||
|
||||
vm.expectEmit(true, true, true, true, address(map[differentChainId].coreRelayer));
|
||||
emit InvalidRedelivery(redeliveryVmHash, address(setup.target.integration), setup.sourceChainId, 1);
|
||||
emit Delivery(address(setup.target.integration), setup.sourceChainId, 1, redeliveryVmHash, uint8(DeliveryStatus.INVALID_REDELIVERY));
|
||||
vm.prank(setup.target.relayer);
|
||||
map[differentChainId].coreRelayerFull.redeliverSingle{value: stack.budget}(stack.package);
|
||||
|
||||
|
@ -932,7 +941,7 @@ contract TestCoreRelayer is Test {
|
|||
|
||||
redeliveryVmHash = relayerWormhole.parseVM(fakeVM).hash;
|
||||
vm.expectEmit(true, true, true, true, address(map[differentChainId].coreRelayer));
|
||||
emit InvalidRedelivery(redeliveryVmHash, address(setup.target.integration), setup.sourceChainId, 3);
|
||||
emit Delivery(address(setup.target.integration), setup.sourceChainId, 3, redeliveryVmHash, uint8(DeliveryStatus.INVALID_REDELIVERY));
|
||||
vm.prank(setup.target.relayer);
|
||||
map[differentChainId].coreRelayerFull.redeliverSingle{
|
||||
value: stack.payment + map[differentChainId].wormhole.messageFee()
|
||||
|
|
|
@ -18,7 +18,7 @@ export interface DeliveryInstruction {
|
|||
targetAddress: Buffer
|
||||
refundAddress: Buffer
|
||||
maximumRefundTarget: BigNumber
|
||||
applicationBudgetTarget: BigNumber
|
||||
receiverValueTarget: BigNumber
|
||||
executionParameters: ExecutionParameters
|
||||
}
|
||||
|
||||
|
@ -37,7 +37,7 @@ export interface RedeliveryByTxHashInstruction {
|
|||
deliveryIndex: number
|
||||
multisendIndex: number
|
||||
newMaximumRefundTarget: BigNumber
|
||||
newApplicationBudgetTarget: BigNumber
|
||||
newReceiverValueTarget: BigNumber
|
||||
executionParameters: ExecutionParameters
|
||||
}
|
||||
|
||||
|
@ -81,7 +81,7 @@ export function parseDeliveryInstructionsContainer(
|
|||
Uint8Array.prototype.subarray.call(bytes, idx, idx + 32)
|
||||
)
|
||||
idx += 32
|
||||
const applicationBudgetTarget = ethers.BigNumber.from(
|
||||
const receiverValueTarget = ethers.BigNumber.from(
|
||||
Uint8Array.prototype.subarray.call(bytes, idx, idx + 32)
|
||||
)
|
||||
idx += 32
|
||||
|
@ -93,7 +93,7 @@ export function parseDeliveryInstructionsContainer(
|
|||
targetAddress,
|
||||
refundAddress,
|
||||
maximumRefundTarget,
|
||||
applicationBudgetTarget,
|
||||
receiverValueTarget,
|
||||
executionParameters,
|
||||
}
|
||||
)
|
||||
|
@ -139,7 +139,7 @@ export function parseRedeliveryByTxHashInstruction(
|
|||
const newMaximumRefundTarget = BigNumber.from(bytes.slice(idx, idx + 32))
|
||||
idx += 32
|
||||
|
||||
const newApplicationBudgetTarget = BigNumber.from(bytes.slice(idx, idx + 32))
|
||||
const newReceiverValueTarget = BigNumber.from(bytes.slice(idx, idx + 32))
|
||||
idx += 32
|
||||
|
||||
const executionParameters = parseExecutionParameters(bytes, idx)
|
||||
|
@ -152,7 +152,7 @@ export function parseRedeliveryByTxHashInstruction(
|
|||
deliveryIndex,
|
||||
multisendIndex,
|
||||
newMaximumRefundTarget,
|
||||
newApplicationBudgetTarget,
|
||||
newReceiverValueTarget,
|
||||
executionParameters,
|
||||
}
|
||||
}
|
||||
|
|
|
@ -530,7 +530,7 @@ export class GenericRelayerPlugin implements Plugin<WorkflowPayload> {
|
|||
for (let i = 0; i < payload.deliveryInstructionsContainer.instructions.length; i++) {
|
||||
const ix = payload.deliveryInstructionsContainer.instructions[i]
|
||||
const chainId = assertEvmChainId(ix.targetChain)
|
||||
const budget = ix.applicationBudgetTarget.add(ix.maximumRefundTarget).add(100)
|
||||
const budget = ix.receiverValueTarget.add(ix.maximumRefundTarget).add(100)
|
||||
|
||||
// todo: consider parallelizing this
|
||||
await execute.onEVM({
|
||||
|
@ -591,8 +591,8 @@ export class GenericRelayerPlugin implements Plugin<WorkflowPayload> {
|
|||
return
|
||||
}
|
||||
|
||||
const { newApplicationBudgetTarget, newMaximumRefundTarget } = redelivery.ix
|
||||
const budget = newApplicationBudgetTarget.add(newMaximumRefundTarget).add(100)
|
||||
const { newReceiverValueTarget, newMaximumRefundTarget } = redelivery.ix
|
||||
const budget = newReceiverValueTarget.add(newMaximumRefundTarget).add(100)
|
||||
const input: CoreRelayerStructs.TargetRedeliveryByTxHashParamsSingleStruct = {
|
||||
sourceEncodedVMs: payload.vaas,
|
||||
redeliveryVM: redelivery.vaa.bytes,
|
||||
|
|
|
@ -18,7 +18,7 @@ export interface DeliveryInstruction {
|
|||
targetAddress: Buffer
|
||||
refundAddress: Buffer
|
||||
maximumRefundTarget: BigNumber
|
||||
applicationBudgetTarget: BigNumber
|
||||
receiverValueTarget: BigNumber
|
||||
executionParameters: ExecutionParameters
|
||||
}
|
||||
|
||||
|
@ -37,7 +37,7 @@ export interface RedeliveryByTxHashInstruction {
|
|||
deliveryIndex: number
|
||||
multisendIndex: number
|
||||
newMaximumRefundTarget: BigNumber
|
||||
newApplicationBudgetTarget: BigNumber
|
||||
newReceiverValueTarget: BigNumber
|
||||
executionParameters: ExecutionParameters
|
||||
}
|
||||
|
||||
|
@ -81,7 +81,7 @@ export function parseDeliveryInstructionsContainer(
|
|||
Uint8Array.prototype.subarray.call(bytes, idx, idx + 32)
|
||||
)
|
||||
idx += 32
|
||||
const applicationBudgetTarget = ethers.BigNumber.from(
|
||||
const receiverValueTarget = ethers.BigNumber.from(
|
||||
Uint8Array.prototype.subarray.call(bytes, idx, idx + 32)
|
||||
)
|
||||
idx += 32
|
||||
|
@ -93,7 +93,7 @@ export function parseDeliveryInstructionsContainer(
|
|||
targetAddress,
|
||||
refundAddress,
|
||||
maximumRefundTarget,
|
||||
applicationBudgetTarget,
|
||||
receiverValueTarget,
|
||||
executionParameters,
|
||||
}
|
||||
)
|
||||
|
@ -139,7 +139,7 @@ export function parseRedeliveryByTxHashInstruction(
|
|||
const newMaximumRefundTarget = BigNumber.from(bytes.slice(idx, idx + 32))
|
||||
idx += 32
|
||||
|
||||
const newApplicationBudgetTarget = BigNumber.from(bytes.slice(idx, idx + 32))
|
||||
const newReceiverValueTarget = BigNumber.from(bytes.slice(idx, idx + 32))
|
||||
idx += 32
|
||||
|
||||
const executionParameters = parseExecutionParameters(bytes, idx)
|
||||
|
@ -152,7 +152,7 @@ export function parseRedeliveryByTxHashInstruction(
|
|||
deliveryIndex,
|
||||
multisendIndex,
|
||||
newMaximumRefundTarget,
|
||||
newApplicationBudgetTarget,
|
||||
newReceiverValueTarget,
|
||||
executionParameters,
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue