Latest 25 transactions from a total of 96 transactions

TxHash Age From To Value [TxFee]
0x901f0508fe6e4e773abd2dba0ed2143a05e3e01d32b24b90bd4feea2b783698f15 days 7 hrs ago0xd2f45e02ab7b190ac9a87b743eab4c8f2ed0e491  IN   0xfc370048e942f0150a39784f515bceca9ee241240 Ether0.000066097
0xb21bcdf2675646f8f2bb7c8dc5962ae24698a7fcd960ff7e4725975b3e79f07715 days 7 hrs ago0xd2f45e02ab7b190ac9a87b743eab4c8f2ed0e491  IN   0xfc370048e942f0150a39784f515bceca9ee241240 Ether0.000066097
0xd3687bf0073e49e3d909718893e581303c8fda059ff022dba957a62b4d95452815 days 7 hrs ago0xd2f45e02ab7b190ac9a87b743eab4c8f2ed0e491  IN   0xfc370048e942f0150a39784f515bceca9ee241240 Ether0.000066097
0x9b29f2485e344d843b34ec45cd8842ddb5d667827d3ff2cf62b4076f869c6b3715 days 7 hrs ago0xd2f45e02ab7b190ac9a87b743eab4c8f2ed0e491  IN   0xfc370048e942f0150a39784f515bceca9ee241240 Ether0.000066097
0x3e234108d2b6f1beaed5844d177e86209b173bc8d4f6acb2febd1a59a786a03d16 days 2 hrs ago0xd2f45e02ab7b190ac9a87b743eab4c8f2ed0e491  IN   0xfc370048e942f0150a39784f515bceca9ee241240 Ether0.000066097
0x8c544f5674991065b7088cf6b6e985c309887c65b0831e8db207fc413e6e4cd416 days 2 hrs ago0xd2f45e02ab7b190ac9a87b743eab4c8f2ed0e491  IN   0xfc370048e942f0150a39784f515bceca9ee241240 Ether0.000066097
0xc33706c7c29a5efc5cbad5d056f29c5e8b1b596c034a64db46dae2a389053c2116 days 2 hrs ago0xd2f45e02ab7b190ac9a87b743eab4c8f2ed0e491  IN   0xfc370048e942f0150a39784f515bceca9ee241240 Ether0.000066097
0xc2dd2153f14d565fc90912f038f34468ed27dba5825c2862a5649ecf847c822516 days 2 hrs ago0xd2f45e02ab7b190ac9a87b743eab4c8f2ed0e491  IN   0xfc370048e942f0150a39784f515bceca9ee241240 Ether0.000066097
0xff04cd974b7c3c843bbc0017b199081372328ecfbb09ecd7985a563055c5ff9516 days 3 hrs ago0x634e8c457e6a64e01fab07f279aca879c63925d8  IN   0xfc370048e942f0150a39784f515bceca9ee241240 Ether0.000066097
0x769f1ee55ac1eae0dc727b6a1ce2a877aff6c559f3878ef540e7a457d224d12c16 days 3 hrs ago0xd2f45e02ab7b190ac9a87b743eab4c8f2ed0e491  IN   0xfc370048e942f0150a39784f515bceca9ee241240 Ether0.000066097
0x3836bc62995d866738d7fe0be599b5157150d0eea4ecc4c178749dd6b11858a616 days 3 hrs ago0xd2f45e02ab7b190ac9a87b743eab4c8f2ed0e491  IN   0xfc370048e942f0150a39784f515bceca9ee241240 Ether0.000066097
0x68a7a76e37851c747be2e61c0356d97d6758a0c70887b95fd559fa2b1cf9d27616 days 4 hrs ago0x634e8c457e6a64e01fab07f279aca879c63925d8  IN   0xfc370048e942f0150a39784f515bceca9ee241240 Ether0.000066097
0x3ece08d22284becb86b938070155c81a560d14ca70c5b8ad7c77564ddaeb77cd16 days 4 hrs ago0x634e8c457e6a64e01fab07f279aca879c63925d8  IN   0xfc370048e942f0150a39784f515bceca9ee241240 Ether0.000066097
0x6fcc056cabfa3180c705167b8fed2d3562f9bc4f142c95870746c2fb816e047216 days 6 hrs ago0x634e8c457e6a64e01fab07f279aca879c63925d8  IN   0xfc370048e942f0150a39784f515bceca9ee241240 Ether0.000066033
0x6c68265ebd7ada3bf4a0685f70358e1b8b8edc3aad8ae84254c73393e2ab702c16 days 6 hrs ago0x634e8c457e6a64e01fab07f279aca879c63925d8  IN   0xfc370048e942f0150a39784f515bceca9ee241240 Ether0.000066097
0x7d33cfd269af99658b1661966d8cb8bda4101572effc789e80cd836e3098ff6d16 days 6 hrs ago0x634e8c457e6a64e01fab07f279aca879c63925d8  IN   0xfc370048e942f0150a39784f515bceca9ee241240 Ether0.000066097
0xd06c33273c99b9496441f16b48b62f7e37a6350115f7bf40154139b142dff90716 days 6 hrs ago0x634e8c457e6a64e01fab07f279aca879c63925d8  IN   0xfc370048e942f0150a39784f515bceca9ee241240 Ether0.000066097
0xb155b706e1180e467abf42c9b14bde581740a84c3af9141acc086631616c41af16 days 6 hrs ago0x634e8c457e6a64e01fab07f279aca879c63925d8  IN   0xfc370048e942f0150a39784f515bceca9ee241240 Ether0.000066097
0x1d87965378bfa3ee6e63d076183704f52c6ab00eb8c2192c9dff9942ea0ef46516 days 6 hrs ago0x634e8c457e6a64e01fab07f279aca879c63925d8  IN   0xfc370048e942f0150a39784f515bceca9ee241240 Ether0.000066097
0x694f1a7f577eb4c84a8aaa8a6a401d78895b2c357bb4c5200504836c5e9cb87e16 days 6 hrs ago0x634e8c457e6a64e01fab07f279aca879c63925d8  IN   0xfc370048e942f0150a39784f515bceca9ee241240 Ether0.000065713
0x84a99460e0fb6fa7d1fd3d80f3014b1737475f2369bfbe7517469de5ada2f74e16 days 6 hrs ago0xd2f45e02ab7b190ac9a87b743eab4c8f2ed0e491  IN   0xfc370048e942f0150a39784f515bceca9ee241240 Ether0.000065713
0xd8bb886706c00417eb7522bd120d04a27b50084afee5c01467823678a604893f16 days 8 hrs ago0xd2f45e02ab7b190ac9a87b743eab4c8f2ed0e491  IN   0xfc370048e942f0150a39784f515bceca9ee241240 Ether0.000065713
0x2bb94e9df1229abb606706d052bf7d087dba61f89ea6a64984083695b9e8ebb416 days 8 hrs ago0xd2f45e02ab7b190ac9a87b743eab4c8f2ed0e491  IN   0xfc370048e942f0150a39784f515bceca9ee241240 Ether0.000065713
0x267b539381ea32f7c209bdabcf8c2e28c92398c7d759131805e49a404d9d57fc16 days 8 hrs ago0x634e8c457e6a64e01fab07f279aca879c63925d8  IN   0xfc370048e942f0150a39784f515bceca9ee241240 Ether0.000065713
0x633dfdd8b4e2bc7d5ef23b12b799fe2ae677b94e5d67accd7eb58f1f3d29ba4c16 days 8 hrs ago0x634e8c457e6a64e01fab07f279aca879c63925d8  IN   0xfc370048e942f0150a39784f515bceca9ee241240 Ether0.000065713
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 25 Internal Txns, Click here To View More View All
ParentTxHash Block Age From To Value
0x901f0508fe6e4e773abd2dba0ed2143a05e3e01d32b24b90bd4feea2b783698f1027369015 days 7 hrs ago0xfc370048e942f0150a39784f515bceca9ee241240xb23cb932fc3384e54fe406c1c820208a83e2ad2d0 Ether
0x901f0508fe6e4e773abd2dba0ed2143a05e3e01d32b24b90bd4feea2b783698f1027369015 days 7 hrs ago0xfc370048e942f0150a39784f515bceca9ee241240xd4bcd53da2580549a2e1e4901b1c5ab2a096413a0 Ether
0x901f0508fe6e4e773abd2dba0ed2143a05e3e01d32b24b90bd4feea2b783698f1027369015 days 7 hrs ago0xfc370048e942f0150a39784f515bceca9ee241240xd4bcd53da2580549a2e1e4901b1c5ab2a096413a0 Ether
0x901f0508fe6e4e773abd2dba0ed2143a05e3e01d32b24b90bd4feea2b783698f1027369015 days 7 hrs ago0xfc370048e942f0150a39784f515bceca9ee241240xc4375b7de8af5a38a93548eb8453a498222c4ff20 Ether
0x901f0508fe6e4e773abd2dba0ed2143a05e3e01d32b24b90bd4feea2b783698f1027369015 days 7 hrs ago0xfc370048e942f0150a39784f515bceca9ee241240xc4375b7de8af5a38a93548eb8453a498222c4ff20 Ether
0x901f0508fe6e4e773abd2dba0ed2143a05e3e01d32b24b90bd4feea2b783698f1027369015 days 7 hrs ago0xfc370048e942f0150a39784f515bceca9ee241240xd4bcd53da2580549a2e1e4901b1c5ab2a096413a0 Ether
0xb21bcdf2675646f8f2bb7c8dc5962ae24698a7fcd960ff7e4725975b3e79f0771027367815 days 7 hrs ago0xfc370048e942f0150a39784f515bceca9ee241240xb23cb932fc3384e54fe406c1c820208a83e2ad2d0 Ether
0xb21bcdf2675646f8f2bb7c8dc5962ae24698a7fcd960ff7e4725975b3e79f0771027367815 days 7 hrs ago0xfc370048e942f0150a39784f515bceca9ee241240xd4bcd53da2580549a2e1e4901b1c5ab2a096413a0 Ether
0xb21bcdf2675646f8f2bb7c8dc5962ae24698a7fcd960ff7e4725975b3e79f0771027367815 days 7 hrs ago0xfc370048e942f0150a39784f515bceca9ee241240xd4bcd53da2580549a2e1e4901b1c5ab2a096413a0 Ether
0xb21bcdf2675646f8f2bb7c8dc5962ae24698a7fcd960ff7e4725975b3e79f0771027367815 days 7 hrs ago0xfc370048e942f0150a39784f515bceca9ee241240xc4375b7de8af5a38a93548eb8453a498222c4ff20 Ether
0xb21bcdf2675646f8f2bb7c8dc5962ae24698a7fcd960ff7e4725975b3e79f0771027367815 days 7 hrs ago0xfc370048e942f0150a39784f515bceca9ee241240xc4375b7de8af5a38a93548eb8453a498222c4ff20 Ether
0xb21bcdf2675646f8f2bb7c8dc5962ae24698a7fcd960ff7e4725975b3e79f0771027367815 days 7 hrs ago0xfc370048e942f0150a39784f515bceca9ee241240xd4bcd53da2580549a2e1e4901b1c5ab2a096413a0 Ether
0xd3687bf0073e49e3d909718893e581303c8fda059ff022dba957a62b4d9545281027366215 days 7 hrs ago0xfc370048e942f0150a39784f515bceca9ee241240xb23cb932fc3384e54fe406c1c820208a83e2ad2d0 Ether
0xd3687bf0073e49e3d909718893e581303c8fda059ff022dba957a62b4d9545281027366215 days 7 hrs ago0xfc370048e942f0150a39784f515bceca9ee241240xd4bcd53da2580549a2e1e4901b1c5ab2a096413a0 Ether
0xd3687bf0073e49e3d909718893e581303c8fda059ff022dba957a62b4d9545281027366215 days 7 hrs ago0xfc370048e942f0150a39784f515bceca9ee241240xd4bcd53da2580549a2e1e4901b1c5ab2a096413a0 Ether
0xd3687bf0073e49e3d909718893e581303c8fda059ff022dba957a62b4d9545281027366215 days 7 hrs ago0xfc370048e942f0150a39784f515bceca9ee241240xc4375b7de8af5a38a93548eb8453a498222c4ff20 Ether
0xd3687bf0073e49e3d909718893e581303c8fda059ff022dba957a62b4d9545281027366215 days 7 hrs ago0xfc370048e942f0150a39784f515bceca9ee241240xc4375b7de8af5a38a93548eb8453a498222c4ff20 Ether
0xd3687bf0073e49e3d909718893e581303c8fda059ff022dba957a62b4d9545281027366215 days 7 hrs ago0xfc370048e942f0150a39784f515bceca9ee241240xd4bcd53da2580549a2e1e4901b1c5ab2a096413a0 Ether
0x9b29f2485e344d843b34ec45cd8842ddb5d667827d3ff2cf62b4076f869c6b371027358615 days 7 hrs ago0xfc370048e942f0150a39784f515bceca9ee241240xb23cb932fc3384e54fe406c1c820208a83e2ad2d0 Ether
0x9b29f2485e344d843b34ec45cd8842ddb5d667827d3ff2cf62b4076f869c6b371027358615 days 7 hrs ago0xfc370048e942f0150a39784f515bceca9ee241240xd4bcd53da2580549a2e1e4901b1c5ab2a096413a0 Ether
0x9b29f2485e344d843b34ec45cd8842ddb5d667827d3ff2cf62b4076f869c6b371027358615 days 7 hrs ago0xfc370048e942f0150a39784f515bceca9ee241240xd4bcd53da2580549a2e1e4901b1c5ab2a096413a0 Ether
0x9b29f2485e344d843b34ec45cd8842ddb5d667827d3ff2cf62b4076f869c6b371027358615 days 7 hrs ago0xfc370048e942f0150a39784f515bceca9ee241240xc4375b7de8af5a38a93548eb8453a498222c4ff20 Ether
0x9b29f2485e344d843b34ec45cd8842ddb5d667827d3ff2cf62b4076f869c6b371027358615 days 7 hrs ago0xfc370048e942f0150a39784f515bceca9ee241240xc4375b7de8af5a38a93548eb8453a498222c4ff20 Ether
0x9b29f2485e344d843b34ec45cd8842ddb5d667827d3ff2cf62b4076f869c6b371027358615 days 7 hrs ago0xfc370048e942f0150a39784f515bceca9ee241240xd4bcd53da2580549a2e1e4901b1c5ab2a096413a0 Ether
0x3e234108d2b6f1beaed5844d177e86209b173bc8d4f6acb2febd1a59a786a03d1026613616 days 2 hrs ago0xfc370048e942f0150a39784f515bceca9ee241240xb23cb932fc3384e54fe406c1c820208a83e2ad2d0 Ether
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity), NestedArrayFunctionCallDecoder (medium-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: RepaymentRouter
Compiler Version: v0.4.18+commit.9cf6e910
Optimization Enabled: No
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.18;

// File: /Users/trqdinh/Development/loot/charta/contracts/libraries/PermissionsLib.sol

/*

  Copyright 2017 Dharma Labs Inc.

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.

*/

pragma solidity 0.4.18;


/**
 *  Note(kayvon): these events are emitted by our PermissionsLib, but all contracts that
 *  depend on the library must also define the events in order for web3 clients to pick them up.
 *  This topic is discussed in greater detail here (under the section "Events and Libraries"):
 *  https://blog.aragon.one/library-driven-development-in-solidity-2bebcaf88736
 */
contract PermissionEvents {
    event Authorized(address indexed agent, string callingContext);
    event AuthorizationRevoked(address indexed agent, string callingContext);
}


library PermissionsLib {

    // TODO(kayvon): remove these events and inherit from PermissionEvents when libraries are
    // capable of inheritance.
    // See relevant github issue here: https://github.com/ethereum/solidity/issues/891
    event Authorized(address indexed agent, string callingContext);
    event AuthorizationRevoked(address indexed agent, string callingContext);

    struct Permissions {
        mapping (address => bool) authorized;
        mapping (address => uint) agentToIndex; // ensures O(1) look-up
        address[] authorizedAgents;
    }

    function authorize(
        Permissions storage self,
        address agent,
        string callingContext
    )
        internal
    {
        require(isNotAuthorized(self, agent));

        self.authorized[agent] = true;
        self.authorizedAgents.push(agent);
        self.agentToIndex[agent] = self.authorizedAgents.length - 1;
        Authorized(agent, callingContext);
    }

    function revokeAuthorization(
        Permissions storage self,
        address agent,
        string callingContext
    )
        internal
    {
        /* We only want to do work in the case where the agent whose
        authorization is being revoked had authorization permissions in the
        first place. */
        require(isAuthorized(self, agent));

        uint indexOfAgentToRevoke = self.agentToIndex[agent];
        uint indexOfAgentToMove = self.authorizedAgents.length - 1;
        address agentToMove = self.authorizedAgents[indexOfAgentToMove];

        // Revoke the agent's authorization.
        delete self.authorized[agent];

        // Remove the agent from our collection of authorized agents.
        self.authorizedAgents[indexOfAgentToRevoke] = agentToMove;

        // Update our indices to reflect the above changes.
        self.agentToIndex[agentToMove] = indexOfAgentToRevoke;
        delete self.agentToIndex[agent];

        // Clean up memory that's no longer being used.
        delete self.authorizedAgents[indexOfAgentToMove];
        self.authorizedAgents.length -= 1;

        AuthorizationRevoked(agent, callingContext);
    }

    function isAuthorized(Permissions storage self, address agent)
        internal
        view
        returns (bool)
    {
        return self.authorized[agent];
    }

    function isNotAuthorized(Permissions storage self, address agent)
        internal
        view
        returns (bool)
    {
        return !isAuthorized(self, agent);
    }

    function getAuthorizedAgents(Permissions storage self)
        internal
        view
        returns (address[])
    {
        return self.authorizedAgents;
    }
}

// File: zeppelin-solidity/contracts/math/SafeMath.sol

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    if (a == 0) {
      return 0;
    }
    uint256 c = a * b;
    assert(c / a == b);
    return c;
  }

  /**
  * @dev Integer division of two numbers, truncating the quotient.
  */
  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return c;
  }

  /**
  * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  /**
  * @dev Adds two numbers, throws on overflow.
  */
  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}

