arkpar
10 years ago
8 changed files with 141 additions and 18 deletions
@ -0,0 +1,124 @@ |
|||
//TODO: use imports |
|||
contract owned{function owned(){owner = msg.sender;}modifier onlyowner(){if(msg.sender==owner)_}address owner;} |
|||
contract mortal is owned {function kill() { if (msg.sender == owner) suicide(owner); }} |
|||
|
|||
//sol Config |
|||
// Simple global configuration registrar. |
|||
// @authors: |
|||
// Gav Wood <g@ethdev.com> |
|||
|
|||
|
|||
contract Config is mortal { |
|||
function register(uint id, address service) { |
|||
if (tx.origin != owner) |
|||
return; |
|||
services[id] = service; |
|||
log1(0, id); |
|||
} |
|||
|
|||
function unregister(uint id) { |
|||
if (msg.sender != owner && services[id] != msg.sender) |
|||
return; |
|||
services[id] = address(0); |
|||
log1(0, id); |
|||
} |
|||
|
|||
function lookup(uint service) constant returns(address a) { |
|||
return services[service]; |
|||
} |
|||
|
|||
mapping (uint => address) services; |
|||
} |
|||
|
|||
/* |
|||
|
|||
// Solidity Interface: |
|||
contract Config{function lookup(uint256 service)constant returns(address a){}function kill(){}function unregister(uint256 id){}function register(uint256 id,address service){}} |
|||
|
|||
// Example Solidity use: |
|||
address addrConfig = 0xf025d81196b72fba60a1d4dddad12eeb8360d828; |
|||
address addrNameReg = Config(addrConfig).lookup(1); |
|||
|
|||
// JS Interface: |
|||
var abiConfig = [{"constant":false,"inputs":[],"name":"kill","outputs":[]},{"constant":true,"inputs":[{"name":"service","type":"uint256"}],"name":"lookup","outputs":[{"name":"a","type":"address"}]},{"constant":false,"inputs":[{"name":"id","type":"uint256"},{"name":"service","type":"address"}],"name":"register","outputs":[]},{"constant":false,"inputs":[{"name":"id","type":"uint256"}],"name":"unregister","outputs":[]}]; |
|||
|
|||
// Example JS use: |
|||
var addrConfig = "0x661005d2720d855f1d9976f88bb10c1a3398c77f"; |
|||
var addrNameReg; |
|||
web3.eth.contract(addrConfig, abiConfig).lookup(1).call().then(function(r){ addrNameReg = r; }) |
|||
|
|||
*/ |
|||
|
|||
//sol NameReg |
|||
// Simple global name registrar. |
|||
// @authors: |
|||
// kobigurk (from #ethereum-dev) |
|||
// Gav Wood <g@ethdev.com> |
|||
|
|||
contract NameRegister { |
|||
function getAddress(string32 _name) constant returns (address o_owner) {} |
|||
function getName(address _owner) constant returns (string32 o_name) {} |
|||
} |
|||
|
|||
contract NameReg is owned, NameRegister { |
|||
function NameReg() { |
|||
address addrConfig = 0xf025d81196b72fba60a1d4dddad12eeb8360d828; |
|||
toName[addrConfig] = "Config"; |
|||
toAddress["Config"] = addrConfig; |
|||
toName[this] = "NameReg"; |
|||
toAddress["NameReg"] = this; |
|||
Config(addrConfig).register(1, this); |
|||
log1(0, hash256(addrConfig)); |
|||
log1(0, hash256(this)); |
|||
} |
|||
|
|||
function register(string32 name) { |
|||
// Don't allow the same name to be overwritten. |
|||
if (toAddress[name] != address(0)) |
|||
return; |
|||
// Unregister previous name if there was one. |
|||
if (toName[msg.sender] != "") |
|||
toAddress[toName[msg.sender]] = 0; |
|||
|
|||
toName[msg.sender] = name; |
|||
toAddress[name] = msg.sender; |
|||
log1(0, hash256(msg.sender)); |
|||
} |
|||
|
|||
function unregister() { |
|||
string32 n = toName[msg.sender]; |
|||
if (n == "") |
|||
return; |
|||
log1(0, hash256(toAddress[n])); |
|||
toName[msg.sender] = ""; |
|||
toAddress[n] = address(0); |
|||
} |
|||
|
|||
function addressOf(string32 name) constant returns (address addr) { |
|||
return toAddress[name]; |
|||
} |
|||
|
|||
function nameOf(address addr) constant returns (string32 name) { |
|||
return toName[addr]; |
|||
} |
|||
|
|||
mapping (address => string32) toName; |
|||
mapping (string32 => address) toAddress; |
|||
} |
|||
|
|||
|
|||
/* |
|||
|
|||
// Solidity Interface: |
|||
contract NameReg{function kill(){}function register(string32 name){}function addressOf(string32 name)constant returns(address addr){}function unregister(){}function nameOf(address addr)constant returns(string32 name){}} |
|||
|
|||
// Example Solidity use: |
|||
NameReg(addrNameReg).register("Some Contract"); |
|||
|
|||
// JS Interface: |
|||
var abiNameReg = [{"constant":true,"inputs":[{"name":"name","type":"string32"}],"name":"addressOf","outputs":[{"name":"addr","type":"address"}]},{"constant":false,"inputs":[],"name":"kill","outputs":[]},{"constant":true,"inputs":[{"name":"addr","type":"address"}],"name":"nameOf","outputs":[{"name":"name","type":"string32"}]},{"constant":false,"inputs":[{"name":"name","type":"string32"}],"name":"register","outputs":[]},{"constant":false,"inputs":[],"name":"unregister","outputs":[]}]; |
|||
|
|||
// Example JS use: |
|||
web3.eth.contract(addrNameReg, abiNameReg).register("My Name").transact(); |
|||
|
|||
*/ |
Loading…
Reference in new issue