mirror of
https://github.com/Instadapp/dsa-resolvers-deprecated.git
synced 2024-07-29 22:38:16 +00:00
Added sdk contract
This commit is contained in:
parent
acb4801bc9
commit
eec0720494
118
contracts/dsa/sdk.sol
Normal file
118
contracts/dsa/sdk.sol
Normal file
|
@ -0,0 +1,118 @@
|
||||||
|
pragma solidity ^0.6.0;
|
||||||
|
pragma experimental ABIEncoderV2;
|
||||||
|
|
||||||
|
interface ConnectorsInterface {
|
||||||
|
function chief(address) external view returns (bool);
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IndexInterface {
|
||||||
|
function connectors(uint) external view returns (address);
|
||||||
|
function master() external view returns (address);
|
||||||
|
}
|
||||||
|
|
||||||
|
contract Sdk {
|
||||||
|
ConnectorsInterface public connectorsContract;
|
||||||
|
IndexInterface public indexContract;
|
||||||
|
uint public version = 1;
|
||||||
|
|
||||||
|
mapping (string => Connector) public connectors;
|
||||||
|
|
||||||
|
struct Connector {
|
||||||
|
address connector;
|
||||||
|
Method[] methods;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Method {
|
||||||
|
string name;
|
||||||
|
string[] args;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
contract Controllers is Sdk {
|
||||||
|
modifier isController {
|
||||||
|
require(indexContract.master() == msg.sender || connectorsContract.chief(msg.sender), "not-an-chief");
|
||||||
|
_;
|
||||||
|
}
|
||||||
|
|
||||||
|
function addConnector(
|
||||||
|
string memory connectorName,
|
||||||
|
address connector,
|
||||||
|
Method[] memory methods
|
||||||
|
) public isController {
|
||||||
|
require(connectors[connectorName].connector == address(0), "already-added-connector");
|
||||||
|
require(methods.length > 0, "no-methods");
|
||||||
|
connectors[connectorName].connector = connector;
|
||||||
|
for (uint i = 0; i < methods.length; i++) {
|
||||||
|
connectors[connectorName].methods.push(methods[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateConnectorAddress(string memory connectorName, address connectorAddr) public isController {
|
||||||
|
require(connectors[connectorName].connector != address(0), "connector-not-added");
|
||||||
|
connectors[connectorName].connector = connectorAddr;
|
||||||
|
}
|
||||||
|
|
||||||
|
function addConnectorMethod(string memory connectorName, Method[] memory methods) public isController{
|
||||||
|
require(connectors[connectorName].connector != address(0), "connector-not-added");
|
||||||
|
require(methods.length > 0, "no-methods");
|
||||||
|
for (uint i = 0; i < methods.length; i++) {
|
||||||
|
connectors[connectorName].methods.push(methods[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function removeConnectorMethod(string calldata connectorName, string calldata methodName) external isController {
|
||||||
|
require(connectors[connectorName].connector != address(0), "connector-not-added");
|
||||||
|
Method[] storage methods = connectors[connectorName].methods;
|
||||||
|
bool isfound = false;
|
||||||
|
for (uint i = 0; i < methods.length; i++) {
|
||||||
|
if (keccak256(abi.encodePacked(methodName)) == keccak256(abi.encodePacked(methods[i].name))) {
|
||||||
|
isfound = true;
|
||||||
|
}
|
||||||
|
if (isfound) {
|
||||||
|
if ( methods.length - 1 == i) {
|
||||||
|
delete methods[i];
|
||||||
|
} else {
|
||||||
|
methods[i] = methods[i + 1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
contract SdkResolver is Controllers {
|
||||||
|
function getConnector(
|
||||||
|
string memory connectorName,
|
||||||
|
string memory methodName
|
||||||
|
) public view returns (address connector, Method memory _method){
|
||||||
|
require(connectors[connectorName].connector != address(0), "connector-not-added");
|
||||||
|
connector = connectors[connectorName].connector;
|
||||||
|
Method[] storage methods = connectors[connectorName].methods;
|
||||||
|
for (uint i = 0; i < methods.length; i++) {
|
||||||
|
if (keccak256(abi.encodePacked(methodName)) == keccak256(abi.encodePacked(methods[i].name))) {
|
||||||
|
_method = methods[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getConnectors(
|
||||||
|
string[] memory connectorsName,
|
||||||
|
string[] memory methodsName
|
||||||
|
) public view returns (address[] memory _connectors, Method[] memory _methods){
|
||||||
|
require(connectorsName.length == methodsName.length, "length-not-equal");
|
||||||
|
for (uint i = 0; i < connectorsName.length; i++) {
|
||||||
|
(_connectors[i], _methods[i]) = getConnector(connectorsName[i], methodsName[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
contract InstaSDK is SdkResolver {
|
||||||
|
string constant public name = "SDK-v1";
|
||||||
|
|
||||||
|
constructor (address index) public {
|
||||||
|
indexContract = IndexInterface(index);
|
||||||
|
address connectors = indexContract.connectors(version);
|
||||||
|
connectorsContract = ConnectorsInterface(connectors);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user