diff --git a/source/contracts/Augur.sol b/source/contracts/Augur.sol index dc1e4610e..80d3bddf7 100644 --- a/source/contracts/Augur.sol +++ b/source/contracts/Augur.sol @@ -1,6 +1,7 @@ pragma solidity 0.4.18; import 'Controlled.sol'; +import 'IAugur.sol'; import 'libraries/token/ERC20.sol'; import 'factories/UniverseFactory.sol'; import 'reporting/IUniverse.sol'; @@ -15,7 +16,7 @@ import 'libraries/Extractable.sol'; // Centralized approval authority and event emissions -contract Augur is Controlled, Extractable { +contract Augur is Controlled, Extractable, IAugur { event MarketCreated(bytes32 indexed topic, string description, string extraInfo, address indexed universe, address market, address indexed marketCreator, bytes32[] outcomes, uint256 marketCreationFee, int256 minPrice, int256 maxPrice, IMarket.MarketType marketType); event InitialReportSubmitted(address indexed universe, address indexed reporter, address indexed market, uint256 amountStaked, bool isDesignatedReporter, uint256[] payoutNumerators); event DisputeCrowdsourcerCreated(address indexed universe, address indexed market, address disputeCrowdsourcer, uint256[] payoutNumerators, uint256 size); diff --git a/source/contracts/Controller.sol b/source/contracts/Controller.sol index e1919c15f..d9083e8ee 100644 --- a/source/contracts/Controller.sol +++ b/source/contracts/Controller.sol @@ -8,6 +8,7 @@ pragma solidity 0.4.18; * Initially, Augur will have a “dev mode” that that can be enabled to allow Augur’s team to suicide funds, extract Ether or Tokens from a specific contract (in case funds inadvertently get sent somewhere they shouldn’t have), and update the Controller of a target contract to a new Controller. Eventually, the plan is to remove this mode so that this functionality will no longer be available to anyone, including the Augur team. At that point, the `owner` address will only be able to the `emergencyStop` and `release` functions. */ +import 'IAugur.sol'; import 'IController.sol'; import 'IControlled.sol'; import 'libraries/token/ERC20Basic.sol'; @@ -178,8 +179,8 @@ contract Controller is IController { * Helper functions */ - function getAugur() public view returns (Augur) { - return Augur(lookup("Augur")); + function getAugur() public view returns (IAugur) { + return IAugur(lookup("Augur")); } function getTimestamp() public view returns (uint256) { diff --git a/source/contracts/IAugur.sol b/source/contracts/IAugur.sol new file mode 100644 index 000000000..15cd560d7 --- /dev/null +++ b/source/contracts/IAugur.sol @@ -0,0 +1,45 @@ +pragma solidity 0.4.18; + +import 'reporting/IUniverse.sol'; +import 'libraries/token/ERC20.sol'; +import 'reporting/IMarket.sol'; +import 'trading/Order.sol'; + + +contract IAugur { + function createChildUniverse(bytes32 _parentPayoutDistributionHash) public returns (IUniverse); + function isKnownUniverse(IUniverse _universe) public view returns (bool); + function trustedTransfer(ERC20 _token, address _from, address _to, uint256 _amount) public returns (bool); + function logMarketCreated(bytes32 _topic, string _description, string _extraInfo, IUniverse _universe, address _market, address _marketCreator, bytes32[] _outcomes, int256 _minPrice, int256 _maxPrice, IMarket.MarketType _marketType) public returns (bool); + function logMarketCreated(bytes32 _topic, string _description, string _extraInfo, IUniverse _universe, address _market, address _marketCreator, int256 _minPrice, int256 _maxPrice, IMarket.MarketType _marketType) public returns (bool); + function logInitialReportSubmitted(IUniverse _universe, address _reporter, address _market, uint256 _amountStaked, bool _isDesignatedReporter, uint256[] _payoutNumerators) public returns (bool); + function logDisputeCrowdsourcerCreated(IUniverse _universe, address _market, address _disputeCrowdsourcer, uint256[] _payoutNumerators, uint256 _size) public returns (bool); + function logDisputeCrowdsourcerContribution(IUniverse _universe, address _reporter, address _market, address _disputeCrowdsourcer, uint256 _amountStaked) public returns (bool); + function logDisputeCrowdsourcerCompleted(IUniverse _universe, address _market, address _disputeCrowdsourcer) public returns (bool); + function logWinningTokensRedeemed(IUniverse _universe, address _reporter, address _market, address _reportingParticipant, uint256 _amountRedeemed, uint256 _reportingFeesReceived, uint256[] _payoutNumerators) public returns (bool); + function logMarketFinalized(IUniverse _universe, address _market) public returns (bool); + function logOrderCanceled(IUniverse _universe, address _shareToken, address _sender, bytes32 _orderId, Order.Types _orderType, uint256 _tokenRefund, uint256 _sharesRefund) public returns (bool); + function logOrderCreated(Order.Types _orderType, uint256 _amount, uint256 _price, address _creator, uint256 _moneyEscrowed, uint256 _sharesEscrowed, bytes32 _tradeGroupId, bytes32 _orderId, IUniverse _universe, address _shareToken) public returns (bool); + function logOrderFilled(IUniverse _universe, address _shareToken, address _filler, bytes32 _orderId, uint256 _numCreatorShares, uint256 _numCreatorTokens, uint256 _numFillerShares, uint256 _numFillerTokens, uint256 _marketCreatorFees, uint256 _reporterFees, bytes32 _tradeGroupId) public returns (bool); + function logTradingProceedsClaimed(IUniverse _universe, address _shareToken, address _sender, address _market, uint256 _numShares, uint256 _numPayoutTokens, uint256 _finalTokenBalance) public returns (bool); + function logUniverseForked() public returns (bool); + function logUniverseCreated(IUniverse _childUniverse) public returns (bool); + function logFeeWindowTransferred(IUniverse _universe, address _from, address _to, uint256 _value) public returns (bool); + function logReputationTokensTransferred(IUniverse _universe, address _from, address _to, uint256 _value) public returns (bool); + function logDisputeCrowdsourcerTokensTransferred(IUniverse _universe, address _from, address _to, uint256 _value) public returns (bool); + function logShareTokensTransferred(IUniverse _universe, address _from, address _to, uint256 _value) public returns (bool); + function logReputationTokenBurned(IUniverse _universe, address _target, uint256 _amount) public returns (bool); + function logReputationTokenMinted(IUniverse _universe, address _target, uint256 _amount) public returns (bool); + function logShareTokenBurned(IUniverse _universe, address _target, uint256 _amount) public returns (bool); + function logShareTokenMinted(IUniverse _universe, address _target, uint256 _amount) public returns (bool); + function logFeeWindowBurned(IUniverse _universe, address _target, uint256 _amount) public returns (bool); + function logFeeWindowMinted(IUniverse _universe, address _target, uint256 _amount) public returns (bool); + function logDisputeCrowdsourcerTokensBurned(IUniverse _universe, address _target, uint256 _amount) public returns (bool); + function logDisputeCrowdsourcerTokensMinted(IUniverse _universe, address _target, uint256 _amount) public returns (bool); + function logFeeWindowCreated(IFeeWindow _feeWindow, uint256 _id) public returns (bool); + function logFeeTokenTransferred(IUniverse _universe, address _from, address _to, uint256 _value) public returns (bool); + function logFeeTokenBurned(IUniverse _universe, address _target, uint256 _amount) public returns (bool); + function logFeeTokenMinted(IUniverse _universe, address _target, uint256 _amount) public returns (bool); + function logContractAddedToWhitelist(address _addition) public returns (bool); + function logContractAddedToRegistry(bytes32 _key, address _address, bytes20 _commitHash, bytes32 _bytecodeHash) public returns (bool); +} diff --git a/source/contracts/IController.sol b/source/contracts/IController.sol index 700ea3e86..c7fe07ae4 100644 --- a/source/contracts/IController.sol +++ b/source/contracts/IController.sol @@ -1,6 +1,6 @@ pragma solidity 0.4.18; -import 'Augur.sol'; +import 'IAugur.sol'; contract IController { @@ -9,6 +9,6 @@ contract IController { function assertOnlySpecifiedCaller(address _caller, bytes32 _allowedCaller) public view returns(bool); function stopInEmergency() public view returns(bool); function onlyInEmergency() public view returns(bool); - function getAugur() public view returns (Augur); + function getAugur() public view returns (IAugur); function getTimestamp() public view returns (uint256); } diff --git a/source/contracts/factories/MarketFactory.sol b/source/contracts/factories/MarketFactory.sol index 5f1013bf8..5db257af0 100644 --- a/source/contracts/factories/MarketFactory.sol +++ b/source/contracts/factories/MarketFactory.sol @@ -6,7 +6,6 @@ import 'reporting/IMarket.sol'; import 'reporting/IReputationToken.sol'; import 'trading/ICash.sol'; import 'IController.sol'; -import 'Augur.sol'; contract MarketFactory { diff --git a/source/contracts/libraries/CashAutoConverter.sol b/source/contracts/libraries/CashAutoConverter.sol index 08d0e0b6c..5ed81191f 100644 --- a/source/contracts/libraries/CashAutoConverter.sol +++ b/source/contracts/libraries/CashAutoConverter.sol @@ -3,7 +3,7 @@ pragma solidity 0.4.18; import 'trading/ICash.sol'; import 'Controlled.sol'; -import 'Augur.sol'; +import 'IAugur.sol'; /** @@ -30,7 +30,7 @@ contract CashAutoConverter is Controlled { ICash _cash = ICash(controller.lookup("Cash")); uint256 _tokenBalance = _cash.balanceOf(msg.sender); if (_tokenBalance > 0) { - Augur augur = controller.getAugur(); + IAugur augur = controller.getAugur(); augur.trustedTransfer(_cash, msg.sender, this, _tokenBalance); _cash.withdrawEtherTo(msg.sender, _tokenBalance); } diff --git a/source/contracts/reporting/FeeToken.sol b/source/contracts/reporting/FeeToken.sol index dbb8a04b8..2ffd1ae43 100644 --- a/source/contracts/reporting/FeeToken.sol +++ b/source/contracts/reporting/FeeToken.sol @@ -4,9 +4,10 @@ import 'reporting/IFeeToken.sol'; import 'reporting/IFeeWindow.sol'; import 'libraries/DelegationTarget.sol'; import 'libraries/token/VariableSupplyToken.sol'; +import 'libraries/Extractable.sol'; -contract FeeToken is DelegationTarget, VariableSupplyToken, IFeeToken { +contract FeeToken is DelegationTarget, Extractable, VariableSupplyToken, IFeeToken { IFeeWindow private feeWindow; function initialize(IFeeWindow _feeWindow) public beforeInitialized returns (bool) { @@ -32,17 +33,21 @@ contract FeeToken is DelegationTarget, VariableSupplyToken, IFeeToken { } function onTokenTransfer(address _from, address _to, uint256 _value) internal returns (bool) { - feeWindow.getController().getAugur().logFeeTokenTransferred(feeWindow.getUniverse(), _from, _to, _value); + controller.getAugur().logFeeTokenTransferred(feeWindow.getUniverse(), _from, _to, _value); return true; } function onMint(address _target, uint256 _amount) internal returns (bool) { - feeWindow.getController().getAugur().logFeeTokenMinted(feeWindow.getUniverse(), _target, _amount); + controller.getAugur().logFeeTokenMinted(feeWindow.getUniverse(), _target, _amount); return true; } function onBurn(address _target, uint256 _amount) internal returns (bool) { - feeWindow.getController().getAugur().logFeeTokenBurned(feeWindow.getUniverse(), _target, _amount); + controller.getAugur().logFeeTokenBurned(feeWindow.getUniverse(), _target, _amount); return true; } -} \ No newline at end of file + + function getProtectedTokens() internal returns (address[] memory) { + return new address[](0); + } +} diff --git a/source/contracts/reporting/IFeeWindow.sol b/source/contracts/reporting/IFeeWindow.sol index 8e5775d32..53492e03c 100644 --- a/source/contracts/reporting/IFeeWindow.sol +++ b/source/contracts/reporting/IFeeWindow.sol @@ -8,10 +8,9 @@ import 'reporting/IReputationToken.sol'; import 'reporting/IFeeToken.sol'; import 'trading/ICash.sol'; import 'libraries/token/ERC20.sol'; -import 'IControlled.sol'; -contract IFeeWindow is ITyped, IControlled, ERC20 { +contract IFeeWindow is ITyped, ERC20 { function initialize(IUniverse _universe, uint256 _feeWindowId) public returns (bool); function noteInitialReportingGasPrice() public returns (bool); function getUniverse() public view returns (IUniverse); diff --git a/source/contracts/reporting/Mailbox.sol b/source/contracts/reporting/Mailbox.sol index a6a6be59d..139328eee 100644 --- a/source/contracts/reporting/Mailbox.sol +++ b/source/contracts/reporting/Mailbox.sol @@ -6,9 +6,10 @@ import 'libraries/token/ERC20Basic.sol'; import 'libraries/Initializable.sol'; import 'reporting/IMailbox.sol'; import 'trading/ICash.sol'; +import 'libraries/Extractable.sol'; -contract Mailbox is DelegationTarget, Ownable, Initializable, IMailbox { +contract Mailbox is DelegationTarget, Extractable, Ownable, Initializable, IMailbox { function initialize(address _owner) public onlyInGoodTimes beforeInitialized returns (bool) { endInitialization(); owner = _owner; @@ -39,4 +40,12 @@ contract Mailbox is DelegationTarget, Ownable, Initializable, IMailbox { require(_token.transfer(owner, _balance)); return true; } + + function getProtectedTokens() internal returns (address[] memory) { + address[] memory _protectedTokens = new address[](2); + // address(1) is the sentinel value for Ether extraction + _protectedTokens[0] = address(1); + _protectedTokens[1] = ICash(controller.lookup("Cash")); + return _protectedTokens; + } } diff --git a/source/contracts/reporting/Market.sol b/source/contracts/reporting/Market.sol index 487d5e02c..ac9ab5a48 100644 --- a/source/contracts/reporting/Market.sol +++ b/source/contracts/reporting/Market.sol @@ -24,7 +24,6 @@ import 'factories/MailboxFactory.sol'; import 'reporting/IMailbox.sol'; import 'reporting/Reporting.sol'; import 'reporting/IInitialReporter.sol'; -import 'Augur.sol'; contract Market is DelegationTarget, Extractable, ITyped, Initializable, Ownable, IMarket { diff --git a/source/contracts/reporting/Universe.sol b/source/contracts/reporting/Universe.sol index 8af7c54f6..a198c9b82 100644 --- a/source/contracts/reporting/Universe.sol +++ b/source/contracts/reporting/Universe.sol @@ -15,7 +15,7 @@ import 'reporting/IFeeToken.sol'; import 'reporting/Reporting.sol'; import 'reporting/IRepPriceOracle.sol'; import 'libraries/math/SafeMathUint256.sol'; -import 'Augur.sol'; +import 'IAugur.sol'; import 'libraries/Extractable.sol'; @@ -171,10 +171,11 @@ contract Universe is DelegationTarget, Extractable, ITyped, Initializable, IUniv function createChildUniverse(uint256[] _parentPayoutNumerators, bool _parentInvalid) public returns (IUniverse) { bytes32 _parentPayoutDistributionHash = forkingMarket.derivePayoutDistributionHash(_parentPayoutNumerators, _parentInvalid); IUniverse _childUniverse = getChildUniverse(_parentPayoutDistributionHash); + IAugur _augur = controller.getAugur(); if (_childUniverse == IUniverse(0)) { - _childUniverse = controller.getAugur().createChildUniverse(_parentPayoutDistributionHash); + _childUniverse = _augur.createChildUniverse(_parentPayoutDistributionHash); childUniverses[_parentPayoutDistributionHash] = _childUniverse; - controller.getAugur().logUniverseCreated(_childUniverse); + _augur.logUniverseCreated(_childUniverse); } return _childUniverse; } diff --git a/source/contracts/trading/CancelOrder.sol b/source/contracts/trading/CancelOrder.sol index d602eb798..27561ea29 100644 --- a/source/contracts/trading/CancelOrder.sol +++ b/source/contracts/trading/CancelOrder.sol @@ -14,7 +14,6 @@ import 'trading/Order.sol'; import 'reporting/IMarket.sol'; import 'trading/ICash.sol'; import 'trading/IOrders.sol'; -import 'Augur.sol'; import 'libraries/Extractable.sol'; diff --git a/source/contracts/trading/ClaimTradingProceeds.sol b/source/contracts/trading/ClaimTradingProceeds.sol index 8844959bc..34b519c13 100644 --- a/source/contracts/trading/ClaimTradingProceeds.sol +++ b/source/contracts/trading/ClaimTradingProceeds.sol @@ -10,7 +10,6 @@ import 'reporting/IMarket.sol'; import 'trading/ICash.sol'; import 'libraries/math/SafeMathUint256.sol'; import 'reporting/Reporting.sol'; -import 'Augur.sol'; import 'libraries/Extractable.sol'; diff --git a/source/contracts/trading/CompleteSets.sol b/source/contracts/trading/CompleteSets.sol index 4caa34b16..9ff9dda4d 100644 --- a/source/contracts/trading/CompleteSets.sol +++ b/source/contracts/trading/CompleteSets.sol @@ -2,7 +2,7 @@ pragma solidity 0.4.18; import 'trading/ICompleteSets.sol'; -import 'Augur.sol'; +import 'IAugur.sol'; import 'Controlled.sol'; import 'libraries/ReentrancyGuard.sol'; import 'libraries/math/SafeMathUint256.sol'; @@ -30,7 +30,7 @@ contract CompleteSets is Controlled, Extractable, CashAutoConverter, ReentrancyG uint8 _numOutcomes = _market.getNumberOfOutcomes(); ICash _denominationToken = _market.getDenominationToken(); - Augur _augur = controller.getAugur(); + IAugur _augur = controller.getAugur(); uint256 _cost = _amount.mul(_market.getNumTicks()); require(_augur.trustedTransfer(_denominationToken, _sender, _market, _cost)); diff --git a/source/contracts/trading/FillOrder.sol b/source/contracts/trading/FillOrder.sol index 1861880c7..2b2b865d2 100644 --- a/source/contracts/trading/FillOrder.sol +++ b/source/contracts/trading/FillOrder.sol @@ -2,7 +2,6 @@ pragma solidity 0.4.18; import 'trading/IFillOrder.sol'; -import 'Augur.sol'; import 'Controlled.sol'; import 'libraries/ReentrancyGuard.sol'; import 'libraries/math/SafeMathUint256.sol'; @@ -32,7 +31,7 @@ library Trade { ICash denominationToken; IShareToken longShareToken; IShareToken[] shortShareTokens; - Augur augur; + IAugur augur; } struct FilledOrder { @@ -271,7 +270,7 @@ library Trade { denominationToken: _market.getDenominationToken(), longShareToken: _market.getShareToken(_outcome), shortShareTokens: getShortShareTokens(_market, _outcome), - augur: Augur(_controller.lookup("Augur")) + augur: _controller.getAugur() }); } diff --git a/source/contracts/trading/Order.sol b/source/contracts/trading/Order.sol index b7405ec18..620f0cd04 100644 --- a/source/contracts/trading/Order.sol +++ b/source/contracts/trading/Order.sol @@ -9,7 +9,7 @@ pragma solidity 0.4.18; -import 'Augur.sol'; +import 'IAugur.sol'; import 'IController.sol'; import 'libraries/math/SafeMathUint256.sol'; import 'reporting/IMarket.sol'; @@ -34,7 +34,7 @@ library Order { // Contracts IOrders orders; IMarket market; - Augur augur; + IAugur augur; // Order bytes32 id; @@ -59,7 +59,7 @@ library Order { require(_price < _market.getNumTicks()); IOrders _orders = IOrders(_controller.lookup("Orders")); - Augur _augur = Augur(_controller.lookup("Augur")); + IAugur _augur = _controller.getAugur(); return Data({ orders: _orders, diff --git a/source/contracts/trading/Orders.sol b/source/contracts/trading/Orders.sol index 617babf8d..e93d617da 100644 --- a/source/contracts/trading/Orders.sol +++ b/source/contracts/trading/Orders.sol @@ -8,7 +8,6 @@ import 'libraries/math/SafeMathInt256.sol'; import 'trading/Order.sol'; import 'reporting/IMarket.sol'; import 'trading/IOrdersFetcher.sol'; -import 'Augur.sol'; import 'libraries/Extractable.sol'; diff --git a/source/libraries/ContractCompiler.ts b/source/libraries/ContractCompiler.ts index 727f94cec..6b286c712 100644 --- a/source/libraries/ContractCompiler.ts +++ b/source/libraries/ContractCompiler.ts @@ -103,10 +103,9 @@ export class ContractCompiler { if (abi === undefined) continue; const bytecode = compilerOutput.contracts[relativeFilePath][contractName].evm.bytecode.object; if (bytecode === undefined) continue; - // don't include interfaces - if (/^I[A-Z].*/.test(contractName)) continue; - // TODO: turn this into an error once we establish naming convention for abstract methods - if (bytecode.length === 0) continue; + // don't include interfaces or Abstract contracts + if (/^(?:I|Base)[A-Z].*/.test(contractName)) continue; + if (bytecode.length === 0) throw new Error("Contract: " + contractName + " has no bytecode, but this is not expected. It probably doesn't implement all its abstract methods"); result.contracts[relativeFilePath] = { [contractName]: { diff --git a/source/libraries/ContractInterfaces.ts b/source/libraries/ContractInterfaces.ts index 610b46ea0..2dcb0cd03 100644 --- a/source/libraries/ContractInterfaces.ts +++ b/source/libraries/ContractInterfaces.ts @@ -237,6 +237,19 @@ export class Augur extends Controlled { return result[0]; } + public logContractAddedToWhitelist = async(addition: string, options?: { sender?: string, gasPrice?: BN }): Promise => { + options = options || {}; + const abi: AbiFunction = {"constant":false,"inputs":[{"name":"_addition","type":"address"}],"name":"logContractAddedToWhitelist","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; + return await this.remoteCall(abi, [addition], options.sender, options.gasPrice); + } + + public logContractAddedToWhitelist_ = async(addition: string, options?: { sender?: string }): Promise => { + options = options || {}; + const abi: AbiFunction = {"constant":false,"inputs":[{"name":"_addition","type":"address"}],"name":"logContractAddedToWhitelist","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; + const result = await this.localCall(abi, [addition], options.sender); + return result[0]; + } + public logDisputeCrowdsourcerTokensTransferred = async(universe: string, from: string, to: string, value: BN, options?: { sender?: string, gasPrice?: BN }): Promise => { options = options || {}; const abi: AbiFunction = {"constant":false,"inputs":[{"name":"_universe","type":"address"},{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"logDisputeCrowdsourcerTokensTransferred","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; @@ -504,6 +517,19 @@ export class Augur extends Controlled { return result[0]; } + public logContractAddedToRegistry = async(key: string, address: string, commitHash: string, bytecodeHash: string, options?: { sender?: string, gasPrice?: BN }): Promise => { + options = options || {}; + const abi: AbiFunction = {"constant":false,"inputs":[{"name":"_key","type":"bytes32"},{"name":"_address","type":"address"},{"name":"_commitHash","type":"bytes20"},{"name":"_bytecodeHash","type":"bytes32"}],"name":"logContractAddedToRegistry","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; + return await this.remoteCall(abi, [key, address, commitHash, bytecodeHash], options.sender, options.gasPrice); + } + + public logContractAddedToRegistry_ = async(key: string, address: string, commitHash: string, bytecodeHash: string, options?: { sender?: string }): Promise => { + options = options || {}; + const abi: AbiFunction = {"constant":false,"inputs":[{"name":"_key","type":"bytes32"},{"name":"_address","type":"address"},{"name":"_commitHash","type":"bytes20"},{"name":"_bytecodeHash","type":"bytes32"}],"name":"logContractAddedToRegistry","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; + const result = await this.localCall(abi, [key, address, commitHash, bytecodeHash], options.sender); + return result[0]; + } + public trustedTransfer = async(token: string, from: string, to: string, amount: BN, options?: { sender?: string, gasPrice?: BN }): Promise => { options = options || {}; const abi: AbiFunction = {"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"trustedTransfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; @@ -2250,19 +2276,6 @@ export class InitialReporter extends Controlled { return result[0]; } - public depositGasBond = async( options?: { sender?: string, gasPrice?: BN, attachedEth?: BN }): Promise => { - options = options || {}; - const abi: AbiFunction = {"constant":false,"inputs":[],"name":"depositGasBond","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"}; - return await this.remoteCall(abi, [], options.sender, options.gasPrice, options.attachedEth); - } - - public depositGasBond_ = async( options?: { sender?: string, attachedEth?: BN }): Promise => { - options = options || {}; - const abi: AbiFunction = {"constant":false,"inputs":[],"name":"depositGasBond","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"}; - const result = await this.localCall(abi, [], options.sender, options.attachedEth); - return result[0]; - } - public getPayoutNumerator_ = async(outcome: BN, options?: { sender?: string }): Promise => { options = options || {}; const abi: AbiFunction = {"constant":true,"inputs":[{"name":"_outcome","type":"uint8"}],"name":"getPayoutNumerator","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}; @@ -2532,6 +2545,131 @@ export class InitialReporter extends Controlled { } } +export class Mailbox extends Controlled { + public constructor(connector: Connector, accountManager: AccountManager, address: string, defaultGasPrice: BN) { + super(connector, accountManager, address, defaultGasPrice); + } + + public suicideFunds = async(target: string, tokens: Array, options?: { sender?: string, gasPrice?: BN }): Promise => { + options = options || {}; + const abi: AbiFunction = {"constant":false,"inputs":[{"name":"_target","type":"address"},{"name":"_tokens","type":"address[]"}],"name":"suicideFunds","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; + return await this.remoteCall(abi, [target, tokens], options.sender, options.gasPrice); + } + + public suicideFunds_ = async(target: string, tokens: Array, options?: { sender?: string }): Promise => { + options = options || {}; + const abi: AbiFunction = {"constant":false,"inputs":[{"name":"_target","type":"address"},{"name":"_tokens","type":"address[]"}],"name":"suicideFunds","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; + const result = await this.localCall(abi, [target, tokens], options.sender); + return result[0]; + } + + public getController_ = async( options?: { sender?: string }): Promise => { + options = options || {}; + const abi: AbiFunction = {"constant":true,"inputs":[],"name":"getController","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}; + const result = await this.localCall(abi, [], options.sender); + return result[0]; + } + + public withdrawTokens = async(token: string, options?: { sender?: string, gasPrice?: BN }): Promise => { + options = options || {}; + const abi: AbiFunction = {"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"withdrawTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; + return await this.remoteCall(abi, [token], options.sender, options.gasPrice); + } + + public withdrawTokens_ = async(token: string, options?: { sender?: string }): Promise => { + options = options || {}; + const abi: AbiFunction = {"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"withdrawTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; + const result = await this.localCall(abi, [token], options.sender); + return result[0]; + } + + public withdrawEther = async( options?: { sender?: string, gasPrice?: BN }): Promise => { + options = options || {}; + const abi: AbiFunction = {"constant":false,"inputs":[],"name":"withdrawEther","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; + return await this.remoteCall(abi, [], options.sender, options.gasPrice); + } + + public withdrawEther_ = async( options?: { sender?: string }): Promise => { + options = options || {}; + const abi: AbiFunction = {"constant":false,"inputs":[],"name":"withdrawEther","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; + const result = await this.localCall(abi, [], options.sender); + return result[0]; + } + + public getOwner_ = async( options?: { sender?: string }): Promise => { + options = options || {}; + const abi: AbiFunction = {"constant":true,"inputs":[],"name":"getOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}; + const result = await this.localCall(abi, [], options.sender); + return result[0]; + } + + public setController = async(controller: string, options?: { sender?: string, gasPrice?: BN }): Promise => { + options = options || {}; + const abi: AbiFunction = {"constant":false,"inputs":[{"name":"_controller","type":"address"}],"name":"setController","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; + return await this.remoteCall(abi, [controller], options.sender, options.gasPrice); + } + + public setController_ = async(controller: string, options?: { sender?: string }): Promise => { + options = options || {}; + const abi: AbiFunction = {"constant":false,"inputs":[{"name":"_controller","type":"address"}],"name":"setController","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; + const result = await this.localCall(abi, [controller], options.sender); + return result[0]; + } + + public depositEther = async( options?: { sender?: string, gasPrice?: BN, attachedEth?: BN }): Promise => { + options = options || {}; + const abi: AbiFunction = {"constant":false,"inputs":[],"name":"depositEther","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"}; + return await this.remoteCall(abi, [], options.sender, options.gasPrice, options.attachedEth); + } + + public depositEther_ = async( options?: { sender?: string, attachedEth?: BN }): Promise => { + options = options || {}; + const abi: AbiFunction = {"constant":false,"inputs":[],"name":"depositEther","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"}; + const result = await this.localCall(abi, [], options.sender, options.attachedEth); + return result[0]; + } + + public controllerLookupName_ = async( options?: { sender?: string }): Promise => { + options = options || {}; + const abi: AbiFunction = {"constant":true,"inputs":[],"name":"controllerLookupName","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"}; + const result = await this.localCall(abi, [], options.sender); + return result[0]; + } + + public initialize = async(owner: string, options?: { sender?: string, gasPrice?: BN }): Promise => { + options = options || {}; + const abi: AbiFunction = {"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"initialize","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; + return await this.remoteCall(abi, [owner], options.sender, options.gasPrice); + } + + public initialize_ = async(owner: string, options?: { sender?: string }): Promise => { + options = options || {}; + const abi: AbiFunction = {"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"initialize","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; + const result = await this.localCall(abi, [owner], options.sender); + return result[0]; + } + + public getInitialized_ = async( options?: { sender?: string }): Promise => { + options = options || {}; + const abi: AbiFunction = {"constant":true,"inputs":[],"name":"getInitialized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"}; + const result = await this.localCall(abi, [], options.sender); + return result[0]; + } + + public transferOwnership = async(newOwner: string, options?: { sender?: string, gasPrice?: BN }): Promise => { + options = options || {}; + const abi: AbiFunction = {"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; + return await this.remoteCall(abi, [newOwner], options.sender, options.gasPrice); + } + + public transferOwnership_ = async(newOwner: string, options?: { sender?: string }): Promise => { + options = options || {}; + const abi: AbiFunction = {"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; + const result = await this.localCall(abi, [newOwner], options.sender); + return result[0]; + } +} + export class Market extends Controlled { public constructor(connector: Connector, accountManager: AccountManager, address: string, defaultGasPrice: BN) { super(connector, accountManager, address, defaultGasPrice); @@ -2672,6 +2810,19 @@ export class Market extends Controlled { return result[0]; } + public disavowCrowdsourcers = async( options?: { sender?: string, gasPrice?: BN }): Promise => { + options = options || {}; + const abi: AbiFunction = {"constant":false,"inputs":[],"name":"disavowCrowdsourcers","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; + return await this.remoteCall(abi, [], options.sender, options.gasPrice); + } + + public disavowCrowdsourcers_ = async( options?: { sender?: string }): Promise => { + options = options || {}; + const abi: AbiFunction = {"constant":false,"inputs":[],"name":"disavowCrowdsourcers","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; + const result = await this.localCall(abi, [], options.sender); + return result[0]; + } + public finalize = async( options?: { sender?: string, gasPrice?: BN }): Promise => { options = options || {}; const abi: AbiFunction = {"constant":false,"inputs":[],"name":"finalize","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; @@ -3129,6 +3280,13 @@ export class ReputationToken extends Controlled { return result[0]; } + public getTotalTheoreticalSupply_ = async( options?: { sender?: string }): Promise => { + options = options || {}; + const abi: AbiFunction = {"constant":true,"inputs":[],"name":"getTotalTheoreticalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}; + const result = await this.localCall(abi, [], options.sender); + return result[0]; + } + public transferFrom = async(from: string, to: string, value: BN, options?: { sender?: string, gasPrice?: BN }): Promise => { options = options || {}; const abi: AbiFunction = {"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; @@ -3229,6 +3387,13 @@ export class ReputationToken extends Controlled { return result[0]; } + public getTotalMigrated_ = async( options?: { sender?: string }): Promise => { + options = options || {}; + const abi: AbiFunction = {"constant":true,"inputs":[],"name":"getTotalMigrated","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}; + const result = await this.localCall(abi, [], options.sender); + return result[0]; + } + public setController = async(controller: string, options?: { sender?: string, gasPrice?: BN }): Promise => { options = options || {}; const abi: AbiFunction = {"constant":false,"inputs":[{"name":"_controller","type":"address"}],"name":"setController","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; @@ -3262,6 +3427,19 @@ export class ReputationToken extends Controlled { return result[0]; } + public updateParentTotalTheoreticalSupply = async( options?: { sender?: string, gasPrice?: BN }): Promise => { + options = options || {}; + const abi: AbiFunction = {"constant":false,"inputs":[],"name":"updateParentTotalTheoreticalSupply","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; + return await this.remoteCall(abi, [], options.sender, options.gasPrice); + } + + public updateParentTotalTheoreticalSupply_ = async( options?: { sender?: string }): Promise => { + options = options || {}; + const abi: AbiFunction = {"constant":false,"inputs":[],"name":"updateParentTotalTheoreticalSupply","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; + const result = await this.localCall(abi, [], options.sender); + return result[0]; + } + public transfer = async(to: string, value: BN, options?: { sender?: string, gasPrice?: BN }): Promise => { options = options || {}; const abi: AbiFunction = {"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; @@ -3308,6 +3486,19 @@ export class ReputationToken extends Controlled { return result[0]; } + public updateSiblingMigrationTotal = async(token: string, options?: { sender?: string, gasPrice?: BN }): Promise => { + options = options || {}; + const abi: AbiFunction = {"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"updateSiblingMigrationTotal","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; + return await this.remoteCall(abi, [token], options.sender, options.gasPrice); + } + + public updateSiblingMigrationTotal_ = async(token: string, options?: { sender?: string }): Promise => { + options = options || {}; + const abi: AbiFunction = {"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"updateSiblingMigrationTotal","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; + const result = await this.localCall(abi, [token], options.sender); + return result[0]; + } + public mintForReportingParticipant = async(amountMigrated: BN, options?: { sender?: string, gasPrice?: BN }): Promise => { options = options || {}; const abi: AbiFunction = {"constant":false,"inputs":[{"name":"_amountMigrated","type":"uint256"}],"name":"mintForReportingParticipant","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; @@ -3508,19 +3699,6 @@ export class Universe extends Controlled { return result[0]; } - public extractEther = async(destination: string, options?: { sender?: string, gasPrice?: BN }): Promise => { - options = options || {}; - const abi: AbiFunction = {"constant":false,"inputs":[{"name":"_destination","type":"address"}],"name":"extractEther","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; - return await this.remoteCall(abi, [destination], options.sender, options.gasPrice); - } - - public extractEther_ = async(destination: string, options?: { sender?: string }): Promise => { - options = options || {}; - const abi: AbiFunction = {"constant":false,"inputs":[{"name":"_destination","type":"address"}],"name":"extractEther","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; - const result = await this.localCall(abi, [destination], options.sender); - return result[0]; - } - public createBinaryMarket = async(endTime: BN, feePerEthInWei: BN, denominationToken: string, designatedReporterAddress: string, topic: string, description: string, extraInfo: string, options?: { sender?: string, gasPrice?: BN, attachedEth?: BN }): Promise => { options = options || {}; const abi: AbiFunction = {"constant":false,"inputs":[{"name":"_endTime","type":"uint256"},{"name":"_feePerEthInWei","type":"uint256"},{"name":"_denominationToken","type":"address"},{"name":"_designatedReporterAddress","type":"address"},{"name":"_topic","type":"bytes32"},{"name":"_description","type":"string"},{"name":"_extraInfo","type":"string"}],"name":"createBinaryMarket","outputs":[{"name":"_newMarket","type":"address"}],"payable":true,"stateMutability":"payable","type":"function"}; @@ -3541,6 +3719,13 @@ export class Universe extends Controlled { return result[0]; } + public getInitialReportMinValue_ = async( options?: { sender?: string }): Promise => { + options = options || {}; + const abi: AbiFunction = {"constant":true,"inputs":[],"name":"getInitialReportMinValue","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}; + const result = await this.localCall(abi, [], options.sender); + return result[0]; + } + public getOrCreateCurrentFeeWindow = async( options?: { sender?: string, gasPrice?: BN }): Promise => { options = options || {}; const abi: AbiFunction = {"constant":false,"inputs":[],"name":"getOrCreateCurrentFeeWindow","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; @@ -3688,6 +3873,19 @@ export class Universe extends Controlled { return result[0]; } + public updateForkValues = async( options?: { sender?: string, gasPrice?: BN }): Promise => { + options = options || {}; + const abi: AbiFunction = {"constant":false,"inputs":[],"name":"updateForkValues","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; + return await this.remoteCall(abi, [], options.sender, options.gasPrice); + } + + public updateForkValues_ = async( options?: { sender?: string }): Promise => { + options = options || {}; + const abi: AbiFunction = {"constant":false,"inputs":[],"name":"updateForkValues","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; + const result = await this.localCall(abi, [], options.sender); + return result[0]; + } + public isContainerForMarket_ = async(shadyMarket: string, options?: { sender?: string }): Promise => { options = options || {}; const abi: AbiFunction = {"constant":true,"inputs":[{"name":"_shadyMarket","type":"address"}],"name":"isContainerForMarket","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"}; @@ -3842,19 +4040,6 @@ export class Universe extends Controlled { return result[0]; } - public createChildUniverse = async(parentPayoutDistributionHash: string, options?: { sender?: string, gasPrice?: BN }): Promise => { - options = options || {}; - const abi: AbiFunction = {"constant":false,"inputs":[{"name":"_parentPayoutDistributionHash","type":"bytes32"}],"name":"createChildUniverse","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; - return await this.remoteCall(abi, [parentPayoutDistributionHash], options.sender, options.gasPrice); - } - - public createChildUniverse_ = async(parentPayoutDistributionHash: string, options?: { sender?: string }): Promise => { - options = options || {}; - const abi: AbiFunction = {"constant":false,"inputs":[{"name":"_parentPayoutDistributionHash","type":"bytes32"}],"name":"createChildUniverse","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; - const result = await this.localCall(abi, [parentPayoutDistributionHash], options.sender); - return result[0]; - } - public getFeeWindowId_ = async(timestamp: BN, options?: { sender?: string }): Promise => { options = options || {}; const abi: AbiFunction = {"constant":true,"inputs":[{"name":"_timestamp","type":"uint256"}],"name":"getFeeWindowId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}; @@ -3869,6 +4054,19 @@ export class Universe extends Controlled { return result[0]; } + public createChildUniverse = async(parentPayoutNumerators: Array, parentInvalid: boolean, options?: { sender?: string, gasPrice?: BN }): Promise => { + options = options || {}; + const abi: AbiFunction = {"constant":false,"inputs":[{"name":"_parentPayoutNumerators","type":"uint256[]"},{"name":"_parentInvalid","type":"bool"}],"name":"createChildUniverse","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; + return await this.remoteCall(abi, [parentPayoutNumerators, parentInvalid], options.sender, options.gasPrice); + } + + public createChildUniverse_ = async(parentPayoutNumerators: Array, parentInvalid: boolean, options?: { sender?: string }): Promise => { + options = options || {}; + const abi: AbiFunction = {"constant":false,"inputs":[{"name":"_parentPayoutNumerators","type":"uint256[]"},{"name":"_parentInvalid","type":"bool"}],"name":"createChildUniverse","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; + const result = await this.localCall(abi, [parentPayoutNumerators, parentInvalid], options.sender); + return result[0]; + } + public getOrCreateFeeWindowBefore = async(feeWindow: string, options?: { sender?: string, gasPrice?: BN }): Promise => { options = options || {}; const abi: AbiFunction = {"constant":false,"inputs":[{"name":"_feeWindow","type":"address"}],"name":"getOrCreateFeeWindowBefore","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; @@ -3915,19 +4113,6 @@ export class Universe extends Controlled { return result[0]; } - public extractTokens = async(destination: string, token: string, options?: { sender?: string, gasPrice?: BN }): Promise => { - options = options || {}; - const abi: AbiFunction = {"constant":false,"inputs":[{"name":"_destination","type":"address"},{"name":"_token","type":"address"}],"name":"extractTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; - return await this.remoteCall(abi, [destination, token], options.sender, options.gasPrice); - } - - public extractTokens_ = async(destination: string, token: string, options?: { sender?: string }): Promise => { - options = options || {}; - const abi: AbiFunction = {"constant":false,"inputs":[{"name":"_destination","type":"address"},{"name":"_token","type":"address"}],"name":"extractTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; - const result = await this.localCall(abi, [destination, token], options.sender); - return result[0]; - } - public getNextFeeWindow_ = async( options?: { sender?: string }): Promise => { options = options || {}; const abi: AbiFunction = {"constant":true,"inputs":[],"name":"getNextFeeWindow","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}; @@ -3942,6 +4127,19 @@ export class Universe extends Controlled { return result[0]; } + public updateTentativeWinningChildUniverse = async(parentPayoutDistributionHash: string, options?: { sender?: string, gasPrice?: BN }): Promise => { + options = options || {}; + const abi: AbiFunction = {"constant":false,"inputs":[{"name":"_parentPayoutDistributionHash","type":"bytes32"}],"name":"updateTentativeWinningChildUniverse","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; + return await this.remoteCall(abi, [parentPayoutDistributionHash], options.sender, options.gasPrice); + } + + public updateTentativeWinningChildUniverse_ = async(parentPayoutDistributionHash: string, options?: { sender?: string }): Promise => { + options = options || {}; + const abi: AbiFunction = {"constant":false,"inputs":[{"name":"_parentPayoutDistributionHash","type":"bytes32"}],"name":"updateTentativeWinningChildUniverse","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; + const result = await this.localCall(abi, [parentPayoutDistributionHash], options.sender); + return result[0]; + } + public isContainerForReportingParticipant_ = async(shadyReportingParticipant: string, options?: { sender?: string }): Promise => { options = options || {}; const abi: AbiFunction = {"constant":true,"inputs":[{"name":"_shadyReportingParticipant","type":"address"}],"name":"isContainerForReportingParticipant","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"}; @@ -3949,6 +4147,13 @@ export class Universe extends Controlled { return result[0]; } + public getDisputeThresholdForFork_ = async( options?: { sender?: string }): Promise => { + options = options || {}; + const abi: AbiFunction = {"constant":true,"inputs":[],"name":"getDisputeThresholdForFork","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}; + const result = await this.localCall(abi, [], options.sender); + return result[0]; + } + public getOrCacheDesignatedReportNoShowBond = async( options?: { sender?: string, gasPrice?: BN }): Promise => { options = options || {}; const abi: AbiFunction = {"constant":false,"inputs":[],"name":"getOrCacheDesignatedReportNoShowBond","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; @@ -4305,19 +4510,6 @@ export class ClaimTradingProceeds extends Controlled { return result[0]; } - public claimTradingProceeds = async(market: string, options?: { sender?: string, gasPrice?: BN }): Promise => { - options = options || {}; - const abi: AbiFunction = {"constant":false,"inputs":[{"name":"_market","type":"address"}],"name":"claimTradingProceeds","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; - return await this.remoteCall(abi, [market], options.sender, options.gasPrice); - } - - public claimTradingProceeds_ = async(market: string, options?: { sender?: string }): Promise => { - options = options || {}; - const abi: AbiFunction = {"constant":false,"inputs":[{"name":"_market","type":"address"}],"name":"claimTradingProceeds","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; - const result = await this.localCall(abi, [market], options.sender); - return result[0]; - } - public getController_ = async( options?: { sender?: string }): Promise => { options = options || {}; const abi: AbiFunction = {"constant":true,"inputs":[],"name":"getController","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}; @@ -4364,6 +4556,19 @@ export class ClaimTradingProceeds extends Controlled { return result[0]; } + public claimTradingProceeds = async(market: string, shareHolder: string, options?: { sender?: string, gasPrice?: BN }): Promise => { + options = options || {}; + const abi: AbiFunction = {"constant":false,"inputs":[{"name":"_market","type":"address"},{"name":"_shareHolder","type":"address"}],"name":"claimTradingProceeds","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; + return await this.remoteCall(abi, [market, shareHolder], options.sender, options.gasPrice); + } + + public claimTradingProceeds_ = async(market: string, shareHolder: string, options?: { sender?: string }): Promise => { + options = options || {}; + const abi: AbiFunction = {"constant":false,"inputs":[{"name":"_market","type":"address"},{"name":"_shareHolder","type":"address"}],"name":"claimTradingProceeds","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; + const result = await this.localCall(abi, [market, shareHolder], options.sender); + return result[0]; + } + public divideUpWinnings = async(market: string, outcome: BN, numberOfShares: BN, options?: { sender?: string, gasPrice?: BN }): Promise => { options = options || {}; const abi: AbiFunction = {"constant":false,"inputs":[{"name":"_market","type":"address"},{"name":"_outcome","type":"uint8"},{"name":"_numberOfShares","type":"uint256"}],"name":"divideUpWinnings","outputs":[{"name":"_proceeds","type":"uint256"},{"name":"_shareHolderShare","type":"uint256"},{"name":"_creatorShare","type":"uint256"},{"name":"_reporterShare","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"}; diff --git a/source/libraries/ContractInterfacesGenerator.ts b/source/libraries/ContractInterfacesGenerator.ts index f9d0646cd..b713335ea 100644 --- a/source/libraries/ContractInterfacesGenerator.ts +++ b/source/libraries/ContractInterfacesGenerator.ts @@ -108,6 +108,11 @@ export class ContractInterfaceGenerator { } const extendsControlled: boolean = seen.has("getController") && contractName != "Controlled"; + if (extendsControlled) { + if (!seen.has("extractTokens") && contractName != "Delegator") { + throw new Error("Controlled contracts must inherit the Extractable class. " + contractName + " does not."); + } + } return `export class ${contractName} extends ${extendsControlled ? "Controlled" : "Contract"} { public constructor(connector: Connector, accountManager: AccountManager, address: string, defaultGasPrice: BN) { diff --git a/source/tests-unit/Universe.ts b/source/tests-unit/Universe.ts deleted file mode 100644 index ee3a903b1..000000000 --- a/source/tests-unit/Universe.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { expect } from "chai"; - -describe("Universe", () => { - it("#getTypeName()", async () => { - // TODO: figure out how we want to do unit testing - expect(true).to.equal(true); - }); -}); diff --git a/source/tools/generateContractInterfaces.ts b/source/tools/generateContractInterfaces.ts index c2a56ce07..3c82249a7 100644 --- a/source/tools/generateContractInterfaces.ts +++ b/source/tools/generateContractInterfaces.ts @@ -16,5 +16,5 @@ doWork().then(() => { process.exit(); }).catch(error => { console.log(error); - process.exit(); + process.exit(1); }); diff --git a/support/Dockerfile b/support/Dockerfile index 56ec7bed2..089962f49 100644 --- a/support/Dockerfile +++ b/support/Dockerfile @@ -1,7 +1,7 @@ ## # Build a base package for augur-core. # -# The build process is strucutred this way to encourage fail fast behavior so +# The build process is structured this way to encourage fail fast behavior so # that this image's build will fail earlier for compiling contracts than # for other pieces FROM python:2.7.13 @@ -44,7 +44,6 @@ COPY source/tools/generateContractInterfaces.ts /app/source/tools/generateContra RUN npm run build:source RUN npm run build:interfaces - COPY ./support/deploy/deploy.sh /app/support/deploy/deploy.sh COPY ./support/deploy/run.sh /app/support/deploy/run.sh COPY ./support/artifacts/run.sh /app/support/artifacts/run.sh diff --git a/tests/solidity_test_helpers/MockFeeWindow.sol b/tests/solidity_test_helpers/MockFeeWindow.sol index e60b4ed25..c9e02426b 100644 --- a/tests/solidity_test_helpers/MockFeeWindow.sol +++ b/tests/solidity_test_helpers/MockFeeWindow.sol @@ -3,6 +3,7 @@ pragma solidity ^0.4.18; import 'reporting/IMarket.sol'; import 'reporting/IUniverse.sol'; import 'reporting/IFeeWindow.sol'; +import 'IController.sol'; import 'libraries/ITyped.sol'; import 'reporting/IReputationToken.sol'; import 'libraries/Initializable.sol'; diff --git a/tests/solidity_test_helpers/MockMarketFactory.sol b/tests/solidity_test_helpers/MockMarketFactory.sol index 6a15ce984..b0a033c83 100644 --- a/tests/solidity_test_helpers/MockMarketFactory.sol +++ b/tests/solidity_test_helpers/MockMarketFactory.sol @@ -5,7 +5,6 @@ import 'reporting/IMarket.sol'; import 'reporting/IReputationToken.sol'; import 'trading/ICash.sol'; import 'IController.sol'; -import 'Augur.sol'; contract MockMarketFactory {