Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- pragma solidity ^0.4.24;
- import "./Owned.sol";
- import "./KMToken.sol";
- contract BC is Owned {
- mapping (address => bool) public admins;
- string public name;
- string public phone;
- string public url;
- string private did;
- address private uPortAddress;
- mapping (address => address[]) public tokens;
- event BCCreated(address companyAddress, string _companyName, string _phone, string _url);
- event BCTokenAdded(address indexed tokenAdded);
- event BCMsgSender(address indexed msgSender);
- constructor(address _owner, string _companyName, string _phone, string _url, string _did, address _uPortAddress)
- public
- {
- owner = _owner;
- emit BCMsgSender(msg.sender);
- name = _companyName;
- phone = _phone;
- url = _url;
- did = _did;
- uPortAddress = _uPortAddress;
- admins[owner] = true;
- emit BCCreated(this, _companyName, _phone, _url);
- }
- /*
- function addToken(address token)
- public
- ownerOnly(msg.sender)
- {
- require (0 != token && !tokens[token], "Token already exists or is null.");
- tokens[token] = true;
- emit BCTokenAdded(token);
- }
- function getToken(address token)
- public
- ownerOnly(msg.sender)
- returns (KMToken)
- {
- require (0 != token && tokens[token], "Token not found.");
- return KMToken(token);
- }
- */
- }
- contract BCFactory is Owned {
- /* Copy of KMP storage to allow DELEGATECALL*/
- uint8 constant MAX_OWNER_COMPANIES = 5; //1 owner could register up to 5 companies.
- mapping (address => address[MAX_OWNER_COMPANIES]) public companies; // (owner => companies[5])
- BCFactory bcFactory;
- //address private tokenFactory;
- //mapping (address => BC) companies; I dont need to store anything in the factory, I need it in the KMPlatform
- event BCFactoryMsgSender(address indexed msgSender);
- event BCFactoryCompanyCreated(address companyAddress, string _companyName, string _phone, string _url);
- constructor(address deployer)
- public
- {
- owner = deployer;
- }
- function createBCCompany( string _companyName, string _phone, string _url, string _did, address _uPortAddress)
- public
- // ownerOnly(msg.sender) // I won't control WHO because I want anybody to create companies.
- returns (BC)
- {
- emit BCFactoryMsgSender(msg.sender);
- uint8 position = companyPosition(msg.sender);
- require(MAX_OWNER_COMPANIES == position, "You can't create a new company. Max limit reached (5 companies).");
- BC newCompany = new BC(msg.sender, _companyName, _phone, _url, _did, _uPortAddress);
- companies[msg.sender][position] = newCompany;
- emit BCFactoryCompanyCreated(newCompany, _companyName, _phone, _url);
- return newCompany;
- }
- function createToken(string _name, string _symbol, uint256 _initialAmount)
- public
- ownerOnly(owner)
- {
- KMToken newToken = new KMToken(_name, _symbol, _initialAmount); //lo crea BCFactory!! No msg.sender?
- }
- function companyPosition(address _owner)
- internal
- view
- returns (uint8)
- {
- address anOwner = _owner; // Check if msg.sender gets here or if I need param.
- address[MAX_OWNER_COMPANIES] memory ownersCompanies = companies[anOwner];
- for (uint8 i = 0; i < MAX_OWNER_COMPANIES; i++) {
- if (ownersCompanies[i] == 0){
- return i; // There is an empty spot available.
- }
- }
- return MAX_OWNER_COMPANIES; // No empty spot available.
- }
- }
Add Comment
Please, Sign In to add comment