// File: /Users/trqdinh/Development/loot/charta/node_modules/zeppelin-solidity/contracts/ownership/Ownable.sol

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
  address public owner;


  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  function Ownable() public {
    owner = msg.sender;
  }

  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(msg.sender == owner);
    _;
  }

  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param newOwner The address to transfer ownership to.
   */
  function transferOwnership(address newOwner) public onlyOwner {
    require(newOwner != address(0));
    OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }

}

// File: zeppelin-solidity/contracts/lifecycle/Pausable.sol

/**
 * @title Pausable
 * @dev Base contract which allows children to implement an emergency stop mechanism.
 */
contract Pausable is Ownable {
  event Pause();
  event Unpause();

  bool public paused = false;


  /**
   * @dev Modifier to make a function callable only when the contract is not paused.
   */
  modifier whenNotPaused() {
    require(!paused);
    _;
  }

  /**
   * @dev Modifier to make a function callable only when the contract is paused.
   */
  modifier whenPaused() {
    require(paused);
    _;
  }

  /**
   * @dev called by the owner to pause, triggers stopped state
   */
  function pause() onlyOwner whenNotPaused public {
    paused = true;
    Pause();
  }

  /**
   * @dev called by the owner to unpause, returns to normal state
   */
  function unpause() onlyOwner whenPaused public {
    paused = false;
    Unpause();
  }
}

