mirror of
https://github.com/status-im/open-bounty.git
synced 2025-02-17 03:47:58 +00:00
Add token-reg.sol to be used in web3j
This commit is contained in:
parent
3f5a79c223
commit
7143d3b0c4
108
contracts/TokenReg.sol
Normal file
108
contracts/TokenReg.sol
Normal file
@ -0,0 +1,108 @@
|
||||
//! Token Registry contract.
|
||||
//! By Gav Wood (Ethcore), 2016.
|
||||
//! Released under the Apache Licence 2.
|
||||
|
||||
pragma solidity ^0.4.0;
|
||||
|
||||
// From Owned.sol
|
||||
contract Owned {
|
||||
modifier only_owner { if (msg.sender != owner) return; _; }
|
||||
|
||||
event NewOwner(address indexed old, address indexed current);
|
||||
|
||||
function setOwner(address _new) only_owner { NewOwner(owner, _new); owner = _new; }
|
||||
|
||||
address public owner = msg.sender;
|
||||
}
|
||||
|
||||
contract TokenReg is Owned {
|
||||
struct Token {
|
||||
address addr;
|
||||
string tla;
|
||||
uint base;
|
||||
string name;
|
||||
address owner;
|
||||
mapping (bytes32 => bytes32) meta;
|
||||
}
|
||||
|
||||
modifier when_fee_paid { if (msg.value < fee) return; _; }
|
||||
modifier when_address_free(address _addr) { if (mapFromAddress[_addr] != 0) return; _; }
|
||||
modifier when_tla_free(string _tla) { if (mapFromTLA[_tla] != 0) return; _; }
|
||||
modifier when_is_tla(string _tla) { if (bytes(_tla).length != 3) return; _; }
|
||||
modifier when_has_tla(string _tla) { if (mapFromTLA[_tla] == 0) return; _; }
|
||||
modifier only_token_owner(uint _id) { if (tokens[_id].owner != msg.sender) return; _; }
|
||||
|
||||
event Registered(string indexed tla, uint indexed id, address addr, string name);
|
||||
event Unregistered(string indexed tla, uint indexed id);
|
||||
event MetaChanged(uint indexed id, bytes32 indexed key, bytes32 value);
|
||||
|
||||
function register(address _addr, string _tla, uint _base, string _name) payable returns (bool) {
|
||||
return registerAs(_addr, _tla, _base, _name, msg.sender);
|
||||
}
|
||||
|
||||
function registerAs(address _addr, string _tla, uint _base, string _name, address _owner) payable when_fee_paid when_address_free(_addr) when_is_tla(_tla) when_tla_free(_tla) returns (bool) {
|
||||
tokens.push(Token(_addr, _tla, _base, _name, _owner));
|
||||
mapFromAddress[_addr] = tokens.length;
|
||||
mapFromTLA[_tla] = tokens.length;
|
||||
Registered(_tla, tokens.length - 1, _addr, _name);
|
||||
return true;
|
||||
}
|
||||
|
||||
function unregister(uint _id) only_owner {
|
||||
Unregistered(tokens[_id].tla, _id);
|
||||
delete mapFromAddress[tokens[_id].addr];
|
||||
delete mapFromTLA[tokens[_id].tla];
|
||||
delete tokens[_id];
|
||||
}
|
||||
|
||||
function setFee(uint _fee) only_owner {
|
||||
fee = _fee;
|
||||
}
|
||||
|
||||
function tokenCount() constant returns (uint) { return tokens.length; }
|
||||
function token(uint _id) constant returns (address addr, string tla, uint base, string name, address owner) {
|
||||
var t = tokens[_id];
|
||||
addr = t.addr;
|
||||
tla = t.tla;
|
||||
base = t.base;
|
||||
name = t.name;
|
||||
owner = t.owner;
|
||||
}
|
||||
|
||||
function fromAddress(address _addr) constant returns (uint id, string tla, uint base, string name, address owner) {
|
||||
id = mapFromAddress[_addr] - 1;
|
||||
var t = tokens[id];
|
||||
tla = t.tla;
|
||||
base = t.base;
|
||||
name = t.name;
|
||||
owner = t.owner;
|
||||
}
|
||||
|
||||
function fromTLA(string _tla) constant returns (uint id, address addr, uint base, string name, address owner) {
|
||||
id = mapFromTLA[_tla] - 1;
|
||||
var t = tokens[id];
|
||||
addr = t.addr;
|
||||
base = t.base;
|
||||
name = t.name;
|
||||
owner = t.owner;
|
||||
}
|
||||
|
||||
function meta(uint _id, bytes32 _key) constant returns (bytes32) {
|
||||
return tokens[_id].meta[_key];
|
||||
}
|
||||
|
||||
function setMeta(uint _id, bytes32 _key, bytes32 _value) only_token_owner(_id) {
|
||||
tokens[_id].meta[_key] = _value;
|
||||
MetaChanged(_id, _key, _value);
|
||||
}
|
||||
|
||||
function drain() only_owner {
|
||||
if (!msg.sender.send(this.balance))
|
||||
throw;
|
||||
}
|
||||
|
||||
mapping (address => uint) mapFromAddress;
|
||||
mapping (string => uint) mapFromTLA;
|
||||
Token[] tokens;
|
||||
uint public fee = 0;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user