UNPKG

@gooddollar/goodcontracts

Version:
721 lines (720 loc) 535 kB
{ "contractName": "Reputation", "abi": [ { "inputs": [], "payable": false, "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "_from", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "Burn", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "_to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "Mint", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "constant": true, "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "isOwner", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [], "name": "renounceOwnership", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "balance", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "uint256", "name": "_blockNumber", "type": "uint256" } ], "name": "balanceOfAt", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "uint256", "name": "_blockNumber", "type": "uint256" } ], "name": "totalSupplyAt", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "_user", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "mint", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "_user", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "burn", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" } ], "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_blockNumber\",\"type\":\"uint256\"}],\"name\":\"balanceOfAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isOwner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_blockNumber\",\"type\":\"uint256\"}],\"name\":\"totalSupplyAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"A DAO has Reputation System which allows peers to rate other peers in order to build trust . A reputation is use to assign influence measure to a DAO'S peers. Reputation is similar to regular tokens but with one crucial difference: It is non-transferable. The Reputation contract maintain a map of address to reputation value. It provides an onlyOwner functions to mint and burn reputation _to (or _from) a specific address.\",\"methods\":{\"balanceOf(address)\":{\"details\":\"return the reputation amount of a given owner\",\"params\":{\"_owner\":\"an address of the owner which we want to get his reputation\"}},\"balanceOfAt(address,uint256)\":{\"details\":\"Queries the balance of `_owner` at a specific `_blockNumber`\",\"params\":{\"_blockNumber\":\"The block number when the balance is queried\",\"_owner\":\"The address from which the balance will be retrieved\"},\"return\":\"The balance at `_blockNumber`\"},\"burn(address,uint256)\":{\"params\":{\"_amount\":\"The quantity of reputation to burn\",\"_user\":\"The address that will lose the reputation\"},\"return\":\"True if the reputation are burned correctly\"},\"isOwner()\":{\"return\":\"true if `msg.sender` is the owner of the contract.\"},\"mint(address,uint256)\":{\"params\":{\"_amount\":\"The quantity of reputation generated\",\"_user\":\"The address that will be assigned the new reputation\"},\"return\":\"True if the reputation are generated correctly\"},\"owner()\":{\"return\":\"the address of the owner.\"},\"renounceOwnership()\":{\"details\":\"Allows the current owner to relinquish control of the contract.\"},\"totalSupply()\":{\"details\":\"This function makes it easy to get the total number of reputation\",\"return\":\"The total number of reputation\"},\"totalSupplyAt(uint256)\":{\"params\":{\"_blockNumber\":\"The block number when the totalSupply is queried\"},\"return\":\"The total amount of reputation at `_blockNumber`\"},\"transferOwnership(address)\":{\"details\":\"Allows the current owner to transfer control of the contract to a newOwner.\",\"params\":{\"newOwner\":\"The address to transfer ownership to.\"}}},\"title\":\"Reputation system\"},\"userdoc\":{\"methods\":{\"burn(address,uint256)\":{\"notice\":\"Burns `_amount` reputation from `_owner`\"},\"constructor\":\"Constructor to create a Reputation\",\"mint(address,uint256)\":{\"notice\":\"Generates `_amount` reputation that are assigned to `_owner`\"},\"renounceOwnership()\":{\"notice\":\"Renouncing to ownership will leave the contract without an owner. It will not be possible to call the functions with the `onlyOwner` modifier anymore.\"},\"totalSupplyAt(uint256)\":{\"notice\":\"Total amount of reputation at a specific `_blockNumber`.\"}}}},\"settings\":{\"compilationTarget\":{\"@daostack/infra/contracts/Reputation.sol\":\"Reputation\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@daostack/infra/contracts/Reputation.sol\":{\"keccak256\":\"0x3d226dac0fe7d758f0287fb28bc25fcec1f69d19888ae3a550fa49856d61c482\",\"urls\":[\"bzz-raw://8856852c8fe0ba1c9aab326f0a9a6e7f31a238de2778fa5188e6fc399f7eb352\",\"dweb:/ipfs/QmVH4ppR9Dk7v8yxaSgeArdMv9gBBVoQxEf4E3UsqQ4rY2\"]},\"openzeppelin-solidity/contracts/ownership/Ownable.sol\":{\"keccak256\":\"0x980de387a1a020a498f53d00f89fecebb12c949a17e8f160093c0303ede2b786\",\"urls\":[\"bzz-raw://f07a2c393caa85f62f0aaa461e3edd50aa59371d4209778ba0558d7f8b4b856c\",\"dweb:/ipfs/QmeN3ZiYGSjCnQFeYaJNgoXjF9eDue1g3e9pqManRkeBtV\"]}},\"version\":1}", "bytecode": "0x60806040526000805460ff60a01b1916600960a11b17905534801561002357600080fd5b50600080546001600160a01b03191633178082556040516001600160a01b039190911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36108508061007c6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063715018a611610071578063715018a6146101785780638da5cb5b146101825780638f32d59b146101a6578063981b24d0146101ae5780639dc29fac146101cb578063f2fde38b146101f7576100a9565b806318160ddd146100ae578063313ce567146100c857806340c10f19146100e65780634ee2cd7e1461012657806370a0823114610152575b600080fd5b6100b661021d565b60408051918252519081900360200190f35b6100d061022e565b6040805160ff9092168252519081900360200190f35b610112600480360360408110156100fc57600080fd5b506001600160a01b03813516906020013561023e565b604080519115158252519081900360200190f35b6100b66004803603604081101561013c57600080fd5b506001600160a01b038135169060200135610305565b6100b66004803603602081101561016857600080fd5b50356001600160a01b0316610395565b6101806103a9565b005b61018a610404565b604080516001600160a01b039092168252519081900360200190f35b610112610413565b6100b6600480360360208110156101c457600080fd5b5035610424565b610112600480360360408110156101e157600080fd5b506001600160a01b038135169060200135610476565b6101806004803603602081101561020d57600080fd5b50356001600160a01b031661052b565b600061022843610424565b90505b90565b600054600160a01b900460ff1681565b6000610248610413565b61025157600080fd5b600061025b61021d565b905080838201101561026c57600080fd5b600061027785610395565b905080848201101561028857600080fd5b6102956002858401610548565b6001600160a01b03851660009081526001602052604090206102b990828601610548565b6040805185815290516001600160a01b038716917f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885919081900360200190a26001925050505b92915050565b6001600160a01b038216600090815260016020526040812054158061035f57506001600160a01b0383166000908152600160205260408120805484929061034857fe5b6000918252602090912001546001600160801b0316115b1561036c575060006102ff565b6001600160a01b038316600090815260016020526040902061038e9083610636565b90506102ff565b60006103a18243610305565b90505b919050565b6103b1610413565b6103ba57600080fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b6002546000901580610457575081600260008154811061044057fe5b6000918252602090912001546001600160801b0316115b15610464575060006103a4565b61046f600283610636565b90506103a4565b6000610480610413565b61048957600080fd5b600061049361021d565b90508260006104a186610395565b9050818110156104af578091505b6104bc6002838503610548565b6001600160a01b03861660009081526001602052604090206104e090838303610548565b6040805183815290516001600160a01b038816917fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5919081900360200190a250600195945050505050565b610533610413565b61053c57600080fd5b61054581610766565b50565b80816001600160801b03161461055d57600080fd5b815415806105915750815443908390600019810190811061057a57fe5b6000918252602090912001546001600160801b0316105b156105f857815460009083906105aa82600183016107d4565b815481106105b457fe5b600091825260209091200180546001600160801b03848116600160801b024382166fffffffffffffffffffffffffffffffff19909316929092171617905550610632565b81546000908390600019810190811061060d57fe5b600091825260209091200180546001600160801b03808516600160801b029116179055505b5050565b8154600090610647575060006102ff565b82548390600019810190811061065957fe5b6000918252602090912001546001600160801b031682106106a95782548390600019810190811061068657fe5b600091825260209091200154600160801b90046001600160801b031690506102ff565b826000815481106106b657fe5b6000918252602090912001546001600160801b03168210156106da575060006102ff565b8254600090600019015b8181111561073557600060026001838501010490508486828154811061070657fe5b6000918252602090912001546001600160801b0316116107285780925061072f565b6001810391505b506106e4565b84828154811061074157fe5b600091825260209091200154600160801b90046001600160801b031695945050505050565b6001600160a01b03811661077957600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b8154818355818111156107f8576000838152602090206107f89181019083016107fd565b505050565b61022b91905b808211156108175760008155600101610803565b509056fea265627a7a72315820eef52360cfb55d4a7a4e0a0476462053eb63c71a61f397940bb0010de8033bcf64736f6c63430005100032", "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c8063715018a611610071578063715018a6146101785780638da5cb5b146101825780638f32d59b146101a6578063981b24d0146101ae5780639dc29fac146101cb578063f2fde38b146101f7576100a9565b806318160ddd146100ae578063313ce567146100c857806340c10f19146100e65780634ee2cd7e1461012657806370a0823114610152575b600080fd5b6100b661021d565b60408051918252519081900360200190f35b6100d061022e565b6040805160ff9092168252519081900360200190f35b610112600480360360408110156100fc57600080fd5b506001600160a01b03813516906020013561023e565b604080519115158252519081900360200190f35b6100b66004803603604081101561013c57600080fd5b506001600160a01b038135169060200135610305565b6100b66004803603602081101561016857600080fd5b50356001600160a01b0316610395565b6101806103a9565b005b61018a610404565b604080516001600160a01b039092168252519081900360200190f35b610112610413565b6100b6600480360360208110156101c457600080fd5b5035610424565b610112600480360360408110156101e157600080fd5b506001600160a01b038135169060200135610476565b6101806004803603602081101561020d57600080fd5b50356001600160a01b031661052b565b600061022843610424565b90505b90565b600054600160a01b900460ff1681565b6000610248610413565b61025157600080fd5b600061025b61021d565b905080838201101561026c57600080fd5b600061027785610395565b905080848201101561028857600080fd5b6102956002858401610548565b6001600160a01b03851660009081526001602052604090206102b990828601610548565b6040805185815290516001600160a01b038716917f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885919081900360200190a26001925050505b92915050565b6001600160a01b038216600090815260016020526040812054158061035f57506001600160a01b0383166000908152600160205260408120805484929061034857fe5b6000918252602090912001546001600160801b0316115b1561036c575060006102ff565b6001600160a01b038316600090815260016020526040902061038e9083610636565b90506102ff565b60006103a18243610305565b90505b919050565b6103b1610413565b6103ba57600080fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b6002546000901580610457575081600260008154811061044057fe5b6000918252602090912001546001600160801b0316115b15610464575060006103a4565b61046f600283610636565b90506103a4565b6000610480610413565b61048957600080fd5b600061049361021d565b90508260006104a186610395565b9050818110156104af578091505b6104bc6002838503610548565b6001600160a01b03861660009081526001602052604090206104e090838303610548565b6040805183815290516001600160a01b038816917fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5919081900360200190a250600195945050505050565b610533610413565b61053c57600080fd5b61054581610766565b50565b80816001600160801b03161461055d57600080fd5b815415806105915750815443908390600019810190811061057a57fe5b6000918252602090912001546001600160801b0316105b156105f857815460009083906105aa82600183016107d4565b815481106105b457fe5b600091825260209091200180546001600160801b03848116600160801b024382166fffffffffffffffffffffffffffffffff19909316929092171617905550610632565b81546000908390600019810190811061060d57fe5b600091825260209091200180546001600160801b03808516600160801b029116179055505b5050565b8154600090610647575060006102ff565b82548390600019810190811061065957fe5b6000918252602090912001546001600160801b031682106106a95782548390600019810190811061068657fe5b600091825260209091200154600160801b90046001600160801b031690506102ff565b826000815481106106b657fe5b6000918252602090912001546001600160801b03168210156106da575060006102ff565b8254600090600019015b8181111561073557600060026001838501010490508486828154811061070657fe5b6000918252602090912001546001600160801b0316116107285780925061072f565b6001810391505b506106e4565b84828154811061074157fe5b600091825260209091200154600160801b90046001600160801b031695945050505050565b6001600160a01b03811661077957600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b8154818355818111156107f8576000838152602090206107f89181019083016107fd565b505050565b61022b91905b808211156108175760008155600101610803565b509056fea265627a7a72315820eef52360cfb55d4a7a4e0a0476462053eb63c71a61f397940bb0010de8033bcf64736f6c63430005100032", "sourceMap": "573:6853:62:-;;;611:26;;;-1:-1:-1;;;;611:26:62;-1:-1:-1;;;611:26:62;;;1751:37;5:2:-1;;;;30:1;27;20:12;5:2;-1:-1;515:6:77;:19;;-1:-1:-1;;;;;;515:19:77;524:10;515:19;;;;549:40;;-1:-1:-1;;;;;582:6:77;;;;515;549:40;;515:6;;549:40;573:6853:62;;;;;;", "deployedSourceMap": "573:6853:62:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;573:6853:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1920:104;;;:::i;:::-;;;;;;;;;;;;;;;;611:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3956:559;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3956:559:62;;-1:-1:-1;;;;;3956:559:62;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;2678:388;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2678:388:62;;-1:-1:-1;;;;;2678:388:62;;;;;;:::i;2266:130::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2266:130:62;-1:-1:-1;;;;;2266:130:62;;:::i;1347:137:77:-;;;:::i;:::-;;659:77;;;:::i;:::-;;;;-1:-1:-1;;;;;659:77:77;;;;;;;;;;;;;;979:90;;;:::i;3293:375:62:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3293:375:62;;:::i;4767:554::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4767:554:62;;-1:-1:-1;;;;;4767:554:62;;;;;;:::i;1655:107:77:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1655:107:77;-1:-1:-1;;;;;1655:107:77;;:::i;1920:104:62:-;1964:7;1990:27;2004:12;1990:13;:27::i;:::-;1983:34;;1920:104;;:::o;611:26::-;;;-1:-1:-1;;;611:26:62;;;;;:::o;3956:559::-;4028:4;863:9:77;:7;:9::i;:::-;855:18;;;;;;4044:22:62;4069:13;:11;:13::i;:::-;4044:38;;4128:14;4117:7;4100:14;:24;:42;;4092:51;;;;;;4175:25;4203:16;4213:5;4203:9;:16::i;:::-;4175:44;;4268:17;4257:7;4237:17;:27;:48;;4229:57;;;;;;4318:62;4335:18;4372:7;4355:14;:24;4318:16;:62::i;:::-;-1:-1:-1;;;;;4407:15:62;;;;;;-1:-1:-1;4407:15:62;;;;;4390:62;;4424:27;;;4390:16;:62::i;:::-;4467:20;;;;;;;;-1:-1:-1;;;;;4467:20:62;;;;;;;;;;;;;4504:4;4497:11;;;;883:1:77;3956:559:62;;;;:::o;2678:388::-;-1:-1:-1;;;;;2790:16:62;;2762:7;2790:16;;;-1:-1:-1;2790:16:62;;;;;:23;:28;;2789:80;;-1:-1:-1;;;;;;2824:16:62;;;;;;-1:-1:-1;2824:16:62;;;;;:19;;2856:12;;2824:16;:19;;;;;;;;;;;;;:29;-1:-1:-1;;;;;2824:29:62;:44;2789:80;2785:275;;;-1:-1:-1;2892:1:62;2885:8;;2785:275;-1:-1:-1;;;;;3018:16:62;;;;;;-1:-1:-1;3018:16:62;;;;;3007:42;;3036:12;3007:10;:42::i;:::-;3000:49;;;;2266:130;2322:15;2356:33;2368:6;2376:12;2356:11;:33::i;:::-;2349:40;;2266:130;;;;:::o;1347:137:77:-;863:9;:7;:9::i;:::-;855:18;;;;;;1445:1;1429:6;;1408:40;;-1:-1:-1;;;;;1429:6:77;;;;1408:40;;1445:1;;1408:40;1475:1;1458:19;;-1:-1:-1;;;;;;1458:19:77;;;1347:137::o;659:77::-;697:7;723:6;-1:-1:-1;;;;;723:6:77;;659:77::o;979:90::-;1019:4;1056:6;-1:-1:-1;;;;;1056:6:77;1042:10;:20;;979:90::o;3293:375:62:-;3382:18;:25;3358:7;;3382:30;;3381:84;;;3452:12;3418:18;3437:1;3418:21;;;;;;;;;;;;;;;;;:31;-1:-1:-1;;;;;3418:31:62;:46;3381:84;3377:285;;;-1:-1:-1;3488:1:62;3481:8;;3377:285;3607:44;3618:18;3638:12;3607:10;:44::i;:::-;3600:51;;;;4767:554;4839:4;863:9:77;:7;:9::i;:::-;855:18;;;;;;4855:22:62;4880:13;:11;:13::i;:::-;4855:38;-1:-1:-1;4926:7:62;4903:20;4973:16;4983:5;4973:9;:16::i;:::-;4943:46;;5025:12;5003:19;:34;4999:99;;;5068:19;5053:34;;4999:99;5107:67;5124:18;5161:12;5144:14;:29;5107:16;:67::i;:::-;-1:-1:-1;;;;;5201:15:62;;;;;;-1:-1:-1;5201:15:62;;;;;5184:69;;5218:34;;;5184:16;:69::i;:::-;5268:25;;;;;;;;-1:-1:-1;;;;;5268:25:62;;;;;;;;;;;;;-1:-1:-1;5310:4:62;;4767:554;-1:-1:-1;;;;;4767:554:62:o;1655:107:77:-;863:9;:7;:9::i;:::-;855:18;;;;;;1727:28;1746:8;1727:18;:28::i;:::-;1655:107;:::o;6783:641:62:-;-1:-1:-1;;;;;6886:25:62;;;;6878:34;;;;;;6971:18;;:23;;6970:91;;-1:-1:-1;7012:18:62;;7048:12;;7012:18;;-1:-1:-1;;7012:22:62;;;7000:35;;;;;;;;;;;;;;;:45;-1:-1:-1;;;;;7000:45:62;:60;6970:91;6966:452;;;7124:20;;7077:32;;7112:11;;7124:20;7112:11;7124:20;;;;:::i;:::-;7112:33;;;;;;;;;;;;;;;;;7159:47;;-1:-1:-1;;7159:47:62;7193:12;-1:-1:-1;;;;;7159:47:62;;;;;;;7220:37;;;;;-1:-1:-1;;;7220:37:62;;;;-1:-1:-1;6966:452:62;;;7335:18;;7288:32;;7335:18;;-1:-1:-1;;7335:20:62;;;7323:33;;;;;;;;;;;;;;;7370:37;;-1:-1:-1;;;;;7370:37:62;;;;;;-1:-1:-1;;;7370:37:62;;;;-1:-1:-1;6966:452:62;6783:641;;:::o;5717:836::-;5833:18;;5810:7;;5829:62;;-1:-1:-1;5879:1:62;5872:8;;5829:62;5970:18;;;;-1:-1:-1;;5970:20:62;;;5958:33;;;;;;;;;;;;;;;:43;-1:-1:-1;;;;;5958:43:62;5948:53;;5944:130;;6036:18;;;;-1:-1:-1;;6036:20:62;;;6024:33;;;;;;;;;;;;;;;:39;-1:-1:-1;;;6024:39:62;;-1:-1:-1;;;;;6024:39:62;;-1:-1:-1;6017:46:62;;5944:130;6096:11;6108:1;6096:14;;;;;;;;;;;;;;;;;:24;-1:-1:-1;;;;;6096:24:62;6087:33;;6083:72;;;-1:-1:-1;6143:1:62;6136:8;;6083:72;6257:18;;6218:11;;-1:-1:-1;;6257:20:62;6287:221;6300:3;6294;:9;6287:221;;;6319:11;6351:1;6346;6334:9;;;:13;6333:19;6319:33;;6398:6;6370:11;6382:3;6370:16;;;;;;;;;;;;;;;;;:26;-1:-1:-1;;;;;6370:26:62;:34;6366:132;;6430:3;6424:9;;6366:132;;;6482:1;6478:3;:5;6472:11;;6366:132;6287:221;;;;6524:11;6536:3;6524:16;;;;;;;;;;;;;;;;;:22;-1:-1:-1;;;6524:22:62;;-1:-1:-1;;;;;6524:22:62;;;-1:-1:-1;;;;;5717:836:62:o;1906:183:77:-;-1:-1:-1;;;;;1979:22:77;;1971:31;;;;;;2038:6;;;2017:38;;-1:-1:-1;;;;;2017:38:77;;;;2038:6;;;2017:38;;;2065:6;:17;;-1:-1:-1;;;;;;2065:17:77;-1:-1:-1;;;;;2065:17:77;;;;;;;;;;1906:183::o;573:6853:62:-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;", "source": "pragma solidity ^0.5.4;\n\nimport \"openzeppelin-solidity/contracts/ownership/Ownable.sol\";\n\n\n/**\n * @title Reputation system\n * @dev A DAO has Reputation System which allows peers to rate other peers in order to build trust .\n * A reputation is use to assign influence measure to a DAO'S peers.\n * Reputation is similar to regular tokens but with one crucial difference: It is non-transferable.\n * The Reputation contract maintain a map of address to reputation value.\n * It provides an onlyOwner functions to mint and burn reputation _to (or _from) a specific address.\n */\n\ncontract Reputation is Ownable {\n\n uint8 public decimals = 18; //Number of decimals of the smallest unit\n // Event indicating minting of reputation to an address.\n event Mint(address indexed _to, uint256 _amount);\n // Event indicating burning of reputation for an address.\n event Burn(address indexed _from, uint256 _amount);\n\n /// @dev `Checkpoint` is the structure that attaches a block number to a\n /// given value, the block number attached is the one that last changed the\n /// value\n struct Checkpoint {\n\n // `fromBlock` is the block number that the value was generated from\n uint128 fromBlock;\n\n // `value` is the amount of reputation at a specific block number\n uint128 value;\n }\n\n // `balances` is the map that tracks the balance of each address, in this\n // contract when the balance changes the block number that the change\n // occurred is also included in the map\n mapping (address => Checkpoint[]) balances;\n\n // Tracks the history of the `totalSupply` of the reputation\n Checkpoint[] totalSupplyHistory;\n\n /// @notice Constructor to create a Reputation\n constructor(\n ) public\n {\n }\n\n /// @dev This function makes it easy to get the total number of reputation\n /// @return The total number of reputation\n function totalSupply() public view returns (uint256) {\n return totalSupplyAt(block.number);\n }\n\n ////////////////\n // Query balance and totalSupply in History\n ////////////////\n /**\n * @dev return the reputation amount of a given owner\n * @param _owner an address of the owner which we want to get his reputation\n */\n function balanceOf(address _owner) public view returns (uint256 balance) {\n return balanceOfAt(_owner, block.number);\n }\n\n /// @dev Queries the balance of `_owner` at a specific `_blockNumber`\n /// @param _owner The address from which the balance will be retrieved\n /// @param _blockNumber The block number when the balance is queried\n /// @return The balance at `_blockNumber`\n function balanceOfAt(address _owner, uint256 _blockNumber)\n public view returns (uint256)\n {\n if ((balances[_owner].length == 0) || (balances[_owner][0].fromBlock > _blockNumber)) {\n return 0;\n // This will return the expected balance during normal situations\n } else {\n return getValueAt(balances[_owner], _blockNumber);\n }\n }\n\n /// @notice Total amount of reputation at a specific `_blockNumber`.\n /// @param _blockNumber The block number when the totalSupply is queried\n /// @return The total amount of reputation at `_blockNumber`\n function totalSupplyAt(uint256 _blockNumber) public view returns(uint256) {\n if ((totalSupplyHistory.length == 0) || (totalSupplyHistory[0].fromBlock > _blockNumber)) {\n return 0;\n // This will return the expected totalSupply during normal situations\n } else {\n return getValueAt(totalSupplyHistory, _blockNumber);\n }\n }\n\n /// @notice Generates `_amount` reputation that are assigned to `_owner`\n /// @param _user The address that will be assigned the new reputation\n /// @param _amount The quantity of reputation generated\n /// @return True if the reputation are generated correctly\n function mint(address _user, uint256 _amount) public onlyOwner returns (bool) {\n uint256 curTotalSupply = totalSupply();\n require(curTotalSupply + _amount >= curTotalSupply); // Check for overflow\n uint256 previousBalanceTo = balanceOf(_user);\n require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow\n updateValueAtNow(totalSupplyHistory, curTotalSupply + _amount);\n updateValueAtNow(balances[_user], previousBalanceTo + _amount);\n emit Mint(_user, _amount);\n return true;\n }\n\n /// @notice Burns `_amount` reputation from `_owner`\n /// @param _user The address that will lose the reputation\n /// @param _amount The quantity of reputation to burn\n /// @return True if the reputation are burned correctly\n function burn(address _user, uint256 _amount) public onlyOwner returns (bool) {\n uint256 curTotalSupply = totalSupply();\n uint256 amountBurned = _amount;\n uint256 previousBalanceFrom = balanceOf(_user);\n if (previousBalanceFrom < amountBurned) {\n amountBurned = previousBalanceFrom;\n }\n updateValueAtNow(totalSupplyHistory, curTotalSupply - amountBurned);\n updateValueAtNow(balances[_user], previousBalanceFrom - amountBurned);\n emit Burn(_user, amountBurned);\n return true;\n }\n\n ////////////////\n // Internal helper functions to query and set a value in a snapshot array\n ////////////////\n\n /// @dev `getValueAt` retrieves the number of reputation at a given block number\n /// @param checkpoints The history of values being queried\n /// @param _block The block number to retrieve the value at\n /// @return The number of reputation being queried\n function getValueAt(Checkpoint[] storage checkpoints, uint256 _block) internal view returns (uint256) {\n if (checkpoints.length == 0) {\n return 0;\n }\n\n // Shortcut for the actual value\n if (_block >= checkpoints[checkpoints.length-1].fromBlock) {\n return checkpoints[checkpoints.length-1].value;\n }\n if (_block < checkpoints[0].fromBlock) {\n return 0;\n }\n\n // Binary search of the value in the array\n uint256 min = 0;\n uint256 max = checkpoints.length-1;\n while (max > min) {\n uint256 mid = (max + min + 1) / 2;\n if (checkpoints[mid].fromBlock<=_block) {\n min = mid;\n } else {\n max = mid-1;\n }\n }\n return checkpoints[min].value;\n }\n\n /// @dev `updateValueAtNow` used to update the `balances` map and the\n /// `totalSupplyHistory`\n /// @param checkpoints The history of data being updated\n /// @param _value The new number of reputation\n function updateValueAtNow(Checkpoint[] storage checkpoints, uint256 _value) internal {\n require(uint128(_value) == _value); //check value is in the 128 bits bounderies\n if ((checkpoints.length == 0) || (checkpoints[checkpoints.length - 1].fromBlock < block.number)) {\n Checkpoint storage newCheckPoint = checkpoints[checkpoints.length++];\n newCheckPoint.fromBlock = uint128(block.number);\n newCheckPoint.value = uint128(_value);\n } else {\n Checkpoint storage oldCheckPoint = checkpoints[checkpoints.length-1];\n oldCheckPoint.value = uint128(_value);\n }\n }\n}\n", "sourcePath": "@daostack/infra/contracts/Reputation.sol", "ast": { "absolutePath": "@daostack/infra/contracts/Reputation.sol", "exportedSymbols": { "Reputation": [ 16423 ] }, "id": 16424, "nodeType": "SourceUnit", "nodes": [ { "id": 15993, "literals": [ "solidity", "^", "0.5", ".4" ], "nodeType": "PragmaDirective", "src": "0:23:62" }, { "absolutePath": "openzeppelin-solidity/contracts/ownership/Ownable.sol", "file": "openzeppelin-solidity/contracts/ownership/Ownable.sol", "id": 15994, "nodeType": "ImportDirective", "scope": 16424, "sourceUnit": 21418, "src": "25:63:62", "symbolAliases": [], "unitAlias": "" }, { "baseContracts": [ { "arguments": null, "baseName": { "contractScope": null, "id": 15995, "name": "Ownable", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 21417, "src": "596:7:62", "typeDescriptions": { "typeIdentifier": "t_contract$_Ownable_$21417", "typeString": "contract Ownable" } }, "id": 15996, "nodeType": "InheritanceSpecifier", "src": "596:7:62" } ], "contractDependencies": [ 21417 ], "contractKind": "contract", "documentation": "@title Reputation system\n@dev A DAO has Reputation System which allows peers to rate other peers in order to build trust .\nA reputation is use to assign influence measure to a DAO'S peers.\nReputation is similar to regular tokens but with one crucial difference: It is non-transferable.\nThe Reputation contract maintain a map of address to reputation value.\nIt provides an onlyOwner functions to mint and burn reputation _to (or _from) a specific address.", "fullyImplemented": true, "id": 16423, "linearizedBaseContracts": [ 16423, 21417 ], "name": "Reputation", "nodeType": "ContractDefinition", "nodes": [ { "constant": false, "id": 15999, "name": "decimals", "nodeType": "VariableDeclaration", "scope": 16423, "src": "611:26:62", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" }, "typeName": { "id": 15997, "name": "uint8", "nodeType": "ElementaryTypeName", "src": "611:5:62", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" } }, "value": { "argumentTypes": null, "hexValue": "3138", "id": 15998, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "635:2:62", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_18_by_1", "typeString": "int_const 18" }, "value": "18" }, "visibility": "public" }, { "anonymous": false, "documentation": null, "id": 16005, "name": "Mint", "nodeType": "EventDefinition", "parameters": { "id": 16004, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 16001, "indexed": true, "name": "_to", "nodeType": "VariableDeclaration", "scope": 16005, "src": "769:19:62", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 16000, "name": "address", "nodeType": "ElementaryTypeName", "src": "769:7:62", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 16003, "indexed": false, "name": "_amount", "nodeType": "VariableDeclaration", "scope": 16005, "src": "790:15:62", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 16002, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "790:7:62", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "src": "768:38:62" }, "src": "758:49:62" }, { "anonymous": false, "documentation": null, "id": 16011, "name": "Burn", "nodeType": "EventDefinition", "parameters": { "id": 16010, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 16007, "indexed": true, "name": "_from", "nodeType": "VariableDeclaration", "scope": 16011, "src": "885:21:62", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" }, "typeName": { "id": 16006, "name": "address", "nodeType": "ElementaryTypeName", "src": "885:7:62", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 16009, "indexed": false, "name": "_amount", "nodeType": "VariableDeclaration", "scope": 16011, "src": "908:15:62", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, "typeName": { "id": 16008, "name": "uint256", "nodeType": "ElementaryTypeName", "src": "908:7:62", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "value": null, "visibility": "internal" } ], "src": "884:40:62" }, "src": "874:51:62" }, { "canonicalName": "Reputation.Checkpoint", "id": 16016, "members": [ { "constant": false, "id": 16013, "name": "fromBlock", "nodeType": "VariableDeclaration", "scope": 16016, "src": "1212:17:62", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint128", "typeString": "uint128" }, "typeName": { "id": 16012, "name": "uint128", "nodeType": "ElementaryTypeName", "src": "1212:7:62", "typeDescriptions": { "typeIdentifier": "t_uint128", "typeString": "uint128" } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 16015, "name": "value", "nodeType": "VariableDeclaration", "scope": 16016, "src": "1316:13:62", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_uint128", "typeString": "uint128" }, "typeName": { "id": 16014, "name": "uint128", "nodeType": "ElementaryTypeName", "src": "1316:7:62", "typeDescriptions": { "typeIdentifier": "t_uint128", "typeString": "uint128" } }, "value": null, "visibility": "internal" } ], "name": "Checkpoint", "nodeType": "StructDefinition", "scope": 16423, "src": "1110:226:62", "visibility": "public" }, { "constant": false, "id": 16021, "name": "balances", "nodeType": "VariableDeclaration", "scope": 16423, "src": "1546:42:62", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$16016_storage_$dyn_storage_$", "typeString": "mapping(address => struct Reputation.Checkpoint[])" }, "typeName": { "id": 16020, "keyType": { "id": 16017, "name": "address", "nodeType": "ElementaryTypeName", "src": "1555:7:62", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "Mapping", "src": "1546:33:62", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$16016_storage_$dyn_storage_$", "typeString": "mapping(address => struct Reputation.Checkpoint[])" }, "valueType": { "baseType": { "contractScope": null, "id": 16018, "name": "Checkpoint", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 16016, "src": "1566:10:62", "typeDescriptions": { "typeIdentifier": "t_struct$_Checkpoint_$16016_storage_ptr", "typeString": "struct Reputation.Checkpoint" } }, "id": 16019, "length": null, "nodeType": "ArrayTypeName", "src": "1566:12:62", "typeDescriptions": { "typeIdentifier": "t_array$_t_struct$_Checkpoint_$16016_storage_$dyn_storage_ptr", "typeString": "struct Reputation.Checkpoint[]" } } }, "value": null, "visibility": "internal" }, { "constant": false, "id": 16024, "name": "totalSupplyHistory", "nodeType": "VariableDeclaration", "scope": 16423, "src": "1662:31:62", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { "typeIdentifier": "t_array$_t_struct$_Checkpoint_$16016_storage_$dyn_storage", "typeString": "struct Reputation.Checkpoint[]" }, "typeName": { "baseType": { "contractScope": null, "id": 16022, "name": "Checkpoint", "nodeType": "UserDefinedTypeName", "referencedDeclaration": 16016, "src": "1662:10:62", "typeDescriptions": { "typeIdentifier": "t_struct$_Checkpoint_$16016_storage_ptr", "typeString": "struct Reputation.Checkpoint" } }, "id": 16023, "length": null, "nodeType": "ArrayTypeName", "src": "1662:12:62", "typeDescriptions": { "typeIdentifier": "t_array$_t_struct$_Checkpoint_$16016_storage_$dyn_storage_ptr", "typeString": "struct Reputation.Checkpoint[]" } }, "value": null, "visibility": "internal" }, { "body": { "id": 16027, "nodeType": "Block", "src": "1781:7:62", "statements": [] }, "documentation": "@notice Constructor to create a Reputation", "id": 16028, "implemented": true, "kind": "constructor", "modifiers": [], "name": "", "nodeType": "FunctionDefinition", "parameters": { "id": 16025, "nodeType": "ParameterList", "parameters": [], "src": "1762:7:62" }, "returnParameters": { "id": 16026, "nodeType": "ParameterList", "parameters": [], "src": "1781:0:62" }, "scope": 16423, "src": "1751:37:62", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": {