@gooddollar/goodcontracts
Version:
GoodDollar Contracts
725 lines • 534 kB
JSON
{
"contractName": "Reputation",
"abi": [
{
"constant": true,
"inputs": [],
"name": "decimals",
"outputs": [
{
"name": "",
"type": "uint8"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "owner",
"outputs": [
{
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "isOwner",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "_to",
"type": "address"
},
{
"indexed": false,
"name": "_amount",
"type": "uint256"
}
],
"name": "Mint",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "_from",
"type": "address"
},
{
"indexed": false,
"name": "_amount",
"type": "uint256"
}
],
"name": "Burn",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"constant": true,
"inputs": [],
"name": "totalSupply",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "_owner",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"name": "balance",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "_owner",
"type": "address"
},
{
"name": "_blockNumber",
"type": "uint256"
}
],
"name": "balanceOfAt",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "_blockNumber",
"type": "uint256"
}
],
"name": "totalSupplyAt",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "_user",
"type": "address"
},
{
"name": "_amount",
"type": "uint256"
}
],
"name": "mint",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "_user",
"type": "address"
},
{
"name": "_amount",
"type": "uint256"
}
],
"name": "burn",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
}
],
"metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_user\",\"type\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_blockNumber\",\"type\":\"uint256\"}],\"name\":\"balanceOfAt\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"balance\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isOwner\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_blockNumber\",\"type\":\"uint256\"}],\"name\":\"totalSupplyAt\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_user\",\"type\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"}],\"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\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@daostack/infra/contracts/Reputation.sol\":{\"keccak256\":\"0x3d226dac0fe7d758f0287fb28bc25fcec1f69d19888ae3a550fa49856d61c482\",\"urls\":[\"bzzr://7f219e1874d4f1aea860cc665b75015797f55f149e9bf490abab5d7ad2adfeb9\"]},\"openzeppelin-solidity/contracts/ownership/Ownable.sol\":{\"keccak256\":\"0x980de387a1a020a498f53d00f89fecebb12c949a17e8f160093c0303ede2b786\",\"urls\":[\"bzzr://08894efa2a557982070beda6a81a032407e70532d24bdafe80d39660c74904d9\"]}},\"version\":1}",
"bytecode": "0x60806040526000805460a060020a60ff0219167412000000000000000000000000000000000000000017905534801561003757600080fd5b5060008054600160a060020a0319163317808255604051600160a060020a039190911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36108d7806100906000396000f3fe608060405234801561001057600080fd5b50600436106100c6576000357c010000000000000000000000000000000000000000000000000000000090048063715018a61161008e578063715018a6146101955780638da5cb5b1461019f5780638f32d59b146101c3578063981b24d0146101cb5780639dc29fac146101e8578063f2fde38b14610214576100c6565b806318160ddd146100cb578063313ce567146100e557806340c10f19146101035780634ee2cd7e1461014357806370a082311461016f575b600080fd5b6100d361023a565b60408051918252519081900360200190f35b6100ed61024b565b6040805160ff9092168252519081900360200190f35b61012f6004803603604081101561011957600080fd5b50600160a060020a03813516906020013561026c565b604080519115158252519081900360200190f35b6100d36004803603604081101561015957600080fd5b50600160a060020a038135169060200135610335565b6100d36004803603602081101561018557600080fd5b5035600160a060020a03166103c7565b61019d6103db565b005b6101a7610445565b60408051600160a060020a039092168252519081900360200190f35b61012f610454565b6100d3600480360360208110156101e157600080fd5b5035610465565b61012f600480360360408110156101fe57600080fd5b50600160a060020a0381351690602001356104b9565b61019d6004803603602081101561022a57600080fd5b5035600160a060020a0316610570565b600061024543610465565b90505b90565b60005474010000000000000000000000000000000000000000900460ff1681565b6000610276610454565b151561028157600080fd5b600061028b61023a565b905082810181111561029c57600080fd5b60006102a7856103c7565b90508381018111156102b857600080fd5b6102c5600285840161058f565b600160a060020a03851660009081526001602052604090206102e99082860161058f565b604080518581529051600160a060020a038716917f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885919081900360200190a26001925050505b92915050565b600160a060020a03821660009081526001602052604081205415806103915750600160a060020a03831660009081526001602052604081208054849290811061037a57fe5b6000918252602090912001546001608060020a0316115b1561039e5750600061032f565b600160a060020a03831660009081526001602052604090206103c09083610697565b905061032f565b60006103d38243610335565b90505b919050565b6103e3610454565b15156103ee57600080fd5b60008054604051600160a060020a03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36000805473ffffffffffffffffffffffffffffffffffffffff19169055565b600054600160a060020a031690565b600054600160a060020a0316331490565b600254600090158061049a5750816002600081548110151561048357fe5b6000918252602090912001546001608060020a0316115b156104a7575060006103d6565b6104b2600283610697565b90506103d6565b60006104c3610454565b15156104ce57600080fd5b60006104d861023a565b90508260006104e6866103c7565b9050818110156104f4578091505b610501600283850361058f565b600160a060020a03861660009081526001602052604090206105259083830361058f565b604080518381529051600160a060020a038816917fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5919081900360200190a250600195945050505050565b610578610454565b151561058357600080fd5b61058c816107e7565b50565b6001608060020a03811681146105a457600080fd5b815415806105d8575081544390839060001981019081106105c157fe5b6000918252602090912001546001608060020a0316105b1561064c57815460009083906105f18260018301610864565b815481106105fb57fe5b600091825260209091200180546001608060020a03848116700100000000000000000000000000000000024382166fffffffffffffffffffffffffffffffff19909316929092171617905550610693565b81546000908390600019810190811061066157fe5b600091825260209091200180546001608060020a03808516700100000000000000000000000000000000029116179055505b5050565b815460009015156106aa5750600061032f565b8254839060001981019081106106bc57fe5b6000918252602090912001546001608060020a03168210610719578254839060001981019081106106e957fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a0316905061032f565b82600081548110151561072857fe5b6000918252602090912001546001608060020a031682101561074c5750600061032f565b8254600090600019015b818111156107a757845460028383016001010490859087908390811061077857fe5b6000918252602090912001546001608060020a03161161079a578092506107a1565b6001810391505b50610756565b84828154811015156107b557fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a031695945050505050565b600160a060020a03811615156107fc57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b8154818355818111156108885760008381526020902061088891810190830161088d565b505050565b61024891905b808211156108a75760008155600101610893565b509056fea165627a7a723058203bca0af92dfcfede9bd26af6f6a767b02b188e0c1c60a9df19141bf497b87ecc0029",
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100c6576000357c010000000000000000000000000000000000000000000000000000000090048063715018a61161008e578063715018a6146101955780638da5cb5b1461019f5780638f32d59b146101c3578063981b24d0146101cb5780639dc29fac146101e8578063f2fde38b14610214576100c6565b806318160ddd146100cb578063313ce567146100e557806340c10f19146101035780634ee2cd7e1461014357806370a082311461016f575b600080fd5b6100d361023a565b60408051918252519081900360200190f35b6100ed61024b565b6040805160ff9092168252519081900360200190f35b61012f6004803603604081101561011957600080fd5b50600160a060020a03813516906020013561026c565b604080519115158252519081900360200190f35b6100d36004803603604081101561015957600080fd5b50600160a060020a038135169060200135610335565b6100d36004803603602081101561018557600080fd5b5035600160a060020a03166103c7565b61019d6103db565b005b6101a7610445565b60408051600160a060020a039092168252519081900360200190f35b61012f610454565b6100d3600480360360208110156101e157600080fd5b5035610465565b61012f600480360360408110156101fe57600080fd5b50600160a060020a0381351690602001356104b9565b61019d6004803603602081101561022a57600080fd5b5035600160a060020a0316610570565b600061024543610465565b90505b90565b60005474010000000000000000000000000000000000000000900460ff1681565b6000610276610454565b151561028157600080fd5b600061028b61023a565b905082810181111561029c57600080fd5b60006102a7856103c7565b90508381018111156102b857600080fd5b6102c5600285840161058f565b600160a060020a03851660009081526001602052604090206102e99082860161058f565b604080518581529051600160a060020a038716917f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885919081900360200190a26001925050505b92915050565b600160a060020a03821660009081526001602052604081205415806103915750600160a060020a03831660009081526001602052604081208054849290811061037a57fe5b6000918252602090912001546001608060020a0316115b1561039e5750600061032f565b600160a060020a03831660009081526001602052604090206103c09083610697565b905061032f565b60006103d38243610335565b90505b919050565b6103e3610454565b15156103ee57600080fd5b60008054604051600160a060020a03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36000805473ffffffffffffffffffffffffffffffffffffffff19169055565b600054600160a060020a031690565b600054600160a060020a0316331490565b600254600090158061049a5750816002600081548110151561048357fe5b6000918252602090912001546001608060020a0316115b156104a7575060006103d6565b6104b2600283610697565b90506103d6565b60006104c3610454565b15156104ce57600080fd5b60006104d861023a565b90508260006104e6866103c7565b9050818110156104f4578091505b610501600283850361058f565b600160a060020a03861660009081526001602052604090206105259083830361058f565b604080518381529051600160a060020a038816917fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5919081900360200190a250600195945050505050565b610578610454565b151561058357600080fd5b61058c816107e7565b50565b6001608060020a03811681146105a457600080fd5b815415806105d8575081544390839060001981019081106105c157fe5b6000918252602090912001546001608060020a0316105b1561064c57815460009083906105f18260018301610864565b815481106105fb57fe5b600091825260209091200180546001608060020a03848116700100000000000000000000000000000000024382166fffffffffffffffffffffffffffffffff19909316929092171617905550610693565b81546000908390600019810190811061066157fe5b600091825260209091200180546001608060020a03808516700100000000000000000000000000000000029116179055505b5050565b815460009015156106aa5750600061032f565b8254839060001981019081106106bc57fe5b6000918252602090912001546001608060020a03168210610719578254839060001981019081106106e957fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a0316905061032f565b82600081548110151561072857fe5b6000918252602090912001546001608060020a031682101561074c5750600061032f565b8254600090600019015b818111156107a757845460028383016001010490859087908390811061077857fe5b6000918252602090912001546001608060020a03161161079a578092506107a1565b6001810391505b50610756565b84828154811015156107b557fe5b60009182526020909120015470010000000000000000000000000000000090046001608060020a031695945050505050565b600160a060020a03811615156107fc57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b8154818355818111156108885760008381526020902061088891810190830161088d565b505050565b61024891905b808211156108a75760008155600101610893565b509056fea165627a7a723058203bca0af92dfcfede9bd26af6f6a767b02b188e0c1c60a9df19141bf497b87ecc0029",
"sourceMap": "573:6853:53:-;;;611:26;;;-1:-1:-1;;611:26:53;;;;;1751:37;5:2:-1;;;;30:1;27;20:12;5:2;-1:-1;515:6:68;:19;;-1:-1:-1;;515:19:68;524:10;515:19;;;;549:40;;-1:-1:-1;582:6:68;;;;515;549:40;;515:6;;549:40;573:6853:53;;;;;;",
"deployedSourceMap": "573:6853:53:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;573:6853:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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:53;;-1:-1:-1;;;;;3956:559:53;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;2678:388;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2678:388:53;;-1:-1:-1;;;;;2678:388:53;;;;;;:::i;2266:130::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2266:130:53;-1:-1:-1;;;;;2266:130:53;;:::i;1347:137:68:-;;;:::i;:::-;;659:77;;;:::i;:::-;;;;-1:-1:-1;;;;;659:77:68;;;;;;;;;;;;;;979:90;;;:::i;3293:375:53:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3293:375:53;;:::i;4767:554::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4767:554:53;;-1:-1:-1;;;;;4767:554:53;;;;;;:::i;1655:107:68:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1655:107:68;-1:-1:-1;;;;;1655:107:68;;:::i;1920:104:53:-;1964:7;1990:27;2004:12;1990:13;:27::i;:::-;1983:34;;1920:104;;:::o;611:26::-;;;;;;;;;:::o;3956:559::-;4028:4;863:9:68;:7;:9::i;:::-;855:18;;;;;;;;4044:22:53;4069:13;:11;:13::i;:::-;4044:38;-1:-1:-1;4100:24:53;;;:42;-1:-1:-1;4100:42:53;4092:51;;;;;;4175:25;4203:16;4213:5;4203:9;:16::i;:::-;4175:44;-1:-1:-1;4237:27:53;;;:48;-1:-1:-1;4237:48:53;4229:57;;;;;;4318:62;4335:18;4372:7;4355:14;:24;4318:16;:62::i;:::-;-1:-1:-1;;;;;4407:15:53;;;;;;-1:-1:-1;4407:15:53;;;;;4390:62;;4424:27;;;4390:16;:62::i;:::-;4467:20;;;;;;;;-1:-1:-1;;;;;4467:20:53;;;;;;;;;;;;;4504:4;4497:11;;;;883:1:68;3956:559:53;;;;:::o;2678:388::-;-1:-1:-1;;;;;2790:16:53;;2762:7;2790:16;;;-1:-1:-1;2790:16:53;;;;;:23;:28;;2789:80;;-1:-1:-1;;;;;;2824:16:53;;;;;;-1:-1:-1;2824:16:53;;;;;:19;;2856:12;;2824:16;:19;;;;;;;;;;;;;;;:29;-1:-1:-1;;;;;2824:29:53;:44;2789:80;2785:275;;;-1:-1:-1;2892:1:53;2885:8;;2785:275;-1:-1:-1;;;;;3018:16:53;;;;;;-1:-1:-1;3018:16:53;;;;;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:68:-;863:9;:7;:9::i;:::-;855:18;;;;;;;;1445:1;1429:6;;1408:40;;-1:-1:-1;;;;;1429:6:68;;;;1408:40;;1445:1;;1408:40;1475:1;1458:19;;-1:-1:-1;;1458:19:68;;;1347:137::o;659:77::-;697:7;723:6;-1:-1:-1;;;;;723:6:68;;659:77::o;979:90::-;1019:4;1056:6;-1:-1:-1;;;;;1056:6:68;1042:10;:20;;979:90::o;3293:375:53:-;3382:18;:25;3358:7;;3382:30;;3381:84;;;3452:12;3418:18;3437:1;3418:21;;;;;;;;;;;;;;;;;;;:31;-1:-1:-1;;;;;3418:31:53;:46;3381:84;3377:285;;;-1:-1:-1;3488:1:53;3481:8;;3377:285;3607:44;3618:18;3638:12;3607:10;:44::i;:::-;3600:51;;;;4767:554;4839:4;863:9:68;:7;:9::i;:::-;855:18;;;;;;;;4855:22:53;4880:13;:11;:13::i;:::-;4855:38;-1:-1:-1;4926:7:53;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:53;;;;;;-1:-1:-1;5201:15:53;;;;;5184:69;;5218:34;;;5184:16;:69::i;:::-;5268:25;;;;;;;;-1:-1:-1;;;;;5268:25:53;;;;;;;;;;;;;-1:-1:-1;5310:4:53;;4767:554;-1:-1:-1;;;;;4767:554:53:o;1655:107:68:-;863:9;:7;:9::i;:::-;855:18;;;;;;;;1727:28;1746:8;1727:18;:28::i;:::-;1655:107;:::o;6783:641:53:-;-1:-1:-1;;;;;6886:25:53;;;;6878:34;;;;;;6971:18;;:23;;6970:91;;-1:-1:-1;7012:18:53;;7048:12;;7012:18;;-1:-1:-1;;7012:22:53;;;7000:35;;;;;;;;;;;;;;;:45;-1:-1:-1;;;;;7000:45:53;: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:53;7193:12;-1:-1:-1;;;;;7159:47:53;;;;;;;7220:37;;;;;-1:-1:-1;7220:37:53;;;;-1:-1:-1;6966:452:53;;;7335:18;;7288:32;;7335:18;;-1:-1:-1;;7335:20:53;;;7323:33;;;;;;;;;;;;;;;7370:37;;-1:-1:-1;;;;;7370:37:53;;;;;;-1:-1:-1;7370:37:53;;;;-1:-1:-1;6966:452:53;6783:641;;:::o;5717:836::-;5833:18;;5810:7;;5833:23;5829:62;;;-1:-1:-1;5879:1:53;5872:8;;5829:62;5970:18;;;;-1:-1:-1;;5970:20:53;;;5958:33;;;;;;;;;;;;;;;:43;-1:-1:-1;;;;;5958:43:53;5948:53;;5944:130;;6036:18;;;;-1:-1:-1;;6036:20:53;;;6024:33;;;;;;;;;;;;;;;:39;;;;-1:-1:-1;;;;;6024:39:53;;-1:-1:-1;6017:46:53;;5944:130;6096:11;6108:1;6096:14;;;;;;;;;;;;;;;;;;;:24;-1:-1:-1;;;;;6096:24:53;6087:33;;6083:72;;;-1:-1:-1;6143:1:53;6136:8;;6083:72;6257:18;;6218:11;;-1:-1:-1;;6257:20:53;6287:221;6300:3;6294;:9;6287:221;;;6370:16;;6351:1;6334:9;;;6346:1;6334:13;6333:19;;6398:6;;6370:11;;6333:19;;6370:16;;;;;;;;;;;;;;;:26;-1:-1:-1;;;;;6370:26:53;: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:53;;;-1:-1:-1;;;;;5717:836:53:o;1906:183:68:-;-1:-1:-1;;;;;1979:22:68;;;;1971:31;;;;;;2038:6;;;2017:38;;-1:-1:-1;;;;;2017:38:68;;;;2038:6;;;2017:38;;;2065:6;:17;;-1:-1:-1;;2065:17:68;-1:-1:-1;;;;;2065:17:68;;;;;;;;;;1906:183::o;573:6853:53:-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::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": [
11034
]
},
"id": 11035,
"nodeType": "SourceUnit",
"nodes": [
{
"id": 10604,
"literals": [
"solidity",
"^",
"0.5",
".4"
],
"nodeType": "PragmaDirective",
"src": "0:23:53"
},
{
"absolutePath": "openzeppelin-solidity/contracts/ownership/Ownable.sol",
"file": "openzeppelin-solidity/contracts/ownership/Ownable.sol",
"id": 10605,
"nodeType": "ImportDirective",
"scope": 11035,
"sourceUnit": 16029,
"src": "25:63:53",
"symbolAliases": [],
"unitAlias": ""
},
{
"baseContracts": [
{
"arguments": null,
"baseName": {
"contractScope": null,
"id": 10606,
"name": "Ownable",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 16028,
"src": "596:7:53",
"typeDescriptions": {
"typeIdentifier": "t_contract$_Ownable_$16028",
"typeString": "contract Ownable"
}
},
"id": 10607,
"nodeType": "InheritanceSpecifier",
"src": "596:7:53"
}
],
"contractDependencies": [
16028
],
"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": 11034,
"linearizedBaseContracts": [
11034,
16028
],
"name": "Reputation",
"nodeType": "ContractDefinition",
"nodes": [
{
"constant": false,
"id": 10610,
"name": "decimals",
"nodeType": "VariableDeclaration",
"scope": 11034,
"src": "611:26:53",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
},
"typeName": {
"id": 10608,
"name": "uint8",
"nodeType": "ElementaryTypeName",
"src": "611:5:53",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"value": {
"argumentTypes": null,
"hexValue": "3138",
"id": 10609,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "635:2:53",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_18_by_1",
"typeString": "int_const 18"
},
"value": "18"
},
"visibility": "public"
},
{
"anonymous": false,
"documentation": null,
"id": 10616,
"name": "Mint",
"nodeType": "EventDefinition",
"parameters": {
"id": 10615,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 10612,
"indexed": true,
"name": "_to",
"nodeType": "VariableDeclaration",
"scope": 10616,
"src": "769:19:53",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 10611,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "769:7:53",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 10614,
"indexed": false,
"name": "_amount",
"nodeType": "VariableDeclaration",
"scope": 10616,
"src": "790:15:53",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 10613,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "790:7:53",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "768:38:53"
},
"src": "758:49:53"
},
{
"anonymous": false,
"documentation": null,
"id": 10622,
"name": "Burn",
"nodeType": "EventDefinition",
"parameters": {
"id": 10621,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 10618,
"indexed": true,
"name": "_from",
"nodeType": "VariableDeclaration",
"scope": 10622,
"src": "885:21:53",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 10617,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "885:7:53",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 10620,
"indexed": false,
"name": "_amount",
"nodeType": "VariableDeclaration",
"scope": 10622,
"src": "908:15:53",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 10619,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "908:7:53",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "884:40:53"
},
"src": "874:51:53"
},
{
"canonicalName": "Reputation.Checkpoint",
"id": 10627,
"members": [
{
"constant": false,
"id": 10624,
"name": "fromBlock",
"nodeType": "VariableDeclaration",
"scope": 10627,
"src": "1212:17:53",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint128",
"typeString": "uint128"
},
"typeName": {
"id": 10623,
"name": "uint128",
"nodeType": "ElementaryTypeName",
"src": "1212:7:53",
"typeDescriptions": {
"typeIdentifier": "t_uint128",
"typeString": "uint128"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 10626,
"name": "value",
"nodeType": "VariableDeclaration",
"scope": 10627,
"src": "1316:13:53",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint128",
"typeString": "uint128"
},
"typeName": {
"id": 10625,
"name": "uint128",
"nodeType": "ElementaryTypeName",
"src": "1316:7:53",
"typeDescriptions": {
"typeIdentifier": "t_uint128",
"typeString": "uint128"
}
},
"value": null,
"visibility": "internal"
}
],
"name": "Checkpoint",
"nodeType": "StructDefinition",
"scope": 11034,
"src": "1110:226:53",
"visibility": "public"
},
{
"constant": false,
"id": 10632,
"name": "balances",
"nodeType": "VariableDeclaration",
"scope": 11034,
"src": "1546:42:53",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$10627_storage_$dyn_storage_$",
"typeString": "mapping(address => struct Reputation.Checkpoint[])"
},
"typeName": {
"id": 10631,
"keyType": {
"id": 10628,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1555:7:53",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "Mapping",
"src": "1546:33:53",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$10627_storage_$dyn_storage_$",
"typeString": "mapping(address => struct Reputation.Checkpoint[])"
},
"valueType": {
"baseType": {
"contractScope": null,
"id": 10629,
"name": "Checkpoint",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 10627,
"src": "1566:10:53",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Checkpoint_$10627_storage_ptr",
"typeString": "struct Reputation.Checkpoint"
}
},
"id": 10630,
"length": null,
"nodeType": "ArrayTypeName",
"src": "1566:12:53",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_struct$_Checkpoint_$10627_storage_$dyn_storage_ptr",
"typeString": "struct Reputation.Checkpoint[]"
}
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 10635,
"name": "totalSupplyHistory",
"nodeType": "VariableDeclaration",
"scope": 11034,
"src": "1662:31:53",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_struct$_Checkpoint_$10627_storage_$dyn_storage",
"typeString": "struct Reputation.Checkpoint[]"
},
"typeName": {
"baseType": {
"contractScope": null,
"id": 10633,
"name": "Checkpoint",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 10627,
"src": "1662:10:53",
"typeDescriptions": {
"typeIdentifier": "t_struct$_Checkpoint_$10627_storage_ptr",
"typeString": "struct Reputation.Checkpoint"
}
},
"id": 10634,
"length": null,
"nodeType": "ArrayTypeName",
"src": "1662:12:53",
"typeDescriptions": {
"typeIdentifier": "t_array$_t_struct$_Checkpoint_$10627_storage_$dyn_storage_ptr",
"typeString": "struct Reputation.Checkpoint[]"
}
},
"value": null,
"visibility": "internal"
},
{
"body": {
"id": 10638,
"nodeType": "Block",
"src": "1781:7:53",
"statements": []
},
"documentation": "@notice Constructor to create a Reputation",
"id": 10639,
"implemented": true,
"kind": "constructor",
"modifiers": [],
"name": "",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 10636,
"nodeType": "ParameterList",
"parameters": [],
"src": "1762:7:53"
},
"returnParameters": {
"id": 10637,
"nodeType": "ParameterList",
"parameters": [],
"src": "1781:0:53"
},
"scope": 11034,
"src": "1751:37:53",
"stateMutability": "nonpayable",
"superFunction": null,
"visibility": "public"
},
{
"body": {
"id": 10649,
"nodeType": "Block",
"src": "1973:51:53",
"statements": [
{
"expression": {
"argumentTypes": null,
"arguments": [
{
"argumentTypes": null,
"expression": {
"argumentTypes": null,
"id": 10645,
"name": "block",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 16772,
"src": "2004:5:53",
"typeDescriptions": {
"typeIdentifier": "t_magic_block",
"typeString": "block"
}
},
"id": 10646,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"mem