diff --git a/swarm/api/config.go b/swarm/api/config.go index 910a3404c0..272df372e6 100644 --- a/swarm/api/config.go +++ b/swarm/api/config.go @@ -21,7 +21,7 @@ const ( // by default ens root is north internal var ( - toyNetEnsRoot = common.HexToAddress("0x606aabab27f8aa98b772bf593b18e550ede87176") + toyNetEnsRoot = common.HexToAddress("0xd344889e0be3e9ef6c26b0f60ef66a32e83c1b69") ) // separate bzz directories diff --git a/swarm/cmd/makegenesis/genesis.json b/swarm/cmd/makegenesis/genesis.json new file mode 100644 index 0000000000..c58c44ff39 --- /dev/null +++ b/swarm/cmd/makegenesis/genesis.json @@ -0,0 +1,60 @@ +{ + "nonce": "0x42", + "gasLimit": "0x47e7c4", + "difficulty": "0x20000", + "alloc": { + "866b5394fe446751e932b7ef77280f4ab7ea3afe": { + "code": "", + "storage": {}, + "balance": "01c51307a94a7800" + }, + "0000000000000000000000000000000000000000": { + "code": "", + "storage": {}, + "balance": "3aecf856b58800" + }, + "0000000000000000000000000000000000000001": { + "code": "", + "storage": {}, + "balance": "01" + }, + "0000000000000000000000000000000000000002": { + "code": "", + "storage": {}, + "balance": "01" + }, + "0000000000000000000000000000000000000003": { + "code": "", + "storage": {}, + "balance": "01" + }, + "0000000000000000000000000000000000000004": { + "code": "", + "storage": {}, + "balance": "01" + }, + "cb7152b03774fd01a8480001b2bcdfebc4f04363": { + "code": "6060604052361561004b5760e060020a60003504632dff694181146100535780633b3b57de1461007557806341b9dc2b146100a0578063c3d014d614610139578063d5fa2b00146101b2575b61022b610002565b61022d6004356000818152600260205260408120549081141561027057610002565b61023f600435600081815260016020526040812054600160a060020a03169081141561027057610002565b61025c60043560243560007f6164647200000000000000000000000000000000000000000000000000000000821480156100f05750600083815260016020526040812054600160a060020a031614155b8061013257507f636f6e74656e740000000000000000000000000000000000000000000000000082148015610132575060008381526002602052604081205414155b9392505050565b61022b600435602435600080546040805160e060020a6302571be30281526004810186905290518593600160a060020a033381169416926302571be392602482810193602093839003909101908290876161da5a03f11561000257505060405151600160a060020a031691909114905061027557610002565b61022b600435602435600080546040805160e060020a6302571be30281526004810186905290518593600160a060020a033381169416926302571be392602482810193602093839003909101908290876161da5a03f11561000257505060405151600160a060020a03169190911490506102c157610002565b005b60408051918252519081900360200190f35b60408051600160a060020a03929092168252519081900360200190f35b604080519115158252519081900360200190f35b919050565b6000838152600260209081526040918290208490558151848152915185927f0424b6fe0d9c3bdbece0e7879dc241bb0c22e900be8b6c168b4ee08bd9bf83bc92908290030190a2505050565b600083815260016020908152604091829020805473ffffffffffffffffffffffffffffffffffffffff1916851790558151600160a060020a0385168152915185927f52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd292908290030190a250505056", + "storage": { + "0000000000000000000000000000000000000000000000000000000000000000": "d344889e0be3e9ef6c26b0f60ef66a32e83c1b69" + }, + "balance": "" + }, + "d344889e0be3e9ef6c26b0f60ef66a32e83c1b69": { + "code": "606060405260e060020a60003504630178b8bf811461004757806302571be31461006e5780631896f70a14610091578063569cd595146100c55780635b0fc9c3146100fc575b005b610130600435600081815260208190526040902060010154600160a060020a03165b919050565b610130600435600081815260208190526040902054600160a060020a0316610069565b6100456004356024356000828152602081905260409020548290600160a060020a0390811633919091161461014d57610002565b6100456004356024356044356000838152602081905260408120548490600160a060020a039081163391909116146101bf57610002565b6100456004356024356000828152602081905260409020548290600160a060020a0390811633919091161461025957610002565b60408051600160a060020a03929092168252519081900360200190f35b60408051600160a060020a0384168152905184917f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a0919081900360200190a2506000828152602081905260409020600101805473ffffffffffffffffffffffffffffffffffffffff1916821790555050565b60408051868152602081810187905282519182900383018220600160a060020a03871683529251929450869288927fce0457fe73731f824cc272376169235128c118b49d344817417c6d108d155e8292908290030190a382600060005060008460001916815260200190815260200160002060005060000160006101000a815481600160a060020a03021916908302179055505050505050565b60408051600160a060020a0384168152905184917fd4735d920b0f87494915f556dd9b54c8f309026070caea5c737245152564d266919081900360200190a2506000828152602081905260409020805473ffffffffffffffffffffffffffffffffffffffff191682179055505056", + "storage": { + "859ecef2e168dc10231b000bd53493b42bc9d944cac29d94582c1e1d43592131": "582c767cca9d78699b04ba8dd7c33071f2d74003" + }, + "balance": "" + }, + "582c767cca9d78699b04ba8dd7c33071f2d74003": { + "code": "606060405260e060020a6000350463d22057a9811461001b575b005b61001960043560243560025460408051918252602082810185905260008054835194859003840185207f02571be300000000000000000000000000000000000000000000000000000000865260048601819052935193949193600160a060020a03909116926302571be39260248181019391829003018187876161da5a03f11561000257505060405151915050600160a060020a0381166000148015906100d4575033600160a060020a031681600160a060020a031614155b156100de57610002565b60408051600080546002547f569cd59500000000000000000000000000000000000000000000000000000000845260048401526024830188905230600160a060020a039081166044850152935193169263569cd595926064818101939291829003018183876161da5a03f11561000257505060008054600154604080517f1896f70a00000000000000000000000000000000000000000000000000000000815260048101889052600160a060020a0392831660248201529051929091169350631896f70a926044828101939192829003018183876161da5a03f11561000257505060008054604080517f5b0fc9c300000000000000000000000000000000000000000000000000000000815260048101879052600160a060020a0388811660248301529151929091169350635b0fc9c3926044828101939192829003018183876161da5a03f115610002575050505050505056", + "storage": { + "0000000000000000000000000000000000000000000000000000000000000000": "d344889e0be3e9ef6c26b0f60ef66a32e83c1b69", + "0000000000000000000000000000000000000000000000000000000000000001": "cb7152b03774fd01a8480001b2bcdfebc4f04363", + "0000000000000000000000000000000000000000000000000000000000000002": "93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae" + }, + "balance": "" + } + } +} diff --git a/swarm/cmd/makegenesis/makegenesis.js b/swarm/cmd/makegenesis/makegenesis.js new file mode 100644 index 0000000000..90095fa49b --- /dev/null +++ b/swarm/cmd/makegenesis/makegenesis.js @@ -0,0 +1,103 @@ +var Account = require('ethereumjs-account'); +var async = require('async'); +var fs = require('fs'); +var rlp = require('rlp'); +var solc = require('solc'); +var Transaction = require('ethereumjs-tx'); +var Trie = require('merkle-patricia-tree'); +var utils = require('ethereumjs-util'); +var VM = require('ethereumjs-vm'); + +var stateTrie = new Trie(); +var vm = new VM(stateTrie); + +var privatekey = utils.sha3("swarm"); +var accountAddress = utils.privateToAddress(privatekey); + +var accounts = { + "0000000000000000000000000000000000000001": "0x1", + "0000000000000000000000000000000000000002": "0x1", + "0000000000000000000000000000000000000003": "0x1", + "0000000000000000000000000000000000000004": "0x1", +}; +accounts[accountAddress.toString('hex')] = "0x200000000000000"; + +var source = fs.readFileSync('../../services/ens/contract/ens.sol').toString(); +var compiled = solc.compile(source, 1) +var deployer = "0x" + compiled.contracts['DeployENS'].bytecode; + +var transactions = [ + { + nonce: '0x00', + gasPrice: '0x4a817c800', + gasLimit: '0x3d0900', + value: '0x00', + data: deployer + } +]; + +function createAccounts(cb) { + async.each(Object.keys(accounts), function(addr, next) { + var account = new Account(); + account.balance = accounts[addr]; + stateTrie.put(new Buffer(addr, 'hex'), account.serialize(), next); + }, cb); +} + +function runTx(cb) { + async.each(transactions, function(txdata, next) { + var tx = new Transaction(txdata); + tx.sign(privatekey); + vm.runTx({tx: tx}, next); + }, cb); +} + +function dumpState(cb) { + var stream = stateTrie.createReadStream(); + + var accountList = []; + stream.on('data', function(data) { + accountList.push(data); + }); + stream.on('end', function(err) { + var accountData = {}; + async.each(accountList, function(data, next) { + var storage = {}; + + var account = new Account(data.value); + var storageTrie = stateTrie.copy(); + storageTrie.root = account.stateRoot; + + var storageStream = storageTrie.createReadStream(); + storageStream.on('data', function(data) { + storage[data.key.toString('hex')] = rlp.decode(data.value).toString('hex') + }); + storageStream.on('end', function(err) { + account.getCode(stateTrie, function(err, code) { + var address = data.key.toString('hex'); + accountData[address] = { + code: code.toString('hex'), + storage: storage, + balance: account.balance.toString('hex') + }; + next(err); + }); + }) + }, function(err) { + console.log(JSON.stringify({ + nonce: '0x42', + gasLimit: '0x47e7c4', + difficulty: '0x20000', + alloc: accountData + }, null, 4)); + }); + }); +} + +async.series([ + createAccounts, + runTx, + dumpState +], function(err) { + console.log("Error: " + err); +}); diff --git a/swarm/cmd/makegenesis/package.json b/swarm/cmd/makegenesis/package.json new file mode 100644 index 0000000000..7748193904 --- /dev/null +++ b/swarm/cmd/makegenesis/package.json @@ -0,0 +1,15 @@ +{ + "name": "makegenesis", + "version": "0.0.0", + "dependencies": { + "async": "^2.0.1", + "ethereumjs-account": "^2.0.3", + "ethereumjs-block": "^1.2.2", + "ethereumjs-tx": "^1.1.2", + "ethereumjs-util": "^4.5.0", + "ethereumjs-vm": "^1.4.0", + "merkle-patricia-tree": "^2.1.2", + "rlp": "^2.0.0", + "solc": "0.3.5" + } +} diff --git a/swarm/services/ens/contract/ens.sol b/swarm/services/ens/contract/ens.sol index 4095cd080f..e726addf32 100644 --- a/swarm/services/ens/contract/ens.sol +++ b/swarm/services/ens/contract/ens.sol @@ -215,3 +215,12 @@ contract PublicResolver is Resolver { ContentChanged(node, hash); } } + +contract DeployENS { + function DeployENS() { + var ens = new ENS(this); + var registrar = new FIFSRegistrar(ens, 0); + ens.setOwner(0, registrar); + selfdestruct(msg.sender); + } +} diff --git a/swarm/services/ens/ens.go b/swarm/services/ens/ens.go index c15e782c4f..e7b3d336f7 100644 --- a/swarm/services/ens/ens.go +++ b/swarm/services/ens/ens.go @@ -3,6 +3,7 @@ package ens import ( + "math/big" "strings" "github.com/ethereum/go-ethereum/accounts/abi/bind" @@ -141,7 +142,9 @@ func (self *ENS) Register(name string) (*types.Transaction, error) { return nil, err } - return registrar.Register(label, self.TransactOpts.From) + opts := self.TransactOpts + opts.GasLimit = big.NewInt(200000) + return registrar.Contract.Register(&opts, label, self.TransactOpts.From) } // SetContentHash sets the content hash associated with a name. Only works if the caller @@ -154,5 +157,7 @@ func (self *ENS) SetContentHash(name string, hash common.Hash) (*types.Transacti return nil, err } - return resolver.SetContent(node, hash) + opts := self.TransactOpts + opts.GasLimit = big.NewInt(200000) + return resolver.Contract.SetContent(&opts, node, hash) }