{ "contractName": "ITokenLocking", "abi": [ { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "colonyNetwork", "type": "address" } ], "name": "ColonyNetworkSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "userAddress", "type": "address" }, { "indexed": false, "internalType": "address payable", "name": "relayerAddress", "type": "address" }, { "indexed": false, "internalType": "bytes", "name": "payload", "type": "bytes" } ], "name": "MetaTransactionExecuted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "address", "name": "by", "type": "address" }, { "indexed": false, "internalType": "address", "name": "from", "type": "address" }, { "indexed": false, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "StakeTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "token", "type": "address" }, { "indexed": true, "internalType": "address", "name": "lockedBy", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "lockCount", "type": "uint256" } ], "name": "TokenLocked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "address", "name": "approvedBy", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "UserTokenApproved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "UserTokenClaimed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "address", "name": "obligatedBy", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "UserTokenDeobligated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "UserTokenDeposited", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "address", "name": "obligatedBy", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "UserTokenObligated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "UserTokenTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "lockId", "type": "uint256" } ], "name": "UserTokenUnlocked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "UserTokenWithdrawn", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "userAddress", "type": "address" }, { "internalType": "bytes", "name": "payload", "type": "bytes" }, { "internalType": "bytes32", "name": "sigR", "type": "bytes32" }, { "internalType": "bytes32", "name": "sigS", "type": "bytes32" }, { "internalType": "uint8", "name": "sigV", "type": "uint8" } ], "name": "executeMetaTransaction", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "userAddress", "type": "address" } ], "name": "getMetatransactionNonce", "outputs": [ { "internalType": "uint256", "name": "nonce", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_colonyNetwork", "type": "address" } ], "name": "setColonyNetwork", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getColonyNetwork", "outputs": [ { "internalType": "address", "name": "networkAddress", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_token", "type": "address" } ], "name": "lockToken", "outputs": [ { "internalType": "uint256", "name": "lockCount", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_token", "type": "address" }, { "internalType": "address", "name": "_user", "type": "address" }, { "internalType": "uint256", "name": "_lockId", "type": "uint256" } ], "name": "unlockTokenForUser", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_token", "type": "address" }, { "internalType": "uint256", "name": "_lockId", "type": "uint256" } ], "name": "incrementLockCounterTo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_token", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "bool", "name": "_force", "type": "bool" } ], "name": "deposit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_token", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "deposit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_token", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "address", "name": "_recipient", "type": "address" } ], "name": "depositFor", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_token", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "address", "name": "_recipient", "type": "address" }, { "internalType": "bool", "name": "_force", "type": "bool" } ], "name": "transfer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_token", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "bool", "name": "_force", "type": "bool" } ], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_token", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_recipient", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "reward", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_user", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "address", "name": "_token", "type": "address" } ], "name": "approveStake", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_user", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "address", "name": "_token", "type": "address" } ], "name": "obligateStake", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_user", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "address", "name": "_token", "type": "address" } ], "name": "deobligateStake", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_user", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "address", "name": "_token", "type": "address" }, { "internalType": "address", "name": "_recipient", "type": "address" } ], "name": "transferStake", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_token", "type": "address" } ], "name": "getTotalLockCount", "outputs": [ { "internalType": "uint256", "name": "lockCount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_token", "type": "address" }, { "internalType": "address", "name": "_user", "type": "address" } ], "name": "getUserLock", "outputs": [ { "components": [ { "internalType": "uint256", "name": "lockCount", "type": "uint256" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "DEPRECATED_timestamp", "type": "uint256" }, { "internalType": "uint256", "name": "pendingBalance", "type": "uint256" } ], "internalType": "struct TokenLockingDataTypes.Lock", "name": "lock", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_user", "type": "address" }, { "internalType": "address", "name": "_token", "type": "address" } ], "name": "getTotalObligation", "outputs": [ { "internalType": "uint256", "name": "obligation", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_user", "type": "address" }, { "internalType": "address", "name": "_token", "type": "address" }, { "internalType": "address", "name": "_obligator", "type": "address" } ], "name": "getApproval", "outputs": [ { "internalType": "uint256", "name": "approval", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_user", "type": "address" }, { "internalType": "address", "name": "_token", "type": "address" }, { "internalType": "address", "name": "_obligator", "type": "address" } ], "name": "getObligation", "outputs": [ { "internalType": "uint256", "name": "approval", "type": "uint256" } ], "stateMutability": "view", "type": "function" } ], "devdoc": { "kind": "dev", "methods": { "approveStake(address,uint256,address)": { "details": "Can only be called by a colony or colonyNetwork", "params": { "_amount": "Amount of that colony's internal token up to which we are willing to be obligated.", "_token": "The colony's internal token address", "_user": "Address of the user that is allowing their holdings to be staked by the caller" } }, "deobligateStake(address,uint256,address)": { "params": { "_amount": "Amount of colony's internal token we are deobligating.", "_token": "The colony's internal token address", "_user": "Address of the account we are deobligating." } }, "deposit(address,uint256)": { "params": { "_amount": "Amount to deposit", "_token": "Address of the token to deposit" } }, "deposit(address,uint256,bool)": { "params": { "_amount": "Amount to deposit", "_force": "Pass true to forcibly unlock the token", "_token": "Address of the token to deposit" } }, "depositFor(address,uint256,address)": { "params": { "_amount": "Amount to deposit", "_recipient": "User to receive the tokens", "_token": "Address of the token to deposit" } }, "executeMetaTransaction(address,bytes,bytes32,bytes32,uint8)": { "params": { "payload": "The transaction data that will be executed if signature valid", "sigR": "The 'r' part of the signature", "sigS": "The 's' part of the signature", "sigV": "The 'v' part of the signature", "userAddress": "The address of the user that signed the metatransaction" } }, "getApproval(address,address,address)": { "params": { "_obligator": "The address that has been approved to obligate the funds.", "_token": "The token for which the user has provided the approval.", "_user": "Address of the account that has approved _approvee to obligate their funds." }, "returns": { "approval": "The total amount for this obligation" } }, "getColonyNetwork()": { "returns": { "networkAddress": "ColonyNetwork address" } }, "getMetatransactionNonce(address)": { "params": { "userAddress": "The address of the user that will sign the metatransaction" } }, "getObligation(address,address,address)": { "params": { "_obligator": "The address that obligated the funds (and therefore can slash or return them).", "_token": "The token for which the user has provided the approval.", "_user": "Address of the account that has had their funds obligated." }, "returns": { "approval": "The total amount for this obligation" } }, "getTotalLockCount(address)": { "params": { "_token": "Address of the token" }, "returns": { "lockCount": "Global token lock count" } }, "getTotalObligation(address,address)": { "params": { "_token": "The token for which the user is obligated.", "_user": "Address of the obligated account." }, "returns": { "obligation": "The total amount this user is obligated" } }, "getUserLock(address,address)": { "params": { "_token": "Address of the token", "_user": "Address of the user" }, "returns": { "lock": "Lock object containing: `lockCount` User's token lock count, `balance` User's deposited amount, `DEPRECATED_timestamp` Timestamp of deposit (deprecated) `pendingBalance` Tokens that have been sent to them, but are inaccessible until all locks are cleared and then these tokens are claimed" } }, "incrementLockCounterTo(address,uint256)": { "params": { "_lockId": "Id of the lock user wants to increment to", "_token": "Address of the token we want to increment lock count for" } }, "lockToken(address)": { "params": { "_token": "Address of the token we want to lock" }, "returns": { "lockCount": "Updated total token lock count" } }, "obligateStake(address,uint256,address)": { "params": { "_amount": "Amount of the colony's internal token we are obligating.", "_token": "The colony's internal token address", "_user": "Address of the account we are obligating." } }, "reward(address,uint256)": { "details": "It's a NOOP. You don't need to call this, and if you write a contract that does it will break in the future.", "params": { "_amount": "The amount to reward", "_recipient": "The address to receive the reward" } }, "setColonyNetwork(address)": { "details": "ColonyNetwork is used for checking if sender is a colony created on colony network.", "params": { "_colonyNetwork": "Address of the ColonyNetwork" } }, "transfer(address,uint256,address,bool)": { "params": { "_amount": "Amount to transfer", "_force": "Pass true to forcibly unlock the token", "_recipient": "User to receive the tokens", "_token": "Address of the token to transfer" } }, "transferStake(address,uint256,address,address)": { "params": { "_amount": "Amount of colony's internal token we are taking.", "_recipient": "Recipient of the slashed tokens", "_token": "The colony's internal token address", "_user": "Address of the account we are taking." } }, "unlockTokenForUser(address,address,uint256)": { "params": { "_lockId": "Id of the lock we want to increment to", "_token": "Address of the token we want to unlock", "_user": "Address of the user" } }, "withdraw(address,uint256)": { "params": { "_amount": "Amount to withdraw", "_token": "Address of the token to withdraw from" } }, "withdraw(address,uint256,bool)": { "params": { "_amount": "Amount to withdraw", "_force": "Pass true to forcibly unlock the token", "_token": "Address of the token to withdraw from" } } }, "version": 1 }, "userdoc": { "kind": "user", "methods": { "approveStake(address,uint256,address)": { "notice": "Allow the colony to obligate some amount of tokens as a stake." }, "deobligateStake(address,uint256,address)": { "notice": "Deobligate the user some amount of tokens, releasing the stake. Can only be called by a colony or colonyNetwork." }, "deposit(address,uint256)": { "notice": "@deprecatedDeposit `_amount` of deposited tokens. Can only be called if user tokens are not locked. Before calling this function user has to allow that their tokens can be transferred by token locking contract." }, "deposit(address,uint256,bool)": { "notice": "Deposit `_amount` of colony tokens. Before calling this function user has to allow that their tokens can be transferred by token locking contract." }, "depositFor(address,uint256,address)": { "notice": "Deposit `_amount` of colony tokens in the recipient's account. Goes into pendingBalance if token is locked." }, "executeMetaTransaction(address,bytes,bytes32,bytes32,uint8)": { "notice": "Executes a metatransaction targeting this contract" }, "getApproval(address,address,address)": { "notice": "See how much an address has approved another address to obligate on their behalf." }, "getColonyNetwork()": { "notice": "Get ColonyNetwork address." }, "getMetatransactionNonce(address)": { "notice": "Gets the next metatransaction nonce for user that should be used targeting this contract" }, "getObligation(address,address,address)": { "notice": "See how much a user is currently obligated by another." }, "getTotalLockCount(address)": { "notice": "Get global lock count for a specific token." }, "getTotalObligation(address,address)": { "notice": "See the total amount of a user's obligation." }, "getUserLock(address,address)": { "notice": "Get user token lock info (lock count and deposited amount)." }, "incrementLockCounterTo(address,uint256)": { "notice": "Increments sender's lock count to `_lockId`." }, "lockToken(address)": { "notice": "Locks everyones' tokens on `_token` address." }, "obligateStake(address,uint256,address)": { "notice": "Obligate the user some amount of tokens as a stake. Can only be called by a colony or colonyNetwork." }, "reward(address,uint256)": { "notice": "This function is deprecated and only exists to aid upgrades." }, "setColonyNetwork(address)": { "notice": "Set the ColonyNetwork contract address." }, "transfer(address,uint256,address,bool)": { "notice": "Transfer tokens to a recipient's pending balance. Can only be called if user tokens are not locked." }, "transferStake(address,uint256,address,address)": { "notice": "Transfer some amount of staked tokens. Can only be called by a colony or colonyNetwork." }, "unlockTokenForUser(address,address,uint256)": { "notice": "Increments the lock counter to `_lockId` for the `_user` if user's lock count is less than `_lockId` by 1. Can only be called by a colony." }, "withdraw(address,uint256)": { "notice": "@deprecatedWithdraw `_amount` of deposited tokens. Can only be called if user tokens are not locked." }, "withdraw(address,uint256,bool)": { "notice": "Withdraw `_amount` of deposited tokens. Set `_force` to `true` to forcibly unlock the token before the withdrawal." } }, "version": 1 } }