diff --git a/tests/ragger/abis/1inch.abi.json b/tests/ragger/abis/1inch.abi.json new file mode 100644 index 0000000000..7deb4b632e --- /dev/null +++ b/tests/ragger/abis/1inch.abi.json @@ -0,0 +1,2062 @@ +[ + { + "inputs" : [ + { + "internalType" : "contract IWETH", + "name" : "weth", + "type" : "address" + } + ], + "stateMutability" : "nonpayable", + "type" : "constructor" + }, + { + "inputs" : [], + "name" : "AdvanceEpochFailed", + "type" : "error" + }, + { + "inputs" : [], + "name" : "ArbitraryStaticCallFailed", + "type" : "error" + }, + { + "inputs" : [], + "name" : "BadCurveSwapSelector", + "type" : "error" + }, + { + "inputs" : [], + "name" : "BadPool", + "type" : "error" + }, + { + "inputs" : [], + "name" : "BadSignature", + "type" : "error" + }, + { + "inputs" : [], + "name" : "BitInvalidatedOrder", + "type" : "error" + }, + { + "inputs" : [], + "name" : "ETHTransferFailed", + "type" : "error" + }, + { + "inputs" : [], + "name" : "ETHTransferFailed", + "type" : "error" + }, + { + "inputs" : [], + "name" : "EnforcedPause", + "type" : "error" + }, + { + "inputs" : [], + "name" : "EpochManagerAndBitInvalidatorsAreIncompatible", + "type" : "error" + }, + { + "inputs" : [], + "name" : "EthDepositRejected", + "type" : "error" + }, + { + "inputs" : [], + "name" : "ExpectedPause", + "type" : "error" + }, + { + "inputs" : [], + "name" : "InsufficientBalance", + "type" : "error" + }, + { + "inputs" : [], + "name" : "InvalidMsgValue", + "type" : "error" + }, + { + "inputs" : [], + "name" : "InvalidMsgValue", + "type" : "error" + }, + { + "inputs" : [], + "name" : "InvalidPermit2Transfer", + "type" : "error" + }, + { + "inputs" : [], + "name" : "InvalidShortString", + "type" : "error" + }, + { + "inputs" : [], + "name" : "InvalidatedOrder", + "type" : "error" + }, + { + "inputs" : [], + "name" : "MakingAmountTooLow", + "type" : "error" + }, + { + "inputs" : [], + "name" : "MismatchArraysLengths", + "type" : "error" + }, + { + "inputs" : [], + "name" : "OrderExpired", + "type" : "error" + }, + { + "inputs" : [], + "name" : "OrderIsNotSuitableForMassInvalidation", + "type" : "error" + }, + { + "inputs" : [ + { + "internalType" : "address", + "name" : "owner", + "type" : "address" + } + ], + "name" : "OwnableInvalidOwner", + "type" : "error" + }, + { + "inputs" : [ + { + "internalType" : "address", + "name" : "account", + "type" : "address" + } + ], + "name" : "OwnableUnauthorizedAccount", + "type" : "error" + }, + { + "inputs" : [], + "name" : "PartialFillNotAllowed", + "type" : "error" + }, + { + "inputs" : [], + "name" : "Permit2TransferAmountTooHigh", + "type" : "error" + }, + { + "inputs" : [], + "name" : "PredicateIsNotTrue", + "type" : "error" + }, + { + "inputs" : [], + "name" : "PrivateOrder", + "type" : "error" + }, + { + "inputs" : [], + "name" : "ReentrancyDetected", + "type" : "error" + }, + { + "inputs" : [], + "name" : "RemainingInvalidatedOrder", + "type" : "error" + }, + { + "inputs" : [], + "name" : "ReservesCallFailed", + "type" : "error" + }, + { + "inputs" : [ + { + "internalType" : "uint256", + "name" : "result", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "minReturn", + "type" : "uint256" + } + ], + "name" : "ReturnAmountIsNotEnough", + "type" : "error" + }, + { + "inputs" : [], + "name" : "SafeTransferFailed", + "type" : "error" + }, + { + "inputs" : [], + "name" : "SafeTransferFromFailed", + "type" : "error" + }, + { + "inputs" : [ + { + "internalType" : "bool", + "name" : "success", + "type" : "bool" + }, + { + "internalType" : "bytes", + "name" : "res", + "type" : "bytes" + } + ], + "name" : "SimulationResults", + "type" : "error" + }, + { + "inputs" : [ + { + "internalType" : "string", + "name" : "str", + "type" : "string" + } + ], + "name" : "StringTooLong", + "type" : "error" + }, + { + "inputs" : [], + "name" : "SwapWithZeroAmount", + "type" : "error" + }, + { + "inputs" : [], + "name" : "TakingAmountExceeded", + "type" : "error" + }, + { + "inputs" : [], + "name" : "TakingAmountTooHigh", + "type" : "error" + }, + { + "inputs" : [], + "name" : "TransferFromMakerToTakerFailed", + "type" : "error" + }, + { + "inputs" : [], + "name" : "TransferFromTakerToMakerFailed", + "type" : "error" + }, + { + "inputs" : [], + "name" : "WrongSeriesNonce", + "type" : "error" + }, + { + "inputs" : [], + "name" : "ZeroAddress", + "type" : "error" + }, + { + "inputs" : [], + "name" : "ZeroMinReturn", + "type" : "error" + }, + { + "anonymous" : false, + "inputs" : [ + { + "indexed" : true, + "internalType" : "address", + "name" : "maker", + "type" : "address" + }, + { + "indexed" : false, + "internalType" : "uint256", + "name" : "slotIndex", + "type" : "uint256" + }, + { + "indexed" : false, + "internalType" : "uint256", + "name" : "slotValue", + "type" : "uint256" + } + ], + "name" : "BitInvalidatorUpdated", + "type" : "event" + }, + { + "anonymous" : false, + "inputs" : [], + "name" : "EIP712DomainChanged", + "type" : "event" + }, + { + "anonymous" : false, + "inputs" : [ + { + "indexed" : true, + "internalType" : "address", + "name" : "maker", + "type" : "address" + }, + { + "indexed" : false, + "internalType" : "uint256", + "name" : "series", + "type" : "uint256" + }, + { + "indexed" : false, + "internalType" : "uint256", + "name" : "newEpoch", + "type" : "uint256" + } + ], + "name" : "EpochIncreased", + "type" : "event" + }, + { + "anonymous" : false, + "inputs" : [ + { + "indexed" : false, + "internalType" : "bytes32", + "name" : "orderHash", + "type" : "bytes32" + } + ], + "name" : "OrderCancelled", + "type" : "event" + }, + { + "anonymous" : false, + "inputs" : [ + { + "indexed" : false, + "internalType" : "bytes32", + "name" : "orderHash", + "type" : "bytes32" + }, + { + "indexed" : false, + "internalType" : "uint256", + "name" : "remainingAmount", + "type" : "uint256" + } + ], + "name" : "OrderFilled", + "type" : "event" + }, + { + "anonymous" : false, + "inputs" : [ + { + "indexed" : true, + "internalType" : "address", + "name" : "previousOwner", + "type" : "address" + }, + { + "indexed" : true, + "internalType" : "address", + "name" : "newOwner", + "type" : "address" + } + ], + "name" : "OwnershipTransferred", + "type" : "event" + }, + { + "anonymous" : false, + "inputs" : [ + { + "indexed" : false, + "internalType" : "address", + "name" : "account", + "type" : "address" + } + ], + "name" : "Paused", + "type" : "event" + }, + { + "anonymous" : false, + "inputs" : [ + { + "indexed" : false, + "internalType" : "address", + "name" : "account", + "type" : "address" + } + ], + "name" : "Unpaused", + "type" : "event" + }, + { + "inputs" : [ + { + "internalType" : "uint96", + "name" : "series", + "type" : "uint96" + }, + { + "internalType" : "uint256", + "name" : "amount", + "type" : "uint256" + } + ], + "name" : "advanceEpoch", + "outputs" : [], + "stateMutability" : "nonpayable", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "uint256", + "name" : "offsets", + "type" : "uint256" + }, + { + "internalType" : "bytes", + "name" : "data", + "type" : "bytes" + } + ], + "name" : "and", + "outputs" : [ + { + "internalType" : "bool", + "name" : "", + "type" : "bool" + } + ], + "stateMutability" : "view", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "address", + "name" : "target", + "type" : "address" + }, + { + "internalType" : "bytes", + "name" : "data", + "type" : "bytes" + } + ], + "name" : "arbitraryStaticCall", + "outputs" : [ + { + "internalType" : "uint256", + "name" : "", + "type" : "uint256" + } + ], + "stateMutability" : "view", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "address", + "name" : "maker", + "type" : "address" + }, + { + "internalType" : "uint256", + "name" : "slot", + "type" : "uint256" + } + ], + "name" : "bitInvalidatorForOrder", + "outputs" : [ + { + "internalType" : "uint256", + "name" : "", + "type" : "uint256" + } + ], + "stateMutability" : "view", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "MakerTraits", + "name" : "makerTraits", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "additionalMask", + "type" : "uint256" + } + ], + "name" : "bitsInvalidateForOrder", + "outputs" : [], + "stateMutability" : "nonpayable", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "MakerTraits", + "name" : "makerTraits", + "type" : "uint256" + }, + { + "internalType" : "bytes32", + "name" : "orderHash", + "type" : "bytes32" + } + ], + "name" : "cancelOrder", + "outputs" : [], + "stateMutability" : "nonpayable", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "MakerTraits[]", + "name" : "makerTraits", + "type" : "uint256[]" + }, + { + "internalType" : "bytes32[]", + "name" : "orderHashes", + "type" : "bytes32[]" + } + ], + "name" : "cancelOrders", + "outputs" : [], + "stateMutability" : "nonpayable", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "bytes", + "name" : "predicate", + "type" : "bytes" + } + ], + "name" : "checkPredicate", + "outputs" : [ + { + "internalType" : "bool", + "name" : "", + "type" : "bool" + } + ], + "stateMutability" : "view", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "contract IClipperExchange", + "name" : "clipperExchange", + "type" : "address" + }, + { + "internalType" : "Address", + "name" : "srcToken", + "type" : "uint256" + }, + { + "internalType" : "contract IERC20", + "name" : "dstToken", + "type" : "address" + }, + { + "internalType" : "uint256", + "name" : "inputAmount", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "outputAmount", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "goodUntil", + "type" : "uint256" + }, + { + "internalType" : "bytes32", + "name" : "r", + "type" : "bytes32" + }, + { + "internalType" : "bytes32", + "name" : "vs", + "type" : "bytes32" + } + ], + "name" : "clipperSwap", + "outputs" : [ + { + "internalType" : "uint256", + "name" : "returnAmount", + "type" : "uint256" + } + ], + "stateMutability" : "payable", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "contract IClipperExchange", + "name" : "clipperExchange", + "type" : "address" + }, + { + "internalType" : "address payable", + "name" : "recipient", + "type" : "address" + }, + { + "internalType" : "Address", + "name" : "srcToken", + "type" : "uint256" + }, + { + "internalType" : "contract IERC20", + "name" : "dstToken", + "type" : "address" + }, + { + "internalType" : "uint256", + "name" : "inputAmount", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "outputAmount", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "goodUntil", + "type" : "uint256" + }, + { + "internalType" : "bytes32", + "name" : "r", + "type" : "bytes32" + }, + { + "internalType" : "bytes32", + "name" : "vs", + "type" : "bytes32" + } + ], + "name" : "clipperSwapTo", + "outputs" : [ + { + "internalType" : "uint256", + "name" : "returnAmount", + "type" : "uint256" + } + ], + "stateMutability" : "payable", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "address", + "name" : "", + "type" : "address" + }, + { + "internalType" : "address", + "name" : "", + "type" : "address" + }, + { + "internalType" : "address", + "name" : "inCoin", + "type" : "address" + }, + { + "internalType" : "uint256", + "name" : "dx", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "", + "type" : "uint256" + } + ], + "name" : "curveSwapCallback", + "outputs" : [], + "stateMutability" : "nonpayable", + "type" : "function" + }, + { + "inputs" : [], + "name" : "eip712Domain", + "outputs" : [ + { + "internalType" : "bytes1", + "name" : "fields", + "type" : "bytes1" + }, + { + "internalType" : "string", + "name" : "name", + "type" : "string" + }, + { + "internalType" : "string", + "name" : "version", + "type" : "string" + }, + { + "internalType" : "uint256", + "name" : "chainId", + "type" : "uint256" + }, + { + "internalType" : "address", + "name" : "verifyingContract", + "type" : "address" + }, + { + "internalType" : "bytes32", + "name" : "salt", + "type" : "bytes32" + }, + { + "internalType" : "uint256[]", + "name" : "extensions", + "type" : "uint256[]" + } + ], + "stateMutability" : "view", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "address", + "name" : "maker", + "type" : "address" + }, + { + "internalType" : "uint96", + "name" : "series", + "type" : "uint96" + } + ], + "name" : "epoch", + "outputs" : [ + { + "internalType" : "uint256", + "name" : "", + "type" : "uint256" + } + ], + "stateMutability" : "view", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "address", + "name" : "maker", + "type" : "address" + }, + { + "internalType" : "uint256", + "name" : "series", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "makerEpoch", + "type" : "uint256" + } + ], + "name" : "epochEquals", + "outputs" : [ + { + "internalType" : "bool", + "name" : "", + "type" : "bool" + } + ], + "stateMutability" : "view", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "uint256", + "name" : "value", + "type" : "uint256" + }, + { + "internalType" : "bytes", + "name" : "data", + "type" : "bytes" + } + ], + "name" : "eq", + "outputs" : [ + { + "internalType" : "bool", + "name" : "", + "type" : "bool" + } + ], + "stateMutability" : "view", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "uint256", + "name" : "minReturn", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "dex", + "type" : "uint256" + } + ], + "name" : "ethUnoswap", + "outputs" : [ + { + "internalType" : "uint256", + "name" : "returnAmount", + "type" : "uint256" + } + ], + "stateMutability" : "payable", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "uint256", + "name" : "minReturn", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "dex", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "dex2", + "type" : "uint256" + } + ], + "name" : "ethUnoswap2", + "outputs" : [ + { + "internalType" : "uint256", + "name" : "returnAmount", + "type" : "uint256" + } + ], + "stateMutability" : "payable", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "uint256", + "name" : "minReturn", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "dex", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "dex2", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "dex3", + "type" : "uint256" + } + ], + "name" : "ethUnoswap3", + "outputs" : [ + { + "internalType" : "uint256", + "name" : "returnAmount", + "type" : "uint256" + } + ], + "stateMutability" : "payable", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "Address", + "name" : "to", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "minReturn", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "dex", + "type" : "uint256" + } + ], + "name" : "ethUnoswapTo", + "outputs" : [ + { + "internalType" : "uint256", + "name" : "returnAmount", + "type" : "uint256" + } + ], + "stateMutability" : "payable", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "Address", + "name" : "to", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "minReturn", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "dex", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "dex2", + "type" : "uint256" + } + ], + "name" : "ethUnoswapTo2", + "outputs" : [ + { + "internalType" : "uint256", + "name" : "returnAmount", + "type" : "uint256" + } + ], + "stateMutability" : "payable", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "Address", + "name" : "to", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "minReturn", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "dex", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "dex2", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "dex3", + "type" : "uint256" + } + ], + "name" : "ethUnoswapTo3", + "outputs" : [ + { + "internalType" : "uint256", + "name" : "returnAmount", + "type" : "uint256" + } + ], + "stateMutability" : "payable", + "type" : "function" + }, + { + "inputs" : [ + { + "components" : [ + { + "internalType" : "uint256", + "name" : "salt", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "maker", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "receiver", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "makerAsset", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "takerAsset", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "makingAmount", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "takingAmount", + "type" : "uint256" + }, + { + "internalType" : "MakerTraits", + "name" : "makerTraits", + "type" : "uint256" + } + ], + "internalType" : "struct IOrderMixin.Order", + "name" : "order", + "type" : "tuple" + }, + { + "internalType" : "bytes", + "name" : "signature", + "type" : "bytes" + }, + { + "internalType" : "uint256", + "name" : "amount", + "type" : "uint256" + }, + { + "internalType" : "TakerTraits", + "name" : "takerTraits", + "type" : "uint256" + } + ], + "name" : "fillContractOrder", + "outputs" : [ + { + "internalType" : "uint256", + "name" : "", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "", + "type" : "uint256" + }, + { + "internalType" : "bytes32", + "name" : "", + "type" : "bytes32" + } + ], + "stateMutability" : "nonpayable", + "type" : "function" + }, + { + "inputs" : [ + { + "components" : [ + { + "internalType" : "uint256", + "name" : "salt", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "maker", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "receiver", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "makerAsset", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "takerAsset", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "makingAmount", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "takingAmount", + "type" : "uint256" + }, + { + "internalType" : "MakerTraits", + "name" : "makerTraits", + "type" : "uint256" + } + ], + "internalType" : "struct IOrderMixin.Order", + "name" : "order", + "type" : "tuple" + }, + { + "internalType" : "bytes", + "name" : "signature", + "type" : "bytes" + }, + { + "internalType" : "uint256", + "name" : "amount", + "type" : "uint256" + }, + { + "internalType" : "TakerTraits", + "name" : "takerTraits", + "type" : "uint256" + }, + { + "internalType" : "bytes", + "name" : "args", + "type" : "bytes" + } + ], + "name" : "fillContractOrderArgs", + "outputs" : [ + { + "internalType" : "uint256", + "name" : "", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "", + "type" : "uint256" + }, + { + "internalType" : "bytes32", + "name" : "", + "type" : "bytes32" + } + ], + "stateMutability" : "nonpayable", + "type" : "function" + }, + { + "inputs" : [ + { + "components" : [ + { + "internalType" : "uint256", + "name" : "salt", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "maker", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "receiver", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "makerAsset", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "takerAsset", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "makingAmount", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "takingAmount", + "type" : "uint256" + }, + { + "internalType" : "MakerTraits", + "name" : "makerTraits", + "type" : "uint256" + } + ], + "internalType" : "struct IOrderMixin.Order", + "name" : "order", + "type" : "tuple" + }, + { + "internalType" : "bytes32", + "name" : "r", + "type" : "bytes32" + }, + { + "internalType" : "bytes32", + "name" : "vs", + "type" : "bytes32" + }, + { + "internalType" : "uint256", + "name" : "amount", + "type" : "uint256" + }, + { + "internalType" : "TakerTraits", + "name" : "takerTraits", + "type" : "uint256" + } + ], + "name" : "fillOrder", + "outputs" : [ + { + "internalType" : "uint256", + "name" : "", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "", + "type" : "uint256" + }, + { + "internalType" : "bytes32", + "name" : "", + "type" : "bytes32" + } + ], + "stateMutability" : "payable", + "type" : "function" + }, + { + "inputs" : [ + { + "components" : [ + { + "internalType" : "uint256", + "name" : "salt", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "maker", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "receiver", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "makerAsset", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "takerAsset", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "makingAmount", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "takingAmount", + "type" : "uint256" + }, + { + "internalType" : "MakerTraits", + "name" : "makerTraits", + "type" : "uint256" + } + ], + "internalType" : "struct IOrderMixin.Order", + "name" : "order", + "type" : "tuple" + }, + { + "internalType" : "bytes32", + "name" : "r", + "type" : "bytes32" + }, + { + "internalType" : "bytes32", + "name" : "vs", + "type" : "bytes32" + }, + { + "internalType" : "uint256", + "name" : "amount", + "type" : "uint256" + }, + { + "internalType" : "TakerTraits", + "name" : "takerTraits", + "type" : "uint256" + }, + { + "internalType" : "bytes", + "name" : "args", + "type" : "bytes" + } + ], + "name" : "fillOrderArgs", + "outputs" : [ + { + "internalType" : "uint256", + "name" : "", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "", + "type" : "uint256" + }, + { + "internalType" : "bytes32", + "name" : "", + "type" : "bytes32" + } + ], + "stateMutability" : "payable", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "uint256", + "name" : "value", + "type" : "uint256" + }, + { + "internalType" : "bytes", + "name" : "data", + "type" : "bytes" + } + ], + "name" : "gt", + "outputs" : [ + { + "internalType" : "bool", + "name" : "", + "type" : "bool" + } + ], + "stateMutability" : "view", + "type" : "function" + }, + { + "inputs" : [ + { + "components" : [ + { + "internalType" : "uint256", + "name" : "salt", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "maker", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "receiver", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "makerAsset", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "takerAsset", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "makingAmount", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "takingAmount", + "type" : "uint256" + }, + { + "internalType" : "MakerTraits", + "name" : "makerTraits", + "type" : "uint256" + } + ], + "internalType" : "struct IOrderMixin.Order", + "name" : "order", + "type" : "tuple" + } + ], + "name" : "hashOrder", + "outputs" : [ + { + "internalType" : "bytes32", + "name" : "", + "type" : "bytes32" + } + ], + "stateMutability" : "view", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "uint96", + "name" : "series", + "type" : "uint96" + } + ], + "name" : "increaseEpoch", + "outputs" : [], + "stateMutability" : "nonpayable", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "uint256", + "name" : "value", + "type" : "uint256" + }, + { + "internalType" : "bytes", + "name" : "data", + "type" : "bytes" + } + ], + "name" : "lt", + "outputs" : [ + { + "internalType" : "bool", + "name" : "", + "type" : "bool" + } + ], + "stateMutability" : "view", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "bytes", + "name" : "data", + "type" : "bytes" + } + ], + "name" : "not", + "outputs" : [ + { + "internalType" : "bool", + "name" : "", + "type" : "bool" + } + ], + "stateMutability" : "view", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "uint256", + "name" : "offsets", + "type" : "uint256" + }, + { + "internalType" : "bytes", + "name" : "data", + "type" : "bytes" + } + ], + "name" : "or", + "outputs" : [ + { + "internalType" : "bool", + "name" : "", + "type" : "bool" + } + ], + "stateMutability" : "view", + "type" : "function" + }, + { + "inputs" : [], + "name" : "owner", + "outputs" : [ + { + "internalType" : "address", + "name" : "", + "type" : "address" + } + ], + "stateMutability" : "view", + "type" : "function" + }, + { + "inputs" : [], + "name" : "pause", + "outputs" : [], + "stateMutability" : "nonpayable", + "type" : "function" + }, + { + "inputs" : [], + "name" : "paused", + "outputs" : [ + { + "internalType" : "bool", + "name" : "", + "type" : "bool" + } + ], + "stateMutability" : "view", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "bytes", + "name" : "permit", + "type" : "bytes" + }, + { + "internalType" : "bytes", + "name" : "action", + "type" : "bytes" + } + ], + "name" : "permitAndCall", + "outputs" : [], + "stateMutability" : "payable", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "address", + "name" : "maker", + "type" : "address" + }, + { + "internalType" : "bytes32", + "name" : "orderHash", + "type" : "bytes32" + } + ], + "name" : "rawRemainingInvalidatorForOrder", + "outputs" : [ + { + "internalType" : "uint256", + "name" : "", + "type" : "uint256" + } + ], + "stateMutability" : "view", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "address", + "name" : "maker", + "type" : "address" + }, + { + "internalType" : "bytes32", + "name" : "orderHash", + "type" : "bytes32" + } + ], + "name" : "remainingInvalidatorForOrder", + "outputs" : [ + { + "internalType" : "uint256", + "name" : "", + "type" : "uint256" + } + ], + "stateMutability" : "view", + "type" : "function" + }, + { + "inputs" : [], + "name" : "renounceOwnership", + "outputs" : [], + "stateMutability" : "nonpayable", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "contract IERC20", + "name" : "token", + "type" : "address" + }, + { + "internalType" : "uint256", + "name" : "amount", + "type" : "uint256" + } + ], + "name" : "rescueFunds", + "outputs" : [], + "stateMutability" : "nonpayable", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "address", + "name" : "target", + "type" : "address" + }, + { + "internalType" : "bytes", + "name" : "data", + "type" : "bytes" + } + ], + "name" : "simulate", + "outputs" : [], + "stateMutability" : "nonpayable", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "contract IAggregationExecutor", + "name" : "executor", + "type" : "address" + }, + { + "components" : [ + { + "internalType" : "contract IERC20", + "name" : "srcToken", + "type" : "address" + }, + { + "internalType" : "contract IERC20", + "name" : "dstToken", + "type" : "address" + }, + { + "internalType" : "address payable", + "name" : "srcReceiver", + "type" : "address" + }, + { + "internalType" : "address payable", + "name" : "dstReceiver", + "type" : "address" + }, + { + "internalType" : "uint256", + "name" : "amount", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "minReturnAmount", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "flags", + "type" : "uint256" + } + ], + "internalType" : "struct GenericRouter.SwapDescription", + "name" : "desc", + "type" : "tuple" + }, + { + "internalType" : "bytes", + "name" : "data", + "type" : "bytes" + } + ], + "name" : "swap", + "outputs" : [ + { + "internalType" : "uint256", + "name" : "returnAmount", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "spentAmount", + "type" : "uint256" + } + ], + "stateMutability" : "payable", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "address", + "name" : "newOwner", + "type" : "address" + } + ], + "name" : "transferOwnership", + "outputs" : [], + "stateMutability" : "nonpayable", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "int256", + "name" : "amount0Delta", + "type" : "int256" + }, + { + "internalType" : "int256", + "name" : "amount1Delta", + "type" : "int256" + }, + { + "internalType" : "bytes", + "name" : "", + "type" : "bytes" + } + ], + "name" : "uniswapV3SwapCallback", + "outputs" : [], + "stateMutability" : "nonpayable", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "Address", + "name" : "token", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "amount", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "minReturn", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "dex", + "type" : "uint256" + } + ], + "name" : "unoswap", + "outputs" : [ + { + "internalType" : "uint256", + "name" : "returnAmount", + "type" : "uint256" + } + ], + "stateMutability" : "nonpayable", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "Address", + "name" : "token", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "amount", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "minReturn", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "dex", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "dex2", + "type" : "uint256" + } + ], + "name" : "unoswap2", + "outputs" : [ + { + "internalType" : "uint256", + "name" : "returnAmount", + "type" : "uint256" + } + ], + "stateMutability" : "nonpayable", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "Address", + "name" : "token", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "amount", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "minReturn", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "dex", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "dex2", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "dex3", + "type" : "uint256" + } + ], + "name" : "unoswap3", + "outputs" : [ + { + "internalType" : "uint256", + "name" : "returnAmount", + "type" : "uint256" + } + ], + "stateMutability" : "nonpayable", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "Address", + "name" : "to", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "token", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "amount", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "minReturn", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "dex", + "type" : "uint256" + } + ], + "name" : "unoswapTo", + "outputs" : [ + { + "internalType" : "uint256", + "name" : "returnAmount", + "type" : "uint256" + } + ], + "stateMutability" : "nonpayable", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "Address", + "name" : "to", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "token", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "amount", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "minReturn", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "dex", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "dex2", + "type" : "uint256" + } + ], + "name" : "unoswapTo2", + "outputs" : [ + { + "internalType" : "uint256", + "name" : "returnAmount", + "type" : "uint256" + } + ], + "stateMutability" : "nonpayable", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "Address", + "name" : "to", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "token", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "amount", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "minReturn", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "dex", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "dex2", + "type" : "uint256" + }, + { + "internalType" : "Address", + "name" : "dex3", + "type" : "uint256" + } + ], + "name" : "unoswapTo3", + "outputs" : [ + { + "internalType" : "uint256", + "name" : "returnAmount", + "type" : "uint256" + } + ], + "stateMutability" : "nonpayable", + "type" : "function" + }, + { + "inputs" : [], + "name" : "unpause", + "outputs" : [], + "stateMutability" : "nonpayable", + "type" : "function" + }, + { + "stateMutability" : "payable", + "type" : "receive" + } +] diff --git a/tests/ragger/abis/poap.abi.json b/tests/ragger/abis/poap.abi.json new file mode 100644 index 0000000000..dba0f0f478 --- /dev/null +++ b/tests/ragger/abis/poap.abi.json @@ -0,0 +1,359 @@ +[ + { + "inputs" : [ + { + "internalType" : "address", + "name" : "_poapContractAddress", + "type" : "address" + }, + { + "internalType" : "address", + "name" : "_validSigner", + "type" : "address" + }, + { + "internalType" : "address payable", + "name" : "_feeReceiver", + "type" : "address" + }, + { + "internalType" : "uint256", + "name" : "_migrationFee", + "type" : "uint256" + } + ], + "stateMutability" : "nonpayable", + "type" : "constructor" + }, + { + "anonymous" : false, + "inputs" : [ + { + "indexed" : true, + "internalType" : "address", + "name" : "previousFeeReceiver", + "type" : "address" + }, + { + "indexed" : true, + "internalType" : "address", + "name" : "newFeeReceiver", + "type" : "address" + } + ], + "name" : "FeeReceiverChange", + "type" : "event" + }, + { + "anonymous" : false, + "inputs" : [ + { + "indexed" : true, + "internalType" : "uint256", + "name" : "previousFeeReceiver", + "type" : "uint256" + }, + { + "indexed" : true, + "internalType" : "uint256", + "name" : "newFeeReceiver", + "type" : "uint256" + } + ], + "name" : "MigrationFeeChange", + "type" : "event" + }, + { + "anonymous" : false, + "inputs" : [ + { + "indexed" : true, + "internalType" : "address", + "name" : "previousOwner", + "type" : "address" + }, + { + "indexed" : true, + "internalType" : "address", + "name" : "newOwner", + "type" : "address" + } + ], + "name" : "OwnershipTransferred", + "type" : "event" + }, + { + "anonymous" : false, + "inputs" : [ + { + "indexed" : false, + "internalType" : "address", + "name" : "account", + "type" : "address" + } + ], + "name" : "Paused", + "type" : "event" + }, + { + "anonymous" : false, + "inputs" : [ + { + "indexed" : false, + "internalType" : "address", + "name" : "account", + "type" : "address" + } + ], + "name" : "Unpaused", + "type" : "event" + }, + { + "anonymous" : false, + "inputs" : [ + { + "indexed" : true, + "internalType" : "address", + "name" : "previousValidSigner", + "type" : "address" + }, + { + "indexed" : true, + "internalType" : "address", + "name" : "newValidSigner", + "type" : "address" + } + ], + "name" : "ValidSignerChange", + "type" : "event" + }, + { + "anonymous" : false, + "inputs" : [ + { + "indexed" : false, + "internalType" : "bytes", + "name" : "_signature", + "type" : "bytes" + } + ], + "name" : "VerifiedSignature", + "type" : "event" + }, + { + "inputs" : [], + "name" : "NAME", + "outputs" : [ + { + "internalType" : "string", + "name" : "", + "type" : "string" + } + ], + "stateMutability" : "view", + "type" : "function" + }, + { + "inputs" : [], + "name" : "feeReceiver", + "outputs" : [ + { + "internalType" : "address payable", + "name" : "", + "type" : "address" + } + ], + "stateMutability" : "view", + "type" : "function" + }, + { + "inputs" : [], + "name" : "migrationFee", + "outputs" : [ + { + "internalType" : "uint256", + "name" : "", + "type" : "uint256" + } + ], + "stateMutability" : "view", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "uint256", + "name" : "eventId", + "type" : "uint256" + }, + { + "internalType" : "uint256", + "name" : "tokenId", + "type" : "uint256" + }, + { + "internalType" : "address", + "name" : "receiver", + "type" : "address" + }, + { + "internalType" : "uint256", + "name" : "expirationTime", + "type" : "uint256" + }, + { + "internalType" : "bytes", + "name" : "signature", + "type" : "bytes" + } + ], + "name" : "mintToken", + "outputs" : [ + { + "internalType" : "bool", + "name" : "", + "type" : "bool" + } + ], + "stateMutability" : "payable", + "type" : "function" + }, + { + "inputs" : [], + "name" : "owner", + "outputs" : [ + { + "internalType" : "address", + "name" : "", + "type" : "address" + } + ], + "stateMutability" : "view", + "type" : "function" + }, + { + "inputs" : [], + "name" : "pause", + "outputs" : [], + "stateMutability" : "nonpayable", + "type" : "function" + }, + { + "inputs" : [], + "name" : "paused", + "outputs" : [ + { + "internalType" : "bool", + "name" : "", + "type" : "bool" + } + ], + "stateMutability" : "view", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "bytes", + "name" : "", + "type" : "bytes" + } + ], + "name" : "processed", + "outputs" : [ + { + "internalType" : "bool", + "name" : "", + "type" : "bool" + } + ], + "stateMutability" : "view", + "type" : "function" + }, + { + "inputs" : [], + "name" : "renounceOwnership", + "outputs" : [], + "stateMutability" : "nonpayable", + "type" : "function" + }, + { + "inputs" : [], + "name" : "renouncePoapAdmin", + "outputs" : [], + "stateMutability" : "nonpayable", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "address payable", + "name" : "_feeReceiver", + "type" : "address" + } + ], + "name" : "setFeeReceiver", + "outputs" : [], + "stateMutability" : "nonpayable", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "uint256", + "name" : "_migrationFee", + "type" : "uint256" + } + ], + "name" : "setMigrationFee", + "outputs" : [], + "stateMutability" : "nonpayable", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "address", + "name" : "_validSigner", + "type" : "address" + } + ], + "name" : "setValidSigner", + "outputs" : [], + "stateMutability" : "nonpayable", + "type" : "function" + }, + { + "inputs" : [ + { + "internalType" : "address", + "name" : "newOwner", + "type" : "address" + } + ], + "name" : "transferOwnership", + "outputs" : [], + "stateMutability" : "nonpayable", + "type" : "function" + }, + { + "inputs" : [], + "name" : "unpause", + "outputs" : [], + "stateMutability" : "nonpayable", + "type" : "function" + }, + { + "inputs" : [], + "name" : "validSigner", + "outputs" : [ + { + "internalType" : "address", + "name" : "", + "type" : "address" + } + ], + "stateMutability" : "view", + "type" : "function" + } +] diff --git a/tests/ragger/snapshots/flex/test_1inch/00000.png b/tests/ragger/snapshots/flex/test_1inch/00000.png new file mode 100644 index 0000000000..bb8112a269 Binary files /dev/null and b/tests/ragger/snapshots/flex/test_1inch/00000.png differ diff --git a/tests/ragger/snapshots/flex/test_1inch/00001.png b/tests/ragger/snapshots/flex/test_1inch/00001.png new file mode 100644 index 0000000000..df31358114 Binary files /dev/null and b/tests/ragger/snapshots/flex/test_1inch/00001.png differ diff --git a/tests/ragger/snapshots/flex/test_1inch/00002.png b/tests/ragger/snapshots/flex/test_1inch/00002.png new file mode 100644 index 0000000000..68b268c9f8 Binary files /dev/null and b/tests/ragger/snapshots/flex/test_1inch/00002.png differ diff --git a/tests/ragger/snapshots/flex/test_1inch/00003.png b/tests/ragger/snapshots/flex/test_1inch/00003.png new file mode 100644 index 0000000000..e1a36532aa Binary files /dev/null and b/tests/ragger/snapshots/flex/test_1inch/00003.png differ diff --git a/tests/ragger/snapshots/flex/test_1inch/00004.png b/tests/ragger/snapshots/flex/test_1inch/00004.png new file mode 100644 index 0000000000..be51a9d559 Binary files /dev/null and b/tests/ragger/snapshots/flex/test_1inch/00004.png differ diff --git a/tests/ragger/snapshots/flex/test_1inch/00005.png b/tests/ragger/snapshots/flex/test_1inch/00005.png new file mode 100644 index 0000000000..dabe7afea3 Binary files /dev/null and b/tests/ragger/snapshots/flex/test_1inch/00005.png differ diff --git a/tests/ragger/snapshots/flex/test_nft/00000.png b/tests/ragger/snapshots/flex/test_nft/00000.png new file mode 100644 index 0000000000..dcae9dcaf4 Binary files /dev/null and b/tests/ragger/snapshots/flex/test_nft/00000.png differ diff --git a/tests/ragger/snapshots/flex/test_nft/00001.png b/tests/ragger/snapshots/flex/test_nft/00001.png new file mode 100644 index 0000000000..a734438eeb Binary files /dev/null and b/tests/ragger/snapshots/flex/test_nft/00001.png differ diff --git a/tests/ragger/snapshots/flex/test_nft/00002.png b/tests/ragger/snapshots/flex/test_nft/00002.png new file mode 100644 index 0000000000..d0da7df405 Binary files /dev/null and b/tests/ragger/snapshots/flex/test_nft/00002.png differ diff --git a/tests/ragger/snapshots/flex/test_nft/00003.png b/tests/ragger/snapshots/flex/test_nft/00003.png new file mode 100644 index 0000000000..f1eacdc137 Binary files /dev/null and b/tests/ragger/snapshots/flex/test_nft/00003.png differ diff --git a/tests/ragger/snapshots/flex/test_nft/00004.png b/tests/ragger/snapshots/flex/test_nft/00004.png new file mode 100644 index 0000000000..3ade03afd0 Binary files /dev/null and b/tests/ragger/snapshots/flex/test_nft/00004.png differ diff --git a/tests/ragger/snapshots/flex/test_nft/00005.png b/tests/ragger/snapshots/flex/test_nft/00005.png new file mode 100644 index 0000000000..b2c5fa98cd Binary files /dev/null and b/tests/ragger/snapshots/flex/test_nft/00005.png differ diff --git a/tests/ragger/snapshots/flex/test_nft/00006.png b/tests/ragger/snapshots/flex/test_nft/00006.png new file mode 100644 index 0000000000..be51a9d559 Binary files /dev/null and b/tests/ragger/snapshots/flex/test_nft/00006.png differ diff --git a/tests/ragger/snapshots/flex/test_nft/00007.png b/tests/ragger/snapshots/flex/test_nft/00007.png new file mode 100644 index 0000000000..dabe7afea3 Binary files /dev/null and b/tests/ragger/snapshots/flex/test_nft/00007.png differ diff --git a/tests/ragger/snapshots/flex/test_poap/00000.png b/tests/ragger/snapshots/flex/test_poap/00000.png new file mode 100644 index 0000000000..763cb990ea Binary files /dev/null and b/tests/ragger/snapshots/flex/test_poap/00000.png differ diff --git a/tests/ragger/snapshots/flex/test_poap/00001.png b/tests/ragger/snapshots/flex/test_poap/00001.png new file mode 100644 index 0000000000..782f76dc8c Binary files /dev/null and b/tests/ragger/snapshots/flex/test_poap/00001.png differ diff --git a/tests/ragger/snapshots/flex/test_poap/00002.png b/tests/ragger/snapshots/flex/test_poap/00002.png new file mode 100644 index 0000000000..aa24355a90 Binary files /dev/null and b/tests/ragger/snapshots/flex/test_poap/00002.png differ diff --git a/tests/ragger/snapshots/flex/test_poap/00003.png b/tests/ragger/snapshots/flex/test_poap/00003.png new file mode 100644 index 0000000000..0e2b5aa428 Binary files /dev/null and b/tests/ragger/snapshots/flex/test_poap/00003.png differ diff --git a/tests/ragger/snapshots/flex/test_poap/00004.png b/tests/ragger/snapshots/flex/test_poap/00004.png new file mode 100644 index 0000000000..1913ce7c46 Binary files /dev/null and b/tests/ragger/snapshots/flex/test_poap/00004.png differ diff --git a/tests/ragger/snapshots/flex/test_poap/00005.png b/tests/ragger/snapshots/flex/test_poap/00005.png new file mode 100644 index 0000000000..be51a9d559 Binary files /dev/null and b/tests/ragger/snapshots/flex/test_poap/00005.png differ diff --git a/tests/ragger/snapshots/flex/test_poap/00006.png b/tests/ragger/snapshots/flex/test_poap/00006.png new file mode 100644 index 0000000000..dabe7afea3 Binary files /dev/null and b/tests/ragger/snapshots/flex/test_poap/00006.png differ diff --git a/tests/ragger/snapshots/nanosp/test_1inch/00000.png b/tests/ragger/snapshots/nanosp/test_1inch/00000.png new file mode 100644 index 0000000000..44ea8bf935 Binary files /dev/null and b/tests/ragger/snapshots/nanosp/test_1inch/00000.png differ diff --git a/tests/ragger/snapshots/nanosp/test_1inch/00001.png b/tests/ragger/snapshots/nanosp/test_1inch/00001.png new file mode 100644 index 0000000000..a9deb912be Binary files /dev/null and b/tests/ragger/snapshots/nanosp/test_1inch/00001.png differ diff --git a/tests/ragger/snapshots/nanosp/test_1inch/00002.png b/tests/ragger/snapshots/nanosp/test_1inch/00002.png new file mode 100644 index 0000000000..82fbba418b Binary files /dev/null and b/tests/ragger/snapshots/nanosp/test_1inch/00002.png differ diff --git a/tests/ragger/snapshots/nanosp/test_1inch/00003.png b/tests/ragger/snapshots/nanosp/test_1inch/00003.png new file mode 100644 index 0000000000..726dfe742f Binary files /dev/null and b/tests/ragger/snapshots/nanosp/test_1inch/00003.png differ diff --git a/tests/ragger/snapshots/nanosp/test_1inch/00004.png b/tests/ragger/snapshots/nanosp/test_1inch/00004.png new file mode 100644 index 0000000000..3a6db3d755 Binary files /dev/null and b/tests/ragger/snapshots/nanosp/test_1inch/00004.png differ diff --git a/tests/ragger/snapshots/nanosp/test_1inch/00005.png b/tests/ragger/snapshots/nanosp/test_1inch/00005.png new file mode 100644 index 0000000000..89b78dba9d Binary files /dev/null and b/tests/ragger/snapshots/nanosp/test_1inch/00005.png differ diff --git a/tests/ragger/snapshots/nanosp/test_1inch/00006.png b/tests/ragger/snapshots/nanosp/test_1inch/00006.png new file mode 100644 index 0000000000..63db7647ff Binary files /dev/null and b/tests/ragger/snapshots/nanosp/test_1inch/00006.png differ diff --git a/tests/ragger/snapshots/nanosp/test_1inch/00007.png b/tests/ragger/snapshots/nanosp/test_1inch/00007.png new file mode 100644 index 0000000000..a58590b988 Binary files /dev/null and b/tests/ragger/snapshots/nanosp/test_1inch/00007.png differ diff --git a/tests/ragger/snapshots/nanosp/test_nft/00000.png b/tests/ragger/snapshots/nanosp/test_nft/00000.png new file mode 100644 index 0000000000..550764e7e6 Binary files /dev/null and b/tests/ragger/snapshots/nanosp/test_nft/00000.png differ diff --git a/tests/ragger/snapshots/nanosp/test_nft/00001.png b/tests/ragger/snapshots/nanosp/test_nft/00001.png new file mode 100644 index 0000000000..a9deb912be Binary files /dev/null and b/tests/ragger/snapshots/nanosp/test_nft/00001.png differ diff --git a/tests/ragger/snapshots/nanosp/test_nft/00002.png b/tests/ragger/snapshots/nanosp/test_nft/00002.png new file mode 100644 index 0000000000..1ac2ab0775 Binary files /dev/null and b/tests/ragger/snapshots/nanosp/test_nft/00002.png differ diff --git a/tests/ragger/snapshots/nanosp/test_nft/00003.png b/tests/ragger/snapshots/nanosp/test_nft/00003.png new file mode 100644 index 0000000000..330755f9fe Binary files /dev/null and b/tests/ragger/snapshots/nanosp/test_nft/00003.png differ diff --git a/tests/ragger/snapshots/nanosp/test_nft/00004.png b/tests/ragger/snapshots/nanosp/test_nft/00004.png new file mode 100644 index 0000000000..5a3be0cc44 Binary files /dev/null and b/tests/ragger/snapshots/nanosp/test_nft/00004.png differ diff --git a/tests/ragger/snapshots/nanosp/test_nft/00005.png b/tests/ragger/snapshots/nanosp/test_nft/00005.png new file mode 100644 index 0000000000..d32af33c70 Binary files /dev/null and b/tests/ragger/snapshots/nanosp/test_nft/00005.png differ diff --git a/tests/ragger/snapshots/nanosp/test_nft/00006.png b/tests/ragger/snapshots/nanosp/test_nft/00006.png new file mode 100644 index 0000000000..20231dd471 Binary files /dev/null and b/tests/ragger/snapshots/nanosp/test_nft/00006.png differ diff --git a/tests/ragger/snapshots/nanosp/test_nft/00007.png b/tests/ragger/snapshots/nanosp/test_nft/00007.png new file mode 100644 index 0000000000..f79d5f8db9 Binary files /dev/null and b/tests/ragger/snapshots/nanosp/test_nft/00007.png differ diff --git a/tests/ragger/snapshots/nanosp/test_nft/00008.png b/tests/ragger/snapshots/nanosp/test_nft/00008.png new file mode 100644 index 0000000000..72505b8634 Binary files /dev/null and b/tests/ragger/snapshots/nanosp/test_nft/00008.png differ diff --git a/tests/ragger/snapshots/nanosp/test_nft/00009.png b/tests/ragger/snapshots/nanosp/test_nft/00009.png new file mode 100644 index 0000000000..a1611760da Binary files /dev/null and b/tests/ragger/snapshots/nanosp/test_nft/00009.png differ diff --git a/tests/ragger/snapshots/nanosp/test_nft/00010.png b/tests/ragger/snapshots/nanosp/test_nft/00010.png new file mode 100644 index 0000000000..33d608bb92 Binary files /dev/null and b/tests/ragger/snapshots/nanosp/test_nft/00010.png differ diff --git a/tests/ragger/snapshots/nanosp/test_nft/00011.png b/tests/ragger/snapshots/nanosp/test_nft/00011.png new file mode 100644 index 0000000000..a15e6bed29 Binary files /dev/null and b/tests/ragger/snapshots/nanosp/test_nft/00011.png differ diff --git a/tests/ragger/snapshots/nanosp/test_nft/00012.png b/tests/ragger/snapshots/nanosp/test_nft/00012.png new file mode 100644 index 0000000000..52ee539ddc Binary files /dev/null and b/tests/ragger/snapshots/nanosp/test_nft/00012.png differ diff --git a/tests/ragger/snapshots/nanosp/test_nft/00013.png b/tests/ragger/snapshots/nanosp/test_nft/00013.png new file mode 100644 index 0000000000..89b78dba9d Binary files /dev/null and b/tests/ragger/snapshots/nanosp/test_nft/00013.png differ diff --git a/tests/ragger/snapshots/nanosp/test_nft/00014.png b/tests/ragger/snapshots/nanosp/test_nft/00014.png new file mode 100644 index 0000000000..63db7647ff Binary files /dev/null and b/tests/ragger/snapshots/nanosp/test_nft/00014.png differ diff --git a/tests/ragger/snapshots/nanosp/test_nft/00015.png b/tests/ragger/snapshots/nanosp/test_nft/00015.png new file mode 100644 index 0000000000..a58590b988 Binary files /dev/null and b/tests/ragger/snapshots/nanosp/test_nft/00015.png differ diff --git a/tests/ragger/snapshots/nanosp/test_poap/00000.png b/tests/ragger/snapshots/nanosp/test_poap/00000.png new file mode 100644 index 0000000000..2c10bec450 Binary files /dev/null and b/tests/ragger/snapshots/nanosp/test_poap/00000.png differ diff --git a/tests/ragger/snapshots/nanosp/test_poap/00001.png b/tests/ragger/snapshots/nanosp/test_poap/00001.png new file mode 100644 index 0000000000..a9deb912be Binary files /dev/null and b/tests/ragger/snapshots/nanosp/test_poap/00001.png differ diff --git a/tests/ragger/snapshots/nanosp/test_poap/00002.png b/tests/ragger/snapshots/nanosp/test_poap/00002.png new file mode 100644 index 0000000000..d680745444 Binary files /dev/null and b/tests/ragger/snapshots/nanosp/test_poap/00002.png differ diff --git a/tests/ragger/snapshots/nanosp/test_poap/00003.png b/tests/ragger/snapshots/nanosp/test_poap/00003.png new file mode 100644 index 0000000000..d457393f70 Binary files /dev/null and b/tests/ragger/snapshots/nanosp/test_poap/00003.png differ diff --git a/tests/ragger/snapshots/nanosp/test_poap/00004.png b/tests/ragger/snapshots/nanosp/test_poap/00004.png new file mode 100644 index 0000000000..2d6d92398b Binary files /dev/null and b/tests/ragger/snapshots/nanosp/test_poap/00004.png differ diff --git a/tests/ragger/snapshots/nanosp/test_poap/00005.png b/tests/ragger/snapshots/nanosp/test_poap/00005.png new file mode 100644 index 0000000000..1c86e8202d Binary files /dev/null and b/tests/ragger/snapshots/nanosp/test_poap/00005.png differ diff --git a/tests/ragger/snapshots/nanosp/test_poap/00006.png b/tests/ragger/snapshots/nanosp/test_poap/00006.png new file mode 100644 index 0000000000..cf2294404f Binary files /dev/null and b/tests/ragger/snapshots/nanosp/test_poap/00006.png differ diff --git a/tests/ragger/snapshots/nanosp/test_poap/00007.png b/tests/ragger/snapshots/nanosp/test_poap/00007.png new file mode 100644 index 0000000000..86740bb5ed Binary files /dev/null and b/tests/ragger/snapshots/nanosp/test_poap/00007.png differ diff --git a/tests/ragger/snapshots/nanosp/test_poap/00008.png b/tests/ragger/snapshots/nanosp/test_poap/00008.png new file mode 100644 index 0000000000..7bb152b2b9 Binary files /dev/null and b/tests/ragger/snapshots/nanosp/test_poap/00008.png differ diff --git a/tests/ragger/snapshots/nanosp/test_poap/00009.png b/tests/ragger/snapshots/nanosp/test_poap/00009.png new file mode 100644 index 0000000000..89b78dba9d Binary files /dev/null and b/tests/ragger/snapshots/nanosp/test_poap/00009.png differ diff --git a/tests/ragger/snapshots/nanosp/test_poap/00010.png b/tests/ragger/snapshots/nanosp/test_poap/00010.png new file mode 100644 index 0000000000..63db7647ff Binary files /dev/null and b/tests/ragger/snapshots/nanosp/test_poap/00010.png differ diff --git a/tests/ragger/snapshots/nanosp/test_poap/00011.png b/tests/ragger/snapshots/nanosp/test_poap/00011.png new file mode 100644 index 0000000000..a58590b988 Binary files /dev/null and b/tests/ragger/snapshots/nanosp/test_poap/00011.png differ diff --git a/tests/ragger/snapshots/nanox/test_1inch/00000.png b/tests/ragger/snapshots/nanox/test_1inch/00000.png new file mode 100644 index 0000000000..44ea8bf935 Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_1inch/00000.png differ diff --git a/tests/ragger/snapshots/nanox/test_1inch/00001.png b/tests/ragger/snapshots/nanox/test_1inch/00001.png new file mode 100644 index 0000000000..a9deb912be Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_1inch/00001.png differ diff --git a/tests/ragger/snapshots/nanox/test_1inch/00002.png b/tests/ragger/snapshots/nanox/test_1inch/00002.png new file mode 100644 index 0000000000..82fbba418b Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_1inch/00002.png differ diff --git a/tests/ragger/snapshots/nanox/test_1inch/00003.png b/tests/ragger/snapshots/nanox/test_1inch/00003.png new file mode 100644 index 0000000000..726dfe742f Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_1inch/00003.png differ diff --git a/tests/ragger/snapshots/nanox/test_1inch/00004.png b/tests/ragger/snapshots/nanox/test_1inch/00004.png new file mode 100644 index 0000000000..3a6db3d755 Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_1inch/00004.png differ diff --git a/tests/ragger/snapshots/nanox/test_1inch/00005.png b/tests/ragger/snapshots/nanox/test_1inch/00005.png new file mode 100644 index 0000000000..89b78dba9d Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_1inch/00005.png differ diff --git a/tests/ragger/snapshots/nanox/test_1inch/00006.png b/tests/ragger/snapshots/nanox/test_1inch/00006.png new file mode 100644 index 0000000000..63db7647ff Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_1inch/00006.png differ diff --git a/tests/ragger/snapshots/nanox/test_1inch/00007.png b/tests/ragger/snapshots/nanox/test_1inch/00007.png new file mode 100644 index 0000000000..a58590b988 Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_1inch/00007.png differ diff --git a/tests/ragger/snapshots/nanox/test_nft/00000.png b/tests/ragger/snapshots/nanox/test_nft/00000.png new file mode 100644 index 0000000000..550764e7e6 Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_nft/00000.png differ diff --git a/tests/ragger/snapshots/nanox/test_nft/00001.png b/tests/ragger/snapshots/nanox/test_nft/00001.png new file mode 100644 index 0000000000..a9deb912be Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_nft/00001.png differ diff --git a/tests/ragger/snapshots/nanox/test_nft/00002.png b/tests/ragger/snapshots/nanox/test_nft/00002.png new file mode 100644 index 0000000000..1ac2ab0775 Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_nft/00002.png differ diff --git a/tests/ragger/snapshots/nanox/test_nft/00003.png b/tests/ragger/snapshots/nanox/test_nft/00003.png new file mode 100644 index 0000000000..330755f9fe Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_nft/00003.png differ diff --git a/tests/ragger/snapshots/nanox/test_nft/00004.png b/tests/ragger/snapshots/nanox/test_nft/00004.png new file mode 100644 index 0000000000..5a3be0cc44 Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_nft/00004.png differ diff --git a/tests/ragger/snapshots/nanox/test_nft/00005.png b/tests/ragger/snapshots/nanox/test_nft/00005.png new file mode 100644 index 0000000000..d32af33c70 Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_nft/00005.png differ diff --git a/tests/ragger/snapshots/nanox/test_nft/00006.png b/tests/ragger/snapshots/nanox/test_nft/00006.png new file mode 100644 index 0000000000..20231dd471 Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_nft/00006.png differ diff --git a/tests/ragger/snapshots/nanox/test_nft/00007.png b/tests/ragger/snapshots/nanox/test_nft/00007.png new file mode 100644 index 0000000000..f79d5f8db9 Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_nft/00007.png differ diff --git a/tests/ragger/snapshots/nanox/test_nft/00008.png b/tests/ragger/snapshots/nanox/test_nft/00008.png new file mode 100644 index 0000000000..72505b8634 Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_nft/00008.png differ diff --git a/tests/ragger/snapshots/nanox/test_nft/00009.png b/tests/ragger/snapshots/nanox/test_nft/00009.png new file mode 100644 index 0000000000..a1611760da Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_nft/00009.png differ diff --git a/tests/ragger/snapshots/nanox/test_nft/00010.png b/tests/ragger/snapshots/nanox/test_nft/00010.png new file mode 100644 index 0000000000..33d608bb92 Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_nft/00010.png differ diff --git a/tests/ragger/snapshots/nanox/test_nft/00011.png b/tests/ragger/snapshots/nanox/test_nft/00011.png new file mode 100644 index 0000000000..a15e6bed29 Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_nft/00011.png differ diff --git a/tests/ragger/snapshots/nanox/test_nft/00012.png b/tests/ragger/snapshots/nanox/test_nft/00012.png new file mode 100644 index 0000000000..52ee539ddc Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_nft/00012.png differ diff --git a/tests/ragger/snapshots/nanox/test_nft/00013.png b/tests/ragger/snapshots/nanox/test_nft/00013.png new file mode 100644 index 0000000000..89b78dba9d Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_nft/00013.png differ diff --git a/tests/ragger/snapshots/nanox/test_nft/00014.png b/tests/ragger/snapshots/nanox/test_nft/00014.png new file mode 100644 index 0000000000..63db7647ff Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_nft/00014.png differ diff --git a/tests/ragger/snapshots/nanox/test_nft/00015.png b/tests/ragger/snapshots/nanox/test_nft/00015.png new file mode 100644 index 0000000000..a58590b988 Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_nft/00015.png differ diff --git a/tests/ragger/snapshots/nanox/test_poap/00000.png b/tests/ragger/snapshots/nanox/test_poap/00000.png new file mode 100644 index 0000000000..2c10bec450 Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_poap/00000.png differ diff --git a/tests/ragger/snapshots/nanox/test_poap/00001.png b/tests/ragger/snapshots/nanox/test_poap/00001.png new file mode 100644 index 0000000000..a9deb912be Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_poap/00001.png differ diff --git a/tests/ragger/snapshots/nanox/test_poap/00002.png b/tests/ragger/snapshots/nanox/test_poap/00002.png new file mode 100644 index 0000000000..d680745444 Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_poap/00002.png differ diff --git a/tests/ragger/snapshots/nanox/test_poap/00003.png b/tests/ragger/snapshots/nanox/test_poap/00003.png new file mode 100644 index 0000000000..d457393f70 Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_poap/00003.png differ diff --git a/tests/ragger/snapshots/nanox/test_poap/00004.png b/tests/ragger/snapshots/nanox/test_poap/00004.png new file mode 100644 index 0000000000..2d6d92398b Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_poap/00004.png differ diff --git a/tests/ragger/snapshots/nanox/test_poap/00005.png b/tests/ragger/snapshots/nanox/test_poap/00005.png new file mode 100644 index 0000000000..1c86e8202d Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_poap/00005.png differ diff --git a/tests/ragger/snapshots/nanox/test_poap/00006.png b/tests/ragger/snapshots/nanox/test_poap/00006.png new file mode 100644 index 0000000000..cf2294404f Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_poap/00006.png differ diff --git a/tests/ragger/snapshots/nanox/test_poap/00007.png b/tests/ragger/snapshots/nanox/test_poap/00007.png new file mode 100644 index 0000000000..86740bb5ed Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_poap/00007.png differ diff --git a/tests/ragger/snapshots/nanox/test_poap/00008.png b/tests/ragger/snapshots/nanox/test_poap/00008.png new file mode 100644 index 0000000000..7bb152b2b9 Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_poap/00008.png differ diff --git a/tests/ragger/snapshots/nanox/test_poap/00009.png b/tests/ragger/snapshots/nanox/test_poap/00009.png new file mode 100644 index 0000000000..89b78dba9d Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_poap/00009.png differ diff --git a/tests/ragger/snapshots/nanox/test_poap/00010.png b/tests/ragger/snapshots/nanox/test_poap/00010.png new file mode 100644 index 0000000000..63db7647ff Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_poap/00010.png differ diff --git a/tests/ragger/snapshots/nanox/test_poap/00011.png b/tests/ragger/snapshots/nanox/test_poap/00011.png new file mode 100644 index 0000000000..a58590b988 Binary files /dev/null and b/tests/ragger/snapshots/nanox/test_poap/00011.png differ diff --git a/tests/ragger/snapshots/stax/test_1inch/00000.png b/tests/ragger/snapshots/stax/test_1inch/00000.png new file mode 100644 index 0000000000..7034dc469f Binary files /dev/null and b/tests/ragger/snapshots/stax/test_1inch/00000.png differ diff --git a/tests/ragger/snapshots/stax/test_1inch/00001.png b/tests/ragger/snapshots/stax/test_1inch/00001.png new file mode 100644 index 0000000000..0560e47b7d Binary files /dev/null and b/tests/ragger/snapshots/stax/test_1inch/00001.png differ diff --git a/tests/ragger/snapshots/stax/test_1inch/00002.png b/tests/ragger/snapshots/stax/test_1inch/00002.png new file mode 100644 index 0000000000..82e93431f2 Binary files /dev/null and b/tests/ragger/snapshots/stax/test_1inch/00002.png differ diff --git a/tests/ragger/snapshots/stax/test_1inch/00003.png b/tests/ragger/snapshots/stax/test_1inch/00003.png new file mode 100644 index 0000000000..392165d4fc Binary files /dev/null and b/tests/ragger/snapshots/stax/test_1inch/00003.png differ diff --git a/tests/ragger/snapshots/stax/test_1inch/00004.png b/tests/ragger/snapshots/stax/test_1inch/00004.png new file mode 100644 index 0000000000..339db1b45c Binary files /dev/null and b/tests/ragger/snapshots/stax/test_1inch/00004.png differ diff --git a/tests/ragger/snapshots/stax/test_nft/00000.png b/tests/ragger/snapshots/stax/test_nft/00000.png new file mode 100644 index 0000000000..b0958508a7 Binary files /dev/null and b/tests/ragger/snapshots/stax/test_nft/00000.png differ diff --git a/tests/ragger/snapshots/stax/test_nft/00001.png b/tests/ragger/snapshots/stax/test_nft/00001.png new file mode 100644 index 0000000000..9c132ca352 Binary files /dev/null and b/tests/ragger/snapshots/stax/test_nft/00001.png differ diff --git a/tests/ragger/snapshots/stax/test_nft/00002.png b/tests/ragger/snapshots/stax/test_nft/00002.png new file mode 100644 index 0000000000..5c983c9d1c Binary files /dev/null and b/tests/ragger/snapshots/stax/test_nft/00002.png differ diff --git a/tests/ragger/snapshots/stax/test_nft/00003.png b/tests/ragger/snapshots/stax/test_nft/00003.png new file mode 100644 index 0000000000..2a281fb07a Binary files /dev/null and b/tests/ragger/snapshots/stax/test_nft/00003.png differ diff --git a/tests/ragger/snapshots/stax/test_nft/00004.png b/tests/ragger/snapshots/stax/test_nft/00004.png new file mode 100644 index 0000000000..67f63f9531 Binary files /dev/null and b/tests/ragger/snapshots/stax/test_nft/00004.png differ diff --git a/tests/ragger/snapshots/stax/test_nft/00005.png b/tests/ragger/snapshots/stax/test_nft/00005.png new file mode 100644 index 0000000000..392165d4fc Binary files /dev/null and b/tests/ragger/snapshots/stax/test_nft/00005.png differ diff --git a/tests/ragger/snapshots/stax/test_nft/00006.png b/tests/ragger/snapshots/stax/test_nft/00006.png new file mode 100644 index 0000000000..339db1b45c Binary files /dev/null and b/tests/ragger/snapshots/stax/test_nft/00006.png differ diff --git a/tests/ragger/snapshots/stax/test_poap/00000.png b/tests/ragger/snapshots/stax/test_poap/00000.png new file mode 100644 index 0000000000..751240cb5c Binary files /dev/null and b/tests/ragger/snapshots/stax/test_poap/00000.png differ diff --git a/tests/ragger/snapshots/stax/test_poap/00001.png b/tests/ragger/snapshots/stax/test_poap/00001.png new file mode 100644 index 0000000000..f73962481c Binary files /dev/null and b/tests/ragger/snapshots/stax/test_poap/00001.png differ diff --git a/tests/ragger/snapshots/stax/test_poap/00002.png b/tests/ragger/snapshots/stax/test_poap/00002.png new file mode 100644 index 0000000000..829c038b45 Binary files /dev/null and b/tests/ragger/snapshots/stax/test_poap/00002.png differ diff --git a/tests/ragger/snapshots/stax/test_poap/00003.png b/tests/ragger/snapshots/stax/test_poap/00003.png new file mode 100644 index 0000000000..40dc555ff4 Binary files /dev/null and b/tests/ragger/snapshots/stax/test_poap/00003.png differ diff --git a/tests/ragger/snapshots/stax/test_poap/00004.png b/tests/ragger/snapshots/stax/test_poap/00004.png new file mode 100644 index 0000000000..392165d4fc Binary files /dev/null and b/tests/ragger/snapshots/stax/test_poap/00004.png differ diff --git a/tests/ragger/snapshots/stax/test_poap/00005.png b/tests/ragger/snapshots/stax/test_poap/00005.png new file mode 100644 index 0000000000..339db1b45c Binary files /dev/null and b/tests/ragger/snapshots/stax/test_poap/00005.png differ diff --git a/tests/ragger/test_gcs.py b/tests/ragger/test_gcs.py new file mode 100644 index 0000000000..a05c0c0667 --- /dev/null +++ b/tests/ragger/test_gcs.py @@ -0,0 +1,544 @@ +import struct +import json +import hashlib + +from ragger.backend import BackendInterface +from ragger.firmware import Firmware +from ragger.navigator import Navigator +from ragger.navigator.navigation_scenario import NavigateWithScenario + +import pytest +from web3 import Web3 + +import client.response_parser as ResponseParser +from client.client import EthAppClient, SignMode, TrustedNameType, TrustedNameSource +from client.utils import get_selector_from_data +from client.gcs import * + +from constants import ABIS_FOLDER + + +def test_nft(firmware: Firmware, + backend: BackendInterface, + scenario_navigator: NavigateWithScenario, + test_name: str): + app_client = EthAppClient(backend) + + if firmware == Firmware.NANOS: + pytest.skip("Not supported on LNS") + + with open(f"{ABIS_FOLDER}/erc1155.json", encoding="utf-8") as file: + contract = Web3().eth.contract( + abi=json.load(file), + address=None + ) + recipient_addr = bytes.fromhex("1111111111111111111111111111111111111111") + data = contract.encode_abi("safeBatchTransferFrom", [ + bytes.fromhex("Dad77910DbDFdE764fC21FCD4E74D71bBACA6D8D"), + recipient_addr, + [ + 0xff, + 0xffff, + 0xffffff, + 0xffffffff, + ], + [ + 1, + 2, + 3, + 4, + ], + bytes.fromhex("deadbeef1337cafe"), + ]) + tx_params = { + "nonce": 235, + "maxFeePerGas": Web3.to_wei(100, "gwei"), + "maxPriorityFeePerGas": Web3.to_wei(10, "gwei"), + "gas": 44001, + # OpenSea Shared Storefront + "to": bytes.fromhex("495f947276749ce646f68ac8c248420045cb7b5e"), + "data": data, + "chainId": 1 + } + with app_client.sign("m/44'/60'/0'/0/0", tx_params, SignMode.STORE): + pass + + fields = [ + Field( + 1, + "From", + ParamType.RAW, + ParamRaw( + 1, + Value( + 1, + TypeFamily.ADDRESS, + data_path=DataPath( + 1, + [ + PathTuple(0), + PathLeaf(PathLeafType.STATIC), + ] + ), + ) + ) + ), + Field( + 1, + "To", + ParamType.TRUSTED_NAME, + ParamTrustedName( + 1, + Value( + 1, + TypeFamily.ADDRESS, + data_path=DataPath( + 1, + [ + PathTuple(1), + PathLeaf(PathLeafType.STATIC), + ] + ), + ), + [ + TrustedNameType.ACCOUNT, + ], + [ + TrustedNameSource.UD, + TrustedNameSource.ENS, + TrustedNameSource.FN, + ], + ) + ), + Field( + 1, + "NFTs", + ParamType.NFT, + ParamNFT( + 1, + Value( + 1, + TypeFamily.UINT, + type_size=32, + data_path=DataPath( + 1, + [ + PathTuple(2), + PathRef(), + PathArray(1), + PathLeaf(PathLeafType.STATIC), + ] + ), + ), + Value( + 1, + TypeFamily.ADDRESS, + container_path=ContainerPath.TO + ) + ) + ), + Field( + 1, + "Values", + ParamType.RAW, + ParamRaw( + 1, + Value( + 1, + TypeFamily.UINT, + type_size=32, + data_path=DataPath( + 1, + [ + PathTuple(3), + PathRef(), + PathArray(1), + PathLeaf(PathLeafType.STATIC), + ] + ), + ) + ) + ), + Field( + 1, + "Data", + ParamType.RAW, + ParamRaw( + 1, + Value( + 1, + TypeFamily.BYTES, + data_path=DataPath( + 1, + [ + PathTuple(4), + PathRef(), + PathLeaf(PathLeafType.DYNAMIC), + ] + ), + ) + ) + ), + ] + + # compute instructions hash + inst_hash = hashlib.sha3_256() + for field in fields: + inst_hash.update(field.serialize()) + + tx_info = TxInfo( + 1, + tx_params["chainId"], + tx_params["to"], + get_selector_from_data(tx_params["data"]), + inst_hash.digest(), + "batch transfer NFTs", + ) + + app_client.provide_transaction_info(tx_info.serialize()) + challenge = ResponseParser.challenge(app_client.get_challenge().data) + app_client.provide_trusted_name_v2(recipient_addr, + "gerard.eth", + TrustedNameType.ACCOUNT, + TrustedNameSource.ENS, + tx_params["chainId"], + challenge=challenge) + app_client.provide_nft_metadata("OpenSea Shared Storefront", tx_params["to"], tx_params["chainId"]) + + for field in fields: + payload = field.serialize() + app_client.send_raw(0xe0, 0x28, 0x01, 0x00, struct.pack(">H", len(payload)) + payload) + + with app_client.send_raw_async(0xe0, 0x04, 0x00, 0x02, bytes()): + scenario_navigator.review_approve(test_name=test_name, custom_screen_text="Sign transaction") + + +def test_poap(firmware: Firmware, + backend: BackendInterface, + scenario_navigator: NavigateWithScenario, + test_name: str): + app_client = EthAppClient(backend) + + if firmware == Firmware.NANOS: + pytest.skip("Not supported on LNS") + + with open(f"{ABIS_FOLDER}/poap.abi.json", encoding="utf-8") as file: + contract = Web3().eth.contract( + abi=json.load(file), + address=None + ) + data = contract.encode_abi("mintToken", [ + 175676, + 7163978, + bytes.fromhex("Dad77910DbDFdE764fC21FCD4E74D71bBACA6D8D"), + 1730621615, + bytes.fromhex("8991da687cff5300959810a08c4ec183bb2a56dc82f5aac2b24f1106c2d983ac6f7a6b28700a236724d814000d0fd8c395fcf9f87c4424432ebf30c9479201d71c") + ]) + tx_params = { + "nonce": 235, + "maxFeePerGas": Web3.to_wei(100, "gwei"), + "maxPriorityFeePerGas": Web3.to_wei(10, "gwei"), + "gas": 44001, + # PoapBridge + "to": bytes.fromhex("0bb4D3e88243F4A057Db77341e6916B0e449b158"), + "data": data, + "chainId": 1 + } + with app_client.sign("m/44'/60'/0'/0/0", tx_params, SignMode.STORE): + pass + + fields = [ + Field( + 1, + "Event ID", + ParamType.RAW, + ParamRaw( + 1, + Value( + 1, + TypeFamily.UINT, + type_size=32, + data_path=DataPath( + 1, + [ + PathTuple(0), + PathLeaf(PathLeafType.STATIC), + ] + ), + ) + ) + ), + Field( + 1, + "Token ID", + ParamType.RAW, + ParamRaw( + 1, + Value( + 1, + TypeFamily.UINT, + type_size=32, + data_path=DataPath( + 1, + [ + PathTuple(1), + PathLeaf(PathLeafType.STATIC), + ] + ), + ) + ) + ), + Field( + 1, + "Receiver", + ParamType.RAW, + ParamRaw( + 1, + Value( + 1, + TypeFamily.ADDRESS, + data_path=DataPath( + 1, + [ + PathTuple(2), + PathLeaf(PathLeafType.STATIC), + ] + ), + ) + ) + ), + Field( + 1, + "Expiration time", + ParamType.DATETIME, + ParamDatetime( + 1, + Value( + 1, + TypeFamily.UINT, + type_size=32, + data_path=DataPath( + 1, + [ + PathTuple(3), + PathLeaf(PathLeafType.STATIC), + ] + ), + ), + DatetimeType.DT_UNIX + ) + ), + Field( + 1, + "Signature", + ParamType.RAW, + ParamRaw( + 1, + Value( + 1, + TypeFamily.BYTES, + data_path=DataPath( + 1, + [ + PathTuple(4), + PathRef(), + PathLeaf(PathLeafType.DYNAMIC), + ] + ), + ) + ) + ), + ] + + # compute instructions hash + inst_hash = hashlib.sha3_256() + for field in fields: + inst_hash.update(field.serialize()) + + tx_info = TxInfo( + 1, + tx_params["chainId"], + tx_params["to"], + get_selector_from_data(tx_params["data"]), + inst_hash.digest(), + "mint POAP", + creator_name="POAP", + creator_legal_name="Proof of Attendance Protocol", + creator_url="poap.xyz", + contract_name="PoapBridge", + deploy_date=1646305200 + ) + + app_client.provide_transaction_info(tx_info.serialize()) + + for field in fields: + payload = field.serialize() + app_client.send_raw(0xe0, 0x28, 0x01, 0x00, struct.pack(">H", len(payload)) + payload) + + with app_client.send_raw_async(0xe0, 0x04, 0x00, 0x02, bytes()): + scenario_navigator.review_approve(test_name=test_name, custom_screen_text="Sign transaction") + + +def test_1inch(firmware: Firmware, + backend: BackendInterface, + scenario_navigator: NavigateWithScenario, + test_name: str): + app_client = EthAppClient(backend) + + if firmware == Firmware.NANOS: + pytest.skip("Not supported on LNS") + + with open(f"{ABIS_FOLDER}/1inch.abi.json", encoding="utf-8") as file: + contract = Web3().eth.contract( + abi=json.load(file), + address=None + ) + data = contract.encode_abi("swap", [ + bytes.fromhex("F313B370D28760b98A2E935E56Be92Feb2c4EC04"), + [ + bytes.fromhex("EeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"), + bytes.fromhex("A0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"), + bytes.fromhex("F313B370D28760b98A2E935E56Be92Feb2c4EC04"), + bytes.fromhex("Dad77910DbDFdE764fC21FCD4E74D71bBACA6D8D"), + Web3.to_wei(0.22, "ether"), + 682119805, + 0, + ], + bytes(), + ]) + tx_params = { + "nonce": 235, + "maxFeePerGas": Web3.to_wei(100, "gwei"), + "maxPriorityFeePerGas": Web3.to_wei(10, "gwei"), + "gas": 44001, + # Aggregation Router V6 + "to": bytes.fromhex("111111125421cA6dc452d289314280a0f8842A65"), + "data": data, + "chainId": 1 + } + with app_client.sign("m/44'/60'/0'/0/0", tx_params, SignMode.STORE): + pass + + fields = [ + Field( + 1, + "Executor", + ParamType.RAW, + ParamRaw( + 1, + Value( + 1, + TypeFamily.ADDRESS, + data_path=DataPath( + 1, + [ + PathTuple(0), + PathLeaf(PathLeafType.STATIC), + ] + ), + ) + ) + ), + Field( + 1, + "Send", + ParamType.TOKEN_AMOUNT, + ParamTokenAmount( + 1, + Value( + 1, + TypeFamily.UINT, + type_size=32, + data_path=DataPath( + 1, + [ + PathTuple(1), + PathTuple(4), + PathLeaf(PathLeafType.STATIC), + ] + ), + ), + token=Value( + 1, + TypeFamily.ADDRESS, + data_path=DataPath( + 1, + [ + PathTuple(1), + PathTuple(0), + PathLeaf(PathLeafType.STATIC), + ] + ), + ), + native_currency=[ + bytes.fromhex("EeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"), + ], + ) + ), + Field( + 1, + "Receive", + ParamType.TOKEN_AMOUNT, + ParamTokenAmount( + 1, + Value( + 1, + TypeFamily.UINT, + type_size=32, + data_path=DataPath( + 1, + [ + PathTuple(1), + PathTuple(5), + PathLeaf(PathLeafType.STATIC), + ] + ), + ), + token=Value( + 1, + TypeFamily.ADDRESS, + data_path=DataPath( + 1, + [ + PathTuple(1), + PathTuple(1), + PathLeaf(PathLeafType.STATIC), + ] + ), + ), + native_currency=[ + bytes.fromhex("EeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"), + ], + ) + ), + ] + + # compute instructions hash + inst_hash = hashlib.sha3_256() + for field in fields: + inst_hash.update(field.serialize()) + + tx_info = TxInfo( + 1, + tx_params["chainId"], + tx_params["to"], + get_selector_from_data(tx_params["data"]), + inst_hash.digest(), + "swap", + creator_name="1inch", + creator_legal_name="1inch Network", + creator_url="1inch.io", + contract_name="Aggregation Router V6", + deploy_date=1707724800 + ) + + app_client.provide_transaction_info(tx_info.serialize()) + + app_client.provide_token_metadata("USDC", bytes.fromhex("A0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"), 6, 1) + + for field in fields: + payload = field.serialize() + app_client.send_raw(0xe0, 0x28, 0x01, 0x00, struct.pack(">H", len(payload)) + payload) + + with app_client.send_raw_async(0xe0, 0x04, 0x00, 0x02, bytes()): + scenario_navigator.review_approve(test_name=test_name, custom_screen_text="Sign transaction")