debugging

This commit is contained in:
derpy-duck 2023-04-06 17:58:17 +00:00
parent 58760cc12e
commit b1da1930be
13 changed files with 149 additions and 1861 deletions

View File

@ -48,7 +48,7 @@ contract CoreRelayerDelivery is CoreRelayerGovernance {
// Checks if enough funds were passed into the forward (should always be true as it was already checked)
if (fundsForForward < forwardInstruction.totalFee) {
revert IDelivery.ForwardNotSufficientlyFunded();
revert IDelivery.ForwardNotSufficientlyFunded(fundsForForward, forwardInstruction.totalFee);
}
IRelayProvider relayProvider = IRelayProvider(forwardInstruction.relayProvider);

View File

@ -14,7 +14,7 @@ contract ForwardWrapper {
IWormhole wormhole;
error RequesterNotCoreRelayer();
error ForwardNotSufficientlyFunded(uint256 extraAmountNeeded);
error ForwardNotSufficientlyFunded(uint256 amountOfFunds, uint256 amountOfFundsNeeded);
constructor(address _wormholeRelayer, address _wormhole) {
forwardInstructionViewer = IForwardInstructionViewer(_wormholeRelayer);
@ -55,7 +55,7 @@ contract ForwardWrapper {
if (forwardInstruction.isValid) {
uint256 feeForForward = transactionFeeRefundAmount + forwardInstruction.msgValue;
if (feeForForward < forwardInstruction.totalFee) {
revert ForwardNotSufficientlyFunded(forwardInstruction.totalFee - feeForForward);
revert ForwardNotSufficientlyFunded(feeForForward, forwardInstruction.totalFee);
}
}

View File

@ -53,5 +53,5 @@ interface IDelivery {
error ReentrantCall(); // A delivery cannot occur during another delivery
error MessageInfosDoNotMatchVaas(uint8 index); // The VAA at index 'index' does not match the 'index'-th description given on the source chain in the 'messages' field
error MessageInfosLengthDoesNotMatchVaasLength(); // The VAA array has a different length than the original array of MessageInfo descriptions from the source chain
error ForwardNotSufficientlyFunded(); // Should never happen as this should have already been checked for
error ForwardNotSufficientlyFunded(uint256 amountOfFunds, uint256 amountOfFundsNeeded); // Should never happen as this should have already been checked for
}

View File

@ -20,7 +20,7 @@ contract AttackForwardIntegration is IWormholeReceiver {
// Capture 30k gas for fees
// This just needs to be enough to pay for the call to the destination address.
uint32 SAFE_DELIVERY_GAS_CAPTURE = 30000;
uint32 SAFE_DELIVERY_GAS_CAPTURE = 50000;
constructor(IWormhole initWormhole, IWormholeRelayer initCoreRelayer, uint16 chainId, address initAttackerReward) {
attackerReward = initAttackerReward;

View File

@ -405,9 +405,9 @@ contract WormholeRelayerTests is Test {
}
function testForward(GasParameters memory gasParams, FeeParameters memory feeParams, bytes memory message) public {
StandardSetupTwoChains memory setup = standardAssumeAndSetupTwoChains(gasParams, feeParams, 1400000);
StandardSetupTwoChains memory setup = standardAssumeAndSetupTwoChains(gasParams, feeParams, 1000000);
uint256 payment = assumeAndGetForwardPayment(gasParams.targetGasLimit, 500000, setup, gasParams, feeParams);
uint256 payment = assumeAndGetForwardPayment(gasParams.targetGasLimit, 700000, setup, gasParams, feeParams);
vm.recordLogs();
@ -1045,7 +1045,7 @@ contract WormholeRelayerTests is Test {
new ForwardTester(address(setup.target.wormhole), address(setup.target.coreRelayer), address(setup.target.wormholeSimulator));
vm.deal(address(forwardTester), type(uint256).max / 2);
stack.targetAddress = setup.source.coreRelayer.toWormholeFormat(address(forwardTester));
stack.payment = assumeAndGetForwardPayment(gasParams.targetGasLimit, 500000, setup, gasParams, feeParams);
stack.payment = assumeAndGetForwardPayment(gasParams.targetGasLimit, 700000, setup, gasParams, feeParams);
stack.wormholeFee = setup.source.wormhole.messageFee();
uint64 sequence =
setup.source.wormhole.publishMessage{value: stack.wormholeFee}(1, abi.encodePacked(uint8(test)), 200);
@ -1063,7 +1063,7 @@ contract WormholeRelayerTests is Test {
}
function testForwardTester(GasParameters memory gasParams, FeeParameters memory feeParams) public {
StandardSetupTwoChains memory setup = standardAssumeAndSetupTwoChains(gasParams, feeParams, 1400000);
StandardSetupTwoChains memory setup = standardAssumeAndSetupTwoChains(gasParams, feeParams, 1000000);
executeForwardTest(
ForwardTester.Action.WorksCorrectly, DeliveryStatus.FORWARD_REQUEST_SUCCESS, setup, gasParams, feeParams
);
@ -1084,7 +1084,7 @@ contract WormholeRelayerTests is Test {
function testRevertForwardMultipleForwardsRequested(GasParameters memory gasParams, FeeParameters memory feeParams)
public
{
StandardSetupTwoChains memory setup = standardAssumeAndSetupTwoChains(gasParams, feeParams, 1200000);
StandardSetupTwoChains memory setup = standardAssumeAndSetupTwoChains(gasParams, feeParams, 1000000);
executeForwardTest(
ForwardTester.Action.MultipleForwardsRequested, DeliveryStatus.RECEIVER_FAILURE, setup, gasParams, feeParams
);
@ -1093,7 +1093,7 @@ contract WormholeRelayerTests is Test {
function testRevertForwardMultichainSendEmpty(GasParameters memory gasParams, FeeParameters memory feeParams)
public
{
StandardSetupTwoChains memory setup = standardAssumeAndSetupTwoChains(gasParams, feeParams, 1200000);
StandardSetupTwoChains memory setup = standardAssumeAndSetupTwoChains(gasParams, feeParams, 1000000);
executeForwardTest(
ForwardTester.Action.MultichainSendEmpty, DeliveryStatus.RECEIVER_FAILURE, setup, gasParams, feeParams
@ -1104,7 +1104,7 @@ contract WormholeRelayerTests is Test {
GasParameters memory gasParams,
FeeParameters memory feeParams
) public {
StandardSetupTwoChains memory setup = standardAssumeAndSetupTwoChains(gasParams, feeParams, 1200000);
StandardSetupTwoChains memory setup = standardAssumeAndSetupTwoChains(gasParams, feeParams, 1000000);
executeForwardTest(
ForwardTester.Action.ForwardRequestFromWrongAddress,
@ -1116,7 +1116,7 @@ contract WormholeRelayerTests is Test {
}
function testRevertDeliveryReentrantCall(GasParameters memory gasParams, FeeParameters memory feeParams) public {
StandardSetupTwoChains memory setup = standardAssumeAndSetupTwoChains(gasParams, feeParams, 1200000);
StandardSetupTwoChains memory setup = standardAssumeAndSetupTwoChains(gasParams, feeParams, 1000000);
executeForwardTest(
ForwardTester.Action.ReentrantCall, DeliveryStatus.RECEIVER_FAILURE, setup, gasParams, feeParams
);
@ -1125,7 +1125,7 @@ contract WormholeRelayerTests is Test {
function testRevertForwardMaxTransactionFeeNotEnough(GasParameters memory gasParams, FeeParameters memory feeParams)
public
{
StandardSetupTwoChains memory setup = standardAssumeAndSetupTwoChains(gasParams, feeParams, 1200000);
StandardSetupTwoChains memory setup = standardAssumeAndSetupTwoChains(gasParams, feeParams, 1000000);
executeForwardTest(
ForwardTester.Action.MaxTransactionFeeNotEnough,
@ -1137,7 +1137,7 @@ contract WormholeRelayerTests is Test {
}
function testRevertForwardFundsTooMuch(GasParameters memory gasParams, FeeParameters memory feeParams) public {
StandardSetupTwoChains memory setup = standardAssumeAndSetupTwoChains(gasParams, feeParams, 1200000);
StandardSetupTwoChains memory setup = standardAssumeAndSetupTwoChains(gasParams, feeParams, 1000000);
setup.target.relayProvider.updateMaximumBudget(
setup.sourceChainId, uint256(10000 - 1) * gasParams.sourceGasPrice

View File

@ -4,31 +4,31 @@
"relayProviders": [
{
"chainId": 2,
"address": "0xB349FB172D6D5f693b0aA1C6eEc4c61cFd6846f4"
"address": "0xb4fFe5983B0B748124577Af4d16953bd096b6897"
},
{
"chainId": 4,
"address": "0x9ce4cd6D7f5e8b14c7a3e8e6A257A86Bd5a6EeA0"
"address": "0xdFccc9C59c7361307d47c558ffA75840B32DbA29"
}
],
"coreRelayers": [
{
"chainId": 2,
"address": "0x68b86Cd90A44C805b1cCF4808b29C9c7cf73FDFF"
"address": "0x42D4BA5e542d9FeD87EA657f0295F1968A61c00A"
},
{
"chainId": 4,
"address": "0xd45A464a2412A2f83498d13635698a041b9dBe9b"
"address": "0xFF5181e2210AB92a5c9db93729Bc47332555B9E9"
}
],
"mockIntegrations": [
{
"chainId": 2,
"address": "0xB0015714B541A99265f529c7c0d34DA47deCA5b2"
"address": "0xe93e3B649d4E01e47dd2170CAFEf0651477649Da"
},
{
"chainId": 4,
"address": "0xc22Ffa318051d8aF4E5f2E2732d7049486fcE093"
"address": "0x6793E8E0E8ac22d71c65c2bf82e9B142dEf9eCDb"
}
]
}

File diff suppressed because it is too large Load Diff

View File

@ -18,7 +18,7 @@
"@types/koa": "^2.13.5",
"clone": "^2.1.2",
"koa": "^2.14.1",
"wormhole-relayer": "github:gabzim/wormhole-relayer#03c7c62",
"wormhole-relayer": "file:../../wormhole-relayer",
"yargs": "^17.7.1"
},
"peerDependencies": {

View File

@ -125,8 +125,6 @@ export function parseWormholeRelayerSend(bytes: Buffer): DeliveryInstructionsCon
}
function parseMessageInfo(bytes: Buffer, idx: number): [MessageInfo, number] {
const payloadId = bytes.readUint8(idx)
idx += 1
const payloadType = bytes.readUint8(idx) as MessageInfoType
idx += 1
if (payloadType == MessageInfoType.EMITTER_SEQUENCE) {

View File

@ -7,7 +7,8 @@ import {
StandardRelayerApp,
StandardRelayerContext,
} from "wormhole-relayer"
import { EVMChainId } from "@certusone/wormhole-sdk"
import { defaultLogger } from "wormhole-relayer/lib/logging"
import { CHAIN_ID_ETH, CHAIN_ID_BSC, EVMChainId } from "@certusone/wormhole-sdk"
import { rootLogger } from "./log"
import { processGenericRelayerVaa } from "./processor"
import { Logger } from "winston"
@ -39,10 +40,22 @@ type ContractsJson = {
async function main() {
let opts = yargs(process.argv.slice(2)).argv as unknown as Opts
const contracts = await loadContractsJson(opts.flag)
console.log("hi")
const app = new StandardRelayerApp<GRContext>(flagToEnvironment(opts.flag), {
name: "GenericRelayer",
privateKeys: privateKeys(contracts),
spyEndpoint: "localhost:7072",
wormholeRpcs: ["http://localhost:7071"],
providers: { chains: {
[CHAIN_ID_ETH]: {
endpoints: ["http://localhost:8545/"]
},
[CHAIN_ID_BSC]: {
endpoints: ["http://localhost:8546/"]
},
}},
logger: defaultLogger,
fetchSourceTxhash: false,
// redis: {},
// redisCluster: {},
// redisClusterEndpoints: [],

View File

@ -28,7 +28,7 @@ async function processDelivery(ctx: GRContext) {
const payload = parseWormholeRelayerSend(ctx.vaa!.payload)
if (
payload.messages.findIndex((m) => m.payloadType !== MessageInfoType.EMITTER_SEQUENCE)
payload.messages.findIndex((m) => m.payloadType !== MessageInfoType.EMITTER_SEQUENCE) != -1
) {
throw new Error(`Only supports EmitterSequence MessageInfoType`)
}

View File

@ -125,8 +125,6 @@ export function parseWormholeRelayerSend(bytes: Buffer): DeliveryInstructionsCon
}
function parseMessageInfo(bytes: Buffer, idx: number): [MessageInfo, number] {
const payloadId = bytes.readUint8(idx)
idx += 1
const payloadType = bytes.readUint8(idx) as MessageInfoType
idx += 1
if (payloadType == MessageInfoType.EMITTER_SEQUENCE) {

View File

@ -125,8 +125,6 @@ export function parseWormholeRelayerSend(bytes: Buffer): DeliveryInstructionsCon
}
function parseMessageInfo(bytes: Buffer, idx: number): [MessageInfo, number] {
const payloadId = bytes.readUint8(idx)
idx += 1
const payloadType = bytes.readUint8(idx) as MessageInfoType
idx += 1
if (payloadType == MessageInfoType.EMITTER_SEQUENCE) {