From 48fd0cc1020269e151323f4991ba4177da0083d6 Mon Sep 17 00:00:00 2001 From: gitpusha Date: Tue, 1 Dec 2020 14:18:09 +0100 Subject: [PATCH] chore: new ConnectGelato and ProviderModuleDSA deployed and verified --- .../contracts/gelato/ProviderModuleDSA.sol | 2 +- deployments/mainnet/ConnectGelato.json | 1433 +++++++++++++++++ deployments/mainnet/ProviderModuleDSA.json | 310 ++++ .../07a68d6422a92bd1de0d4e1d5ebbd24f.json | 33 + .../32abadde127e3c5f4f727f0b5ec233f4.json | 33 + hardhat.config.js | 2 +- package.json | 4 +- yarn.lock | 17 +- 8 files changed, 1822 insertions(+), 12 deletions(-) create mode 100644 deployments/mainnet/ConnectGelato.json create mode 100644 deployments/mainnet/ProviderModuleDSA.json create mode 100644 deployments/mainnet/solcInputs/07a68d6422a92bd1de0d4e1d5ebbd24f.json create mode 100644 deployments/mainnet/solcInputs/32abadde127e3c5f4f727f0b5ec233f4.json diff --git a/contracts/contracts/gelato/ProviderModuleDSA.sol b/contracts/contracts/gelato/ProviderModuleDSA.sol index 0945eb4..8198207 100644 --- a/contracts/contracts/gelato/ProviderModuleDSA.sol +++ b/contracts/contracts/gelato/ProviderModuleDSA.sol @@ -1,4 +1,4 @@ -// "SPDX-License-Identifier: UNLICENSED" +// SPDX-License-Identifier: UNLICENSED pragma solidity 0.7.4; pragma experimental ABIEncoderV2; diff --git a/deployments/mainnet/ConnectGelato.json b/deployments/mainnet/ConnectGelato.json new file mode 100644 index 0000000..b43a76a --- /dev/null +++ b/deployments/mainnet/ConnectGelato.json @@ -0,0 +1,1433 @@ +{ + "address": "0x25aD59adbe00C2d80c86d01e2E05e1294DA84823", + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "address", + "name": "userProxy", + "type": "address" + }, + { + "components": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "internalType": "struct Provider", + "name": "provider", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "inst", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct Condition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "enum Operation", + "name": "operation", + "type": "uint8" + }, + { + "internalType": "enum DataFlow", + "name": "dataFlow", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "termsOkCheck", + "type": "bool" + } + ], + "internalType": "struct Action[]", + "name": "actions", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "selfProviderGasLimit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "selfProviderGasPriceCeil", + "type": "uint256" + } + ], + "internalType": "struct Task[]", + "name": "tasks", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "expiryDate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "cycleId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "submissionsLeft", + "type": "uint256" + } + ], + "indexed": true, + "internalType": "struct TaskReceipt[]", + "name": "taskReceipt", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "getId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "setId", + "type": "uint256" + } + ], + "name": "LogMultiCancelTasks", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "executor", + "type": "address" + }, + { + "components": [ + { + "internalType": "address[]", + "name": "conditions", + "type": "address[]" + }, + { + "components": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "enum Operation", + "name": "operation", + "type": "uint8" + }, + { + "internalType": "enum DataFlow", + "name": "dataFlow", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "termsOkCheck", + "type": "bool" + } + ], + "internalType": "struct Action[]", + "name": "actions", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "gasPriceCeil", + "type": "uint256" + } + ], + "indexed": true, + "internalType": "struct TaskSpec[]", + "name": "taskspecs", + "type": "tuple[]" + }, + { + "indexed": true, + "internalType": "address[]", + "name": "modules", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "ethToDeposit", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "getId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "setId", + "type": "uint256" + } + ], + "name": "LogMultiProvide", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address[]", + "name": "conditions", + "type": "address[]" + }, + { + "components": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "enum Operation", + "name": "operation", + "type": "uint8" + }, + { + "internalType": "enum DataFlow", + "name": "dataFlow", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "termsOkCheck", + "type": "bool" + } + ], + "internalType": "struct Action[]", + "name": "actions", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "gasPriceCeil", + "type": "uint256" + } + ], + "indexed": true, + "internalType": "struct TaskSpec[]", + "name": "taskspecs", + "type": "tuple[]" + }, + { + "indexed": true, + "internalType": "address[]", + "name": "modules", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "ethToWithdraw", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "getId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "setId", + "type": "uint256" + } + ], + "name": "LogMultiUnprovide", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "indexed": true, + "internalType": "struct Provider", + "name": "provider", + "type": "tuple" + }, + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "inst", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct Condition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "enum Operation", + "name": "operation", + "type": "uint8" + }, + { + "internalType": "enum DataFlow", + "name": "dataFlow", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "termsOkCheck", + "type": "bool" + } + ], + "internalType": "struct Action[]", + "name": "actions", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "selfProviderGasLimit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "selfProviderGasPriceCeil", + "type": "uint256" + } + ], + "indexed": true, + "internalType": "struct Task", + "name": "task", + "type": "tuple" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "expiryDate", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "getId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "setId", + "type": "uint256" + } + ], + "name": "LogSubmitTask", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "indexed": true, + "internalType": "struct Provider", + "name": "provider", + "type": "tuple" + }, + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "inst", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct Condition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "enum Operation", + "name": "operation", + "type": "uint8" + }, + { + "internalType": "enum DataFlow", + "name": "dataFlow", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "termsOkCheck", + "type": "bool" + } + ], + "internalType": "struct Action[]", + "name": "actions", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "selfProviderGasLimit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "selfProviderGasPriceCeil", + "type": "uint256" + } + ], + "indexed": true, + "internalType": "struct Task[]", + "name": "tasks", + "type": "tuple[]" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "expiryDate", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "getId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "setId", + "type": "uint256" + } + ], + "name": "LogSubmitTaskChain", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "indexed": true, + "internalType": "struct Provider", + "name": "provider", + "type": "tuple" + }, + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "inst", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct Condition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "enum Operation", + "name": "operation", + "type": "uint8" + }, + { + "internalType": "enum DataFlow", + "name": "dataFlow", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "termsOkCheck", + "type": "bool" + } + ], + "internalType": "struct Action[]", + "name": "actions", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "selfProviderGasLimit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "selfProviderGasPriceCeil", + "type": "uint256" + } + ], + "indexed": true, + "internalType": "struct Task[]", + "name": "tasks", + "type": "tuple[]" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "expiryDate", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "getId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "setId", + "type": "uint256" + } + ], + "name": "LogSubmitTaskCycle", + "type": "event" + }, + { + "inputs": [], + "name": "connectorID", + "outputs": [ + { + "internalType": "uint256", + "name": "_type", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "address", + "name": "userProxy", + "type": "address" + }, + { + "components": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "internalType": "struct Provider", + "name": "provider", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "inst", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct Condition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "enum Operation", + "name": "operation", + "type": "uint8" + }, + { + "internalType": "enum DataFlow", + "name": "dataFlow", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "termsOkCheck", + "type": "bool" + } + ], + "internalType": "struct Action[]", + "name": "actions", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "selfProviderGasLimit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "selfProviderGasPriceCeil", + "type": "uint256" + } + ], + "internalType": "struct Task[]", + "name": "tasks", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "expiryDate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "cycleId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "submissionsLeft", + "type": "uint256" + } + ], + "internalType": "struct TaskReceipt[]", + "name": "_taskReceipts", + "type": "tuple[]" + } + ], + "name": "multiCancelTasks", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_executor", + "type": "address" + }, + { + "components": [ + { + "internalType": "address[]", + "name": "conditions", + "type": "address[]" + }, + { + "components": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "enum Operation", + "name": "operation", + "type": "uint8" + }, + { + "internalType": "enum DataFlow", + "name": "dataFlow", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "termsOkCheck", + "type": "bool" + } + ], + "internalType": "struct Action[]", + "name": "actions", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "gasPriceCeil", + "type": "uint256" + } + ], + "internalType": "struct TaskSpec[]", + "name": "_taskSpecs", + "type": "tuple[]" + }, + { + "internalType": "address[]", + "name": "_modules", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "_ethToDeposit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_getId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_setId", + "type": "uint256" + } + ], + "name": "multiProvide", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_withdrawAmount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address[]", + "name": "conditions", + "type": "address[]" + }, + { + "components": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "enum Operation", + "name": "operation", + "type": "uint8" + }, + { + "internalType": "enum DataFlow", + "name": "dataFlow", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "termsOkCheck", + "type": "bool" + } + ], + "internalType": "struct Action[]", + "name": "actions", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "gasPriceCeil", + "type": "uint256" + } + ], + "internalType": "struct TaskSpec[]", + "name": "_taskSpecs", + "type": "tuple[]" + }, + { + "internalType": "address[]", + "name": "_modules", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "_getId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_setId", + "type": "uint256" + } + ], + "name": "multiUnprovide", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "internalType": "struct Provider", + "name": "_provider", + "type": "tuple" + }, + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "inst", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct Condition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "enum Operation", + "name": "operation", + "type": "uint8" + }, + { + "internalType": "enum DataFlow", + "name": "dataFlow", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "termsOkCheck", + "type": "bool" + } + ], + "internalType": "struct Action[]", + "name": "actions", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "selfProviderGasLimit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "selfProviderGasPriceCeil", + "type": "uint256" + } + ], + "internalType": "struct Task", + "name": "_task", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_expiryDate", + "type": "uint256" + } + ], + "name": "submitTask", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "internalType": "struct Provider", + "name": "_provider", + "type": "tuple" + }, + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "inst", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct Condition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "enum Operation", + "name": "operation", + "type": "uint8" + }, + { + "internalType": "enum DataFlow", + "name": "dataFlow", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "termsOkCheck", + "type": "bool" + } + ], + "internalType": "struct Action[]", + "name": "actions", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "selfProviderGasLimit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "selfProviderGasPriceCeil", + "type": "uint256" + } + ], + "internalType": "struct Task[]", + "name": "_tasks", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "_expiryDate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_sumOfRequestedTaskSubmits", + "type": "uint256" + } + ], + "name": "submitTaskChain", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "internalType": "struct Provider", + "name": "_provider", + "type": "tuple" + }, + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "inst", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct Condition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "enum Operation", + "name": "operation", + "type": "uint8" + }, + { + "internalType": "enum DataFlow", + "name": "dataFlow", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "termsOkCheck", + "type": "bool" + } + ], + "internalType": "struct Action[]", + "name": "actions", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "selfProviderGasLimit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "selfProviderGasPriceCeil", + "type": "uint256" + } + ], + "internalType": "struct Task[]", + "name": "_tasks", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "_expiryDate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_cycles", + "type": "uint256" + } + ], + "name": "submitTaskCycle", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + "transactionHash": "0xb291db38b8dc7fc661453c8c1e270fac0a208807292ad42fb06240f83259594e", + "receipt": { + "to": null, + "from": "0x5B753BF02a42bC73B5846dfd16a8F2e082b99a6a", + "contractAddress": "0x25aD59adbe00C2d80c86d01e2E05e1294DA84823", + "transactionIndex": 94, + "gasUsed": "1289004", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x23cca093b1f7e994a5b00d135b6d865596936fb9e31a1f939cd863c7030c1ee8", + "transactionHash": "0xb291db38b8dc7fc661453c8c1e270fac0a208807292ad42fb06240f83259594e", + "logs": [], + "blockNumber": 11366874, + "cumulativeGasUsed": "7901309", + "status": 1, + "byzantium": true + }, + "args": [62], + "solcInputHash": "32abadde127e3c5f4f727f0b5ec233f4", + "metadata": "{\"compiler\":{\"version\":\"0.7.4+commit.3f05b770\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"userProxy\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"internalType\":\"struct Provider\",\"name\":\"provider\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"inst\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Condition[]\",\"name\":\"conditions\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enum Operation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"enum DataFlow\",\"name\":\"dataFlow\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"termsOkCheck\",\"type\":\"bool\"}],\"internalType\":\"struct Action[]\",\"name\":\"actions\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"selfProviderGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfProviderGasPriceCeil\",\"type\":\"uint256\"}],\"internalType\":\"struct Task[]\",\"name\":\"tasks\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"expiryDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"cycleId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"submissionsLeft\",\"type\":\"uint256\"}],\"indexed\":true,\"internalType\":\"struct TaskReceipt[]\",\"name\":\"taskReceipt\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"getId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"setId\",\"type\":\"uint256\"}],\"name\":\"LogMultiCancelTasks\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"conditions\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enum Operation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"enum DataFlow\",\"name\":\"dataFlow\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"termsOkCheck\",\"type\":\"bool\"}],\"internalType\":\"struct Action[]\",\"name\":\"actions\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"gasPriceCeil\",\"type\":\"uint256\"}],\"indexed\":true,\"internalType\":\"struct TaskSpec[]\",\"name\":\"taskspecs\",\"type\":\"tuple[]\"},{\"indexed\":true,\"internalType\":\"address[]\",\"name\":\"modules\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ethToDeposit\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"getId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"setId\",\"type\":\"uint256\"}],\"name\":\"LogMultiProvide\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"conditions\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enum Operation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"enum DataFlow\",\"name\":\"dataFlow\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"termsOkCheck\",\"type\":\"bool\"}],\"internalType\":\"struct Action[]\",\"name\":\"actions\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"gasPriceCeil\",\"type\":\"uint256\"}],\"indexed\":true,\"internalType\":\"struct TaskSpec[]\",\"name\":\"taskspecs\",\"type\":\"tuple[]\"},{\"indexed\":true,\"internalType\":\"address[]\",\"name\":\"modules\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ethToWithdraw\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"getId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"setId\",\"type\":\"uint256\"}],\"name\":\"LogMultiUnprovide\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"indexed\":true,\"internalType\":\"struct Provider\",\"name\":\"provider\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"inst\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Condition[]\",\"name\":\"conditions\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enum Operation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"enum DataFlow\",\"name\":\"dataFlow\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"termsOkCheck\",\"type\":\"bool\"}],\"internalType\":\"struct Action[]\",\"name\":\"actions\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"selfProviderGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfProviderGasPriceCeil\",\"type\":\"uint256\"}],\"indexed\":true,\"internalType\":\"struct Task\",\"name\":\"task\",\"type\":\"tuple\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"expiryDate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"getId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"setId\",\"type\":\"uint256\"}],\"name\":\"LogSubmitTask\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"indexed\":true,\"internalType\":\"struct Provider\",\"name\":\"provider\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"inst\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Condition[]\",\"name\":\"conditions\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enum Operation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"enum DataFlow\",\"name\":\"dataFlow\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"termsOkCheck\",\"type\":\"bool\"}],\"internalType\":\"struct Action[]\",\"name\":\"actions\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"selfProviderGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfProviderGasPriceCeil\",\"type\":\"uint256\"}],\"indexed\":true,\"internalType\":\"struct Task[]\",\"name\":\"tasks\",\"type\":\"tuple[]\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"expiryDate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"getId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"setId\",\"type\":\"uint256\"}],\"name\":\"LogSubmitTaskChain\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"indexed\":true,\"internalType\":\"struct Provider\",\"name\":\"provider\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"inst\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Condition[]\",\"name\":\"conditions\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enum Operation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"enum DataFlow\",\"name\":\"dataFlow\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"termsOkCheck\",\"type\":\"bool\"}],\"internalType\":\"struct Action[]\",\"name\":\"actions\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"selfProviderGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfProviderGasPriceCeil\",\"type\":\"uint256\"}],\"indexed\":true,\"internalType\":\"struct Task[]\",\"name\":\"tasks\",\"type\":\"tuple[]\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"expiryDate\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"getId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"setId\",\"type\":\"uint256\"}],\"name\":\"LogSubmitTaskCycle\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"connectorID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_type\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"userProxy\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"internalType\":\"struct Provider\",\"name\":\"provider\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"inst\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Condition[]\",\"name\":\"conditions\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enum Operation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"enum DataFlow\",\"name\":\"dataFlow\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"termsOkCheck\",\"type\":\"bool\"}],\"internalType\":\"struct Action[]\",\"name\":\"actions\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"selfProviderGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfProviderGasPriceCeil\",\"type\":\"uint256\"}],\"internalType\":\"struct Task[]\",\"name\":\"tasks\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"expiryDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"cycleId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"submissionsLeft\",\"type\":\"uint256\"}],\"internalType\":\"struct TaskReceipt[]\",\"name\":\"_taskReceipts\",\"type\":\"tuple[]\"}],\"name\":\"multiCancelTasks\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"conditions\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enum Operation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"enum DataFlow\",\"name\":\"dataFlow\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"termsOkCheck\",\"type\":\"bool\"}],\"internalType\":\"struct Action[]\",\"name\":\"actions\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"gasPriceCeil\",\"type\":\"uint256\"}],\"internalType\":\"struct TaskSpec[]\",\"name\":\"_taskSpecs\",\"type\":\"tuple[]\"},{\"internalType\":\"address[]\",\"name\":\"_modules\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"_ethToDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_getId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_setId\",\"type\":\"uint256\"}],\"name\":\"multiProvide\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_withdrawAmount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address[]\",\"name\":\"conditions\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enum Operation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"enum DataFlow\",\"name\":\"dataFlow\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"termsOkCheck\",\"type\":\"bool\"}],\"internalType\":\"struct Action[]\",\"name\":\"actions\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"gasPriceCeil\",\"type\":\"uint256\"}],\"internalType\":\"struct TaskSpec[]\",\"name\":\"_taskSpecs\",\"type\":\"tuple[]\"},{\"internalType\":\"address[]\",\"name\":\"_modules\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"_getId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_setId\",\"type\":\"uint256\"}],\"name\":\"multiUnprovide\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"internalType\":\"struct Provider\",\"name\":\"_provider\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"inst\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Condition[]\",\"name\":\"conditions\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enum Operation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"enum DataFlow\",\"name\":\"dataFlow\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"termsOkCheck\",\"type\":\"bool\"}],\"internalType\":\"struct Action[]\",\"name\":\"actions\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"selfProviderGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfProviderGasPriceCeil\",\"type\":\"uint256\"}],\"internalType\":\"struct Task\",\"name\":\"_task\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_expiryDate\",\"type\":\"uint256\"}],\"name\":\"submitTask\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"internalType\":\"struct Provider\",\"name\":\"_provider\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"inst\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Condition[]\",\"name\":\"conditions\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enum Operation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"enum DataFlow\",\"name\":\"dataFlow\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"termsOkCheck\",\"type\":\"bool\"}],\"internalType\":\"struct Action[]\",\"name\":\"actions\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"selfProviderGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfProviderGasPriceCeil\",\"type\":\"uint256\"}],\"internalType\":\"struct Task[]\",\"name\":\"_tasks\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"_expiryDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_sumOfRequestedTaskSubmits\",\"type\":\"uint256\"}],\"name\":\"submitTaskChain\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"internalType\":\"struct Provider\",\"name\":\"_provider\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"inst\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Condition[]\",\"name\":\"conditions\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enum Operation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"enum DataFlow\",\"name\":\"dataFlow\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"termsOkCheck\",\"type\":\"bool\"}],\"internalType\":\"struct Action[]\",\"name\":\"actions\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"selfProviderGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfProviderGasPriceCeil\",\"type\":\"uint256\"}],\"internalType\":\"struct Task[]\",\"name\":\"_tasks\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"_expiryDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_cycles\",\"type\":\"uint256\"}],\"name\":\"submitTaskCycle\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"connectorID()\":{\"details\":\"Connector Details\"},\"multiCancelTasks((uint256,address,(address,address),uint256,((address,bytes)[],(address,bytes,uint8,uint8,uint256,bool)[],uint256,uint256)[],uint256,uint256,uint256)[])\":{\"details\":\"Cancels outstanding Tasks\",\"params\":{\"_taskReceipts\":\"List of Task Receipts to cancel\"}},\"multiProvide(address,(address[],(address,bytes,uint8,uint8,uint256,bool)[],uint256)[],address[],uint256,uint256,uint256)\":{\"details\":\"Enables first time users to pre-fund eth, whitelist an executor & register the ProviderModuleDSA.sol to be able to use Gelato\",\"params\":{\"_ethToDeposit\":\"amount of eth to deposit on Gelato, only for self-providers\",\"_executor\":\"address of single execot node or gelato'S decentralized execution market\",\"_modules\":\"address of ProviderModuleDSA\",\"_taskSpecs\":\"enables external providers to whitelist TaskSpecs on gelato\"}},\"multiUnprovide(uint256,(address[],(address,bytes,uint8,uint8,uint256,bool)[],uint256)[],address[],uint256,uint256)\":{\"details\":\"Withdraws funds from Gelato, de-whitelists TaskSpecs and Provider Modules in one tx\",\"params\":{\"_modules\":\"List of Provider Modules to de-whitelist, default empty []\",\"_taskSpecs\":\"List of Task Specs to de-whitelist, default empty []\",\"_withdrawAmount\":\"Amount of ETH to withdraw from Gelato\"}},\"submitTask((address,address),((address,bytes)[],(address,bytes,uint8,uint8,uint256,bool)[],uint256,uint256),uint256)\":{\"details\":\"Submits a single, one-time task to Gelato\",\"params\":{\"_expiryDate\":\"Default 0, othweise timestamp after which the task expires\",\"_provider\":\"Consists of proxy module address (DSA) and provider address () who will pay for the transaction execution\",\"_task\":\"Task specifying the condition and the action connectors\"}},\"submitTaskChain((address,address),((address,bytes)[],(address,bytes,uint8,uint8,uint256,bool)[],uint256,uint256)[],uint256,uint256)\":{\"details\":\"Submits single or mulitple Task Chains to Gelato\",\"params\":{\"_expiryDate\":\"Default 0, othweise timestamp after which the task expires\",\"_provider\":\"Consists of proxy module address (DSA) and provider address () who will pay for the transaction execution\",\"_sumOfRequestedTaskSubmits\":\"The TOTAL number of Task auto-submits that should have occured once the cycle is complete\",\"_tasks\":\"A sequence of Tasks, can be a single or multiples\"}},\"submitTaskCycle((address,address),((address,bytes)[],(address,bytes,uint8,uint8,uint256,bool)[],uint256,uint256)[],uint256,uint256)\":{\"details\":\"Submits single or mulitple Task Sequences to Gelato\",\"params\":{\"_cycles\":\"How often the Task List should be executed, e.g. 5 times\",\"_expiryDate\":\"Default 0, othweise timestamp after which the task expires\",\"_provider\":\"Consists of proxy module address (DSA) and provider address () who will pay for the transaction execution\",\"_tasks\":\"A sequence of Tasks, can be a single or multiples\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/contracts/connectors/ConnectGelato.sol\":\"ConnectGelato\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/connectors/ConnectGelato.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\n\\npragma solidity 0.7.4;\\npragma experimental ABIEncoderV2;\\n\\n// solhint-disable\\n\\n// Gelato Data Types\\nstruct Provider {\\n address addr; // if msg.sender == provider => self-Provider\\n address module; // e.g. DSA Provider Module\\n}\\n\\nstruct Condition {\\n address inst; // can be AddressZero for self-conditional Actions\\n bytes data; // can be bytes32(0) for self-conditional Actions\\n}\\n\\nenum Operation {Call, Delegatecall}\\n\\nenum DataFlow {None, In, Out, InAndOut}\\n\\nstruct Action {\\n address addr;\\n bytes data;\\n Operation operation;\\n DataFlow dataFlow;\\n uint256 value;\\n bool termsOkCheck;\\n}\\n\\nstruct Task {\\n Condition[] conditions; // optional\\n Action[] actions;\\n uint256 selfProviderGasLimit; // optional: 0 defaults to gelatoMaxGas\\n uint256 selfProviderGasPriceCeil; // optional: 0 defaults to NO_CEIL\\n}\\n\\nstruct TaskReceipt {\\n uint256 id;\\n address userProxy;\\n Provider provider;\\n uint256 index;\\n Task[] tasks;\\n uint256 expiryDate;\\n uint256 cycleId; // auto-filled by GelatoCore. 0 for non-cyclic/chained tasks\\n uint256 submissionsLeft;\\n}\\n\\nstruct TaskSpec {\\n address[] conditions; // Address: optional AddressZero for self-conditional actions\\n Action[] actions;\\n uint256 gasPriceCeil;\\n}\\n\\n// Gelato Interface\\ninterface IGelatoInterface {\\n /**\\n * @dev API to submit a single Task.\\n */\\n function submitTask(\\n Provider calldata _provider,\\n Task calldata _task,\\n uint256 _expiryDate\\n ) external;\\n\\n /**\\n * @dev A Gelato Task Cycle consists of 1 or more Tasks that automatically submit\\n * the next one, after they have been executed, where the total number of tasks can\\n * be only be an even number\\n */\\n function submitTaskCycle(\\n Provider calldata _provider,\\n Task[] calldata _tasks,\\n uint256 _expiryDate,\\n uint256 _cycles\\n ) external;\\n\\n /**\\n * @dev A Gelato Task Chain consists of 1 or more Tasks that automatically submit\\n * the next one, after they have been executed, where the total number of tasks can\\n * be an odd number\\n */\\n function submitTaskChain(\\n Provider calldata _provider,\\n Task[] calldata _tasks,\\n uint256 _expiryDate,\\n uint256 _sumOfRequestedTaskSubmits\\n ) external;\\n\\n /**\\n * @dev Cancel multiple tasks at once\\n */\\n function multiCancelTasks(TaskReceipt[] calldata _taskReceipts) external;\\n\\n /**\\n * @dev Whitelist new executor, TaskSpec(s) and Module(s) in one tx\\n */\\n function multiProvide(\\n address _executor,\\n TaskSpec[] calldata _taskSpecs,\\n address[] calldata _modules\\n ) external payable;\\n\\n /**\\n * @dev De-Whitelist TaskSpec(s), Module(s) and withdraw funds from gelato in one tx\\n */\\n function multiUnprovide(\\n uint256 _withdrawAmount,\\n TaskSpec[] calldata _taskSpecs,\\n address[] calldata _modules\\n ) external;\\n}\\n\\ninterface MemoryInterface {\\n function setUint(uint256 _id, uint256 _val) external;\\n\\n function getUint(uint256 _id) external returns (uint256);\\n}\\n\\nabstract contract Helpers {\\n uint256 internal immutable _id;\\n\\n constructor(uint256 id) {\\n _id = id;\\n }\\n\\n /**\\n * @dev Return Memory Variable Address\\n */\\n function getMemoryAddr() internal pure returns (address) {\\n return 0x8a5419CfC711B2343c17a6ABf4B2bAFaBb06957F; // InstaMemory Address\\n }\\n\\n /**\\n * @dev Set Uint value in InstaMemory Contract.\\n */\\n function setUint(uint256 setId, uint256 val) internal {\\n if (setId != 0) MemoryInterface(getMemoryAddr()).setUint(setId, val);\\n }\\n\\n /**\\n * @dev Get Uint value from InstaMemory Contract.\\n */\\n function getUint(uint256 getId, uint256 val)\\n internal\\n returns (uint256 returnVal)\\n {\\n returnVal = getId == 0\\n ? val\\n : MemoryInterface(getMemoryAddr()).getUint(getId);\\n }\\n\\n /**\\n * @dev Connector Details\\n */\\n function connectorID() public view returns (uint256 _type, uint256 id) {\\n (_type, id) = (1, _id);\\n }\\n}\\n\\ncontract DSMath {\\n function add(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n require((z = x + y) >= x, \\\"math-not-safe\\\");\\n }\\n\\n function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {\\n require((z = x - y) <= x, \\\"sub-overflow\\\");\\n }\\n}\\n\\nabstract contract GelatoHelpers is Helpers, DSMath {\\n /**\\n * @dev Return Gelato Core Address\\n */\\n function getGelatoCoreAddr() internal pure returns (address) {\\n return 0x025030BdAa159f281cAe63873E68313a703725A5; // Gelato Core address\\n }\\n\\n /**\\n * @dev Return Instapp DSA Provider Module Address\\n */\\n function getInstadappProviderModuleAddr() internal pure returns (address) {\\n return 0x0C25452d20cdFeEd2983fa9b9b9Cf4E81D6f2fE2; // ProviderModuleDSA Address\\n }\\n}\\n\\nabstract contract GelatoResolver is GelatoHelpers {\\n event LogMultiProvide(\\n address indexed executor,\\n TaskSpec[] indexed taskspecs,\\n address[] indexed modules,\\n uint256 ethToDeposit,\\n uint256 getId,\\n uint256 setId\\n );\\n\\n event LogSubmitTask(\\n Provider indexed provider,\\n Task indexed task,\\n uint256 indexed expiryDate,\\n uint256 getId,\\n uint256 setId\\n );\\n\\n event LogSubmitTaskCycle(\\n Provider indexed provider,\\n Task[] indexed tasks,\\n uint256 indexed expiryDate,\\n uint256 getId,\\n uint256 setId\\n );\\n\\n event LogSubmitTaskChain(\\n Provider indexed provider,\\n Task[] indexed tasks,\\n uint256 indexed expiryDate,\\n uint256 getId,\\n uint256 setId\\n );\\n\\n event LogMultiUnprovide(\\n TaskSpec[] indexed taskspecs,\\n address[] indexed modules,\\n uint256 ethToWithdraw,\\n uint256 getId,\\n uint256 setId\\n );\\n\\n event LogMultiCancelTasks(\\n TaskReceipt[] indexed taskReceipt,\\n uint256 getId,\\n uint256 setId\\n );\\n\\n // ===== Gelato ENTRY APIs ======\\n\\n /**\\n * @dev Enables first time users to pre-fund eth, whitelist an executor & register the\\n * ProviderModuleDSA.sol to be able to use Gelato\\n * @param _executor address of single execot node or gelato'S decentralized execution market\\n * @param _taskSpecs enables external providers to whitelist TaskSpecs on gelato\\n * @param _modules address of ProviderModuleDSA\\n * @param _ethToDeposit amount of eth to deposit on Gelato, only for self-providers\\n */\\n function multiProvide(\\n address _executor,\\n TaskSpec[] calldata _taskSpecs,\\n address[] calldata _modules,\\n uint256 _ethToDeposit,\\n uint256 _getId,\\n uint256 _setId\\n ) external payable {\\n uint256 ethToDeposit = getUint(_getId, _ethToDeposit);\\n ethToDeposit = ethToDeposit == uint256(-1)\\n ? address(this).balance\\n : ethToDeposit;\\n\\n IGelatoInterface(getGelatoCoreAddr()).multiProvide{value: ethToDeposit}(\\n _executor,\\n _taskSpecs,\\n _modules\\n );\\n\\n setUint(_setId, ethToDeposit);\\n\\n emit LogMultiProvide(\\n _executor,\\n _taskSpecs,\\n _modules,\\n ethToDeposit,\\n _getId,\\n _setId\\n );\\n }\\n\\n /**\\n * @dev Submits a single, one-time task to Gelato\\n * @param _provider Consists of proxy module address (DSA) and provider address ()\\n * who will pay for the transaction execution\\n * @param _task Task specifying the condition and the action connectors\\n * @param _expiryDate Default 0, othweise timestamp after which the task expires\\n */\\n function submitTask(\\n Provider calldata _provider,\\n Task calldata _task,\\n uint256 _expiryDate\\n ) external payable {\\n IGelatoInterface(getGelatoCoreAddr()).submitTask(\\n _provider,\\n _task,\\n _expiryDate\\n );\\n\\n emit LogSubmitTask(_provider, _task, _expiryDate, 0, 0);\\n }\\n\\n /**\\n * @dev Submits single or mulitple Task Sequences to Gelato\\n * @param _provider Consists of proxy module address (DSA) and provider address ()\\n * who will pay for the transaction execution\\n * @param _tasks A sequence of Tasks, can be a single or multiples\\n * @param _expiryDate Default 0, othweise timestamp after which the task expires\\n * @param _cycles How often the Task List should be executed, e.g. 5 times\\n */\\n function submitTaskCycle(\\n Provider calldata _provider,\\n Task[] calldata _tasks,\\n uint256 _expiryDate,\\n uint256 _cycles\\n ) external payable {\\n IGelatoInterface(getGelatoCoreAddr()).submitTaskCycle(\\n _provider,\\n _tasks,\\n _expiryDate,\\n _cycles\\n );\\n\\n emit LogSubmitTaskCycle(_provider, _tasks, _expiryDate, 0, 0);\\n }\\n\\n /**\\n * @dev Submits single or mulitple Task Chains to Gelato\\n * @param _provider Consists of proxy module address (DSA) and provider address ()\\n * who will pay for the transaction execution\\n * @param _tasks A sequence of Tasks, can be a single or multiples\\n * @param _expiryDate Default 0, othweise timestamp after which the task expires\\n * @param _sumOfRequestedTaskSubmits The TOTAL number of Task auto-submits\\n * that should have occured once the cycle is complete\\n */\\n function submitTaskChain(\\n Provider calldata _provider,\\n Task[] calldata _tasks,\\n uint256 _expiryDate,\\n uint256 _sumOfRequestedTaskSubmits\\n ) external payable {\\n IGelatoInterface(getGelatoCoreAddr()).submitTaskChain(\\n _provider,\\n _tasks,\\n _expiryDate,\\n _sumOfRequestedTaskSubmits\\n );\\n\\n emit LogSubmitTaskChain(_provider, _tasks, _expiryDate, 0, 0);\\n }\\n\\n // ===== Gelato EXIT APIs ======\\n\\n /**\\n * @dev Withdraws funds from Gelato, de-whitelists TaskSpecs and Provider Modules\\n * in one tx\\n * @param _withdrawAmount Amount of ETH to withdraw from Gelato\\n * @param _taskSpecs List of Task Specs to de-whitelist, default empty []\\n * @param _modules List of Provider Modules to de-whitelist, default empty []\\n */\\n function multiUnprovide(\\n uint256 _withdrawAmount,\\n TaskSpec[] calldata _taskSpecs,\\n address[] calldata _modules,\\n uint256 _getId,\\n uint256 _setId\\n ) external payable {\\n uint256 withdrawAmount = getUint(_getId, _withdrawAmount);\\n uint256 balanceBefore = address(this).balance;\\n\\n IGelatoInterface(getGelatoCoreAddr()).multiUnprovide(\\n withdrawAmount,\\n _taskSpecs,\\n _modules\\n );\\n\\n uint256 actualWithdrawAmount =\\n sub(address(this).balance, balanceBefore);\\n\\n setUint(_setId, actualWithdrawAmount);\\n\\n emit LogMultiUnprovide(\\n _taskSpecs,\\n _modules,\\n actualWithdrawAmount,\\n _getId,\\n _setId\\n );\\n }\\n\\n /**\\n * @dev Cancels outstanding Tasks\\n * @param _taskReceipts List of Task Receipts to cancel\\n */\\n function multiCancelTasks(TaskReceipt[] calldata _taskReceipts)\\n external\\n payable\\n {\\n IGelatoInterface(getGelatoCoreAddr()).multiCancelTasks(_taskReceipts);\\n\\n emit LogMultiCancelTasks(_taskReceipts, 0, 0);\\n }\\n}\\n\\ncontract ConnectGelato is GelatoResolver {\\n string public name = \\\"ConnectGelato-v2.0\\\";\\n\\n constructor(uint256 _id) Helpers(_id) {}\\n}\\n\",\"keccak256\":\"0xf0f61797ae78abf2eb39d9c7bacefb385dfdfdd10aabd4af918cfbf7f71539b7\",\"license\":\"UNLICENSED\"}},\"version\":1}", + "bytecode": "0x60e0604052601260a0819052710436f6e6e65637447656c61746f2d76322e360741b60c09081526200003591600091906200006f565b503480156200004357600080fd5b50604051620017343803806200173483398101604081905262000066916200011b565b60805262000134565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620000a75760008555620000f2565b82601f10620000c257805160ff1916838001178555620000f2565b82800160010185558215620000f2579182015b82811115620000f2578251825591602001919060010190620000d5565b506200010092915062000104565b5090565b5b8082111562000100576000815560010162000105565b6000602082840312156200012d578081fd5b5051919050565b6080516115e56200014f6000398061066152506115e56000f3fe60806040526004361061007b5760003560e01c80636cd3d8981161004e5780636cd3d898146100e6578063b348e268146100f9578063eb15f7811461010c578063ff92b1a81461012f5761007b565b8063025264901461008057806306fdde03146100955780632738a788146100c05780633e75a9a8146100d3575b600080fd5b61009361008e366004610a31565b610142565b005b3480156100a157600080fd5b506100aa61021f565b6040516100b79190611398565b60405180910390f35b6100936100ce366004610b08565b6102ad565b6100936100e13660046109f1565b6103b8565b6100936100f436600461095c565b610475565b610093610107366004610a31565b61058e565b34801561011857600080fd5b5061012161065c565b6040516100b792919061138a565b61009361013d366004610a95565b610683565b61014a610758565b6001600160a01b0316630252649086868686866040518663ffffffff1660e01b815260040161017d959493929190611411565b600060405180830381600087803b15801561019757600080fd5b505af11580156101ab573d6000803e3d6000fd5b505050508184846040516101c0929190611244565b6040518091039020866040516101d69190611251565b60405180910390207f6e618ca93d8007a3bb048d87cc0e7bf12bddc6ca3e336c153890bc0b6f66e9f660008060405161021092919061138a565b60405180910390a45050505050565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156102a55780601f1061027a576101008083540402835291602001916102a5565b820191906000526020600020905b81548152906001019060200180831161028857829003601f168201915b505050505081565b60006102b98389610770565b9050476102c4610758565b6001600160a01b031663b300f752838a8a8a8a6040518663ffffffff1660e01b81526004016102f795949392919061147f565b600060405180830381600087803b15801561031157600080fd5b505af1158015610325573d6000803e3d6000fd5b505050506000610335478361080b565b9050610341848261083d565b8686604051610351929190611123565b604051809103902089896040516103699291906111dd565b60405180910390207fc44585ae385fe053d798d56dc20dc0f0beade803098d105d289637d878fa9c7b8388886040516103a493929190611499565b60405180910390a350505050505050505050565b6103c0610758565b6001600160a01b0316633e75a9a883836040518363ffffffff1660e01b81526004016103ed9291906112b6565b600060405180830381600087803b15801561040757600080fd5b505af115801561041b573d6000803e3d6000fd5b50505050818160405161042f929190611138565b60405180910390207fb42519a7cf5f104a27b62b10dc1e67721be4b68791899606dd15e1b017bd963160008060405161046992919061138a565b60405180910390a25050565b60006104818385610770565b905060001981146104925780610494565b475b905061049e610758565b6001600160a01b0316639aad3798828b8b8b8b8b6040518763ffffffff1660e01b81526004016104d2959493929190611272565b6000604051808303818588803b1580156104eb57600080fd5b505af11580156104ff573d6000803e3d6000fd5b505050505061050e828261083d565b858560405161051e929190611123565b604051809103902088886040516105369291906111dd565b60405180910390208a6001600160a01b03167f1e9ff70996f352b5b70751209e03ae367633703bfc74ccc966b87e70ab57136184878760405161057b93929190611499565b60405180910390a4505050505050505050565b610596610758565b6001600160a01b031663b348e26886868686866040518663ffffffff1660e01b81526004016105c9959493929190611411565b600060405180830381600087803b1580156105e357600080fd5b505af11580156105f7573d6000803e3d6000fd5b5050505081848460405161060c929190611244565b6040518091039020866040516106229190611251565b60405180910390207f9e2ce841f586026d01f4cdb7bcd28c46154ba65e6766033fee248e3690c35a0d60008060405161021092919061138a565b6001907f000000000000000000000000000000000000000000000000000000000000000090565b61068b610758565b6001600160a01b031663ff92b1a88484846040518463ffffffff1660e01b81526004016106ba93929190611446565b600060405180830381600087803b1580156106d457600080fd5b505af11580156106e8573d6000803e3d6000fd5b5050505080826040516106fb9190611266565b6040518091039020846040516107119190611251565b60405180910390207f054a2512b2e1ba381f3ca2abbf5515644385116f44cf8d635382f6df3f41055760008060405161074b92919061138a565b60405180910390a4505050565b73025030bdaa159f281cae63873e68313a703725a590565b60008215610802576107806108af565b6001600160a01b031663a9c70eaa846040518263ffffffff1660e01b81526004016107ab9190611476565b602060405180830381600087803b1580156107c557600080fd5b505af11580156107d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fd9190610af0565b610804565b815b9392505050565b808203828111156108375760405162461bcd60e51b815260040161082e906113eb565b60405180910390fd5b92915050565b81156108ab5761084b6108af565b6001600160a01b03166361e3c94483836040518363ffffffff1660e01b815260040161087892919061138a565b600060405180830381600087803b15801561089257600080fd5b505af11580156108a6573d6000803e3d6000fd5b505050505b5050565b738a5419cfc711b2343c17a6abf4b2bafabb06957f90565b80356001600160a01b03811681146108de57600080fd5b919050565b60008083601f8401126108f4578182fd5b50813567ffffffffffffffff81111561090b578182fd5b602083019150836020808302850101111561092557600080fd5b9250929050565b803580151581146108de57600080fd5b8035600481106108de57600080fd5b600060408284031215610802578081fd5b60008060008060008060008060c0898b031215610977578384fd5b610980896108c7565b9750602089013567ffffffffffffffff8082111561099c578586fd5b6109a88c838d016108e3565b909950975060408b01359150808211156109c0578586fd5b506109cd8b828c016108e3565b999c989b5096999698976060880135976080810135975060a0013595509350505050565b60008060208385031215610a03578182fd5b823567ffffffffffffffff811115610a19578283fd5b610a25858286016108e3565b90969095509350505050565b600080600080600060a08688031215610a48578081fd5b610a52878761094b565b9450604086013567ffffffffffffffff811115610a6d578182fd5b610a79888289016108e3565b9699909850959660608101359660809091013595509350505050565b600080600060808486031215610aa9578283fd5b610ab3858561094b565b9250604084013567ffffffffffffffff811115610ace578283fd5b840160808187031215610adf578283fd5b929592945050506060919091013590565b600060208284031215610b01578081fd5b5051919050565b600080600080600080600060a0888a031215610b22578283fd5b87359650602088013567ffffffffffffffff80821115610b40578485fd5b610b4c8b838c016108e3565b909850965060408a0135915080821115610b64578485fd5b50610b718a828b016108e3565b989b979a5095989597966060870135966080013595509350505050565b6001600160a01b0316815260200190565b1515815260200190565b6000610bb58383610f65565b505060200190565b815260200190565b6001600160a01b03169052565b60008284526020808501945082825b85811015610c0d576001600160a01b03610bfa836108c7565b1687529582019590820190600101610be1565b509495945050505050565b600081815b84811015610c4c576001600160a01b03610c36836108c7565b1686526020958601959190910190600101610c1d565b5093949350505050565b818352602080840193600091908185020181018584845b87811015610d30578284038952610c84828861153c565b60c06001600160a01b03610c97836108c7565b168652610ca6878301836114f7565b8289890152610cb88389018284610f25565b9250505060408083013560028110610cce57898afd5b610cda82890182610f73565b50506060610ce981840161093c565b610cf582890182610f65565b50506080828101359087015260a0610d0e81840161092c565b9250610d1c81880184610f1f565b509986019994505090840190600101610c6d565b5091979650505050505050565b600081815b84811015610c4c57610d54828561153c565b610d6687610d61836108c7565b610b8e565b6020610d74818401846114f7565b610d7f848284610f4f565b93505050604083013560028110610d94578687fd5b610d9e8382610f73565b50606083013560048110610db0578687fd5b610ddd610dcc610dc284860184610ba9565b6080870135610bbd565b610dd860a0870161092c565b610b9f565b99505093909301925050600101610d42565b818352602080840193600091908185020181018584845b87811015610d30578284038952610e1d8288611585565b6060808601610e2c83846114af565b92885290829052608087019189905b80821015610e6257610e5084610d61856108c7565b93508983019250600182019150610e3b565b505050610e71878301836114af565b87830389890152610e83838284610c56565b6040948501359890940197909752505098850198935090840190600101610e06565b818352602080840193600091908185020181018584845b87811015610d30578284038952610edc84610ed7848a61159a565b610faa565b98850198935090840190600101610ebc565b600081815b84811015610c4c57610f0e86610f09848761159a565b611082565b955060209190910190600101610ef3565b15159052565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b6000828285378383015250601f01601f19160190565b60048110610f6f57fe5b9052565b60028110610f6f57fe5b6001600160a01b0380610f8f836108c7565b16835280610f9f602084016108c7565b166020840152505050565b600060808301610fba83846114af565b608086529182905260209160a08087019084830288010183865b8481101561103a57898303609f19018452610fef828761155a565b60406001600160a01b03611002836108c7565b168552611011898301836114f7565b9250818a8701526110258287018483610f25565b968a0196955050509187019150600101610fd4565b5050611048858801886114af565b945092508781038589015261105e818585610c56565b94505050505060408301356040850152606083013560608501528091505092915050565b600061108e82836114af565b8482845b838110156110e6576110a4828661155a565b6001600160a01b036110b5826108c7565b16845260206110c6818301836114f7565b92506110d58287018483610f4f565b955050929092019150600101611092565b50506110f560208601866114af565b93509150611104818484610d3d565b6040868101358252606090960135602082015290940195945050505050565b6000611130828486610c18565b949350505050565b60008184825b858110156111d257611150828861156f565b803584526020611167818601610d618385016108c7565b604061117582828601610f7d565b60808401359082015261118b60a08401846114af565b6111c16111b66111ac6111a2606087018587610eee565b60c0890135610bbd565b60e0880135610bbd565b610100870135610bbd565b97505050930192505060010161113e565b509095945050505050565b60008184825b858110156111d2576111f58288611585565b6111ff81826114af565b61120a868284610c18565b915050602061121b818401846114af565b611226848284610d3d565b604095909501358552505091820194505091909101906001016111e3565b6000611130828486610eee565b600061125d8284610f7d565b50604001919050565b60006108048284611082565b6001600160a01b03861681526060602082018190526000906112979083018688610def565b82810360408401526112aa818587610bd2565b98975050505050505050565b602080825281810183905260009060408084018583028501820187855b8881101561137c57878303603f190184526112ee828b61156f565b610120813585526113008883016108c7565b61130c89870182610bc5565b5061131b878601888401610f7d565b6080828101359086015260a0611333818401846114af565b83838901526113458489018284610ea5565b60c086810135908a015260e080870135908a01526101009586013595909801949094525050509386019350908501906001016112d3565b509098975050505050505050565b918252602082015260400190565b6000602080835283518082850152825b818110156113c4578581018301518582016040015282016113a8565b818111156113d55783604083870101525b50601f01601f1916929092016040019392505050565b6020808252600c908201526b7375622d6f766572666c6f7760a01b604082015260600190565b600061141d8288610f7d565b60a0604083015261143260a083018688610ea5565b606083019490945250608001529392505050565b60006114528286610f7d565b608060408301526114666080830185610faa565b9050826060830152949350505050565b90815260200190565b600086825260606020830152611297606083018688610def565b9283526020830191909152604082015260600190565b6000808335601e198436030181126114c5578283fd5b830160208101925035905067ffffffffffffffff8111156114e557600080fd5b60208102360383131561092557600080fd5b6000808335601e1984360301811261150d578283fd5b830160208101925035905067ffffffffffffffff81111561152d57600080fd5b80360383131561092557600080fd5b6000823560be19833603018112611551578182fd5b90910192915050565b60008235603e19833603018112611551578182fd5b6000823561011e19833603018112611551578182fd5b60008235605e19833603018112611551578182fd5b60008235607e19833603018112611551578182fdfea2646970667358221220ec2900ea5c007d0cd1ae45d460817c7c5963d323d9378ede5729da1d063eb04264736f6c63430007040033", + "deployedBytecode": "0x60806040526004361061007b5760003560e01c80636cd3d8981161004e5780636cd3d898146100e6578063b348e268146100f9578063eb15f7811461010c578063ff92b1a81461012f5761007b565b8063025264901461008057806306fdde03146100955780632738a788146100c05780633e75a9a8146100d3575b600080fd5b61009361008e366004610a31565b610142565b005b3480156100a157600080fd5b506100aa61021f565b6040516100b79190611398565b60405180910390f35b6100936100ce366004610b08565b6102ad565b6100936100e13660046109f1565b6103b8565b6100936100f436600461095c565b610475565b610093610107366004610a31565b61058e565b34801561011857600080fd5b5061012161065c565b6040516100b792919061138a565b61009361013d366004610a95565b610683565b61014a610758565b6001600160a01b0316630252649086868686866040518663ffffffff1660e01b815260040161017d959493929190611411565b600060405180830381600087803b15801561019757600080fd5b505af11580156101ab573d6000803e3d6000fd5b505050508184846040516101c0929190611244565b6040518091039020866040516101d69190611251565b60405180910390207f6e618ca93d8007a3bb048d87cc0e7bf12bddc6ca3e336c153890bc0b6f66e9f660008060405161021092919061138a565b60405180910390a45050505050565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156102a55780601f1061027a576101008083540402835291602001916102a5565b820191906000526020600020905b81548152906001019060200180831161028857829003601f168201915b505050505081565b60006102b98389610770565b9050476102c4610758565b6001600160a01b031663b300f752838a8a8a8a6040518663ffffffff1660e01b81526004016102f795949392919061147f565b600060405180830381600087803b15801561031157600080fd5b505af1158015610325573d6000803e3d6000fd5b505050506000610335478361080b565b9050610341848261083d565b8686604051610351929190611123565b604051809103902089896040516103699291906111dd565b60405180910390207fc44585ae385fe053d798d56dc20dc0f0beade803098d105d289637d878fa9c7b8388886040516103a493929190611499565b60405180910390a350505050505050505050565b6103c0610758565b6001600160a01b0316633e75a9a883836040518363ffffffff1660e01b81526004016103ed9291906112b6565b600060405180830381600087803b15801561040757600080fd5b505af115801561041b573d6000803e3d6000fd5b50505050818160405161042f929190611138565b60405180910390207fb42519a7cf5f104a27b62b10dc1e67721be4b68791899606dd15e1b017bd963160008060405161046992919061138a565b60405180910390a25050565b60006104818385610770565b905060001981146104925780610494565b475b905061049e610758565b6001600160a01b0316639aad3798828b8b8b8b8b6040518763ffffffff1660e01b81526004016104d2959493929190611272565b6000604051808303818588803b1580156104eb57600080fd5b505af11580156104ff573d6000803e3d6000fd5b505050505061050e828261083d565b858560405161051e929190611123565b604051809103902088886040516105369291906111dd565b60405180910390208a6001600160a01b03167f1e9ff70996f352b5b70751209e03ae367633703bfc74ccc966b87e70ab57136184878760405161057b93929190611499565b60405180910390a4505050505050505050565b610596610758565b6001600160a01b031663b348e26886868686866040518663ffffffff1660e01b81526004016105c9959493929190611411565b600060405180830381600087803b1580156105e357600080fd5b505af11580156105f7573d6000803e3d6000fd5b5050505081848460405161060c929190611244565b6040518091039020866040516106229190611251565b60405180910390207f9e2ce841f586026d01f4cdb7bcd28c46154ba65e6766033fee248e3690c35a0d60008060405161021092919061138a565b6001907f000000000000000000000000000000000000000000000000000000000000000090565b61068b610758565b6001600160a01b031663ff92b1a88484846040518463ffffffff1660e01b81526004016106ba93929190611446565b600060405180830381600087803b1580156106d457600080fd5b505af11580156106e8573d6000803e3d6000fd5b5050505080826040516106fb9190611266565b6040518091039020846040516107119190611251565b60405180910390207f054a2512b2e1ba381f3ca2abbf5515644385116f44cf8d635382f6df3f41055760008060405161074b92919061138a565b60405180910390a4505050565b73025030bdaa159f281cae63873e68313a703725a590565b60008215610802576107806108af565b6001600160a01b031663a9c70eaa846040518263ffffffff1660e01b81526004016107ab9190611476565b602060405180830381600087803b1580156107c557600080fd5b505af11580156107d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fd9190610af0565b610804565b815b9392505050565b808203828111156108375760405162461bcd60e51b815260040161082e906113eb565b60405180910390fd5b92915050565b81156108ab5761084b6108af565b6001600160a01b03166361e3c94483836040518363ffffffff1660e01b815260040161087892919061138a565b600060405180830381600087803b15801561089257600080fd5b505af11580156108a6573d6000803e3d6000fd5b505050505b5050565b738a5419cfc711b2343c17a6abf4b2bafabb06957f90565b80356001600160a01b03811681146108de57600080fd5b919050565b60008083601f8401126108f4578182fd5b50813567ffffffffffffffff81111561090b578182fd5b602083019150836020808302850101111561092557600080fd5b9250929050565b803580151581146108de57600080fd5b8035600481106108de57600080fd5b600060408284031215610802578081fd5b60008060008060008060008060c0898b031215610977578384fd5b610980896108c7565b9750602089013567ffffffffffffffff8082111561099c578586fd5b6109a88c838d016108e3565b909950975060408b01359150808211156109c0578586fd5b506109cd8b828c016108e3565b999c989b5096999698976060880135976080810135975060a0013595509350505050565b60008060208385031215610a03578182fd5b823567ffffffffffffffff811115610a19578283fd5b610a25858286016108e3565b90969095509350505050565b600080600080600060a08688031215610a48578081fd5b610a52878761094b565b9450604086013567ffffffffffffffff811115610a6d578182fd5b610a79888289016108e3565b9699909850959660608101359660809091013595509350505050565b600080600060808486031215610aa9578283fd5b610ab3858561094b565b9250604084013567ffffffffffffffff811115610ace578283fd5b840160808187031215610adf578283fd5b929592945050506060919091013590565b600060208284031215610b01578081fd5b5051919050565b600080600080600080600060a0888a031215610b22578283fd5b87359650602088013567ffffffffffffffff80821115610b40578485fd5b610b4c8b838c016108e3565b909850965060408a0135915080821115610b64578485fd5b50610b718a828b016108e3565b989b979a5095989597966060870135966080013595509350505050565b6001600160a01b0316815260200190565b1515815260200190565b6000610bb58383610f65565b505060200190565b815260200190565b6001600160a01b03169052565b60008284526020808501945082825b85811015610c0d576001600160a01b03610bfa836108c7565b1687529582019590820190600101610be1565b509495945050505050565b600081815b84811015610c4c576001600160a01b03610c36836108c7565b1686526020958601959190910190600101610c1d565b5093949350505050565b818352602080840193600091908185020181018584845b87811015610d30578284038952610c84828861153c565b60c06001600160a01b03610c97836108c7565b168652610ca6878301836114f7565b8289890152610cb88389018284610f25565b9250505060408083013560028110610cce57898afd5b610cda82890182610f73565b50506060610ce981840161093c565b610cf582890182610f65565b50506080828101359087015260a0610d0e81840161092c565b9250610d1c81880184610f1f565b509986019994505090840190600101610c6d565b5091979650505050505050565b600081815b84811015610c4c57610d54828561153c565b610d6687610d61836108c7565b610b8e565b6020610d74818401846114f7565b610d7f848284610f4f565b93505050604083013560028110610d94578687fd5b610d9e8382610f73565b50606083013560048110610db0578687fd5b610ddd610dcc610dc284860184610ba9565b6080870135610bbd565b610dd860a0870161092c565b610b9f565b99505093909301925050600101610d42565b818352602080840193600091908185020181018584845b87811015610d30578284038952610e1d8288611585565b6060808601610e2c83846114af565b92885290829052608087019189905b80821015610e6257610e5084610d61856108c7565b93508983019250600182019150610e3b565b505050610e71878301836114af565b87830389890152610e83838284610c56565b6040948501359890940197909752505098850198935090840190600101610e06565b818352602080840193600091908185020181018584845b87811015610d30578284038952610edc84610ed7848a61159a565b610faa565b98850198935090840190600101610ebc565b600081815b84811015610c4c57610f0e86610f09848761159a565b611082565b955060209190910190600101610ef3565b15159052565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b6000828285378383015250601f01601f19160190565b60048110610f6f57fe5b9052565b60028110610f6f57fe5b6001600160a01b0380610f8f836108c7565b16835280610f9f602084016108c7565b166020840152505050565b600060808301610fba83846114af565b608086529182905260209160a08087019084830288010183865b8481101561103a57898303609f19018452610fef828761155a565b60406001600160a01b03611002836108c7565b168552611011898301836114f7565b9250818a8701526110258287018483610f25565b968a0196955050509187019150600101610fd4565b5050611048858801886114af565b945092508781038589015261105e818585610c56565b94505050505060408301356040850152606083013560608501528091505092915050565b600061108e82836114af565b8482845b838110156110e6576110a4828661155a565b6001600160a01b036110b5826108c7565b16845260206110c6818301836114f7565b92506110d58287018483610f4f565b955050929092019150600101611092565b50506110f560208601866114af565b93509150611104818484610d3d565b6040868101358252606090960135602082015290940195945050505050565b6000611130828486610c18565b949350505050565b60008184825b858110156111d257611150828861156f565b803584526020611167818601610d618385016108c7565b604061117582828601610f7d565b60808401359082015261118b60a08401846114af565b6111c16111b66111ac6111a2606087018587610eee565b60c0890135610bbd565b60e0880135610bbd565b610100870135610bbd565b97505050930192505060010161113e565b509095945050505050565b60008184825b858110156111d2576111f58288611585565b6111ff81826114af565b61120a868284610c18565b915050602061121b818401846114af565b611226848284610d3d565b604095909501358552505091820194505091909101906001016111e3565b6000611130828486610eee565b600061125d8284610f7d565b50604001919050565b60006108048284611082565b6001600160a01b03861681526060602082018190526000906112979083018688610def565b82810360408401526112aa818587610bd2565b98975050505050505050565b602080825281810183905260009060408084018583028501820187855b8881101561137c57878303603f190184526112ee828b61156f565b610120813585526113008883016108c7565b61130c89870182610bc5565b5061131b878601888401610f7d565b6080828101359086015260a0611333818401846114af565b83838901526113458489018284610ea5565b60c086810135908a015260e080870135908a01526101009586013595909801949094525050509386019350908501906001016112d3565b509098975050505050505050565b918252602082015260400190565b6000602080835283518082850152825b818110156113c4578581018301518582016040015282016113a8565b818111156113d55783604083870101525b50601f01601f1916929092016040019392505050565b6020808252600c908201526b7375622d6f766572666c6f7760a01b604082015260600190565b600061141d8288610f7d565b60a0604083015261143260a083018688610ea5565b606083019490945250608001529392505050565b60006114528286610f7d565b608060408301526114666080830185610faa565b9050826060830152949350505050565b90815260200190565b600086825260606020830152611297606083018688610def565b9283526020830191909152604082015260600190565b6000808335601e198436030181126114c5578283fd5b830160208101925035905067ffffffffffffffff8111156114e557600080fd5b60208102360383131561092557600080fd5b6000808335601e1984360301811261150d578283fd5b830160208101925035905067ffffffffffffffff81111561152d57600080fd5b80360383131561092557600080fd5b6000823560be19833603018112611551578182fd5b90910192915050565b60008235603e19833603018112611551578182fd5b6000823561011e19833603018112611551578182fd5b60008235605e19833603018112611551578182fd5b60008235607e19833603018112611551578182fdfea2646970667358221220ec2900ea5c007d0cd1ae45d460817c7c5963d323d9378ede5729da1d063eb04264736f6c63430007040033", + "devdoc": { + "kind": "dev", + "methods": { + "connectorID()": { + "details": "Connector Details" + }, + "multiCancelTasks((uint256,address,(address,address),uint256,((address,bytes)[],(address,bytes,uint8,uint8,uint256,bool)[],uint256,uint256)[],uint256,uint256,uint256)[])": { + "details": "Cancels outstanding Tasks", + "params": { + "_taskReceipts": "List of Task Receipts to cancel" + } + }, + "multiProvide(address,(address[],(address,bytes,uint8,uint8,uint256,bool)[],uint256)[],address[],uint256,uint256,uint256)": { + "details": "Enables first time users to pre-fund eth, whitelist an executor & register the ProviderModuleDSA.sol to be able to use Gelato", + "params": { + "_ethToDeposit": "amount of eth to deposit on Gelato, only for self-providers", + "_executor": "address of single execot node or gelato'S decentralized execution market", + "_modules": "address of ProviderModuleDSA", + "_taskSpecs": "enables external providers to whitelist TaskSpecs on gelato" + } + }, + "multiUnprovide(uint256,(address[],(address,bytes,uint8,uint8,uint256,bool)[],uint256)[],address[],uint256,uint256)": { + "details": "Withdraws funds from Gelato, de-whitelists TaskSpecs and Provider Modules in one tx", + "params": { + "_modules": "List of Provider Modules to de-whitelist, default empty []", + "_taskSpecs": "List of Task Specs to de-whitelist, default empty []", + "_withdrawAmount": "Amount of ETH to withdraw from Gelato" + } + }, + "submitTask((address,address),((address,bytes)[],(address,bytes,uint8,uint8,uint256,bool)[],uint256,uint256),uint256)": { + "details": "Submits a single, one-time task to Gelato", + "params": { + "_expiryDate": "Default 0, othweise timestamp after which the task expires", + "_provider": "Consists of proxy module address (DSA) and provider address () who will pay for the transaction execution", + "_task": "Task specifying the condition and the action connectors" + } + }, + "submitTaskChain((address,address),((address,bytes)[],(address,bytes,uint8,uint8,uint256,bool)[],uint256,uint256)[],uint256,uint256)": { + "details": "Submits single or mulitple Task Chains to Gelato", + "params": { + "_expiryDate": "Default 0, othweise timestamp after which the task expires", + "_provider": "Consists of proxy module address (DSA) and provider address () who will pay for the transaction execution", + "_sumOfRequestedTaskSubmits": "The TOTAL number of Task auto-submits that should have occured once the cycle is complete", + "_tasks": "A sequence of Tasks, can be a single or multiples" + } + }, + "submitTaskCycle((address,address),((address,bytes)[],(address,bytes,uint8,uint8,uint256,bool)[],uint256,uint256)[],uint256,uint256)": { + "details": "Submits single or mulitple Task Sequences to Gelato", + "params": { + "_cycles": "How often the Task List should be executed, e.g. 5 times", + "_expiryDate": "Default 0, othweise timestamp after which the task expires", + "_provider": "Consists of proxy module address (DSA) and provider address () who will pay for the transaction execution", + "_tasks": "A sequence of Tasks, can be a single or multiples" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 646, + "contract": "contracts/contracts/connectors/ConnectGelato.sol:ConnectGelato", + "label": "name", + "offset": 0, + "slot": "0", + "type": "t_string_storage" + } + ], + "types": { + "t_string_storage": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + } + } + } +} diff --git a/deployments/mainnet/ProviderModuleDSA.json b/deployments/mainnet/ProviderModuleDSA.json new file mode 100644 index 0000000..3c48243 --- /dev/null +++ b/deployments/mainnet/ProviderModuleDSA.json @@ -0,0 +1,310 @@ +{ + "address": "0x732d0856dfD0D7c7F4b517Ac25Fe30A7A8b1956A", + "abi": [ + { + "inputs": [ + { + "internalType": "contract IndexInterface", + "name": "_index", + "type": "address" + }, + { + "internalType": "address", + "name": "_gelatoCore", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "contract IGelatoCondition", + "name": "inst", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct Condition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "enum Operation", + "name": "operation", + "type": "uint8" + }, + { + "internalType": "enum DataFlow", + "name": "dataFlow", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "termsOkCheck", + "type": "bool" + } + ], + "internalType": "struct Action[]", + "name": "actions", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "selfProviderGasLimit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "selfProviderGasPriceCeil", + "type": "uint256" + } + ], + "internalType": "struct Task", + "name": "_task", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "execPayload", + "outputs": [ + { + "internalType": "bytes", + "name": "payload", + "type": "bytes" + }, + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "execRevertCheck", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "gelatoCore", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "index", + "outputs": [ + { + "internalType": "contract IndexInterface", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_userProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "contract IGelatoCondition", + "name": "inst", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct Condition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "enum Operation", + "name": "operation", + "type": "uint8" + }, + { + "internalType": "enum DataFlow", + "name": "dataFlow", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "termsOkCheck", + "type": "bool" + } + ], + "internalType": "struct Action[]", + "name": "actions", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "selfProviderGasLimit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "selfProviderGasPriceCeil", + "type": "uint256" + } + ], + "internalType": "struct Task", + "name": "", + "type": "tuple" + } + ], + "name": "isProvided", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0xb7dcd3ec3fec8b967895c43a4592114ecc5c6c97f7fb948d2331110b8abba153", + "receipt": { + "to": null, + "from": "0x5B753BF02a42bC73B5846dfd16a8F2e082b99a6a", + "contractAddress": "0x732d0856dfD0D7c7F4b517Ac25Fe30A7A8b1956A", + "transactionIndex": 197, + "gasUsed": "614091", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x5160ba3207de95162c6af32fa726ae4aad945538d660b659cbe5f49f834f53da", + "transactionHash": "0xb7dcd3ec3fec8b967895c43a4592114ecc5c6c97f7fb948d2331110b8abba153", + "logs": [], + "blockNumber": 11366767, + "cumulativeGasUsed": "12092718", + "status": 1, + "byzantium": true + }, + "args": [ + "0x2971AdFa57b20E5a416aE5a708A8655A9c74f723", + "0x025030BdAa159f281cAe63873E68313a703725A5" + ], + "solcInputHash": "07a68d6422a92bd1de0d4e1d5ebbd24f", + "metadata": "{\"compiler\":{\"version\":\"0.7.4+commit.3f05b770\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IndexInterface\",\"name\":\"_index\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_gelatoCore\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"contract IGelatoCondition\",\"name\":\"inst\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Condition[]\",\"name\":\"conditions\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enum Operation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"enum DataFlow\",\"name\":\"dataFlow\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"termsOkCheck\",\"type\":\"bool\"}],\"internalType\":\"struct Action[]\",\"name\":\"actions\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"selfProviderGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfProviderGasPriceCeil\",\"type\":\"uint256\"}],\"internalType\":\"struct Task\",\"name\":\"_task\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"execPayload\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"execRevertCheck\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gelatoCore\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"index\",\"outputs\":[{\"internalType\":\"contract IndexInterface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"contract IGelatoCondition\",\"name\":\"inst\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Condition[]\",\"name\":\"conditions\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"enum Operation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"enum DataFlow\",\"name\":\"dataFlow\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"termsOkCheck\",\"type\":\"bool\"}],\"internalType\":\"struct Action[]\",\"name\":\"actions\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"selfProviderGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"selfProviderGasPriceCeil\",\"type\":\"uint256\"}],\"internalType\":\"struct Task\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"isProvided\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"execPayload(uint256,address,address,((address,bytes)[],(address,bytes,uint8,uint8,uint256,bool)[],uint256,uint256),uint256)\":{\"details\":\"DS PROXY ONLY ALLOWS DELEGATE CALL for single actions, that's why we also use multisend\"},\"execRevertCheck(bytes)\":{\"details\":\"Overriding fns should revert with the revertMsg they detected on the userProxy\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/contracts/gelato/ProviderModuleDSA.sol\":\"ProviderModuleDSA\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/contracts/gelato/ProviderModuleDSA.sol\":{\"content\":\"// \\\"SPDX-License-Identifier: UNLICENSED\\\"\\npragma solidity 0.7.4;\\npragma experimental ABIEncoderV2;\\n\\n// solhint-disable\\n\\nenum Operation {Call, Delegatecall}\\n\\nenum DataFlow {None, In, Out, InAndOut}\\n\\ninterface IGelatoCondition {\\n /// @notice GelatoCore calls this to verify securely the specified Condition securely\\n /// @dev Be careful only to encode a Task's condition.data as is and not with the\\n /// \\\"ok\\\" selector or _taskReceiptId, since those two things are handled by GelatoCore.\\n /// @param _taskReceiptId This is passed by GelatoCore so we can rely on it as a secure\\n /// source of Task identification.\\n /// @param _conditionData This is the Condition.data field developers must encode their\\n /// Condition's specific parameters in.\\n /// @param _cycleId For Tasks that are executed as part of a cycle.\\n function ok(\\n uint256 _taskReceiptId,\\n bytes calldata _conditionData,\\n uint256 _cycleId\\n ) external view returns (string memory);\\n}\\n\\nstruct Condition {\\n IGelatoCondition inst; // can be AddressZero for self-conditional Actions\\n bytes data; // can be bytes32(0) for self-conditional Actions\\n}\\n\\nstruct Action {\\n address addr;\\n bytes data;\\n Operation operation;\\n DataFlow dataFlow;\\n uint256 value;\\n bool termsOkCheck;\\n}\\n\\nstruct Task {\\n Condition[] conditions; // optional\\n Action[] actions;\\n uint256 selfProviderGasLimit; // optional: 0 defaults to gelatoMaxGas\\n uint256 selfProviderGasPriceCeil; // optional: 0 defaults to NO_CEIL\\n}\\n\\ninterface IGelatoProviderModule {\\n /// @notice Check if provider agrees to pay for inputted task receipt\\n /// @dev Enables arbitrary checks by provider\\n /// @param _userProxy The smart contract account of the user who submitted the Task.\\n /// @param _provider The account of the Provider who uses the ProviderModule.\\n /// @param _task Gelato Task to be executed.\\n /// @return \\\"OK\\\" if provider agrees\\n function isProvided(\\n address _userProxy,\\n address _provider,\\n Task calldata _task\\n ) external view returns (string memory);\\n\\n /// @notice Convert action specific payload into proxy specific payload\\n /// @dev Encoded multiple actions into a multisend\\n /// @param _taskReceiptId Unique ID of Gelato Task to be executed.\\n /// @param _userProxy The smart contract account of the user who submitted the Task.\\n /// @param _provider The account of the Provider who uses the ProviderModule.\\n /// @param _task Gelato Task to be executed.\\n /// @param _cycleId For Tasks that form part of a cycle/chain.\\n /// @return Encoded payload that will be used for low-level .call on user proxy\\n /// @return checkReturndata if true, fwd returndata from userProxy.call to ProviderModule\\n function execPayload(\\n uint256 _taskReceiptId,\\n address _userProxy,\\n address _provider,\\n Task calldata _task,\\n uint256 _cycleId\\n ) external view returns (bytes memory, bool checkReturndata);\\n\\n /// @notice Called by GelatoCore.exec to verifiy that no revert happend on userProxy\\n /// @dev If a caught revert is detected, this fn should revert with the detected error\\n /// @param _proxyReturndata Data from GelatoCore._exec.userProxy.call(execPayload)\\n function execRevertCheck(bytes calldata _proxyReturndata) external pure;\\n}\\n\\nabstract contract GelatoProviderModuleStandard is IGelatoProviderModule {\\n string internal constant OK = \\\"OK\\\";\\n\\n function isProvided(\\n address,\\n address,\\n Task calldata\\n ) external view virtual override returns (string memory) {\\n return OK;\\n }\\n\\n /// @dev Overriding fns should revert with the revertMsg they detected on the userProxy\\n function execRevertCheck(bytes calldata) external pure virtual override {\\n // By default no reverts detected => do nothing\\n }\\n}\\n\\n/// @dev InstaDapp Index\\ninterface IndexInterface {\\n function connectors(uint256 version) external view returns (address);\\n\\n function list() external view returns (address);\\n}\\n\\n/// @dev InstaDapp List\\ninterface ListInterface {\\n function accountID(address _account) external view returns (uint64);\\n}\\n\\n/// @dev InstaDapp Connectors\\ninterface ConnectorsInterface {\\n function isConnector(address[] calldata logicAddr)\\n external\\n view\\n returns (bool);\\n\\n function isStaticConnector(address[] calldata logicAddr)\\n external\\n view\\n returns (bool);\\n}\\n\\n/// @dev InstaDapp Defi Smart Account wallet\\ninterface AccountInterface {\\n function version() external view returns (uint256);\\n\\n function isAuth(address user) external view returns (bool);\\n\\n function shield() external view returns (bool);\\n\\n function cast(\\n address[] calldata _targets,\\n bytes[] calldata _datas,\\n address _origin\\n ) external payable returns (bytes32[] memory responses);\\n}\\n\\ncontract ProviderModuleDSA is GelatoProviderModuleStandard {\\n IndexInterface public immutable index;\\n address public immutable gelatoCore;\\n\\n constructor(IndexInterface _index, address _gelatoCore) {\\n index = _index;\\n gelatoCore = _gelatoCore;\\n }\\n\\n // ================= GELATO PROVIDER MODULE STANDARD ================\\n function isProvided(\\n address _userProxy,\\n address,\\n Task calldata\\n ) external view override returns (string memory) {\\n // Verify InstaDapp account identity\\n if (ListInterface(index.list()).accountID(_userProxy) == 0)\\n return \\\"ProviderModuleDSA.isProvided:InvalidUserProxy\\\";\\n\\n // Is GelatoCore authorized\\n if (!AccountInterface(_userProxy).isAuth(gelatoCore))\\n return \\\"ProviderModuleDSA.isProvided:GelatoCoreNotAuth\\\";\\n\\n // @dev commented out for gas savings\\n\\n // // Is connector valid\\n // ConnectorsInterface connectors = ConnectorsInterface(index.connectors(\\n // AccountInterface(_userProxy).version()\\n // ));\\n\\n // address[] memory targets = new address[](_task.actions.length);\\n // for (uint i = 0; i < _task.actions.length; i++)\\n // targets[i] = _task.actions[i].addr;\\n\\n // bool isShield = AccountInterface(_userProxy).shield();\\n // if (isShield)\\n // if (!connectors.isStaticConnector(targets))\\n // return \\\"ProviderModuleDSA.isProvided:not-static-connector\\\";\\n // else\\n // if (!connectors.isConnector(targets))\\n // return \\\"ProviderModuleDSA.isProvided:not-connector\\\";\\n\\n return OK;\\n }\\n\\n /// @dev DS PROXY ONLY ALLOWS DELEGATE CALL for single actions, that's why we also use multisend\\n function execPayload(\\n uint256,\\n address,\\n address,\\n Task calldata _task,\\n uint256\\n ) external view override returns (bytes memory payload, bool) {\\n address[] memory targets = new address[](_task.actions.length);\\n for (uint256 i = 0; i < _task.actions.length; i++)\\n targets[i] = _task.actions[i].addr;\\n\\n bytes[] memory datas = new bytes[](_task.actions.length);\\n for (uint256 i = 0; i < _task.actions.length; i++)\\n datas[i] = _task.actions[i].data;\\n\\n payload = abi.encodeWithSelector(\\n AccountInterface.cast.selector,\\n targets,\\n datas,\\n gelatoCore\\n );\\n }\\n}\\n\",\"keccak256\":\"0xa2f4f67b54043c8176b165fbbc70ec5c23f057e6149639f97247392fc477c9a0\",\"license\":\"UNLICENSED\"}},\"version\":1}", + "bytecode": "0x60c060405234801561001057600080fd5b50604051610af1380380610af183398101604081905261002f9161004d565b6001600160601b0319606092831b8116608052911b1660a05261009e565b6000806040838503121561005f578182fd5b825161006a81610086565b602084015190925061007b81610086565b809150509250929050565b6001600160a01b038116811461009b57600080fd5b50565b60805160601c60a05160601c610a1b6100d6600039806102c652806104b75280610577525080610331528061035b5250610a1b6000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806306fca7281461005c5780632986c0e5146100865780633e88ecf41461009b5780633f17c3df146100b0578063fe861b99146100d0575b600080fd5b61006f61006a3660046106d5565b6100d8565b60405161007d929190610889565b60405180910390f35b61008e61032f565b60405161007d91906107c7565b6100ae6100a9366004610668565b610353565b005b6100c36100be3660046105e8565b610357565b60405161007d91906108ad565b61008e610575565b60606000816100ea60208601866108c0565b905067ffffffffffffffff8111801561010257600080fd5b5060405190808252806020026020018201604052801561012c578160200160208202803683370190505b50905060005b61013f60208701876108c0565b90508110156101ab5761015560208701876108c0565b8281811061015f57fe5b90506020028101906101719190610953565b61017f9060208101906105b0565b82828151811061018b57fe5b6001600160a01b0390921660209283029190910190910152600101610132565b5060606101bb60208701876108c0565b905067ffffffffffffffff811180156101d357600080fd5b5060405190808252806020026020018201604052801561020757816020015b60608152602001906001900390816101f25790505b50905060005b61021a60208801886108c0565b90508110156102af5761023060208801886108c0565b8281811061023a57fe5b905060200281019061024c9190610953565b61025a90602081019061090e565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250508451859250849150811061029c57fe5b602090810291909101015260010161020d565b5060405163e0e90acf60e01b906102ee90849084907f0000000000000000000000000000000000000000000000000000000000000000906024016107db565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915299929850919650505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5050565b60607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630f560cd76040518163ffffffff1660e01b815260040160206040518083038186803b1580156103b257600080fd5b505afa1580156103c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ea91906105cc565b6001600160a01b0316636cfaf5e9856040518263ffffffff1660e01b815260040161041591906107c7565b60206040518083038186803b15801561042d57600080fd5b505afa158015610441573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104659190610747565b67ffffffffffffffff16610493576040518060600160405280602d815260200161098b602d9139905061056e565b604051632520e7ff60e01b81526001600160a01b03851690632520e7ff906104df907f0000000000000000000000000000000000000000000000000000000000000000906004016107c7565b60206040518083038186803b1580156104f757600080fd5b505afa15801561050b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052f9190610648565b610553576040518060600160405280602e81526020016109b8602e9139905061056e565b506040805180820190915260028152614f4b60f01b60208201525b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000608082840312156105aa578081fd5b50919050565b6000602082840312156105c1578081fd5b813561056e81610972565b6000602082840312156105dd578081fd5b815161056e81610972565b6000806000606084860312156105fc578182fd5b833561060781610972565b9250602084013561061781610972565b9150604084013567ffffffffffffffff811115610632578182fd5b61063e86828701610599565b9150509250925092565b600060208284031215610659578081fd5b8151801515811461056e578182fd5b6000806020838503121561067a578182fd5b823567ffffffffffffffff80821115610691578384fd5b818501915085601f8301126106a4578384fd5b8135818111156106b2578485fd5b8660208285010111156106c3578485fd5b60209290920196919550909350505050565b600080600080600060a086880312156106ec578081fd5b8535945060208601356106fe81610972565b9350604086013561070e81610972565b9250606086013567ffffffffffffffff811115610729578182fd5b61073588828901610599565b95989497509295608001359392505050565b600060208284031215610758578081fd5b815167ffffffffffffffff8116811461056e578182fd5b6001600160a01b03169052565b60008151808452815b818110156107a157602081850181015186830182015201610785565b818111156107b25782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b606080825284519082018190526000906020906080840190828801845b8281101561081d5781516001600160a01b0316845292840192908401906001016107f8565b5050508381038285015285518082528282019080840283018401888501865b8381101561086a57601f1986840301855261085883835161077c565b9487019492509086019060010161083c565b50508095505050505050610881604083018461076f565b949350505050565b60006040825261089c604083018561077c565b905082151560208301529392505050565b60006020825261056e602083018461077c565b6000808335601e198436030181126108d6578283fd5b83018035915067ffffffffffffffff8211156108f0578283fd5b602090810192508102360382131561090757600080fd5b9250929050565b6000808335601e19843603018112610924578283fd5b83018035915067ffffffffffffffff82111561093e578283fd5b60200191503681900382131561090757600080fd5b6000823560be19833603018112610968578182fd5b9190910192915050565b6001600160a01b038116811461098757600080fd5b5056fe50726f76696465724d6f64756c654453412e697350726f76696465643a496e76616c69645573657250726f787950726f76696465724d6f64756c654453412e697350726f76696465643a47656c61746f436f72654e6f7441757468a2646970667358221220ed9a8b8a7ffbdbb237dae76250e331414da309e991251ad3862fdb0b0b40ce7164736f6c63430007040033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100575760003560e01c806306fca7281461005c5780632986c0e5146100865780633e88ecf41461009b5780633f17c3df146100b0578063fe861b99146100d0575b600080fd5b61006f61006a3660046106d5565b6100d8565b60405161007d929190610889565b60405180910390f35b61008e61032f565b60405161007d91906107c7565b6100ae6100a9366004610668565b610353565b005b6100c36100be3660046105e8565b610357565b60405161007d91906108ad565b61008e610575565b60606000816100ea60208601866108c0565b905067ffffffffffffffff8111801561010257600080fd5b5060405190808252806020026020018201604052801561012c578160200160208202803683370190505b50905060005b61013f60208701876108c0565b90508110156101ab5761015560208701876108c0565b8281811061015f57fe5b90506020028101906101719190610953565b61017f9060208101906105b0565b82828151811061018b57fe5b6001600160a01b0390921660209283029190910190910152600101610132565b5060606101bb60208701876108c0565b905067ffffffffffffffff811180156101d357600080fd5b5060405190808252806020026020018201604052801561020757816020015b60608152602001906001900390816101f25790505b50905060005b61021a60208801886108c0565b90508110156102af5761023060208801886108c0565b8281811061023a57fe5b905060200281019061024c9190610953565b61025a90602081019061090e565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250508451859250849150811061029c57fe5b602090810291909101015260010161020d565b5060405163e0e90acf60e01b906102ee90849084907f0000000000000000000000000000000000000000000000000000000000000000906024016107db565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915299929850919650505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5050565b60607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630f560cd76040518163ffffffff1660e01b815260040160206040518083038186803b1580156103b257600080fd5b505afa1580156103c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ea91906105cc565b6001600160a01b0316636cfaf5e9856040518263ffffffff1660e01b815260040161041591906107c7565b60206040518083038186803b15801561042d57600080fd5b505afa158015610441573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104659190610747565b67ffffffffffffffff16610493576040518060600160405280602d815260200161098b602d9139905061056e565b604051632520e7ff60e01b81526001600160a01b03851690632520e7ff906104df907f0000000000000000000000000000000000000000000000000000000000000000906004016107c7565b60206040518083038186803b1580156104f757600080fd5b505afa15801561050b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052f9190610648565b610553576040518060600160405280602e81526020016109b8602e9139905061056e565b506040805180820190915260028152614f4b60f01b60208201525b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000608082840312156105aa578081fd5b50919050565b6000602082840312156105c1578081fd5b813561056e81610972565b6000602082840312156105dd578081fd5b815161056e81610972565b6000806000606084860312156105fc578182fd5b833561060781610972565b9250602084013561061781610972565b9150604084013567ffffffffffffffff811115610632578182fd5b61063e86828701610599565b9150509250925092565b600060208284031215610659578081fd5b8151801515811461056e578182fd5b6000806020838503121561067a578182fd5b823567ffffffffffffffff80821115610691578384fd5b818501915085601f8301126106a4578384fd5b8135818111156106b2578485fd5b8660208285010111156106c3578485fd5b60209290920196919550909350505050565b600080600080600060a086880312156106ec578081fd5b8535945060208601356106fe81610972565b9350604086013561070e81610972565b9250606086013567ffffffffffffffff811115610729578182fd5b61073588828901610599565b95989497509295608001359392505050565b600060208284031215610758578081fd5b815167ffffffffffffffff8116811461056e578182fd5b6001600160a01b03169052565b60008151808452815b818110156107a157602081850181015186830182015201610785565b818111156107b25782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b606080825284519082018190526000906020906080840190828801845b8281101561081d5781516001600160a01b0316845292840192908401906001016107f8565b5050508381038285015285518082528282019080840283018401888501865b8381101561086a57601f1986840301855261085883835161077c565b9487019492509086019060010161083c565b50508095505050505050610881604083018461076f565b949350505050565b60006040825261089c604083018561077c565b905082151560208301529392505050565b60006020825261056e602083018461077c565b6000808335601e198436030181126108d6578283fd5b83018035915067ffffffffffffffff8211156108f0578283fd5b602090810192508102360382131561090757600080fd5b9250929050565b6000808335601e19843603018112610924578283fd5b83018035915067ffffffffffffffff82111561093e578283fd5b60200191503681900382131561090757600080fd5b6000823560be19833603018112610968578182fd5b9190910192915050565b6001600160a01b038116811461098757600080fd5b5056fe50726f76696465724d6f64756c654453412e697350726f76696465643a496e76616c69645573657250726f787950726f76696465724d6f64756c654453412e697350726f76696465643a47656c61746f436f72654e6f7441757468a2646970667358221220ed9a8b8a7ffbdbb237dae76250e331414da309e991251ad3862fdb0b0b40ce7164736f6c63430007040033", + "devdoc": { + "kind": "dev", + "methods": { + "execPayload(uint256,address,address,((address,bytes)[],(address,bytes,uint8,uint8,uint256,bool)[],uint256,uint256),uint256)": { + "details": "DS PROXY ONLY ALLOWS DELEGATE CALL for single actions, that's why we also use multisend" + }, + "execRevertCheck(bytes)": { + "details": "Overriding fns should revert with the revertMsg they detected on the userProxy" + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} diff --git a/deployments/mainnet/solcInputs/07a68d6422a92bd1de0d4e1d5ebbd24f.json b/deployments/mainnet/solcInputs/07a68d6422a92bd1de0d4e1d5ebbd24f.json new file mode 100644 index 0000000..ed7b0b2 --- /dev/null +++ b/deployments/mainnet/solcInputs/07a68d6422a92bd1de0d4e1d5ebbd24f.json @@ -0,0 +1,33 @@ +{ + "language": "Solidity", + "sources": { + "contracts/contracts/gelato/ProviderModuleDSA.sol": { + "content": "// \"SPDX-License-Identifier: UNLICENSED\"\npragma solidity 0.7.4;\npragma experimental ABIEncoderV2;\n\n// solhint-disable\n\nenum Operation {Call, Delegatecall}\n\nenum DataFlow {None, In, Out, InAndOut}\n\ninterface IGelatoCondition {\n /// @notice GelatoCore calls this to verify securely the specified Condition securely\n /// @dev Be careful only to encode a Task's condition.data as is and not with the\n /// \"ok\" selector or _taskReceiptId, since those two things are handled by GelatoCore.\n /// @param _taskReceiptId This is passed by GelatoCore so we can rely on it as a secure\n /// source of Task identification.\n /// @param _conditionData This is the Condition.data field developers must encode their\n /// Condition's specific parameters in.\n /// @param _cycleId For Tasks that are executed as part of a cycle.\n function ok(\n uint256 _taskReceiptId,\n bytes calldata _conditionData,\n uint256 _cycleId\n ) external view returns (string memory);\n}\n\nstruct Condition {\n IGelatoCondition inst; // can be AddressZero for self-conditional Actions\n bytes data; // can be bytes32(0) for self-conditional Actions\n}\n\nstruct Action {\n address addr;\n bytes data;\n Operation operation;\n DataFlow dataFlow;\n uint256 value;\n bool termsOkCheck;\n}\n\nstruct Task {\n Condition[] conditions; // optional\n Action[] actions;\n uint256 selfProviderGasLimit; // optional: 0 defaults to gelatoMaxGas\n uint256 selfProviderGasPriceCeil; // optional: 0 defaults to NO_CEIL\n}\n\ninterface IGelatoProviderModule {\n /// @notice Check if provider agrees to pay for inputted task receipt\n /// @dev Enables arbitrary checks by provider\n /// @param _userProxy The smart contract account of the user who submitted the Task.\n /// @param _provider The account of the Provider who uses the ProviderModule.\n /// @param _task Gelato Task to be executed.\n /// @return \"OK\" if provider agrees\n function isProvided(\n address _userProxy,\n address _provider,\n Task calldata _task\n ) external view returns (string memory);\n\n /// @notice Convert action specific payload into proxy specific payload\n /// @dev Encoded multiple actions into a multisend\n /// @param _taskReceiptId Unique ID of Gelato Task to be executed.\n /// @param _userProxy The smart contract account of the user who submitted the Task.\n /// @param _provider The account of the Provider who uses the ProviderModule.\n /// @param _task Gelato Task to be executed.\n /// @param _cycleId For Tasks that form part of a cycle/chain.\n /// @return Encoded payload that will be used for low-level .call on user proxy\n /// @return checkReturndata if true, fwd returndata from userProxy.call to ProviderModule\n function execPayload(\n uint256 _taskReceiptId,\n address _userProxy,\n address _provider,\n Task calldata _task,\n uint256 _cycleId\n ) external view returns (bytes memory, bool checkReturndata);\n\n /// @notice Called by GelatoCore.exec to verifiy that no revert happend on userProxy\n /// @dev If a caught revert is detected, this fn should revert with the detected error\n /// @param _proxyReturndata Data from GelatoCore._exec.userProxy.call(execPayload)\n function execRevertCheck(bytes calldata _proxyReturndata) external pure;\n}\n\nabstract contract GelatoProviderModuleStandard is IGelatoProviderModule {\n string internal constant OK = \"OK\";\n\n function isProvided(\n address,\n address,\n Task calldata\n ) external view virtual override returns (string memory) {\n return OK;\n }\n\n /// @dev Overriding fns should revert with the revertMsg they detected on the userProxy\n function execRevertCheck(bytes calldata) external pure virtual override {\n // By default no reverts detected => do nothing\n }\n}\n\n/// @dev InstaDapp Index\ninterface IndexInterface {\n function connectors(uint256 version) external view returns (address);\n\n function list() external view returns (address);\n}\n\n/// @dev InstaDapp List\ninterface ListInterface {\n function accountID(address _account) external view returns (uint64);\n}\n\n/// @dev InstaDapp Connectors\ninterface ConnectorsInterface {\n function isConnector(address[] calldata logicAddr)\n external\n view\n returns (bool);\n\n function isStaticConnector(address[] calldata logicAddr)\n external\n view\n returns (bool);\n}\n\n/// @dev InstaDapp Defi Smart Account wallet\ninterface AccountInterface {\n function version() external view returns (uint256);\n\n function isAuth(address user) external view returns (bool);\n\n function shield() external view returns (bool);\n\n function cast(\n address[] calldata _targets,\n bytes[] calldata _datas,\n address _origin\n ) external payable returns (bytes32[] memory responses);\n}\n\ncontract ProviderModuleDSA is GelatoProviderModuleStandard {\n IndexInterface public immutable index;\n address public immutable gelatoCore;\n\n constructor(IndexInterface _index, address _gelatoCore) {\n index = _index;\n gelatoCore = _gelatoCore;\n }\n\n // ================= GELATO PROVIDER MODULE STANDARD ================\n function isProvided(\n address _userProxy,\n address,\n Task calldata\n ) external view override returns (string memory) {\n // Verify InstaDapp account identity\n if (ListInterface(index.list()).accountID(_userProxy) == 0)\n return \"ProviderModuleDSA.isProvided:InvalidUserProxy\";\n\n // Is GelatoCore authorized\n if (!AccountInterface(_userProxy).isAuth(gelatoCore))\n return \"ProviderModuleDSA.isProvided:GelatoCoreNotAuth\";\n\n // @dev commented out for gas savings\n\n // // Is connector valid\n // ConnectorsInterface connectors = ConnectorsInterface(index.connectors(\n // AccountInterface(_userProxy).version()\n // ));\n\n // address[] memory targets = new address[](_task.actions.length);\n // for (uint i = 0; i < _task.actions.length; i++)\n // targets[i] = _task.actions[i].addr;\n\n // bool isShield = AccountInterface(_userProxy).shield();\n // if (isShield)\n // if (!connectors.isStaticConnector(targets))\n // return \"ProviderModuleDSA.isProvided:not-static-connector\";\n // else\n // if (!connectors.isConnector(targets))\n // return \"ProviderModuleDSA.isProvided:not-connector\";\n\n return OK;\n }\n\n /// @dev DS PROXY ONLY ALLOWS DELEGATE CALL for single actions, that's why we also use multisend\n function execPayload(\n uint256,\n address,\n address,\n Task calldata _task,\n uint256\n ) external view override returns (bytes memory payload, bool) {\n address[] memory targets = new address[](_task.actions.length);\n for (uint256 i = 0; i < _task.actions.length; i++)\n targets[i] = _task.actions[i].addr;\n\n bytes[] memory datas = new bytes[](_task.actions.length);\n for (uint256 i = 0; i < _task.actions.length; i++)\n datas[i] = _task.actions[i].data;\n\n payload = abi.encodeWithSelector(\n AccountInterface.cast.selector,\n targets,\n datas,\n gelatoCore\n );\n }\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": ["ast"] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} diff --git a/deployments/mainnet/solcInputs/32abadde127e3c5f4f727f0b5ec233f4.json b/deployments/mainnet/solcInputs/32abadde127e3c5f4f727f0b5ec233f4.json new file mode 100644 index 0000000..2b82856 --- /dev/null +++ b/deployments/mainnet/solcInputs/32abadde127e3c5f4f727f0b5ec233f4.json @@ -0,0 +1,33 @@ +{ + "language": "Solidity", + "sources": { + "contracts/contracts/connectors/ConnectGelato.sol": { + "content": "// SPDX-License-Identifier: UNLICENSED\n\npragma solidity 0.7.4;\npragma experimental ABIEncoderV2;\n\n// solhint-disable\n\n// Gelato Data Types\nstruct Provider {\n address addr; // if msg.sender == provider => self-Provider\n address module; // e.g. DSA Provider Module\n}\n\nstruct Condition {\n address inst; // can be AddressZero for self-conditional Actions\n bytes data; // can be bytes32(0) for self-conditional Actions\n}\n\nenum Operation {Call, Delegatecall}\n\nenum DataFlow {None, In, Out, InAndOut}\n\nstruct Action {\n address addr;\n bytes data;\n Operation operation;\n DataFlow dataFlow;\n uint256 value;\n bool termsOkCheck;\n}\n\nstruct Task {\n Condition[] conditions; // optional\n Action[] actions;\n uint256 selfProviderGasLimit; // optional: 0 defaults to gelatoMaxGas\n uint256 selfProviderGasPriceCeil; // optional: 0 defaults to NO_CEIL\n}\n\nstruct TaskReceipt {\n uint256 id;\n address userProxy;\n Provider provider;\n uint256 index;\n Task[] tasks;\n uint256 expiryDate;\n uint256 cycleId; // auto-filled by GelatoCore. 0 for non-cyclic/chained tasks\n uint256 submissionsLeft;\n}\n\nstruct TaskSpec {\n address[] conditions; // Address: optional AddressZero for self-conditional actions\n Action[] actions;\n uint256 gasPriceCeil;\n}\n\n// Gelato Interface\ninterface IGelatoInterface {\n /**\n * @dev API to submit a single Task.\n */\n function submitTask(\n Provider calldata _provider,\n Task calldata _task,\n uint256 _expiryDate\n ) external;\n\n /**\n * @dev A Gelato Task Cycle consists of 1 or more Tasks that automatically submit\n * the next one, after they have been executed, where the total number of tasks can\n * be only be an even number\n */\n function submitTaskCycle(\n Provider calldata _provider,\n Task[] calldata _tasks,\n uint256 _expiryDate,\n uint256 _cycles\n ) external;\n\n /**\n * @dev A Gelato Task Chain consists of 1 or more Tasks that automatically submit\n * the next one, after they have been executed, where the total number of tasks can\n * be an odd number\n */\n function submitTaskChain(\n Provider calldata _provider,\n Task[] calldata _tasks,\n uint256 _expiryDate,\n uint256 _sumOfRequestedTaskSubmits\n ) external;\n\n /**\n * @dev Cancel multiple tasks at once\n */\n function multiCancelTasks(TaskReceipt[] calldata _taskReceipts) external;\n\n /**\n * @dev Whitelist new executor, TaskSpec(s) and Module(s) in one tx\n */\n function multiProvide(\n address _executor,\n TaskSpec[] calldata _taskSpecs,\n address[] calldata _modules\n ) external payable;\n\n /**\n * @dev De-Whitelist TaskSpec(s), Module(s) and withdraw funds from gelato in one tx\n */\n function multiUnprovide(\n uint256 _withdrawAmount,\n TaskSpec[] calldata _taskSpecs,\n address[] calldata _modules\n ) external;\n}\n\ninterface MemoryInterface {\n function setUint(uint256 _id, uint256 _val) external;\n\n function getUint(uint256 _id) external returns (uint256);\n}\n\nabstract contract Helpers {\n uint256 internal immutable _id;\n\n constructor(uint256 id) {\n _id = id;\n }\n\n /**\n * @dev Return Memory Variable Address\n */\n function getMemoryAddr() internal pure returns (address) {\n return 0x8a5419CfC711B2343c17a6ABf4B2bAFaBb06957F; // InstaMemory Address\n }\n\n /**\n * @dev Set Uint value in InstaMemory Contract.\n */\n function setUint(uint256 setId, uint256 val) internal {\n if (setId != 0) MemoryInterface(getMemoryAddr()).setUint(setId, val);\n }\n\n /**\n * @dev Get Uint value from InstaMemory Contract.\n */\n function getUint(uint256 getId, uint256 val)\n internal\n returns (uint256 returnVal)\n {\n returnVal = getId == 0\n ? val\n : MemoryInterface(getMemoryAddr()).getUint(getId);\n }\n\n /**\n * @dev Connector Details\n */\n function connectorID() public view returns (uint256 _type, uint256 id) {\n (_type, id) = (1, _id);\n }\n}\n\ncontract DSMath {\n function add(uint256 x, uint256 y) internal pure returns (uint256 z) {\n require((z = x + y) >= x, \"math-not-safe\");\n }\n\n function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {\n require((z = x - y) <= x, \"sub-overflow\");\n }\n}\n\nabstract contract GelatoHelpers is Helpers, DSMath {\n /**\n * @dev Return Gelato Core Address\n */\n function getGelatoCoreAddr() internal pure returns (address) {\n return 0x025030BdAa159f281cAe63873E68313a703725A5; // Gelato Core address\n }\n\n /**\n * @dev Return Instapp DSA Provider Module Address\n */\n function getInstadappProviderModuleAddr() internal pure returns (address) {\n return 0x0C25452d20cdFeEd2983fa9b9b9Cf4E81D6f2fE2; // ProviderModuleDSA Address\n }\n}\n\nabstract contract GelatoResolver is GelatoHelpers {\n event LogMultiProvide(\n address indexed executor,\n TaskSpec[] indexed taskspecs,\n address[] indexed modules,\n uint256 ethToDeposit,\n uint256 getId,\n uint256 setId\n );\n\n event LogSubmitTask(\n Provider indexed provider,\n Task indexed task,\n uint256 indexed expiryDate,\n uint256 getId,\n uint256 setId\n );\n\n event LogSubmitTaskCycle(\n Provider indexed provider,\n Task[] indexed tasks,\n uint256 indexed expiryDate,\n uint256 getId,\n uint256 setId\n );\n\n event LogSubmitTaskChain(\n Provider indexed provider,\n Task[] indexed tasks,\n uint256 indexed expiryDate,\n uint256 getId,\n uint256 setId\n );\n\n event LogMultiUnprovide(\n TaskSpec[] indexed taskspecs,\n address[] indexed modules,\n uint256 ethToWithdraw,\n uint256 getId,\n uint256 setId\n );\n\n event LogMultiCancelTasks(\n TaskReceipt[] indexed taskReceipt,\n uint256 getId,\n uint256 setId\n );\n\n // ===== Gelato ENTRY APIs ======\n\n /**\n * @dev Enables first time users to pre-fund eth, whitelist an executor & register the\n * ProviderModuleDSA.sol to be able to use Gelato\n * @param _executor address of single execot node or gelato'S decentralized execution market\n * @param _taskSpecs enables external providers to whitelist TaskSpecs on gelato\n * @param _modules address of ProviderModuleDSA\n * @param _ethToDeposit amount of eth to deposit on Gelato, only for self-providers\n */\n function multiProvide(\n address _executor,\n TaskSpec[] calldata _taskSpecs,\n address[] calldata _modules,\n uint256 _ethToDeposit,\n uint256 _getId,\n uint256 _setId\n ) external payable {\n uint256 ethToDeposit = getUint(_getId, _ethToDeposit);\n ethToDeposit = ethToDeposit == uint256(-1)\n ? address(this).balance\n : ethToDeposit;\n\n IGelatoInterface(getGelatoCoreAddr()).multiProvide{value: ethToDeposit}(\n _executor,\n _taskSpecs,\n _modules\n );\n\n setUint(_setId, ethToDeposit);\n\n emit LogMultiProvide(\n _executor,\n _taskSpecs,\n _modules,\n ethToDeposit,\n _getId,\n _setId\n );\n }\n\n /**\n * @dev Submits a single, one-time task to Gelato\n * @param _provider Consists of proxy module address (DSA) and provider address ()\n * who will pay for the transaction execution\n * @param _task Task specifying the condition and the action connectors\n * @param _expiryDate Default 0, othweise timestamp after which the task expires\n */\n function submitTask(\n Provider calldata _provider,\n Task calldata _task,\n uint256 _expiryDate\n ) external payable {\n IGelatoInterface(getGelatoCoreAddr()).submitTask(\n _provider,\n _task,\n _expiryDate\n );\n\n emit LogSubmitTask(_provider, _task, _expiryDate, 0, 0);\n }\n\n /**\n * @dev Submits single or mulitple Task Sequences to Gelato\n * @param _provider Consists of proxy module address (DSA) and provider address ()\n * who will pay for the transaction execution\n * @param _tasks A sequence of Tasks, can be a single or multiples\n * @param _expiryDate Default 0, othweise timestamp after which the task expires\n * @param _cycles How often the Task List should be executed, e.g. 5 times\n */\n function submitTaskCycle(\n Provider calldata _provider,\n Task[] calldata _tasks,\n uint256 _expiryDate,\n uint256 _cycles\n ) external payable {\n IGelatoInterface(getGelatoCoreAddr()).submitTaskCycle(\n _provider,\n _tasks,\n _expiryDate,\n _cycles\n );\n\n emit LogSubmitTaskCycle(_provider, _tasks, _expiryDate, 0, 0);\n }\n\n /**\n * @dev Submits single or mulitple Task Chains to Gelato\n * @param _provider Consists of proxy module address (DSA) and provider address ()\n * who will pay for the transaction execution\n * @param _tasks A sequence of Tasks, can be a single or multiples\n * @param _expiryDate Default 0, othweise timestamp after which the task expires\n * @param _sumOfRequestedTaskSubmits The TOTAL number of Task auto-submits\n * that should have occured once the cycle is complete\n */\n function submitTaskChain(\n Provider calldata _provider,\n Task[] calldata _tasks,\n uint256 _expiryDate,\n uint256 _sumOfRequestedTaskSubmits\n ) external payable {\n IGelatoInterface(getGelatoCoreAddr()).submitTaskChain(\n _provider,\n _tasks,\n _expiryDate,\n _sumOfRequestedTaskSubmits\n );\n\n emit LogSubmitTaskChain(_provider, _tasks, _expiryDate, 0, 0);\n }\n\n // ===== Gelato EXIT APIs ======\n\n /**\n * @dev Withdraws funds from Gelato, de-whitelists TaskSpecs and Provider Modules\n * in one tx\n * @param _withdrawAmount Amount of ETH to withdraw from Gelato\n * @param _taskSpecs List of Task Specs to de-whitelist, default empty []\n * @param _modules List of Provider Modules to de-whitelist, default empty []\n */\n function multiUnprovide(\n uint256 _withdrawAmount,\n TaskSpec[] calldata _taskSpecs,\n address[] calldata _modules,\n uint256 _getId,\n uint256 _setId\n ) external payable {\n uint256 withdrawAmount = getUint(_getId, _withdrawAmount);\n uint256 balanceBefore = address(this).balance;\n\n IGelatoInterface(getGelatoCoreAddr()).multiUnprovide(\n withdrawAmount,\n _taskSpecs,\n _modules\n );\n\n uint256 actualWithdrawAmount =\n sub(address(this).balance, balanceBefore);\n\n setUint(_setId, actualWithdrawAmount);\n\n emit LogMultiUnprovide(\n _taskSpecs,\n _modules,\n actualWithdrawAmount,\n _getId,\n _setId\n );\n }\n\n /**\n * @dev Cancels outstanding Tasks\n * @param _taskReceipts List of Task Receipts to cancel\n */\n function multiCancelTasks(TaskReceipt[] calldata _taskReceipts)\n external\n payable\n {\n IGelatoInterface(getGelatoCoreAddr()).multiCancelTasks(_taskReceipts);\n\n emit LogMultiCancelTasks(_taskReceipts, 0, 0);\n }\n}\n\ncontract ConnectGelato is GelatoResolver {\n string public name = \"ConnectGelato-v2.0\";\n\n constructor(uint256 _id) Helpers(_id) {}\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": ["ast"] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} diff --git a/hardhat.config.js b/hardhat.config.js index 773683a..611aa3c 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -64,7 +64,7 @@ module.exports = { accounts: DEPLOYER_PK_MAINNET ? [DEPLOYER_PK_MAINNET] : [], chainId: 1, url: `https://eth-mainnet.alchemyapi.io/v2/${ALCHEMY_ID}`, - gasPrice: parseInt(utils.parseUnits("35", "gwei")), + gasPrice: parseInt(utils.parseUnits("80", "gwei")), timeout: 150000, // Custom ...mainnetDeployments, diff --git a/package.json b/package.json index d907de1..fdcc4b7 100644 --- a/package.json +++ b/package.json @@ -30,8 +30,8 @@ "ethereum-waffle": "3.2.1", "ethers": "5.0.23", "hardhat": "2.0.4", - "hardhat-deploy": "0.7.0-beta.32", - "hardhat-deploy-ethers": "0.3.0-beta.6", + "hardhat-deploy": "0.7.0-beta.35", + "hardhat-deploy-ethers": "0.3.0-beta.7", "hardhat-gas-reporter": "1.0.1", "husky": ">=4", "lint-staged": "10.5.2", diff --git a/yarn.lock b/yarn.lock index 9e40ce4..24cc17c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4776,15 +4776,15 @@ har-validator@~5.1.3: ajv "^6.12.3" har-schema "^2.0.0" -hardhat-deploy-ethers@0.3.0-beta.6: - version "0.3.0-beta.6" - resolved "https://registry.yarnpkg.com/hardhat-deploy-ethers/-/hardhat-deploy-ethers-0.3.0-beta.6.tgz#a6b70d0849fa5dd0f00698385c6bbb9c4b70fc96" - integrity sha512-dwatT8Cw2FWSgvnUJom8lnPuJ2ULz8Ir844GHFDterfDMWvCcJCqnATX+nMznYoSJa7NEzoSPAm+RiWvvkh/2A== +hardhat-deploy-ethers@0.3.0-beta.7: + version "0.3.0-beta.7" + resolved "https://registry.yarnpkg.com/hardhat-deploy-ethers/-/hardhat-deploy-ethers-0.3.0-beta.7.tgz#860d86b84ed3c4fdef64283ccf1e8d5623454d02" + integrity sha512-JKMNte6vudu9LSNqgmBtNxc1gfxp3NUcPKVAf/FANHfl9pa/mBGg6hpQO7tD8CLkAbe6f4K5BjyYIPWX3p7MKw== -hardhat-deploy@0.7.0-beta.32: - version "0.7.0-beta.32" - resolved "https://registry.yarnpkg.com/hardhat-deploy/-/hardhat-deploy-0.7.0-beta.32.tgz#24fc91d7cda12be3ee97f929db8bc6a629030f80" - integrity sha512-po+vW+gtmqls/Od1kc9btDeza6sR+DHbVi1KaiS5tgYLyCbDnf4Ih+2UjGQMDsaJbYxK/19jOOf5rfRsOaTAzA== +hardhat-deploy@0.7.0-beta.35: + version "0.7.0-beta.35" + resolved "https://registry.yarnpkg.com/hardhat-deploy/-/hardhat-deploy-0.7.0-beta.35.tgz#64347ca80c678811db419db6542a699f0883a5f0" + integrity sha512-5l0k1xZzrdRZgFGHEGfgypM4PlhqyYBF+ToADz8oTRH+7fwWyK9424MA6qI8z373Ogm7Y0kUQTRqNHicYrepAw== dependencies: "@ethersproject/abi" "^5.0.2" "@ethersproject/abstract-signer" "^5.0.2" @@ -4801,6 +4801,7 @@ hardhat-deploy@0.7.0-beta.32: chalk "^4.1.0" chokidar "^3.4.0" debug "^4.1.1" + form-data "^3.0.0" fs-extra "^9.0.0" match-all "^1.2.6" murmur-128 "^0.2.1"