swarm: Add code to generate genesis JSON for swarm testnet

This commit is contained in:
Nick Johnson 2016-08-16 12:07:39 +01:00
parent 5b3b3cb3d8
commit 4c62ffd55d
6 changed files with 198 additions and 3 deletions

View file

@ -21,7 +21,7 @@ const (
// by default ens root is north internal // by default ens root is north internal
var ( var (
toyNetEnsRoot = common.HexToAddress("0x606aabab27f8aa98b772bf593b18e550ede87176") toyNetEnsRoot = common.HexToAddress("0xd344889e0be3e9ef6c26b0f60ef66a32e83c1b69")
) )
// separate bzz directories // separate bzz directories

View file

@ -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": ""
}
}
}

View file

@ -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);
});

View file

@ -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"
}
}

View file

@ -215,3 +215,15 @@ contract PublicResolver is Resolver {
ContentChanged(node, hash); ContentChanged(node, hash);
} }
} }
contract DeployENS {
function DeployENS() {
var tld = sha3('eth');
var tldnode = sha3(bytes32(0), tld);
var ens = new ENS(this);
var registrar = new FIFSRegistrar(ens, tldnode);
ens.setOwner(0, tld, registrar);
ens.setOwner(0, 0);
selfdestruct(msg.sender);
}
}

View file

@ -3,6 +3,7 @@
package ens package ens
import ( import (
"math/big"
"strings" "strings"
"github.com/ethereum/go-ethereum/accounts/abi/bind" "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 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 // 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 nil, err
} }
return resolver.SetContent(node, hash) opts := self.TransactOpts
opts.GasLimit = big.NewInt(200000)
return resolver.Contract.SetContent(&opts, node, hash)
} }