// File: /Users/trqdinh/Development/loot/charta/contracts/DebtRegistry.sol

/*

  Copyright 2017 Dharma Labs Inc.

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.

*/

pragma solidity 0.4.18;





/**
 * The DebtRegistry stores the parameters and beneficiaries of all debt agreements in
 * Dharma protocol.  It authorizes a limited number of agents to
 * perform mutations on it -- those agents can be changed at any
 * time by the contract's owner.
 *
 * Author: Nadav Hollander -- Github: nadavhollander
 */
contract DebtRegistry is Pausable, PermissionEvents {
    using SafeMath for uint;
    using PermissionsLib for PermissionsLib.Permissions;

    struct Entry {
        address version;
        address beneficiary;
        address underwriter;
        uint underwriterRiskRating;
        address termsContract;
        bytes32 termsContractParameters;
        uint issuanceBlockTimestamp;
    }

    // Primary registry mapping agreement IDs to their corresponding entries
    mapping (bytes32 => Entry) internal registry;

    // Maps debtor addresses to a list of their debts' agreement IDs
    mapping (address => bytes32[]) internal debtorToDebts;

    PermissionsLib.Permissions internal entryInsertPermissions;
    PermissionsLib.Permissions internal entryEditPermissions;

    string public constant INSERT_CONTEXT = "debt-registry-insert";
    string public constant EDIT_CONTEXT = "debt-registry-edit";

    event LogInsertEntry(
        bytes32 indexed agreementId,
        address indexed beneficiary,
        address indexed underwriter,
        uint underwriterRiskRating,
        address termsContract,
        bytes32 termsContractParameters
    );

    event LogModifyEntryBeneficiary(
        bytes32 indexed agreementId,
        address indexed previousBeneficiary,
        address indexed newBeneficiary
    );

    modifier onlyAuthorizedToInsert() {
        require(entryInsertPermissions.isAuthorized(msg.sender));
        _;
    }

    modifier onlyAuthorizedToEdit() {
        require(entryEditPermissions.isAuthorized(msg.sender));
        _;
    }

    modifier onlyExtantEntry(bytes32 agreementId) {
        require(doesEntryExist(agreementId));
        _;
    }

    modifier nonNullBeneficiary(address beneficiary) {
        require(beneficiary != address(0));
        _;
    }

    /* Ensures an entry with the specified agreement ID exists within the debt registry. */
    function doesEntryExist(bytes32 agreementId)
        public
        view
        returns (bool exists)
    {
        return registry[agreementId].beneficiary != address(0);
    }

    /**
     * Inserts a new entry into the registry, if the entry is valid and sender is
     * authorized to make 'insert' mutations to the registry.
     */
    function insert(
        address _version,
        address _beneficiary,
        address _debtor,
        address _underwriter,
        uint _underwriterRiskRating,
        address _termsContract,
        bytes32 _termsContractParameters,
        uint _salt
    )
        public
        onlyAuthorizedToInsert
        whenNotPaused
        nonNullBeneficiary(_beneficiary)
        returns (bytes32 _agreementId)
    {
        Entry memory entry = Entry(
            _version,
            _beneficiary,
            _underwriter,
            _underwriterRiskRating,
            _termsContract,
            _termsContractParameters,
            block.timestamp
        );

        bytes32 agreementId = _getAgreementId(entry, _debtor, _salt);

        require(registry[agreementId].beneficiary == address(0));

        registry[agreementId] = entry;
        debtorToDebts[_debtor].push(agreementId);

        LogInsertEntry(
            agreementId,
            entry.beneficiary,
            entry.underwriter,
            entry.underwriterRiskRating,
            entry.termsContract,
            entry.termsContractParameters
        );

        return agreementId;
    }

    /**
     * Modifies the beneficiary of a debt issuance, if the sender
     * is authorized to make 'modifyBeneficiary' mutations to
     * the registry.
     */
    function modifyBeneficiary(bytes32 agreementId, address newBeneficiary)
        public
        onlyAuthorizedToEdit
        whenNotPaused
        onlyExtantEntry(agreementId)
        nonNullBeneficiary(newBeneficiary)
    {
        address previousBeneficiary = registry[agreementId].beneficiary;

        registry[agreementId].beneficiary = newBeneficiary;

        LogModifyEntryBeneficiary(
            agreementId,
            previousBeneficiary,
            newBeneficiary
        );
    }

    /**
     * Adds an address to the list of agents authorized
     * to make 'insert' mutations to the registry.
     */
    function addAuthorizedInsertAgent(address agent)
        public
        onlyOwner
    {
        entryInsertPermissions.authorize(agent, INSERT_CONTEXT);
    }

    /**
     * Adds an address to the list of agents authorized
     * to make 'modifyBeneficiary' mutations to the registry.
     */
    function addAuthorizedEditAgent(address agent)
        public
        onlyOwner
    {
        entryEditPermissions.authorize(agent, EDIT_CONTEXT);
    }

    /**
     * Removes an address from the list of agents authorized
     * to make 'insert' mutations to the registry.
     */
    function revokeInsertAgentAuthorization(address agent)
        public
        onlyOwner
    {
        entryInsertPermissions.revokeAuthorization(agent, INSERT_CONTEXT);
    }

    /**
     * Removes an address from the list of agents authorized
     * to make 'modifyBeneficiary' mutations to the registry.
     */
    function revokeEditAgentAuthorization(address agent)
        public
        onlyOwner
    {
        entryEditPermissions.revokeAuthorization(agent, EDIT_CONTEXT);
    }

    /**
     * Returns the parameters of a debt issuance in the registry.
     *
     * TODO(kayvon): protect this function with our `onlyExtantEntry` modifier once the restriction
     * on the size of the call stack has been addressed.
     */
    function get(bytes32 agreementId)
        public
        view
        returns(address, address, address, uint, address, bytes32, uint)
    {
        return (
            registry[agreementId].version,
            registry[agreementId].beneficiary,
            registry[agreementId].underwriter,
            registry[agreementId].underwriterRiskRating,
            registry[agreementId].termsContract,
            registry[agreementId].termsContractParameters,
            registry[agreementId].issuanceBlockTimestamp
        );
    }

    /**
     * Returns the beneficiary of a given issuance
     */
    function getBeneficiary(bytes32 agreementId)
        public
        view
        onlyExtantEntry(agreementId)
        returns(address)
    {
        return registry[agreementId].beneficiary;
    }

    /**
     * Returns the terms contract address of a given issuance
     */
    function getTermsContract(bytes32 agreementId)
        public
        view
        onlyExtantEntry(agreementId)
        returns (address)
    {
        return registry[agreementId].termsContract;
    }

    /**
     * Returns the terms contract parameters of a given issuance
     */
    function getTermsContractParameters(bytes32 agreementId)
        public
        view
        onlyExtantEntry(agreementId)
        returns (bytes32)
    {
        return registry[agreementId].termsContractParameters;
    }

    /**
     * Returns a tuple of the terms contract and its associated parameters
     * for a given issuance
     */
    function getTerms(bytes32 agreementId)
        public
        view
        onlyExtantEntry(agreementId)
        returns(address, bytes32)
    {
        return (
            registry[agreementId].termsContract,
            registry[agreementId].termsContractParameters
        );
    }

    /**
     * Returns the timestamp of the block at which a debt agreement was issued.
     */
    function getIssuanceBlockTimestamp(bytes32 agreementId)
        public
        view
        onlyExtantEntry(agreementId)
        returns (uint timestamp)
    {
        return registry[agreementId].issuanceBlockTimestamp;
    }

    /**
     * Returns the list of agents authorized to make 'insert' mutations
     */
    function getAuthorizedInsertAgents()
        public
        view
        returns(address[])
    {
        return entryInsertPermissions.getAuthorizedAgents();
    }

    /**
     * Returns the list of agents authorized to make 'modifyBeneficiary' mutations
     */
    function getAuthorizedEditAgents()
        public
        view
        returns(address[])
    {
        return entryEditPermissions.getAuthorizedAgents();
    }

    /**
     * Returns the list of debt agreements a debtor is party to,
     * with each debt agreement listed by agreement ID.
     */
    function getDebtorsDebts(address debtor)
        public
        view
        returns(bytes32[])
    {
        return debtorToDebts[debtor];
    }

    /**
     * Helper function for computing the hash of a given issuance,
     * and, in turn, its agreementId
     */
    function _getAgreementId(Entry _entry, address _debtor, uint _salt)
        internal
        pure
        returns(bytes32)
    {
        return keccak256(
            _entry.version,
            _debtor,
            _entry.underwriter,
            _entry.underwriterRiskRating,
            _entry.termsContract,
            _entry.termsContractParameters,
            _salt
        );
    }
}

