added function for spells

This commit is contained in:
Richa-iitr 2022-06-19 20:56:15 +05:30
parent 8aec31057d
commit 4bdd9535af
24 changed files with 342 additions and 138 deletions

View File

@ -1,7 +1,7 @@
//SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
import { MemoryInterface, InstaMapping } from "./interfaces.sol";
import { MemoryInterface, InstaMapping, ListInterface, InstaConnectors } from "./interfaces.sol";
abstract contract Stores {
@ -21,6 +21,16 @@ abstract contract Stores {
*/
MemoryInterface constant internal instaMemory = MemoryInterface(0xc109f7Ef06152c3a63dc7254fD861E612d3Ac571);
/**
* @dev Return InstaList address
*/
ListInterface internal constant instaList = ListInterface(0x3565F6057b7fFE36984779A507fC87b31EFb0f09);
/**
* @dev Return InstaConnectors Registry Address
*/
InstaConnectors internal constant instaConnectors = InstaConnectors(0x67fCE99Dd6d8d659eea2a1ac1b8881c57eb6592B);
/**
* @dev Get Uint value from InstaMemory Contract.
*/

View File

@ -4,8 +4,9 @@ pragma abicoder v2;
contract Events {
event LogCastDSA(
address indexed targetDSA,
address indexed targetDSA,
string[] connectors,
bytes[] datas
);
event LogCastSpells(string[] eventNames, bytes[] eventParams);
}

View File

@ -1,12 +0,0 @@
//SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
import { ListInterface } from "../../common/interfaces.sol";
contract SpellHelpers {
/**
* @dev InstaList
*/
ListInterface internal constant instaList =
ListInterface(0x3565F6057b7fFE36984779A507fC87b31EFb0f09);
}

View File

@ -3,21 +3,21 @@ pragma solidity ^0.7.0;
pragma experimental ABIEncoderV2;
/**
* @title Spell.
* @dev Cast on DSAs.
* @title DSA Spell.
* @dev Cast spells on DSA.
*/
// import files
import { AccountInterface } from "../../common/interfaces.sol";
import { SpellHelpers } from "./helpers.sol";
import { Stores } from "../../common/stores.sol";
import { Events } from "./events.sol";
abstract contract Spell is SpellHelpers, Events {
abstract contract DSASpell is Events, Stores {
/**
*@dev Cast spells on DSA.
*@param targetDSA target DSA to cast spells on.
*@param connectors connector names.
*@param datas datas for the cast.
*@param connectors Array of connector names.
*@param datas Array of connector calldatas.
*/
function castDSA(
address targetDSA,
@ -30,13 +30,48 @@ abstract contract Spell is SpellHelpers, Events {
{
require(instaList.accountID(targetDSA) != 0, "not-a-DSA");
AccountInterface(targetDSA).cast(connectors, datas, address(0));
AccountInterface(targetDSA).cast(connectors, datas, address(this));
_eventName = "LogCastDSA(address,string[],bytes[])";
_eventParam = abi.encode(targetDSA, connectors, datas);
}
/**
*@dev Perform spells.
*@param connectors Array of connector names.
*@param datas Array of connector calldatas.
*/
function castSpells(string[] memory connectors, bytes[] memory datas)
external
payable
returns (string memory eventName, bytes memory eventParam)
{
uint256 _length = connectors.length;
require(_length > 0, "zero-length-not-allowed");
require(datas.length == _length, "calldata-length-invalid");
(bool isOk, address[] memory _connectors) = instaConnectors
.isConnectors(connectors);
require(isOk, "connector-names-invalid");
string[] memory _eventNames = new string[](_length);
bytes[] memory _eventParams = new bytes[](_length);
for (uint256 i = 0; i < _length; i++) {
(bool success, bytes memory returnData) = _connectors[i]
.delegatecall(datas[i]);
require(success, "spells-failed");
(_eventNames[i], _eventParams[i]) = abi.decode(
returnData,
(string, bytes)
);
}
eventName = "LogCastSpells(string[],bytes[])";
eventParam = abi.encode(_eventNames, _eventParams);
}
}
contract ConnectV2SpellConnectorPolygon is Spell {
string public name = "Spell-Connector-v1.0";
contract ConnectV2DSASpellArbitrum is DSASpell {
string public name = "DSA-Spell-v1.0";
}

View File

@ -1,7 +1,7 @@
//SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
import { MemoryInterface } from "./interfaces.sol";
import { MemoryInterface, ListInterface, InstaConnectors } from "./interfaces.sol";
abstract contract Stores {
@ -21,6 +21,16 @@ abstract contract Stores {
*/
MemoryInterface constant internal instaMemory = MemoryInterface(0x3254Ce8f5b1c82431B8f21Df01918342215825C2);
/**
* @dev Return InstaList address
*/
ListInterface internal constant instaList = ListInterface(0x9926955e0Dd681Dc303370C52f4Ad0a4dd061687);
/**
* @dev Return InstaConnectors Registry address
*/
InstaConnectors internal constant instaConnectors = InstaConnectors(0x127d8cD0E2b2E0366D522DeA53A787bfE9002C14);
/**
* @dev Get Uint value from InstaMemory Contract.
*/

View File

@ -4,8 +4,9 @@ pragma abicoder v2;
contract Events {
event LogCastDSA(
address indexed targetDSA,
address indexed targetDSA,
string[] connectors,
bytes[] datas
);
event LogCastSpells(string[] eventNames, bytes[] eventParams);
}

View File

@ -1,12 +0,0 @@
//SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
import { ListInterface } from "../../common/interfaces.sol";
contract SpellHelpers {
/**
* @dev InstaList
*/
ListInterface internal constant instaList =
ListInterface(0x9926955e0Dd681Dc303370C52f4Ad0a4dd061687);
}

View File

@ -3,21 +3,21 @@ pragma solidity ^0.7.0;
pragma experimental ABIEncoderV2;
/**
* @title Spell.
* @dev Cast on DSAs.
* @title DSA Spell.
* @dev Cast spells on DSA.
*/
// import files
import { AccountInterface } from "../../common/interfaces.sol";
import { SpellHelpers } from "./helpers.sol";
import { Stores } from "../../common/stores.sol";
import { Events } from "./events.sol";
abstract contract Spell is SpellHelpers, Events {
abstract contract DSASpell is Events, Stores {
/**
*@dev Cast spells on DSA.
*@param targetDSA target DSA to cast spells on.
*@param connectors connector names.
*@param datas datas for the cast.
*@param connectors Array of connector names.
*@param datas Array of connector calldatas.
*/
function castDSA(
address targetDSA,
@ -30,13 +30,48 @@ abstract contract Spell is SpellHelpers, Events {
{
require(instaList.accountID(targetDSA) != 0, "not-a-DSA");
AccountInterface(targetDSA).cast(connectors, datas, address(0));
AccountInterface(targetDSA).cast(connectors, datas, address(this));
_eventName = "LogCastDSA(address,string[],bytes[])";
_eventParam = abi.encode(targetDSA, connectors, datas);
}
/**
*@dev Perform spells.
*@param connectors Array of connector names.
*@param datas Array of connector calldatas.
*/
function castSpells(string[] memory connectors, bytes[] memory datas)
external
payable
returns (string memory eventName, bytes memory eventParam)
{
uint256 _length = connectors.length;
require(_length > 0, "zero-length-not-allowed");
require(datas.length == _length, "calldata-length-invalid");
(bool isOk, address[] memory _connectors) = instaConnectors
.isConnectors(connectors);
require(isOk, "connector-names-invalid");
string[] memory _eventNames = new string[](_length);
bytes[] memory _eventParams = new bytes[](_length);
for (uint256 i = 0; i < _length; i++) {
(bool success, bytes memory returnData) = _connectors[i]
.delegatecall(datas[i]);
require(success, "spells-failed");
(_eventNames[i], _eventParams[i]) = abi.decode(
returnData,
(string, bytes)
);
}
eventName = "LogCastSpells(string[],bytes[])";
eventParam = abi.encode(_eventNames, _eventParams);
}
}
contract ConnectV2SpellConnectorPolygon is Spell {
string public name = "Spell-Connector-v1.0";
contract ConnectV2DSASpellAvalanche is DSASpell {
string public name = "DSA-Spell-v1.0";
}

View File

@ -1,7 +1,7 @@
//SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
import { MemoryInterface } from "./interfaces.sol";
import { MemoryInterface, ListInterface, InstaConnectors } from "./interfaces.sol";
abstract contract Stores {
/**
@ -22,6 +22,16 @@ abstract contract Stores {
MemoryInterface internal constant instaMemory =
MemoryInterface(0x56439117379A53bE3CC2C55217251e2481B7a1C8);
/**
* @dev Return InstaList address
*/
ListInterface internal constant instaList = ListInterface(0x10e166c3FAF887D8a61dE6c25039231eE694E926);
/**
* @dev Return connectors Registry address
*/
InstaConnectors internal constant instaConnectors = InstaConnectors(0x819910794a030403F69247E1e5C0bBfF1593B968);
/**
* @dev Get Uint value from InstaMemory Contract.
*/

View File

@ -4,8 +4,9 @@ pragma abicoder v2;
contract Events {
event LogCastDSA(
address indexed targetDSA,
address indexed targetDSA,
string[] connectors,
bytes[] datas
);
event LogCastSpells(string[] eventNames, bytes[] eventParams);
}

View File

@ -1,12 +0,0 @@
//SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
import { ListInterface } from "../../common/interfaces.sol";
contract SpellHelpers {
/**
* @dev InstaList
*/
ListInterface internal constant instaList =
ListInterface(0x10e166c3FAF887D8a61dE6c25039231eE694E926);
}

View File

@ -3,21 +3,21 @@ pragma solidity ^0.7.0;
pragma experimental ABIEncoderV2;
/**
* @title Spell.
* @dev Cast on DSAs.
* @title DSA Spell.
* @dev Cast spells on DSA.
*/
// import files
import { AccountInterface } from "../../common/interfaces.sol";
import { SpellHelpers } from "./helpers.sol";
import { Stores } from "../../common/stores.sol";
import { Events } from "./events.sol";
abstract contract Spell is SpellHelpers, Events {
abstract contract DSASpell is Events, Stores {
/**
*@dev Cast spells on DSA.
*@param targetDSA target DSA to cast spells on.
*@param connectors connector names.
*@param datas datas for the cast.
*@param connectors Array of connector names.
*@param datas Array of connector calldatas.
*/
function castDSA(
address targetDSA,
@ -30,13 +30,48 @@ abstract contract Spell is SpellHelpers, Events {
{
require(instaList.accountID(targetDSA) != 0, "not-a-DSA");
AccountInterface(targetDSA).cast(connectors, datas, address(0));
AccountInterface(targetDSA).cast(connectors, datas, address(this));
_eventName = "LogCastDSA(address,string[],bytes[])";
_eventParam = abi.encode(targetDSA, connectors, datas);
}
/**
*@dev Perform spells.
*@param connectors Array of connector names.
*@param datas Array of connector calldatas.
*/
function castSpells(string[] memory connectors, bytes[] memory datas)
external
payable
returns (string memory eventName, bytes memory eventParam)
{
uint256 _length = connectors.length;
require(_length > 0, "zero-length-not-allowed");
require(datas.length == _length, "calldata-length-invalid");
(bool isOk, address[] memory _connectors) = instaConnectors
.isConnectors(connectors);
require(isOk, "connector-names-invalid");
string[] memory _eventNames = new string[](_length);
bytes[] memory _eventParams = new bytes[](_length);
for (uint256 i = 0; i < _length; i++) {
(bool success, bytes memory returnData) = _connectors[i]
.delegatecall(datas[i]);
require(success, "spells-failed");
(_eventNames[i], _eventParams[i]) = abi.decode(
returnData,
(string, bytes)
);
}
eventName = "LogCastSpells(string[],bytes[])";
eventParam = abi.encode(_eventNames, _eventParams);
}
}
contract ConnectV2SpellConnectorPolygon is Spell {
string public name = "Spell-Connector-v1.0";
contract ConnectV2DSASpellFantom is DSASpell {
string public name = "DSA-Spell-v1.0";
}

View File

@ -1,7 +1,7 @@
//SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
import { MemoryInterface, InstaMapping } from "./interfaces.sol";
import { MemoryInterface, InstaMapping, ListInterface, InstaConnectors } from "./interfaces.sol";
abstract contract Stores {
@ -26,6 +26,16 @@ abstract contract Stores {
*/
InstaMapping constant internal instaMapping = InstaMapping(0xe81F70Cc7C0D46e12d70efc60607F16bbD617E88);
/**
* @dev Return InstaList Address
*/
ListInterface internal constant instaList = ListInterface(0x4c8a1BEb8a87765788946D6B19C6C6355194AbEb);
/**
* @dev Return connectors registry address
*/
InstaConnectors internal constant instaConnectors = InstaConnectors(0x97b0B3A8bDeFE8cB9563a3c610019Ad10DB8aD11);
/**
* @dev Get Uint value from InstaMemory Contract.
*/

View File

@ -4,8 +4,9 @@ pragma abicoder v2;
contract Events {
event LogCastDSA(
address indexed targetDSA,
address indexed targetDSA,
string[] connectors,
bytes[] datas
);
event LogCastSpells(string[] eventNames, bytes[] eventParams);
}

View File

@ -1,12 +0,0 @@
//SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
import { ListInterface } from "../../common/interfaces.sol";
contract SpellHelpers {
/**
* @dev InstaList
*/
ListInterface internal constant instaList =
ListInterface(0x4c8a1BEb8a87765788946D6B19C6C6355194AbEb);
}

View File

@ -3,21 +3,21 @@ pragma solidity ^0.7.0;
pragma experimental ABIEncoderV2;
/**
* @title Spell.
* @dev Cast on DSAs.
* @title DSA Spell.
* @dev Cast spells on DSA.
*/
// import files
import { AccountInterface } from "../../common/interfaces.sol";
import { SpellHelpers } from "./helpers.sol";
import { Stores } from "../../common/stores.sol";
import { Events } from "./events.sol";
abstract contract Spell is SpellHelpers, Events {
abstract contract DSASpell is Events, Stores {
/**
*@dev Cast spells on DSA.
*@param targetDSA target DSA to cast spells on.
*@param connectors connector names.
*@param datas datas for the cast.
*@param connectors Array of connector names.
*@param datas Array of connector calldatas.
*/
function castDSA(
address targetDSA,
@ -30,13 +30,48 @@ abstract contract Spell is SpellHelpers, Events {
{
require(instaList.accountID(targetDSA) != 0, "not-a-DSA");
AccountInterface(targetDSA).cast(connectors, datas, address(0));
AccountInterface(targetDSA).cast(connectors, datas, address(this));
_eventName = "LogCastDSA(address,string[],bytes[])";
_eventParam = abi.encode(targetDSA, connectors, datas);
}
/**
*@dev Perform spells.
*@param connectors Array of connector names.
*@param datas Array of connector calldatas.
*/
function castSpells(string[] memory connectors, bytes[] memory datas)
external
payable
returns (string memory eventName, bytes memory eventParam)
{
uint256 _length = connectors.length;
require(_length > 0, "zero-length-not-allowed");
require(datas.length == _length, "calldata-length-invalid");
(bool isOk, address[] memory _connectors) = instaConnectors
.isConnectors(connectors);
require(isOk, "connector-names-invalid");
string[] memory _eventNames = new string[](_length);
bytes[] memory _eventParams = new bytes[](_length);
for (uint256 i = 0; i < _length; i++) {
(bool success, bytes memory returnData) = _connectors[i]
.delegatecall(datas[i]);
require(success, "spells-failed");
(_eventNames[i], _eventParams[i]) = abi.decode(
returnData,
(string, bytes)
);
}
eventName = "LogCastSpells(string[],bytes[])";
eventParam = abi.encode(_eventNames, _eventParams);
}
}
contract ConnectV2SpellConnectorPolygon is Spell {
string public name = "Spell-Connector-v1.0";
contract ConnectV2DSASpell is DSASpell {
string public name = "DSA-Spell-v1.0";
}

View File

@ -1,7 +1,7 @@
//SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
import { MemoryInterface } from "./interfaces.sol";
import { MemoryInterface, ListInterface, InstaConnectors } from "./interfaces.sol";
abstract contract Stores {
@ -20,6 +20,16 @@ abstract contract Stores {
*/
MemoryInterface constant internal instaMemory = MemoryInterface(0x3254Ce8f5b1c82431B8f21Df01918342215825C2);
/**
* @dev Return InstaList address
*/
ListInterface internal constant instaList = ListInterface(0x9926955e0Dd681Dc303370C52f4Ad0a4dd061687);
/**
* @dev Returns connectors registry address
*/
InstaConnectors internal constant instaConnectors = InstaConnectors(0x127d8cD0E2b2E0366D522DeA53A787bfE9002C14);
/**
* @dev Get Uint value from InstaMemory Contract.
*/

View File

@ -4,8 +4,9 @@ pragma abicoder v2;
contract Events {
event LogCastDSA(
address indexed targetDSA,
address indexed targetDSA,
string[] connectors,
bytes[] datas
);
event LogCastSpells(string[] eventNames, bytes[] eventParams);
}

View File

@ -1,12 +0,0 @@
//SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
import { ListInterface } from "../../common/interfaces.sol";
contract SpellHelpers {
/**
* @dev InstaList
*/
ListInterface internal constant instaList =
ListInterface(0x9926955e0Dd681Dc303370C52f4Ad0a4dd061687);
}

View File

@ -3,21 +3,21 @@ pragma solidity ^0.7.0;
pragma experimental ABIEncoderV2;
/**
* @title Spell.
* @dev Cast on DSAs.
* @title DSA Spell.
* @dev Cast spells on DSA.
*/
// import files
import { AccountInterface } from "../../common/interfaces.sol";
import { SpellHelpers } from "./helpers.sol";
import { Stores } from "../../common/stores.sol";
import { Events } from "./events.sol";
abstract contract Spell is SpellHelpers, Events {
abstract contract DSASpell is Events, Stores {
/**
*@dev Cast spells on DSA.
*@param targetDSA target DSA to cast spells on.
*@param connectors connector names.
*@param datas datas for the cast.
*@param connectors Array of connector names.
*@param datas Array of connector calldatas.
*/
function castDSA(
address targetDSA,
@ -30,13 +30,48 @@ abstract contract Spell is SpellHelpers, Events {
{
require(instaList.accountID(targetDSA) != 0, "not-a-DSA");
AccountInterface(targetDSA).cast(connectors, datas, address(0));
AccountInterface(targetDSA).cast(connectors, datas, address(this));
_eventName = "LogCastDSA(address,string[],bytes[])";
_eventParam = abi.encode(targetDSA, connectors, datas);
}
/**
*@dev Perform spells.
*@param connectors Array of connector names.
*@param datas Array of connector calldatas.
*/
function castSpells(string[] memory connectors, bytes[] memory datas)
external
payable
returns (string memory eventName, bytes memory eventParam)
{
uint256 _length = connectors.length;
require(_length > 0, "zero-length-not-allowed");
require(datas.length == _length, "calldata-length-invalid");
(bool isOk, address[] memory _connectors) = instaConnectors
.isConnectors(connectors);
require(isOk, "connector-names-invalid");
string[] memory _eventNames = new string[](_length);
bytes[] memory _eventParams = new bytes[](_length);
for (uint256 i = 0; i < _length; i++) {
(bool success, bytes memory returnData) = _connectors[i]
.delegatecall(datas[i]);
require(success, "spells-failed");
(_eventNames[i], _eventParams[i]) = abi.decode(
returnData,
(string, bytes)
);
}
eventName = "LogCastSpells(string[],bytes[])";
eventParam = abi.encode(_eventNames, _eventParams);
}
}
contract ConnectV2SpellConnectorPolygon is Spell {
string public name = "Spell-Connector-v1.0";
contract ConnectV2DSASpellOptimism is DSASpell {
string public name = "DSA-Spell-v1.0";
}

View File

@ -1,7 +1,7 @@
//SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
import { MemoryInterface, InstaMapping } from "./interfaces.sol";
import { MemoryInterface, InstaMapping, ListInterface, InstaConnectors } from "./interfaces.sol";
abstract contract Stores {
@ -21,6 +21,16 @@ abstract contract Stores {
*/
MemoryInterface constant internal instaMemory = MemoryInterface(0x6C7256cf7C003dD85683339F75DdE9971f98f2FD);
/**
* @dev Return InstaList address
*/
ListInterface internal constant instaList = ListInterface(0x839c2D3aDe63DF5b0b8F3E57D5e145057Ab41556);
/**
* @dev Return connectors registry address
*/
InstaConnectors internal constant instaConnectors = InstaConnectors(0x2A00684bFAb9717C21271E0751BCcb7d2D763c88);
/**
* @dev Get Uint value from InstaMemory Contract.
*/

View File

@ -4,8 +4,9 @@ pragma abicoder v2;
contract Events {
event LogCastDSA(
address indexed targetDSA,
address indexed targetDSA,
string[] connectors,
bytes[] datas
);
event LogCastSpells(string[] eventNames, bytes[] eventParams);
}

View File

@ -1,12 +0,0 @@
//SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
import { ListInterface } from "../../common/interfaces.sol";
contract SpellHelpers {
/**
* @dev InstaList
*/
ListInterface internal constant instaList =
ListInterface(0x839c2D3aDe63DF5b0b8F3E57D5e145057Ab41556);
}

View File

@ -3,21 +3,21 @@ pragma solidity ^0.7.0;
pragma experimental ABIEncoderV2;
/**
* @title Spell.
* @dev Cast on DSAs.
* @title DSA Spell.
* @dev Cast spells on DSA.
*/
// import files
import { AccountInterface } from "../../common/interfaces.sol";
import { SpellHelpers } from "./helpers.sol";
import { Stores } from "../../common/stores.sol";
import { Events } from "./events.sol";
abstract contract Spell is SpellHelpers, Events {
abstract contract DSASpell is Events, Stores {
/**
*@dev Cast spells on DSA.
*@param targetDSA target DSA to cast spells on.
*@param connectors connector names.
*@param datas datas for the cast.
*@param connectors Array of connector names.
*@param datas Array of connector calldatas.
*/
function castDSA(
address targetDSA,
@ -30,13 +30,48 @@ abstract contract Spell is SpellHelpers, Events {
{
require(instaList.accountID(targetDSA) != 0, "not-a-DSA");
AccountInterface(targetDSA).cast(connectors, datas, address(0));
AccountInterface(targetDSA).cast(connectors, datas, address(this));
_eventName = "LogCastDSA(address,string[],bytes[])";
_eventParam = abi.encode(targetDSA, connectors, datas);
}
/**
*@dev Perform spells.
*@param connectors Array of connector names.
*@param datas Array of connector calldatas.
*/
function castSpells(string[] memory connectors, bytes[] memory datas)
external
payable
returns (string memory eventName, bytes memory eventParam)
{
uint256 _length = connectors.length;
require(_length > 0, "zero-length-not-allowed");
require(datas.length == _length, "calldata-length-invalid");
(bool isOk, address[] memory _connectors) = instaConnectors
.isConnectors(connectors);
require(isOk, "connector-names-invalid");
string[] memory _eventNames = new string[](_length);
bytes[] memory _eventParams = new bytes[](_length);
for (uint256 i = 0; i < _length; i++) {
(bool success, bytes memory returnData) = _connectors[i]
.delegatecall(datas[i]);
require(success, "spells-failed");
(_eventNames[i], _eventParams[i]) = abi.decode(
returnData,
(string, bytes)
);
}
eventName = "LogCastSpells(string[],bytes[])";
eventParam = abi.encode(_eventNames, _eventParams);
}
}
contract ConnectV2SpellConnectorPolygon is Spell {
string public name = "Spell-Connector-v1.0";
contract ConnectV2DSASpellPolygon is DSASpell {
string public name = "DSA-Spell-v1.0";
}