{ "contractName": "CoinMachine", "abi": [ { "anonymous": false, "inputs": [], "name": "ExtensionInitialised", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "authority", "type": "address" } ], "name": "LogSetAuthority", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" } ], "name": "LogSetOwner", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "activePeriod", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "currentPeriod", "type": "uint256" } ], "name": "PeriodUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bool", "name": "evolvePrice", "type": "bool" } ], "name": "PriceEvolutionSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "buyer", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "numTokens", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalCost", "type": "uint256" } ], "name": "TokensBought", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "whitelist", "type": "address" } ], "name": "WhitelistSet", "type": "event" }, { "inputs": [], "name": "authority", "outputs": [ { "internalType": "contract DSAuthority", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "_sig", "type": "bytes4" } ], "name": "getCapabilityRoles", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getColony", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getDeprecated", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract DSAuthority", "name": "authority_", "type": "address" } ], "name": "setAuthority", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner_", "type": "address" } ], "name": "setOwner", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "identifier", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "version", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_colony", "type": "address" } ], "name": "install", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "finishUpgrade", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "_deprecated", "type": "bool" } ], "name": "deprecate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "uninstall", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_token", "type": "address" }, { "internalType": "address", "name": "_purchaseToken", "type": "address" }, { "internalType": "uint256", "name": "_periodLength", "type": "uint256" }, { "internalType": "uint256", "name": "_windowSize", "type": "uint256" }, { "internalType": "uint256", "name": "_targetPerPeriod", "type": "uint256" }, { "internalType": "uint256", "name": "_maxPerPeriod", "type": "uint256" }, { "internalType": "uint256", "name": "_userLimitFraction", "type": "uint256" }, { "internalType": "uint256", "name": "_startingPrice", "type": "uint256" }, { "internalType": "address", "name": "_whitelist", "type": "address" } ], "name": "initialise", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_whitelist", "type": "address" } ], "name": "setWhitelist", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_numTokens", "type": "uint256" } ], "name": "buyTokens", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "updatePeriod", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getPurchaseToken", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getToken", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getActivePeriod", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getActiveSold", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getActiveIntake", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getEMAIntake", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTokenBalance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPeriodLength", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getWindowSize", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTargetPerPeriod", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getMaxPerPeriod", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getCurrentPrice", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getSellableTokens", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_user", "type": "address" } ], "name": "getUserLimit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_user", "type": "address" } ], "name": "getMaxPurchase", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getWhitelist", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getEvolvePrice", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" } ], "devdoc": { "kind": "dev", "methods": { "buyTokens(uint256)": { "params": { "_numTokens": "The number of tokens to purchase" } }, "initialise(address,address,uint256,uint256,uint256,uint256,uint256,uint256,address)": { "params": { "_maxPerPeriod": "The maximum number of tokens that can be sold per period", "_periodLength": "How long in seconds each period of the sale should last", "_purchaseToken": "The token to receive payments in. Use 0x0 for ether", "_startingPrice": "The sale price to start at, expressed in units of _purchaseToken per token being sold, as a WAD", "_targetPerPeriod": "The number of tokens to aim to sell per period", "_token": "The token we are selling. Cannot be ether", "_whitelist": "Optionally an address of a whitelist contract to use can be provided. Pass 0x0 if no whitelist being used", "_windowSize": "Characteristic number of periods that should be used for the moving average. In the long-term, 86% of the weighting will be in this window size. The higher the number, the slower the price will be to adjust" } }, "install(address)": { "params": { "_colony": "The colony in which the extension holds permissions" } }, "setWhitelist(address)": { "params": { "_whitelist": "The address of the whitelist" } } }, "version": 1 }, "userdoc": { "kind": "user", "methods": { "buyTokens(uint256)": { "notice": "Purchase tokens from Coin Machine." }, "deprecate(bool)": { "notice": "Called when deprecating (or undeprecating) the extension" }, "finishUpgrade()": { "notice": "Called when upgrading the extension" }, "getActiveIntake()": { "notice": "Get the number of tokens received in the period that the price was last updated for or a purchase was made" }, "getActivePeriod()": { "notice": "Get the period that the price was last updated for or a purchase was made" }, "getActiveSold()": { "notice": "Get the number of tokens sold in the period that the price was last updated for or a purchase was made" }, "getCurrentPrice()": { "notice": "Get the current price per token" }, "getEMAIntake()": { "notice": "Get the EMA of the number of tokens received each period" }, "getEvolvePrice()": { "notice": "Get the evolvePrice boolean" }, "getMaxPerPeriod()": { "notice": "Get the maximum number of tokens to sell per period" }, "getMaxPurchase(address)": { "notice": "Get the maximum amount of tokens a user can purchase in a period" }, "getPeriodLength()": { "notice": "Get the length of the sale period" }, "getPurchaseToken()": { "notice": "Get the address of the token being used to make purchases" }, "getSellableTokens()": { "notice": "Get the number of remaining tokens for sale this period" }, "getTargetPerPeriod()": { "notice": "Get the target number of tokens to sell per period" }, "getToken()": { "notice": "Get the address of the token being sold" }, "getTokenBalance()": { "notice": "Get the remaining balance of tokens" }, "getUserLimit(address)": { "notice": "Get the maximum amount of tokens a user can purchase in total" }, "getWhitelist()": { "notice": "Get the address of the whitelist (if exists)" }, "getWindowSize()": { "notice": "Get the size of the averaging window" }, "identifier()": { "notice": "Returns the identifier of the extension" }, "initialise(address,address,uint256,uint256,uint256,uint256,uint256,uint256,address)": { "notice": "Must be called before any sales can be made" }, "install(address)": { "notice": "Configures the extension" }, "setWhitelist(address)": { "notice": "Set the address for an (optional) whitelist" }, "uninstall()": { "notice": "Called when uninstalling the extension" }, "updatePeriod()": { "notice": "Bring the token accounting current" }, "version()": { "notice": "Returns the version of the extension" } }, "version": 1 } }