// File: /Users/trqdinh/Development/loot/charta/contracts/TermsContract.sol

/*

  Copyright 2017 Dharma Labs Inc.

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.

*/

pragma solidity 0.4.18;


interface TermsContract {
     /// When called, the registerTermStart function registers the fact that
     ///    the debt agreement has begun.  This method is called as a hook by the
     ///    DebtKernel when a debt order associated with `agreementId` is filled.
     ///    Method is not required to make any sort of internal state change
     ///    upon the debt agreement's start, but MUST return `true` in order to
     ///    acknowledge receipt of the transaction.  If, for any reason, the
     ///    debt agreement stored at `agreementId` is incompatible with this contract,
     ///    MUST return `false`, which will cause the pertinent order fill to fail.
     ///    If this method is called for a debt agreement whose term has already begun,
     ///    must THROW.  Similarly, if this method is called by any contract other
     ///    than the current DebtKernel, must THROW.
     /// @param  agreementId bytes32. The agreement id (issuance hash) of the debt agreement to which this pertains.
     /// @param  debtor address. The debtor in this particular issuance.
     /// @return _success bool. Acknowledgment of whether
    function registerTermStart(
        bytes32 agreementId,
        address debtor
    ) public returns (bool _success);

     /// When called, the registerRepayment function records the debtor's
     ///  repayment, as well as any auxiliary metadata needed by the contract
     ///  to determine ex post facto the value repaid (e.g. current USD
     ///  exchange rate)
     /// @param  agreementId bytes32. The agreement id (issuance hash) of the debt agreement to which this pertains.
     /// @param  payer address. The address of the payer.
     /// @param  beneficiary address. The address of the payment's beneficiary.
     /// @param  unitsOfRepayment uint. The units-of-value repaid in the transaction.
     /// @param  tokenAddress address. The address of the token with which the repayment transaction was executed.
    function registerRepayment(
        bytes32 agreementId,
        address payer,
        address beneficiary,
        uint256 unitsOfRepayment,
        address tokenAddress
    ) public returns (bool _success);

     /// Returns the cumulative units-of-value expected to be repaid by a given block timestamp.
     ///  Note this is not a constant function -- this value can vary on basis of any number of
     ///  conditions (e.g. interest rates can be renegotiated if repayments are delinquent).
     /// @param  agreementId bytes32. The agreement id (issuance hash) of the debt agreement to which this pertains.
     /// @param  timestamp uint. The timestamp of the block for which repayment expectation is being queried.
     /// @return uint256 The cumulative units-of-value expected to be repaid by the time the given timestamp lapses.
    function getExpectedRepaymentValue(
        bytes32 agreementId,
        uint256 timestamp
    ) public view returns (uint256);

     /// Returns the cumulative units-of-value repaid by the point at which this method is called.
     /// @param  agreementId bytes32. The agreement id (issuance hash) of the debt agreement to which this pertains.
     /// @return uint256 The cumulative units-of-value repaid up until now.
    function getValueRepaidToDate(
        bytes32 agreementId
    ) public view returns (uint256);

    /**
     * A method that returns a Unix timestamp representing the end of the debt agreement's term.
     * contract.
     */
    function getTermEndTimestamp(
        bytes32 _agreementId
    ) public view returns (uint);
}

// File: /Users/trqdinh/Development/loot/charta/node_modules/zeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol

/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/179
 */
contract ERC20Basic {
  function totalSupply() public view returns (uint256);
  function balanceOf(address who) public view returns (uint256);
  function transfer(address to, uint256 value) public returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}

// File: zeppelin-solidity/contracts/token/ERC20/ERC20.sol

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender) public view returns (uint256);
  function transferFrom(address from, address to, uint256 value) public returns (bool);
  function approve(address spender, uint256 value) public returns (bool);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

// File: /Users/trqdinh/Development/loot/charta/contracts/TokenTransferProxy.sol

/*

  Copyright 2017 Dharma Labs Inc.

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.

*/

pragma solidity 0.4.18;






/**
 * The TokenTransferProxy is a proxy contract for transfering principal
 * and fee payments and repayments between agents and keepers in the Dharma
 * ecosystem.  It is decoupled from the DebtKernel in order to make upgrades to the
 * protocol contracts smoother -- if the DebtKernel or RepyamentRouter is upgraded to a new contract,
 * creditors will not have to grant new transfer approvals to a new contract's address.
 *
 * Author: Nadav Hollander -- Github: nadavhollander
 */
contract TokenTransferProxy is Pausable, PermissionEvents {
    using PermissionsLib for PermissionsLib.Permissions;

    PermissionsLib.Permissions internal tokenTransferPermissions;

    string public constant CONTEXT = "token-transfer-proxy";

    /**
     * Add address to list of agents authorized to initiate `transferFrom` calls
     */
    function addAuthorizedTransferAgent(address _agent)
        public
        onlyOwner
    {
        tokenTransferPermissions.authorize(_agent, CONTEXT);
    }

    /**
     * Remove address from list of agents authorized to initiate `transferFrom` calls
     */
    function revokeTransferAgentAuthorization(address _agent)
        public
        onlyOwner
    {
        tokenTransferPermissions.revokeAuthorization(_agent, CONTEXT);
    }

    /**
     * Return list of agents authorized to initiate `transferFrom` calls
     */
    function getAuthorizedTransferAgents()
        public
        view
        returns (address[] authorizedAgents)
    {
        return tokenTransferPermissions.getAuthorizedAgents();
    }

    /**
     * Transfer specified token amount from _from address to _to address on give token
     */
    function transferFrom(
        address _token,
        address _from,
        address _to,
        uint _amount
    )
        public
        returns (bool _success)
    {
        require(tokenTransferPermissions.isAuthorized(msg.sender));

        return ERC20(_token).transferFrom(_from, _to, _amount);
    }
}

// File: contracts/RepaymentRouter.sol

/*

  Copyright 2017 Dharma Labs Inc.

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.

*/

pragma solidity 0.4.18;







/**
 * The RepaymentRouter routes allowers payers to make repayments on any
 * given debt agreement in any given token by routing the payments to
 * the debt agreement's beneficiary.  Additionally, the router acts
 * as a trusted oracle to the debt agreement's terms contract, informing
 * it of exactly what payments have been made in what quantity and in what token.
 *
 * Authors: Jaynti Kanani -- Github: jdkanani, Nadav Hollander -- Github: nadavhollander
 */
contract RepaymentRouter is Pausable {
    DebtRegistry public debtRegistry;
    TokenTransferProxy public tokenTransferProxy;

    enum Errors {
        DEBT_AGREEMENT_NONEXISTENT,
        PAYER_BALANCE_OR_ALLOWANCE_INSUFFICIENT,
        REPAYMENT_REJECTED_BY_TERMS_CONTRACT
    }

    event LogRepayment(
        bytes32 indexed _agreementId,
        address indexed _payer,
        address indexed _beneficiary,
        uint _amount,
        address _token
    );

    event LogError(uint8 indexed _errorId, bytes32 indexed _agreementId);

    /**
     * Constructor points the repayment router at the deployed registry contract.
     */
    function RepaymentRouter (address _debtRegistry, address _tokenTransferProxy) public {
        debtRegistry = DebtRegistry(_debtRegistry);
        tokenTransferProxy = TokenTransferProxy(_tokenTransferProxy);
    }

    /**
     * Given an agreement id, routes a repayment
     * of a given ERC20 token to the debt's current beneficiary, and reports the repayment
     * to the debt's associated terms contract.
     */
    function repay(
        bytes32 agreementId,
        uint256 amount,
        address tokenAddress
    )
        public
        whenNotPaused
        returns (uint _amountRepaid)
    {
        require(tokenAddress != address(0));
        require(amount > 0);

        // Ensure agreement exists.
        if (!debtRegistry.doesEntryExist(agreementId)) {
            LogError(uint8(Errors.DEBT_AGREEMENT_NONEXISTENT), agreementId);
            return 0;
        }

        // Check payer has sufficient balance and has granted router sufficient allowance.
        if (ERC20(tokenAddress).balanceOf(msg.sender) < amount ||
            ERC20(tokenAddress).allowance(msg.sender, tokenTransferProxy) < amount) {
            LogError(uint8(Errors.PAYER_BALANCE_OR_ALLOWANCE_INSUFFICIENT), agreementId);
            return 0;
        }

        // Notify terms contract
        address termsContract = debtRegistry.getTermsContract(agreementId);
        address beneficiary = debtRegistry.getBeneficiary(agreementId);
        if (!TermsContract(termsContract).registerRepayment(
            agreementId,
            msg.sender,
            beneficiary,
            amount,
            tokenAddress
        )) {
            LogError(uint8(Errors.REPAYMENT_REJECTED_BY_TERMS_CONTRACT), agreementId);
            return 0;
        }

        // Transfer amount to creditor
        require(tokenTransferProxy.transferFrom(
            tokenAddress,
            msg.sender,
            beneficiary,
            amount
        ));

        // Log event for repayment
        LogRepayment(agreementId, msg.sender, beneficiary, amount, tokenAddress);

        return amount;
    }
}

    Contract ABI  
[{"constant":true,"inputs":[],"name":"tokenTransferProxy","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"debtRegistry","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"agreementId","type":"bytes32"},{"name":"amount","type":"uint256"},{"name":"tokenAddress","type":"address"}],"name":"repay","outputs":[{"name":"_amountRepaid","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_debtRegistry","type":"address"},{"name":"_tokenTransferProxy","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_agreementId","type":"bytes32"},{"indexed":true,"name":"_payer","type":"address"},{"indexed":true,"name":"_beneficiary","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"},{"indexed":false,"name":"_token","type":"address"}],"name":"LogRepayment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_errorId","type":"uint8"},{"indexed":true,"name":"_agreementId","type":"bytes32"}],"name":"LogError","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

  Contract Creation Code Switch To Opcodes View
606060405260008060146101000a81548160ff021916908315150217905550341561002957600080fd5b604051604080610fdb83398101604052808051906020019091908051906020019091905050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050610eba806101216000396000f30060606040526004361061008e576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630eefdbad146100935780632f866f73146100e85780633f4ba83a1461013d5780635c975abb146101525780638456cb591461017f5780638da5cb5b14610194578063f2fde38b146101e9578063ff26812514610222575b600080fd5b341561009e57600080fd5b6100a6610285565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156100f357600080fd5b6100fb6102ab565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561014857600080fd5b6101506102d1565b005b341561015d57600080fd5b61016561038f565b604051808215151515815260200191505060405180910390f35b341561018a57600080fd5b6101926103a2565b005b341561019f57600080fd5b6101a7610462565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156101f457600080fd5b610220600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610487565b005b341561022d57600080fd5b61026f60048080356000191690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506105dc565b6040518082815260200191505060405180910390f35b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561032c57600080fd5b600060149054906101000a900460ff16151561034757600080fd5b60008060146101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b600060149054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156103fd57600080fd5b600060149054906101000a900460ff1615151561041957600080fd5b6001600060146101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156104e257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561051e57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008060149054906101000a900460ff161515156105fc57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415151561063857600080fd5b60008511151561064757600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639758af1e876000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15156106e857600080fd5b6102c65a03f115156106f957600080fd5b5050506040518051905015156107535785600019166000600281111561071b57fe5b60ff167f36d86c59e00bd73dc19ba3adfe068e4b64ac7e92be35546adeddf1b956a87e9060405160405180910390a360009250610e85565b848473ffffffffffffffffffffffffffffffffffffffff166370a08231336000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15156107f757600080fd5b6102c65a03f1151561080857600080fd5b5050506040518051905010806109305750848473ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b151561091357600080fd5b6102c65a03f1151561092457600080fd5b50505060405180519050105b1561097f5785600019166001600281111561094757fe5b60ff167f36d86c59e00bd73dc19ba3adfe068e4b64ac7e92be35546adeddf1b956a87e9060405160405180910390a360009250610e85565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f6f494c9876000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1515610a2057600080fd5b6102c65a03f11515610a3157600080fd5b505050604051805190509150600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ba20dda4876000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1515610ade57600080fd5b6102c65a03f11515610aef57600080fd5b5050506040518051905090508173ffffffffffffffffffffffffffffffffffffffff16635f0280ba87338489896000604051602001526040518663ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018086600019166000191681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200195505050505050602060405180830381600087803b1515610c1e57600080fd5b6102c65a03f11515610c2f57600080fd5b505050604051805190501515610c88578560001916600280811115610c5057fe5b60ff167f36d86c59e00bd73dc19ba3adfe068e4b64ac7e92be35546adeddf1b956a87e9060405160405180910390a360009250610e85565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166315dacbea853384896000604051602001526040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050602060405180830381600087803b1515610dbd57600080fd5b6102c65a03f11515610dce57600080fd5b505050604051805190501515610de357600080fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1687600019167f43ea5a2b552489bf9de7c3d6ded86e3b82423e034255d06db4b388f806db50d08888604051808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a48492505b505093925050505600a165627a7a72305820a5f5f8b11da4685987d7b82cefa96c87871c531e62ad3e028cb997d5c80040310029000000000000000000000000d4bcd53da2580549a2e1e4901b1c5ab2a096413a000000000000000000000000be69251a9592904d2a8556bbf8e4cc60a70554dc

    Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000d4bcd53da2580549a2e1e4901b1c5ab2a096413a000000000000000000000000be69251a9592904d2a8556bbf8e4cc60a70554dc

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000d4bcd53da2580549a2e1e4901b1c5ab2a096413a
Arg [1] : 000000000000000000000000be69251a9592904d2a8556bbf8e4cc60a70554dc


   Swarm Source:
bzzr://a5f5f8b11da4685987d7b82cefa96c87871c531e62ad3e028cb997d5c8004031

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward